@shipload/sdk 2.0.0-rc13 → 2.0.0-rc14
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.
- package/lib/shipload.d.ts +133 -56
- package/lib/shipload.js +629 -332
- package/lib/shipload.js.map +1 -1
- package/lib/shipload.m.js +619 -331
- package/lib/shipload.m.js.map +1 -1
- package/package.json +1 -1
- package/src/capabilities/modules.ts +3 -3
- package/src/capabilities/storage.ts +6 -9
- package/src/contracts/server.ts +37 -34
- package/src/data/colors.ts +19 -1
- package/src/data/recipes.ts +3 -3
- package/src/derivation/crafting.ts +46 -32
- package/src/derivation/stratum.ts +12 -0
- package/src/entities/container.ts +1 -0
- package/src/entities/makers.ts +126 -11
- package/src/entities/ship-deploy.ts +9 -14
- package/src/entities/ship.ts +16 -4
- package/src/entities/warehouse.ts +36 -1
- package/src/index-module.ts +21 -4
- package/src/managers/actions.ts +48 -8
- package/src/nft/description.ts +31 -30
- package/src/nft/deserializers.ts +8 -8
- package/src/resolution/describe-module.ts +165 -0
- package/src/resolution/resolve-item.ts +60 -37
- package/src/scheduling/projection.ts +3 -1
- package/src/types/capabilities.ts +5 -0
package/lib/shipload.m.js
CHANGED
|
@@ -205,7 +205,7 @@ var platform = /*#__PURE__*/Object.freeze({
|
|
|
205
205
|
Contract: Contract$1
|
|
206
206
|
});
|
|
207
207
|
|
|
208
|
-
const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDh0CWFkZG1vZHVsZQAFC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgPbW9kdWxlX2NhcmdvX2lkBnVpbnQ2NA90YXJnZXRfY2FyZ29faWQGdWludDY0CGFkZG5leHVzAAMKbmV4dXNfbmFtZQZzdHJpbmcBeAVpbnQ2NAF5BWludDY0B2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgVibGVuZAADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BmlucHV0cwxjYXJnb19pdGVtW10GY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIEc2VlZAd1aW50NjQ/B21vZHVsZXMObW9kdWxlX2VudHJ5W10JY2FyZ29fcm93AAYCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BHNlZWQGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10KY2FyZ29fc2VlZAACB2l0ZW1faWQGdWludDE2BHNlZWQGdWludDY0CWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcNY29udGFpbmVyX3JvdwAIAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIJY2FyZ29tYXNzBnVpbnQzMghzY2hlZHVsZQlzY2hlZHVsZT8LY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQ1jcmFmdGVyX3N0YXRzAAIFc3BlZWQGdWludDE2BWRyYWluBnVpbnQxNgxjcmVhdGVlbnRpdHkABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWULZW50aXR5X25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAZkZXBsb3kABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NA5wYWNrZWRfaXRlbV9pZAZ1aW50MTYEc2VlZAZ1aW50NjQLZW50aXR5X25hbWUGc3RyaW5nCmRlc2NlbnRpdHkABAdpdGVtX2lkBnVpbnQxNglodWxsX3NlZWQGdWludDY0DG1vZHVsZV9pdGVtcwh1aW50MTZbXQxtb2R1bGVfc2VlZHMIdWludDY0W10GZW5hYmxlAAEHZW5hYmxlZARib29sDGVuZXJneV9zdGF0cwACCGNhcGFjaXR5BnVpbnQxNghyZWNoYXJnZQZ1aW50MTYUZW50aXR5X2N1cnJlbnRfc3RhdGUAAgtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kGdWludDE2D2VudGl0eV9kZWZhdWx0cwAFEndhcmVob3VzZV9jYXBhY2l0eQZ1aW50MzILd2FyZWhvdXNlX3oGdWludDE2EmNvbnRhaW5lcl9odWxsbWFzcwZ1aW50MzISY29udGFpbmVyX2NhcGFjaXR5BnVpbnQzMgtjb250YWluZXJfegZ1aW50MTYLZW50aXR5X2luZm8AGAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCWNhcmdvbWFzcwZ1aW50MzIFY2FyZ28MY2FyZ29faXRlbVtdB2xvYWRlcnMNbG9hZGVyX3N0YXRzPwZlbmVyZ3kHdWludDE2PwhodWxsbWFzcwd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/CGNhcGFjaXR5B3VpbnQzMj8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BmhhdWxlcg1oYXVsZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwdpc19pZGxlBGJvb2wMY3VycmVudF90YXNrBXRhc2s/FGN1cnJlbnRfdGFza19lbGFwc2VkBnVpbnQzMhZjdXJyZW50X3Rhc2tfcmVtYWluaW5nBnVpbnQzMg1wZW5kaW5nX3Rhc2tzBnRhc2tbXQdpZGxlX2F0C3RpbWVfcG9pbnQ/CHNjaGVkdWxlCXNjaGVkdWxlPwplbnRpdHlfcmVmAAILZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DmVudGl0eV9zdW1tYXJ5AAgEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwdpc19pZGxlBGJvb2wOcmVzb2x2ZWRfY291bnQGdWludDMyDXBlbmRpbmdfY291bnQGdWludDMyEGVudGl0eV90YXNrX2luZm8ABAllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUKdGFza19jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkCnRpbWVfcG9pbnQPZW50aXR5Z3JvdXBfcm93AAICaWQGdWludDY0DHBhcnRpY2lwYW50cwxlbnRpdHlfcmVmW10LZ2FtZV9jb25maWcAAwd2ZXJzaW9uBnVpbnQzMghkZWZhdWx0cw9lbnRpdHlfZGVmYXVsdHMFaXRlbXMKaXRlbV9kZWZbXQZnYXRoZXIABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIOZ2F0aGVyZXJfc3RhdHMABAV5aWVsZAZ1aW50MTYFZHJhaW4GdWludDE2BWRlcHRoBnVpbnQxNgVzcGVlZAZ1aW50MTYJZ2V0Y29uZmlnAAALZ2V0ZW50aXRpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/CWdldGVudGl0eQACC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAtnZXRpdGVtZGF0YQAACGdldGl0ZW1zAAALZ2V0bG9jYXRpb24AAgF4BWludDY0AXkFaW50NjQKZ2V0bG9jZGF0YQACAXgFaW50NjQBeQVpbnQ2NApnZXRtb2R1bGVzAAAJZ2V0bmVhcmJ5AAMLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CHJlY2hhcmdlBGJvb2wKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQlnZXRyZWNpcGUAAQ5vdXRwdXRfaXRlbV9pZAZ1aW50MTYKZ2V0cmVjaXBlcwACC2xvd2VyX2JvdW5kBnVpbnQxNgVsaW1pdAV1aW50OAxnZXRyZXNvdXJjZXMAAApnZXRzdHJhdHVtAAMBeAVpbnQ2NAF5BWludDY0B3N0cmF0dW0GdWludDE2DGdldHN1bW1hcmllcwACBW93bmVyBG5hbWULZW50aXR5X3R5cGUFbmFtZT8LZ3JvdXB0cmF2ZWwABAhlbnRpdGllcwxlbnRpdHlfcmVmW10BeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wEaGFzaAABBXZhbHVlBnN0cmluZwdoYXNoNTEyAAEFdmFsdWUGc3RyaW5nDGhhdWxlcl9zdGF0cwADCGNhcGFjaXR5BXVpbnQ4CmVmZmljaWVuY3kGdWludDE2BWRyYWluBnVpbnQxNgRpbml0AAEEc2VlZAtjaGVja3N1bTI1NghpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OA9pdGVtZGF0YV9yZXN1bHQAAgVpdGVtcwppdGVtX2RlZltdB3JlY2lwZXMOcmVjaXBlc19yZXN1bHQKaXRlbXNfaW5mbwABBWl0ZW1zCml0ZW1fZGVmW10Eam9pbgABB2FjY291bnQEbmFtZQxsb2FkZXJfc3RhdHMAAwRtYXNzBnVpbnQzMgZ0aHJ1c3QGdWludDE2CHF1YW50aXR5BXVpbnQ4EGxvY2F0aW9uX2Rlcml2ZWQAAwxzdGF0aWNfcHJvcHMPbG9jYXRpb25fc3RhdGljC2Vwb2NoX3Byb3BzDmxvY2F0aW9uX2Vwb2NoBHNpemUGdWludDE2DmxvY2F0aW9uX2Vwb2NoAAMGYWN0aXZlBGJvb2wFc2VlZDAFdWludDgFc2VlZDEFdWludDgNbG9jYXRpb25faW5mbwACBmNvb3Jkcwtjb29yZGluYXRlcwlpc19zeXN0ZW0EYm9vbAxsb2NhdGlvbl9yb3cABgJpZAZ1aW50NjQFb3duZXIEbmFtZQtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQhzY2hlZHVsZQlzY2hlZHVsZT8PbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkC2NhcmdvX3NlZWQ/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQxNgtuZWFyYnlfaW5mbwAFCmNhbl90cmF2ZWwEYm9vbAdjdXJyZW50FGVudGl0eV9jdXJyZW50X3N0YXRlCXByb2plY3RlZBRlbnRpdHlfY3VycmVudF9zdGF0ZQptYXhfZW5lcmd5BnVpbnQxNgdzeXN0ZW1zD25lYXJieV9zeXN0ZW1bXQ1uZWFyYnlfc3lzdGVtAAQIZGlzdGFuY2UGdWludDY0C2VuZXJneV9jb3N0BnVpbnQ2NAtmbGlnaHRfdGltZQZ1aW50MzIIbG9jYXRpb24NbG9jYXRpb25faW5mbwluZXh1c19yb3cABAJpZAZ1aW50NjQFb3duZXIEbmFtZQRuYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcw5uZnRfc2NoZW1hX2RlZgACC3NjaGVtYV9uYW1lBG5hbWUGZmllbGRzDnNjaGVtYV9maWVsZFtdEG5mdF90ZW1wbGF0ZV9kZWYAAgdpdGVtX2lkBnVpbnQxNgtzY2hlbWFfbmFtZQRuYW1lDW5mdGNvbmZpZ19yb3cAAwdpdGVtX2lkBnVpbnQxNgt0ZW1wbGF0ZV9pZAVpbnQzMgtzY2hlbWFfbmFtZQRuYW1lDm5mdGluZm9fcmVzdWx0AAIHc2NoZW1hcxBuZnRfc2NoZW1hX2RlZltdCXRlbXBsYXRlcxJuZnRfdGVtcGxhdGVfZGVmW10Gbm90aWZ5AAEFZXZlbnQKdGFza19ldmVudAtwbGF5ZXJfaW5mbwAGBW93bmVyBG5hbWUJaXNfcGxheWVyBGJvb2wMY29tcGFueV9uYW1lBnN0cmluZwpzaGlwX2NvdW50BnVpbnQ2NA93YXJlaG91c2VfY291bnQGdWludDY0D2NvbnRhaW5lcl9jb3VudAZ1aW50NjQKcGxheWVyX3JvdwABBW93bmVyBG5hbWUIcmVjaGFyZ2UAAgtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQAAwdpdGVtX2lkBnVpbnQxNghjYXRlZ29yeQV1aW50OAhxdWFudGl0eQZ1aW50MzIQcmVjaXBlX2l0ZW1faW5mbwACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMg9yZWNpcGVfcmVzcG9uc2UABw5vdXRwdXRfaXRlbV9pZAZ1aW50MTYLb3V0cHV0X21hc3MGdWludDMyBmlucHV0cw5yZWNpcGVfaW5wdXRbXQpzdGF0X3Nsb3RzFHN0YXRfc2xvdF9yZXNwb25zZVtdDWJsZW5kX3dlaWdodHMFYnl0ZXMLb3V0cHV0X2l0ZW0QcmVjaXBlX2l0ZW1faW5mbwtpbnB1dF9pdGVtcxJyZWNpcGVfaXRlbV9pbmZvW10OcmVjaXBlc19yZXN1bHQAAQdyZWNpcGVzEXJlY2lwZV9yZXNwb25zZVtdC3Jlc2VydmVfcm93AAICaWQGdWludDY0CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/DXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdCHJtbW9kdWxlAAQLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OA90YXJnZXRfY2FyZ29faWQGdWludDY0CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYEc2FsdAABBHNhbHQGdWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQhzaGlwX3JvdwASAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBHNlZWQGdWludDY0C2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzB3VpbnQzMj8IY2FwYWNpdHkHdWludDMyPwZlbmVyZ3kHdWludDE2PwljYXJnb21hc3MGdWludDMyB2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/B2xvYWRlcnMNbG9hZGVyX3N0YXRzPwhnYXRoZXJlcg9nYXRoZXJlcl9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwdjcmFmdGVyDmNyYWZ0ZXJfc3RhdHM/BmhhdWxlcg1oYXVsZXJfc3RhdHM/B21vZHVsZXMObW9kdWxlX2VudHJ5W10Ic2NoZWR1bGUJc2NoZWR1bGU/CnNwYXduY2FyZ28AAwllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAtzcGF3bnBhY2tlZAAECWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYJaHVsbF9zZWVkBnVpbnQ2NAlpbnN0YWxsZWQMY2FyZ29fc2VlZFtdC3NwYXduc2VlZGVkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQEc2VlZAZ1aW50NjQSc3RhdF9zbG90X3Jlc3BvbnNlAAEHc291cmNlcw1zdGF0X3NvdXJjZVtdC3N0YXRfc291cmNlAAILaW5wdXRfaW5kZXgFdWludDgQaW5wdXRfc3RhdF9pbmRleAV1aW50OAlzdGF0ZV9yb3cABgdlbmFibGVkBGJvb2wFZXBvY2gGdWludDMyBHNhbHQGdWludDY0BXNoaXBzBnVpbnQzMgRzZWVkC2NoZWNrc3VtMjU2BmNvbW1pdAtjaGVja3N1bTI1NgxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABAdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzIEdGFzawAIBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQxlbnRpdHl0YXJnZXQLZW50aXR5X3JlZj8LZW50aXR5Z3JvdXAHdWludDY0PwtlbmVyZ3lfY29zdAd1aW50MTY/CnRhc2tfZXZlbnQACQpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgFdWludDgEdGFzawR0YXNrCXN0YXJ0c19hdAp0aW1lX3BvaW50DGNvbXBsZXRlc19hdAp0aW1lX3BvaW50Cm5ld19lbmVyZ3kHdWludDE2Pwx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10IdHJhbnNmZXIABgtzb3VyY2VfdHlwZQRuYW1lCXNvdXJjZV9pZAZ1aW50NjQJZGVzdF90eXBlBG5hbWUHZGVzdF9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyBnRyYXZlbAAFC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sCXR5cGVzX3JvdwADAmlkBnVpbnQ2NBNlbnRpdHlfc3VtbWFyeV90eXBlDmVudGl0eV9zdW1tYXJ5EGdhbWVfY29uZmlnX3R5cGULZ2FtZV9jb25maWcNd2FyZWhvdXNlX3JvdwALAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBHNlZWQGdWludDY0C2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzB3VpbnQzMj8IY2FwYWNpdHkHdWludDMyPwljYXJnb21hc3MGdWludDMyB2xvYWRlcnMNbG9hZGVyX3N0YXRzPwdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHNjaGVkdWxlCXNjaGVkdWxlPwR3YXJwAAQLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CndhcnBfc3RhdHMAAQVyYW5nZQZ1aW50MzIEd2lwZQAADHdpcGVzZXF1ZW5jZQAABHdyYXAABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhjYXJnb19pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0NAAAUFEnKlMyCWFkZG1vZHVsZccDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG1vZHVsZQpzdW1tYXJ5OiAnSW5zdGFsbCBhIG1vZHVsZSBpbnRvIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFsbCBhIG1vZHVsZSBmcm9tIGNhcmdvIGludG8gYSBtb2R1bGUgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgdHlwZSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0IHNsb3QgdHlwZS4gVGhlIG1vZHVsZSBpdGVtIGlzIHJlbW92ZWQgZnJvbSBjYXJnbyB1cG9uIGluc3RhbGxhdGlvbi4AAABYdzVTMghhZGRuZXh1c6cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG5leHVzCnN1bW1hcnk6ICdBZGQgYSBuZXh1cyBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ3JlYXRlIGEgbmV3IG5leHVzIGVudGl0eSBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuIE5leHVzZXMgYXJlIG93bmVkIGJ5IHRoZSBjb250cmFjdCBhbmQgc2VydmUgYXMgZml4ZWQgZ2F0aGVyaW5nIHBvaW50cyB3aGVyZSBwbGF5ZXJzIGNhbiB3cmFwLCB1bndyYXAsIGRlcGxveSwgYW5kIG90aGVyd2lzZSBpbnRlcmFjdCB3aXRoIE5GVC1iYWNrZWQgYXNzZXRzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAQKFpdjIHYWR2YW5jZdMBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkdmFuY2UKc3VtbWFyeTogJ0FkdmFuY2UgdHVybicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQWR2YW5jZSB0aGUgZ2FtZSB0byB0aGUgbmV4dCB0dXJuLgAAAACANFU8BWJsZW5k/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYmxlbmQKc3VtbWFyeTogJ0JsZW5kIGNhcmdvIHN0YWNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ29tYmluZSBtdWx0aXBsZSBjYXJnbyBzdGFja3Mgb2YgdGhlIHNhbWUgaXRlbSB0eXBlIGludG8gYSBzaW5nbGUgc3RhY2sgd2l0aCBhIG5ldyBibGVuZGVkIHNlZWQuIEFsbCBpbnB1dCBzdGFja3MgbXVzdCBzaGFyZSB0aGUgc2FtZSBpdGVtIGlkLiBUaGUgb3V0cHV0IHN0YWNrIGhhcyB0aGUgY29tYmluZWQgcXVhbnRpdHkgb2YgYWxsIGlucHV0cy4AAAAARIWmQQZjYW5jZWzCAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjYW5jZWwKc3VtbWFyeTogJ0NhbmNlbCBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbmNlbCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0YXNrcyBmcm9tIHRoZSBlbmQgb2YgYW4gZW50aXR5J3Mgc2NoZWR1bGUuIFRhc2tzIHRoYXQgYXJlIGltbXV0YWJsZSBhbmQgaW4gcHJvZ3Jlc3MgY2Fubm90IGJlIGNhbmNlbGxlZC4AAKgb32lURAljbGVhbnJzdnDsAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhbnJzdnAKc3VtbWFyeTogJ0NsZWFuIHVwIHBhc3QgZXBvY2ggcmVzZXJ2ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVyYXNlIHJlc2VydmUgdGFibGUgcm93cyBmcm9tIGEgcGFzdCBlcG9jaC4gQ2Fubm90IGNsZWFuIHRoZSBjdXJyZW50IG9yIGZ1dHVyZSBlcG9jaHMuIFRoZSBtYXhfcm93cyBwYXJhbWV0ZXIgY2FwcyB0aGUgbnVtYmVyIG9mIHJvd3MgZXJhc2VkIHBlciBjYWxsIHRvIGxpbWl0IENQVSB1c2FnZS4AgIrH5GtURApjbGVhcnRhYmxlvgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYXJ0YWJsZQpzdW1tYXJ5OiAnREVCVUc6IGNsZWFydGFibGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAGQnJUUGY29tbWl07AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29tbWl0CnN1bW1hcnk6ICdTZXQgY29tbWl0IHZhbHVlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTZXQgdGhlIGluaXRpYWwgY29tbWl0IHZhbHVlIGR1cmluZyBnYW1lIGluaXRpYWxpemF0aW9uLgAAYDQytyZFCWNvbmZpZ2xvZ90CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbmZpZ2xvZwpzdW1tYXJ5OiAnTG9nIGdhbWUgY29uZmlndXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIHRoYXQgbG9ncyB0aGUgY3VycmVudCBnYW1lIGNvbmZpZ3VyYXRpb24uIENhbGxlZCBpbmxpbmUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gdG8gYnJvYWRjYXN0IGNvbmZpZyB2aWEgYWN0aW9uIHRyYWNlcy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAACAvMxFBWNyYWZ0yAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY3JhZnQKc3VtbWFyeTogJ0NyYWZ0IGl0ZW1zIGZyb20gYSByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZm9ybSBjYXJnbyBpdGVtcyBpbnRvIGEgbmV3IGl0ZW0gdXNpbmcgYSByZWNpcGUuIFRoZSBlbnRpdHkgbXVzdCBoYXZlIGEgY3JhZnRlciBtb2R1bGUgaW5zdGFsbGVkLiBDb25zdW1lcyBlbmVyZ3kgYW5kIHNjaGVkdWxlcyBhIGNyYWZ0aW5nIHRhc2sgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiB0b3RhbCBpbnB1dCBtYXNzIGFuZCBjcmFmdGVyIHNwZWVkLiBJbnB1dCBxdWFudGl0aWVzIG11c3QgZXhhY3RseSBtYXRjaCB0aGUgcmVjaXBlIHJlcXVpcmVtZW50cy7gs8tTqWzURQxjcmVhdGVlbnRpdHm/AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjcmVhdGVlbnRpdHkKc3VtbWFyeTogJ0RFQlVHOiBjcmVhdGUgYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAHgaq0oGZGVwbG957AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVwbG95CnN1bW1hcnk6ICdEZXBsb3kgYSBwYWNrZWQgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpVbnBhY2sgYSBwYWNrZWQgZW50aXR5IGl0ZW0gKHBhY2tlZCBzaGlwIG9yIHBhY2tlZCBjb250YWluZXIpIGZyb20gY2FyZ28sIHNjaGVkdWxpbmcgYSBkZXBsb3kgdGFzayB0aGF0IGNyZWF0ZXMgdGhlIG5ldyBlbnRpdHkgYXQgdGhlIGRlcGxveWluZyBlbnRpdHkncyBsb2NhdGlvbiB1cG9uIHJlc29sdXRpb24uAIDPLk+FsEoKZGVzY2VudGl0efwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlc2NlbnRpdHkKc3VtbWFyeTogJ0Rlc2NyaWJlIGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBzdHJpbmcgZm9yIGEgcGFja2VkIGVudGl0eSwgZGVyaXZlZCBmcm9tIHRoZSBlbnRpdHkgaXRlbSBpZCwgaHVsbCBzZWVkLCBhbmQgdGhlIGxpc3Qgb2YgaW5zdGFsbGVkIG1vZHVsZSBpdGVtIGlkcyBhbmQgc2VlZHMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgYW5kIE5GVCByZW5kZXJlcnMgdG8gZGlzcGxheSBwYWNrZWQgZW50aXRpZXMuIENhbGxpbmcgdGhpcyBhY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGNvbnRyYWN0IHN0YXRlLgAAAACoeMxUBmVuYWJsZd0BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZQpzdW1tYXJ5OiAnU2V0IGVuYWJsZWQgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZ2FtZSBvZiBTaGlwbG9hZC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAABgbk2KsmIJZ2V0Y29uZmlnygItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0Y29uZmlnCnN1bW1hcnk6ICdHZXQgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHRoZSBnYW1lIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIGRlZmF1bHQgZW50aXR5IHN0YXRzIGZvciB3YXJlaG91c2VzIGFuZCBjb250YWluZXJzLCBhbmQgdGhlIGZ1bGwgaXRlbSBkZWZpbml0aW9ucyB0YWJsZS4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy4ATDZJquyyYgtnZXRpdGVtZGF0YdwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1kYXRhCnN1bW1hcnk6ICdHZXQgZnVsbCBpdGVtIGNhdGFsb2cnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBjb21wbGV0ZSBpdGVtIGNhdGFsb2cgYXMgdGhlIGNvbnRyYWN0IHNlZXMgaXQsIGluY2x1ZGluZyB0eXBlLCBzdWJ0eXBlLCB0aWVyLCBtYXNzLCBhbmQgb3RoZXIgc3RhdGljIG1ldGFkYXRhLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBjbGllbnRzIHRvIG1pcnJvciB0aGUgY29udHJhY3QncyBpdGVtIGRlZmluaXRpb25zLiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS4AAABYquyyYghnZXRpdGVtc5oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1zCnN1bW1hcnk6ICdHZXQgYWxsIGF2YWlsYWJsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgYWxsIGl0ZW1zIGluIHRoZSBnYW1lIGluY2x1ZGluZyB0aGVpciBpZCwgYmFzZSBwcmljZSwgYW5kIG1hc3MuACZ12SAas2ILZ2V0bG9jYXRpb27iAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NhdGlvbgpzdW1tYXJ5OiAnR2V0IGxvY2F0aW9uIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbG9jYXRpb24gaW5jbHVkaW5nIHdoZXRoZXIgYSBzeXN0ZW0gZXhpc3RzLCBhbmQgZm9yIGVhY2ggaXRlbTogcHJpY2UsIHN1cHBseSwgcmFyaXR5IG11bHRpcGxpZXIsIGFuZCBsb2NhdGlvbiBtdWx0aXBsaWVyLgCAySYhGrNiCmdldGxvY2RhdGH+Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NkYXRhCnN1bW1hcnk6ICdHZXQgZGVyaXZlZCBsb2NhdGlvbiBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGRlcml2ZWQgbG9jYXRpb24gZGF0YSBpbmNsdWRpbmcgc3RhdGljIHByb3BlcnRpZXMgKHR5cGUsIGRpZmZpY3VsdHksIHNlZWRzKSBmcm9tIHRoZSBnYW1lIHNlZWQgYW5kIGVwb2NoLXNwZWNpZmljIHByb3BlcnRpZXMgKGFjdGl2ZSwgc2VlZHMpIGZyb20gdGhlIGN1cnJlbnQgZXBvY2ggc2VlZC4AAFZRJyqzYgpnZXRtb2R1bGVztAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bW9kdWxlcwpzdW1tYXJ5OiAnR2V0IGFsbCBtb2R1bGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyBtb2R1bGVzLCBpbmNsdWRpbmcgZWFjaCBtb2R1bGUncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGluc3RhbGxhYmxlIGVxdWlwbWVudC4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUuAADw5xo1s2IJZ2V0bmVhcmJ53gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgZmxpZ2h0IHRpbWUsIGFuZCBtYXJrZXQgaW5mb3JtYXRpb24uAABd0+U1s2IKZ2V0bmZ0aW5mb6QELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG5mdGluZm8Kc3VtbWFyeTogJ0dldCBORlQgc2NoZW1hIGFuZCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgQXRvbWljQXNzZXRzIHNjaGVtYXMgYW5kIHRlbXBsYXRlcyB0aGUgZ2FtZSBjb250cmFjdCBleHBlY3RzLCBwbHVzIHRoZSBjdXJyZW50IGBpdGVtX2lkIOKGkiAodGVtcGxhdGVfaWQsIHNjaGVtYV9uYW1lKWAgbWFwcGluZyBzdG9yZWQgaW4gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHN5bmMgYXRvbWljYXNzZXRzIHN0YXRlIHdpdGggdGhlIGNvbnRyYWN0LiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS4AALjKm1izYglnZXRwbGF5ZXL9Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRwbGF5ZXIKc3VtbWFyeTogJ0dldCBwbGF5ZXIgaW5mb3JtYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBwbGF5ZXIgaW5jbHVkaW5nIGJhbGFuY2UsIGRlYnQsIG5ldHdvcnRoLCBlbnRpdHkgY291bnRzLCBhbmQgcHJpY2luZyBmb3IgbmV4dCBwdXJjaGFzZXMuIFJldHVybnMgaXNfcGxheWVyPWZhbHNlIGlmIHRoZSBhY2NvdW50IGhhcyBub3Qgam9pbmVkIHRoZSBnYW1lLgAAUNUhdbNiCWdldHJlY2lwZdoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZQpzdW1tYXJ5OiAnR2V0IGEgc2luZ2xlIGNyYWZ0aW5nIHJlY2lwZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHJlY2lwZSB3aG9zZSBvdXRwdXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gaXRlbSBpZCwgaW5jbHVkaW5nIGl0cyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkaXNwbGF5IGNyYWZ0aW5nIHJlcXVpcmVtZW50cy4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUuAABW1SF1s2IKZ2V0cmVjaXBlc+ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUugBW6mmJ1s2IMZ2V0cmVzb3VyY2VzuwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzb3VyY2VzCnN1bW1hcnk6ICdHZXQgYWxsIHJlc291cmNlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgc3Vic2V0IG9mIGl0ZW1zIGNsYXNzaWZpZWQgYXMgcmVzb3VyY2VzLCBpbmNsdWRpbmcgZWFjaCByZXNvdXJjZSdzIGlkLCBtYXNzLCBzdWJ0eXBlLCBhbmQgdGllci4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBlbnVtZXJhdGUgZ2F0aGVyYWJsZSBtYXRlcmlhbHMuIENhbGxpbmcgdGhpcyBhY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGNvbnRyYWN0IHN0YXRlLgCA1NncjLNiCmdldHN0cmF0dW3SAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdHJhdHVtCnN1bW1hcnk6ICdHZXQgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHJlc291cmNlIHN0cmF0dW0gZGF0YSBmb3IgYSBzcGVjaWZpYyBkZXB0aCBsYXllciBhdCBhIGNvb3JkaW5hdGUsIGluY2x1ZGluZyB0aGUgc3RyYXR1bSBzZWVkIGluZm8gYW5kIGRlcml2ZWQgcmVzb3VyY2Ugc3RhdHMugJW7RkqNs2IMZ2V0c3VtbWFyaWVz6AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3VtbWFyaWVzCnN1bW1hcnk6ICdHZXQgZW50aXR5IHN1bW1hcmllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgbGlnaHR3ZWlnaHQgc3VtbWFyaWVzIG9mIGFsbCBlbnRpdGllcyBvd25lZCBieSBhIHBsYXllciBpbmNsdWRpbmcgdHlwZSwgaWQsIG93bmVyLCBuYW1lLCBsb2NhdGlvbiwgYW5kIGlkbGUgc3RhdHVzLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4Aotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AAAAAAJDddARpbml0+gEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaW5pdApzdW1tYXJ5OiAnSW5pdGlhbGl6ZSBnYW1lIHNlZWQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYWxpemUgYSB0aGUgZ2FtZXMgc2VlZCBhbmQgc2VlZCB2YWx1ZXMgdG8gYm9vdHN0cmFwIGdhbWUgc3RhdGUuAAAAAAAwHX0Eam9pbsQBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAAAAAD45TKdBm5vdGlmeYoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5vdGlmeQpzdW1tYXJ5OiAnVGFzayBsaWZlY3ljbGUgbm90aWZpY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBub3RpZmllcyBlbnRpdHkgb3duZXJzIG9mIHRhc2sgbGlmZWN5Y2xlIGV2ZW50cyAocmVzb2x2ZWQsIGNhbmNlbGxlZCkuIENhbGxlZCBpbmxpbmUgd2hlbiB0YXNrcyBjaGFuZ2Ugc3RhdGUuIFVzZXMgcmVxdWlyZV9yZWNpcGllbnQgdG8gZW5hYmxlIG9mZi1jaGFpbiBtb25pdG9yaW5nIHZpYSBhY3Rpb24gdHJhY2VzLgAAAIpd05C6CHJlY2hhcmdlzQItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVjaGFyZ2UKc3VtbWFyeTogJ1JlY2hhcmdlIHNoaXAgZW5lcmd5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTY2hlZHVsZSBhIHJlY2hhcmdlIHRhc2sgZm9yIGFuIGVudGl0eSB0byByZXN0b3JlIGVuZXJneSB0byBmdWxsIGNhcGFjaXR5LiBUaGUgcmVjaGFyZ2UgZHVyYXRpb24gZGVwZW5kcyBvbiBjdXJyZW50IGVuZXJneSBsZXZlbCBhbmQgcmVjaGFyZ2UgcmF0ZS4AAABA7UixugdyZXNvbHZl0AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVzb2x2ZQpzdW1tYXJ5OiAnQ29tcGxldGUgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXNvbHZlIGNvbXBsZXRlZCB0YXNrcyBpbiBhbiBlbnRpdHkncyBzY2hlZHVsZSwgYXBwbHlpbmcgdGhlaXIgZWZmZWN0cyAocmVjaGFyZ2UgZW5lcmd5LCB1cGRhdGUgbG9jYXRpb24sIGxvYWQvdW5sb2FkIGNhcmdvKS4gSWYgY291bnQgaXMgc3BlY2lmaWVkLCByZXNvbHZlIGV4YWN0bHkgdGhhdCBtYW55IHRhc2tzOyBvdGhlcndpc2UgcmVzb2x2ZSBhbGwgY29tcGxldGVkIHRhc2tzLiBGYWlscyBpZiBjb3VudCBleGNlZWRzIHRoZSBudW1iZXIgb2YgY29tcGxldGVkIHRhc2tzLgAAACrqRKW8CHJtbW9kdWxlvAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcm1tb2R1bGUKc3VtbWFyeTogJ1JlbW92ZSBhIG1vZHVsZSBmcm9tIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVtb3ZlIGFuIGluc3RhbGxlZCBtb2R1bGUgZnJvbSBhIHNsb3Qgb24gYSBsaXZlIGVudGl0eSBvciBhIHBhY2tlZCBlbnRpdHkgaW4gY2FyZ28uIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBUaGUgbW9kdWxlIGlzIHJldHVybmVkIHRvIGNhcmdvLiBGYWlscyBpZiB0aGUgZW50aXR5IGRvZXMgbm90IGhhdmUgZW5vdWdoIGNhcmdvIGNhcGFjaXR5IHRvIGhvbGQgdGhlIHJldHVybmVkIG1vZHVsZS4AAABsobymvAhybW5mdGNmZ6EDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbmZ0Y2ZnCnN1bW1hcnk6ICdSZW1vdmUgTkZUIHRlbXBsYXRlIG1hcHBpbmcgZm9yIGFuIGl0ZW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSB0aGUgQXRvbWljQXNzZXRzIHRlbXBsYXRlIG1hcHBpbmcgZm9yIHRoZSBzcGVjaWZpZWQgaXRlbSBpZCBmcm9tIHRoZSBgbmZ0Y29uZmlnYCB0YWJsZS4gQWZ0ZXIgcmVtb3ZhbCB0aGUgaXRlbSBjYW4gbm8gbG9uZ2VyIGJlIHdyYXBwZWQgb3IgdW53cmFwcGVkIHVudGlsIGEgbmV3IG1hcHBpbmcgaXMgc2V0LiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAAACQo8EEc2FsdNgBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNhbHQKc3VtbWFyeTogJ0FwcGVuZCBTYWx0JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZGQgYWRkaXRpb25hbCBzYWx0IHRvIHRoZSBuZXh0IGVwb2NoIHNlZWQuAABgC+U1s8IJc2V0bmZ0Y2ZnxAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2V0bmZ0Y2ZnCnN1bW1hcnk6ICdTZXQgTkZUIHRlbXBsYXRlIG1hcHBpbmcgZm9yIGFuIGl0ZW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkJpbmQgYW4gaXRlbSBpZCB0byBhbiBBdG9taWNBc3NldHMgdGVtcGxhdGUgaWQgYW5kIHNjaGVtYSBuYW1lLiBVc2VkIHRvIGNvbmZpZ3VyZSBob3cgdGhlIGNvbnRyYWN0IG1pbnRzIGFuZCByZWNvZ25pemVzIE5GVHMgZm9yIGEgZ2l2ZW4gaXRlbS4gSW5zZXJ0cyBhIG5ldyBtYXBwaW5nIGlmIG9uZSBkb2VzIG5vdCBleGlzdCwgb3IgdXBkYXRlcyB0aGUgZXhpc3RpbmcgbWFwcGluZy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAZdegyU3FCnNwYXduY2FyZ2/FAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bmNhcmdvCnN1bW1hcnk6ICdERUJVRzogc3Bhd24gY2FyZ28gb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAJKCyNTJTcULc3Bhd25wYWNrZWTnAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bnBhY2tlZApzdW1tYXJ5OiAnREVCVUc6IHNwYXduIGEgcGFja2VkIGVudGl0eSB3aXRoIGluc3RhbGxlZCBtb2R1bGVzIG9uIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQCSSkrhyU3FC3NwYXduc2VlZGVkzQEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25zZWVkZWQKc3VtbWFyeTogJ0RFQlVHOiBzcGF3biBzZWVkZWQgY2FyZ28gb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAVy08zc0IdHJhbnNmZXLIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmFuc2ZlcgpzdW1tYXJ5OiAnVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiBlbnRpdGllcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiB0d28gZW50aXRpZXMgYXQgdGhlIHNhbWUgbG9jYXRpb24uIEJvdGggZW50aXRpZXMgbXVzdCBiZSBvd25lZCBieSB0aGUgY2FsbGVyIGFuZCBhdCBsZWFzdCBvbmUgbXVzdCBoYXZlIGxvYWRlcnMuIENyZWF0ZXMgbG9hZCBhbmQgdW5sb2FkIHRhc2tzIG9uIGJvdGggZW50aXRpZXMgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiBjb21iaW5lZCBsb2FkZXIgY2FwYWNpdHkgYW5kIFotZGlzdGFuY2UgYmV0d2VlbiB0aGVtLgAAAABEtc3NBnRyYXZlbPsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBhIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIHRyYXZlbCBvZiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBhIG5ldyBkZXN0aW5hdGlvbi4AAAAAAFCv4QR3YXJwnwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2FycApzdW1tYXJ5OiAnV2FycCB0byBhIGRlc3RpbmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YW50bHkgdGVsZXBvcnQgYW4gZW50aXR5IHRvIGEgZGVzdGluYXRpb24gc3lzdGVtLiBSZXF1aXJlcyB3YXJwIGNhcGFiaWxpdHksIGZ1bGwgZW5lcmd5LCBlbXB0eSBjYXJnbywgYW5kIGFuIGVtcHR5IHNjaGVkdWxlLiBUaGUgZGVzdGluYXRpb24gbXVzdCBiZSBhIHZhbGlkIHN5c3RlbSB3aXRoaW4gd2FycCByYW5nZS4gUmVzb2x2ZXMgaW1tZWRpYXRlbHkgYXMgYSB6ZXJvLWR1cmF0aW9uIHRhc2suAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLaDQVNoqrKrjDHdpcGVzZXF1ZW5jZcIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGVzZXF1ZW5jZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGVzZXF1ZW5jZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAAFDN5QR3cmFw/gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd3JhcApzdW1tYXJ5OiAnV3JhcCBjYXJnbyBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKV3JhcCBhIHF1YW50aXR5IG9mIGNhcmdvIGZyb20gYW4gZW50aXR5IGludG8gYW4gQXRvbWljQXNzZXRzIE5GVCBtaW50ZWQgdG8gdGhlIHNwZWNpZmllZCBvd25lci4gVGhlIGVudGl0eSBtdXN0IGJlIGF0IGEgbmV4dXMsIGhhdmUgbG9hZGVycywgYW5kIGNvbnRhaW4gZW5vdWdoIG9mIHRoZSByZXF1ZXN0ZWQgY2FyZ28uIFNjaGVkdWxlcyBhIHdyYXAgdGFzayB0aGF0LCBvbiByZXNvbHV0aW9uLCByZW1vdmVzIHRoZSBjYXJnbyBmcm9tIHRoZSBlbnRpdHkgYW5kIG1pbnRzIHRoZSBORlQgdXNpbmcgdGhlIHRlbXBsYXRlIGNvbmZpZ3VyZWQgZm9yIHRoYXQgaXRlbSBpZC4NAAAAAADKrkEDaTY0AAAJY2FyZ29fcm93AAC4ajqTJ0UDaTY0AAANY29udGFpbmVyX3JvdwCqppf57PJUA2k2NAAAD2VudGl0eWdyb3VwX3JvdwAAAJO6bBCNA2k2NAAADGxvY2F0aW9uX3JvdwAAAAAArLuaA2k2NAAACW5leHVzX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAKTaWtwgNpNjQAAAxzZXF1ZW5jZV9yb3cAAAAAAFBdwwNpNjQAAAhzaGlwX3JvdwAAAAAAlU3GA2k2NAAACXN0YXRlX3JvdwAAAAAArKrPA2k2NAAACXR5cGVzX3JvdwAAUFjTpq7hA2k2NAAADXdhcmVob3VzZV9yb3cBEVNoaXBsb2FkIChTZXJ2ZXIpEVNoaXBsb2FkIChTZXJ2ZXIpAAAAHgAAAABEhaZBDmNhbmNlbF9yZXN1bHRzAAAAAIC8zEUMdGFza19yZXN1bHRzAAAAAHgaq0oMdGFza19yZXN1bHRzAIDPLk+FsEoGc3RyaW5nAAAAAFzVsmEMdGFza19yZXN1bHRzAABgbk2KsmILZ2FtZV9jb25maWcAsHLZ5amyYg1lbnRpdHlfaW5mb1tdAADw2eWpsmILZW50aXR5X2luZm8ATDZJquyyYg9pdGVtZGF0YV9yZXN1bHQAAABYquyyYgppdGVtc19pbmZvACZ12SAas2INbG9jYXRpb25faW5mbwCAySYhGrNiEGxvY2F0aW9uX2Rlcml2ZWQAAFZRJyqzYg5tb2R1bGVzX3Jlc3VsdAAA8OcaNbNiC25lYXJieV9pbmZvAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mbwAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHSAFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AIDU2dyMs2IMc3RyYXR1bV9kYXRhgJW7RkqNs2IQZW50aXR5X3N1bW1hcnlbXQCi2ubmqullDHRhc2tfcmVzdWx0cwAAAAAA0LBpC2NoZWNrc3VtMjU2AAAAQITSsGkLY2hlY2tzdW01MTIAAACKXdOQugx0YXNrX3Jlc3VsdHMAAABA7Uixug9yZXNvbHZlX3Jlc3VsdHMAAABXLTzNzQx0YXNrX3Jlc3VsdHMAAAAARLXNzQx0YXNrX3Jlc3VsdHMAAAAAAFCv4Qx0YXNrX3Jlc3VsdHMAAAAAAFDN5Qx0YXNrX3Jlc3VsdHM=');
|
|
208
|
+
const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDh0CWFkZG1vZHVsZQAFC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgPbW9kdWxlX2NhcmdvX2lkBnVpbnQ2NA90YXJnZXRfY2FyZ29faWQGdWludDY0CGFkZG5leHVzAAMKbmV4dXNfbmFtZQZzdHJpbmcBeAVpbnQ2NAF5BWludDY0B2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgVibGVuZAADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BmlucHV0cwxjYXJnb19pdGVtW10GY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10JY2FyZ29fcm93AAYCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcNY29udGFpbmVyX3JvdwAIAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIJY2FyZ29tYXNzBnVpbnQzMghzY2hlZHVsZQlzY2hlZHVsZT8LY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQ1jcmFmdGVyX3N0YXRzAAIFc3BlZWQGdWludDE2BWRyYWluBnVpbnQxNgxjcmVhdGVlbnRpdHkABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWULZW50aXR5X25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAZkZXBsb3kABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NA5wYWNrZWRfaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0C2VudGl0eV9uYW1lBnN0cmluZwpkZXNjZW50aXR5AAQHaXRlbV9pZAZ1aW50MTYKaHVsbF9zdGF0cwZ1aW50NjQMbW9kdWxlX2l0ZW1zCHVpbnQxNltdDG1vZHVsZV9zdGF0cwh1aW50NjRbXQZlbmFibGUAAQdlbmFibGVkBGJvb2wMZW5lcmd5X3N0YXRzAAIIY2FwYWNpdHkGdWludDE2CHJlY2hhcmdlBnVpbnQxNhRlbnRpdHlfY3VycmVudF9zdGF0ZQACC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzBmVuZXJneQZ1aW50MTYPZW50aXR5X2RlZmF1bHRzAAUSd2FyZWhvdXNlX2NhcGFjaXR5BnVpbnQzMgt3YXJlaG91c2VfegZ1aW50MTYSY29udGFpbmVyX2h1bGxtYXNzBnVpbnQzMhJjb250YWluZXJfY2FwYWNpdHkGdWludDMyC2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAYBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10HbG9hZGVycw1sb2FkZXJfc3RhdHM/BmVuZXJneQd1aW50MTY/CGh1bGxtYXNzB3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8IY2FwYWNpdHkHdWludDMyPwhnYXRoZXJlcg9nYXRoZXJlcl9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwdjcmFmdGVyDmNyYWZ0ZXJfc3RhdHM/B2lzX2lkbGUEYm9vbAxjdXJyZW50X3Rhc2sFdGFzaz8UY3VycmVudF90YXNrX2VsYXBzZWQGdWludDMyFmN1cnJlbnRfdGFza19yZW1haW5pbmcGdWludDMyDXBlbmRpbmdfdGFza3MGdGFza1tdB2lkbGVfYXQLdGltZV9wb2ludD8Ic2NoZWR1bGUJc2NoZWR1bGU/CmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQOZW50aXR5X3N1bW1hcnkACAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzB2lzX2lkbGUEYm9vbA5yZXNvbHZlZF9jb3VudAZ1aW50MzINcGVuZGluZ19jb3VudAZ1aW50MzIQZW50aXR5X3Rhc2tfaW5mbwAECWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQp0YXNrX2NvdW50BXVpbnQ4EHNjaGVkdWxlX3N0YXJ0ZWQKdGltZV9wb2ludA9lbnRpdHlncm91cF9yb3cAAgJpZAZ1aW50NjQMcGFydGljaXBhbnRzDGVudGl0eV9yZWZbXQtnYW1lX2NvbmZpZwADB3ZlcnNpb24GdWludDMyCGRlZmF1bHRzD2VudGl0eV9kZWZhdWx0cwVpdGVtcwppdGVtX2RlZltdBmdhdGhlcgAEBnNvdXJjZQplbnRpdHlfcmVmC2Rlc3RpbmF0aW9uCmVudGl0eV9yZWYHc3RyYXR1bQZ1aW50MTYIcXVhbnRpdHkGdWludDMyDmdhdGhlcmVyX3N0YXRzAAQFeWllbGQGdWludDE2BWRyYWluBnVpbnQxNgVkZXB0aAZ1aW50MTYFc3BlZWQGdWludDE2CWdldGNvbmZpZwAAC2dldGVudGl0aWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwlnZXRlbnRpdHkAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQLZ2V0aXRlbWRhdGEAAAhnZXRpdGVtcwAAC2dldGxvY2F0aW9uAAIBeAVpbnQ2NAF5BWludDY0CmdldGxvY2RhdGEAAgF4BWludDY0AXkFaW50NjQKZ2V0bW9kdWxlcwAACWdldG5lYXJieQADC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhyZWNoYXJnZQRib29sCmdldG5mdGluZm8AAAlnZXRwbGF5ZXIAAQdhY2NvdW50BG5hbWUJZ2V0cmVjaXBlAAEOb3V0cHV0X2l0ZW1faWQGdWludDE2CmdldHJlY2lwZXMAAgtsb3dlcl9ib3VuZAZ1aW50MTYFbGltaXQFdWludDgMZ2V0cmVzb3VyY2VzAAAKZ2V0c3RyYXR1bQADAXgFaW50NjQBeQVpbnQ2NAdzdHJhdHVtBnVpbnQxNgxnZXRzdW1tYXJpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/C2dyb3VwdHJhdmVsAAQIZW50aXRpZXMMZW50aXR5X3JlZltdAXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sBGhhc2gAAQV2YWx1ZQZzdHJpbmcHaGFzaDUxMgABBXZhbHVlBnN0cmluZwxoYXVsZXJfc3RhdHMAAwhjYXBhY2l0eQV1aW50OAplZmZpY2llbmN5BnVpbnQxNgVkcmFpbgZ1aW50MTYEaW5pdAABBHNlZWQLY2hlY2tzdW0yNTYIaXRlbV9kZWYABQJpZAZ1aW50MTYEbWFzcwZ1aW50MzIEdHlwZQV1aW50OAdzdWJ0eXBlBXVpbnQ4BHRpZXIFdWludDgPaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdBGpvaW4AAQdhY2NvdW50BG5hbWUMbG9hZGVyX3N0YXRzAAMEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNghxdWFudGl0eQV1aW50OBBsb2NhdGlvbl9kZXJpdmVkAAMMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwtlcG9jaF9wcm9wcw5sb2NhdGlvbl9lcG9jaARzaXplBnVpbnQxNg5sb2NhdGlvbl9lcG9jaAADBmFjdGl2ZQRib29sBXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DWxvY2F0aW9uX2luZm8AAgZjb29yZHMLY29vcmRpbmF0ZXMJaXNfc3lzdGVtBGJvb2wMbG9jYXRpb25fcm93AAYCaWQGdWludDY0BW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10Ic2NoZWR1bGUJc2NoZWR1bGU/D2xvY2F0aW9uX3N0YXRpYwAFBmNvb3Jkcwtjb29yZGluYXRlcwR0eXBlDWxvY2F0aW9uX3R5cGUHc3VidHlwZQV1aW50OAVzZWVkMAV1aW50OAVzZWVkMQV1aW50OAxtb2R1bGVfZW50cnkAAgR0eXBlBXVpbnQ4CWluc3RhbGxlZA5wYWNrZWRfbW9kdWxlPwttb2R1bGVfaW5mbwAEAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgttb2R1bGVfdHlwZQV1aW50OAR0aWVyBXVpbnQ4Dm1vZHVsZXNfcmVzdWx0AAEHbW9kdWxlcw1tb2R1bGVfaW5mb1tdDm1vdmVtZW50X3N0YXRzAAIGdGhydXN0BnVpbnQzMgVkcmFpbgZ1aW50MTYLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MTYHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8JbmV4dXNfcm93AAQCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMObmZ0X3NjaGVtYV9kZWYAAgtzY2hlbWFfbmFtZQRuYW1lBmZpZWxkcw5zY2hlbWFfZmllbGRbXRBuZnRfdGVtcGxhdGVfZGVmAAIHaXRlbV9pZAZ1aW50MTYLc2NoZW1hX25hbWUEbmFtZQ1uZnRjb25maWdfcm93AAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQ5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAtwbGF5ZXJfaW5mbwAGBW93bmVyBG5hbWUJaXNfcGxheWVyBGJvb2wMY29tcGFueV9uYW1lBnN0cmluZwpzaGlwX2NvdW50BnVpbnQ2NA93YXJlaG91c2VfY291bnQGdWludDY0D2NvbnRhaW5lcl9jb3VudAZ1aW50NjQKcGxheWVyX3JvdwABBW93bmVyBG5hbWUIcmVjaGFyZ2UAAgtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQAAwdpdGVtX2lkBnVpbnQxNghjYXRlZ29yeQV1aW50OAhxdWFudGl0eQZ1aW50MzIQcmVjaXBlX2l0ZW1faW5mbwACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMg9yZWNpcGVfcmVzcG9uc2UABw5vdXRwdXRfaXRlbV9pZAZ1aW50MTYLb3V0cHV0X21hc3MGdWludDMyBmlucHV0cw5yZWNpcGVfaW5wdXRbXQpzdGF0X3Nsb3RzFHN0YXRfc2xvdF9yZXNwb25zZVtdDWJsZW5kX3dlaWdodHMFYnl0ZXMLb3V0cHV0X2l0ZW0QcmVjaXBlX2l0ZW1faW5mbwtpbnB1dF9pdGVtcxJyZWNpcGVfaXRlbV9pbmZvW10OcmVjaXBlc19yZXN1bHQAAQdyZWNpcGVzEXJlY2lwZV9yZXNwb25zZVtdC3Jlc2VydmVfcm93AAICaWQGdWludDY0CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/DXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdCHJtbW9kdWxlAAQLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OA90YXJnZXRfY2FyZ29faWQGdWludDY0CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYEc2FsdAABBHNhbHQGdWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQhzaGlwX3JvdwASAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBXN0YXRzBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8GZW5lcmd5B3VpbnQxNj8JY2FyZ29tYXNzBnVpbnQzMgdlbmdpbmVzD21vdmVtZW50X3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwdsb2FkZXJzDWxvYWRlcl9zdGF0cz8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPwdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHNjaGVkdWxlCXNjaGVkdWxlPwpzcGF3bmNhcmdvAAMJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQLc3Bhd25wYWNrZWQABAllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDE2Cmh1bGxfc3RhdHMGdWludDY0CWluc3RhbGxlZA9wYWNrZWRfbW9kdWxlW10Lc3Bhd25zZWVkZWQABAllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAVzdGF0cwZ1aW50NjQSc3RhdF9zbG90X3Jlc3BvbnNlAAEHc291cmNlcw1zdGF0X3NvdXJjZVtdC3N0YXRfc291cmNlAAILaW5wdXRfaW5kZXgFdWludDgQaW5wdXRfc3RhdF9pbmRleAV1aW50OAlzdGF0ZV9yb3cABgdlbmFibGVkBGJvb2wFZXBvY2gGdWludDMyBHNhbHQGdWludDY0BXNoaXBzBnVpbnQzMgRzZWVkC2NoZWNrc3VtMjU2BmNvbW1pdAtjaGVja3N1bTI1NgxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABAdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzIEdGFzawAIBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQxlbnRpdHl0YXJnZXQLZW50aXR5X3JlZj8LZW50aXR5Z3JvdXAHdWludDY0PwtlbmVyZ3lfY29zdAd1aW50MTY/CnRhc2tfZXZlbnQACQpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgFdWludDgEdGFzawR0YXNrCXN0YXJ0c19hdAp0aW1lX3BvaW50DGNvbXBsZXRlc19hdAp0aW1lX3BvaW50Cm5ld19lbmVyZ3kHdWludDE2Pwx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10IdHJhbnNmZXIABwtzb3VyY2VfdHlwZQRuYW1lCXNvdXJjZV9pZAZ1aW50NjQJZGVzdF90eXBlBG5hbWUHZGVzdF9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0CHF1YW50aXR5BnVpbnQzMgZ0cmF2ZWwABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cAAwJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRBnYW1lX2NvbmZpZ190eXBlC2dhbWVfY29uZmlnDXdhcmVob3VzZV9yb3cACwJpZAZ1aW50NjQFb3duZXIEbmFtZQRuYW1lBnN0cmluZwVzdGF0cwZ1aW50NjQLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/CWNhcmdvbWFzcwZ1aW50MzIHbG9hZGVycw1sb2FkZXJfc3RhdHM/B21vZHVsZXMObW9kdWxlX2VudHJ5W10Ic2NoZWR1bGUJc2NoZWR1bGU/BHdhcnAABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQKd2FycF9zdGF0cwABBXJhbmdlBnVpbnQzMgR3aXBlAAAMd2lwZXNlcXVlbmNlAAAEd3JhcAAFBW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CGNhcmdvX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQ0AABQUScqUzIJYWRkbW9kdWxlxwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWRkbW9kdWxlCnN1bW1hcnk6ICdJbnN0YWxsIGEgbW9kdWxlIGludG8gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YWxsIGEgbW9kdWxlIGZyb20gY2FyZ28gaW50byBhIG1vZHVsZSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSB0eXBlIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSB0YXJnZXQgc2xvdCB0eXBlLiBUaGUgbW9kdWxlIGl0ZW0gaXMgcmVtb3ZlZCBmcm9tIGNhcmdvIHVwb24gaW5zdGFsbGF0aW9uLgAAAFh3NVMyCGFkZG5leHVzpwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWRkbmV4dXMKc3VtbWFyeTogJ0FkZCBhIG5leHVzIGxvY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDcmVhdGUgYSBuZXcgbmV4dXMgZW50aXR5IGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcy4gTmV4dXNlcyBhcmUgb3duZWQgYnkgdGhlIGNvbnRyYWN0IGFuZCBzZXJ2ZSBhcyBmaXhlZCBnYXRoZXJpbmcgcG9pbnRzIHdoZXJlIHBsYXllcnMgY2FuIHdyYXAsIHVud3JhcCwgZGVwbG95LCBhbmQgb3RoZXJ3aXNlIGludGVyYWN0IHdpdGggTkZULWJhY2tlZCBhc3NldHMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAABAoWl2MgdhZHZhbmNl0wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWR2YW5jZQpzdW1tYXJ5OiAnQWR2YW5jZSB0dXJuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZHZhbmNlIHRoZSBnYW1lIHRvIHRoZSBuZXh0IHR1cm4uAAAAAIA0VTwFYmxlbmT8Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBibGVuZApzdW1tYXJ5OiAnQmxlbmQgY2FyZ28gc3RhY2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDb21iaW5lIG11bHRpcGxlIGNhcmdvIHN0YWNrcyBvZiB0aGUgc2FtZSBpdGVtIHR5cGUgaW50byBhIHNpbmdsZSBzdGFjayB3aXRoIG5ldyBibGVuZGVkIHN0YXRzLiBBbGwgaW5wdXQgc3RhY2tzIG11c3Qgc2hhcmUgdGhlIHNhbWUgaXRlbSBpZC4gVGhlIG91dHB1dCBzdGFjayBoYXMgdGhlIGNvbWJpbmVkIHF1YW50aXR5IG9mIGFsbCBpbnB1dHMuAAAAAESFpkEGY2FuY2VswgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQuAACoG99pVEQJY2xlYW5yc3Zw7AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYW5yc3ZwCnN1bW1hcnk6ICdDbGVhbiB1cCBwYXN0IGVwb2NoIHJlc2VydmVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFcmFzZSByZXNlcnZlIHRhYmxlIHJvd3MgZnJvbSBhIHBhc3QgZXBvY2guIENhbm5vdCBjbGVhbiB0aGUgY3VycmVudCBvciBmdXR1cmUgZXBvY2hzLiBUaGUgbWF4X3Jvd3MgcGFyYW1ldGVyIGNhcHMgdGhlIG51bWJlciBvZiByb3dzIGVyYXNlZCBwZXIgY2FsbCB0byBsaW1pdCBDUFUgdXNhZ2UuAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAABkJyVFBmNvbW1pdOwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbW1pdApzdW1tYXJ5OiAnU2V0IGNvbW1pdCB2YWx1ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2V0IHRoZSBpbml0aWFsIGNvbW1pdCB2YWx1ZSBkdXJpbmcgZ2FtZSBpbml0aWFsaXphdGlvbi4AAGA0MrcmRQljb25maWdsb2fdAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb25maWdsb2cKc3VtbWFyeTogJ0xvZyBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IGxvZ3MgdGhlIGN1cnJlbnQgZ2FtZSBjb25maWd1cmF0aW9uLiBDYWxsZWQgaW5saW5lIGFmdGVyIGluaXRpYWxpemF0aW9uIHRvIGJyb2FkY2FzdCBjb25maWcgdmlhIGFjdGlvbiB0cmFjZXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAgLzMRQVjcmFmdMgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNyYWZ0CnN1bW1hcnk6ICdDcmFmdCBpdGVtcyBmcm9tIGEgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2Zvcm0gY2FyZ28gaXRlbXMgaW50byBhIG5ldyBpdGVtIHVzaW5nIGEgcmVjaXBlLiBUaGUgZW50aXR5IG11c3QgaGF2ZSBhIGNyYWZ0ZXIgbW9kdWxlIGluc3RhbGxlZC4gQ29uc3VtZXMgZW5lcmd5IGFuZCBzY2hlZHVsZXMgYSBjcmFmdGluZyB0YXNrIHdpdGggZHVyYXRpb24gYmFzZWQgb24gdG90YWwgaW5wdXQgbWFzcyBhbmQgY3JhZnRlciBzcGVlZC4gSW5wdXQgcXVhbnRpdGllcyBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIHJlY2lwZSByZXF1aXJlbWVudHMu4LPLU6ls1EUMY3JlYXRlZW50aXR5vwEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY3JlYXRlZW50aXR5CnN1bW1hcnk6ICdERUJVRzogY3JlYXRlIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHn9Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUuAAAAAKh4zFQGZW5hYmxl3QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZW5hYmxlCnN1bW1hcnk6ICdTZXQgZW5hYmxlZCBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhpcyBnYW1lIG9mIFNoaXBsb2FkLgAAAABc1bJhBmdhdGhlcpcDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdhdGhlcgpzdW1tYXJ5OiAnR2F0aGVyIHJlc291cmNlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKR2F0aGVyIHJlc291cmNlcyBhdCB0aGUgc2hpcCdzIGN1cnJlbnQgbG9jYXRpb24uIE9ubHkgd29ya3MgYXQgZ2F0aGVyYWJsZSBsb2NhdGlvbiB0eXBlcy4gU2NoZWR1bGVzIGEgZ2F0aGVyIHRhc2sgdGhhdCBjb25zdW1lcyBlbmVyZ3kgYW5kIHlpZWxkcyBjYXJnbyBiYXNlZCBvbiB0aGUgc2hpcCdzIGdhdGhlcmVyIHN0YXRzIGFuZCB0aGUgbG9jYXRpb24ncyByZXNvdXJjZSBjb21wb3NpdGlvbi4AAGBuTYqyYglnZXRjb25maWfKAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRjb25maWcKc3VtbWFyeTogJ0dldCBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgdGhlIGdhbWUgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgZGVmYXVsdCBlbnRpdHkgc3RhdHMgZm9yIHdhcmVob3VzZXMgYW5kIGNvbnRhaW5lcnMsIGFuZCB0aGUgZnVsbCBpdGVtIGRlZmluaXRpb25zIHRhYmxlLgCwctnlqbJiC2dldGVudGl0aWVzpAItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50aXRpZXMKc3VtbWFyeTogJ0dldCBhbGwgZW50aXRpZXMgZm9yIGEgcGxheWVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIGZ1bGwgZW50aXR5IGluZm8gZm9yIGFsbCBlbnRpdGllcyBvd25lZCBieSBhIHBsYXllci4gT3B0aW9uYWxseSBmaWx0ZXIgYnkgZW50aXR5IHR5cGUuAADw2eWpsmIJZ2V0ZW50aXR5ogItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50aXR5CnN1bW1hcnk6ICdHZXQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFuIGVudGl0eSBpbmNsdWRpbmcgaWRlbnRpdHksIGNhcmdvLCBzY2hlZHVsZSBzdGF0ZSwgYW5kIHR5cGUtc3BlY2lmaWMgZmllbGRzLgBMNkmq7LJiC2dldGl0ZW1kYXRh3AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbWRhdGEKc3VtbWFyeTogJ0dldCBmdWxsIGl0ZW0gY2F0YWxvZycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGNvbXBsZXRlIGl0ZW0gY2F0YWxvZyBhcyB0aGUgY29udHJhY3Qgc2VlcyBpdCwgaW5jbHVkaW5nIHR5cGUsIHN1YnR5cGUsIHRpZXIsIG1hc3MsIGFuZCBvdGhlciBzdGF0aWMgbWV0YWRhdGEuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgYW5kIGNsaWVudHMgdG8gbWlycm9yIHRoZSBjb250cmFjdCdzIGl0ZW0gZGVmaW5pdGlvbnMuIENhbGxpbmcgdGhpcyBhY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGNvbnRyYWN0IHN0YXRlLgAAAFiq7LJiCGdldGl0ZW1zmgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXMKc3VtbWFyeTogJ0dldCBhbGwgYXZhaWxhYmxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGEgbGlzdCBvZiBhbGwgaXRlbXMgaW4gdGhlIGdhbWUgaW5jbHVkaW5nIHRoZWlyIGlkLCBiYXNlIHByaWNlLCBhbmQgbWFzcy4AJnXZIBqzYgtnZXRsb2NhdGlvbuICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGxvY2F0aW9uCnN1bW1hcnk6ICdHZXQgbG9jYXRpb24gaW5mb3JtYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBsb2NhdGlvbiBpbmNsdWRpbmcgd2hldGhlciBhIHN5c3RlbSBleGlzdHMsIGFuZCBmb3IgZWFjaCBpdGVtOiBwcmljZSwgc3VwcGx5LCByYXJpdHkgbXVsdGlwbGllciwgYW5kIGxvY2F0aW9uIG11bHRpcGxpZXIuAIDJJiEas2IKZ2V0bG9jZGF0Yf4CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGxvY2RhdGEKc3VtbWFyeTogJ0dldCBkZXJpdmVkIGxvY2F0aW9uIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgZGVyaXZlZCBsb2NhdGlvbiBkYXRhIGluY2x1ZGluZyBzdGF0aWMgcHJvcGVydGllcyAodHlwZSwgZGlmZmljdWx0eSwgc2VlZHMpIGZyb20gdGhlIGdhbWUgc2VlZCBhbmQgZXBvY2gtc3BlY2lmaWMgcHJvcGVydGllcyAoYWN0aXZlLCBzZWVkcykgZnJvbSB0aGUgY3VycmVudCBlcG9jaCBzZWVkLgAAVlEnKrNiCmdldG1vZHVsZXO0Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRtb2R1bGVzCnN1bW1hcnk6ICdHZXQgYWxsIG1vZHVsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHN1YnNldCBvZiBpdGVtcyBjbGFzc2lmaWVkIGFzIG1vZHVsZXMsIGluY2x1ZGluZyBlYWNoIG1vZHVsZSdzIGlkLCBtYXNzLCBzdWJ0eXBlLCBhbmQgdGllci4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBlbnVtZXJhdGUgaW5zdGFsbGFibGUgZXF1aXBtZW50LiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS4AAPDnGjWzYglnZXRuZWFyYnneAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRuZWFyYnkKc3VtbWFyeTogJ0dldCBuZWFyYnkgcmVhY2hhYmxlIHN5c3RlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgbmVhcmJ5IHN5c3RlbXMgcmVhY2hhYmxlIGJ5IGFuIGVudGl0eSBmcm9tIGl0cyBwcm9qZWN0ZWQgbG9jYXRpb24uIFJldHVybnMgY3VycmVudCBzdGF0ZSAod2l0aCBjb21wbGV0ZWQgdGFza3MgcmVzb2x2ZWQpLCBwcm9qZWN0ZWQgc3RhdGUgKGFmdGVyIGFsbCBzY2hlZHVsZWQgdGFza3MpLCBhbmQgYSBsaXN0IG9mIHJlYWNoYWJsZSBzeXN0ZW1zIHdpdGggZGlzdGFuY2UsIGVuZXJneSBjb3N0LCBmbGlnaHQgdGltZSwgYW5kIG1hcmtldCBpbmZvcm1hdGlvbi4AAF3T5TWzYgpnZXRuZnRpbmZvpAQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmZ0aW5mbwpzdW1tYXJ5OiAnR2V0IE5GVCBzY2hlbWEgYW5kIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBBdG9taWNBc3NldHMgc2NoZW1hcyBhbmQgdGVtcGxhdGVzIHRoZSBnYW1lIGNvbnRyYWN0IGV4cGVjdHMsIHBsdXMgdGhlIGN1cnJlbnQgYGl0ZW1faWQg4oaSICh0ZW1wbGF0ZV9pZCwgc2NoZW1hX25hbWUpYCBtYXBwaW5nIHN0b3JlZCBpbiB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gc3luYyBhdG9taWNhc3NldHMgc3RhdGUgd2l0aCB0aGUgY29udHJhY3QuIENhbGxpbmcgdGhpcyBhY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGNvbnRyYWN0IHN0YXRlLgAAuMqbWLNiCWdldHBsYXllcv0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHBsYXllcgpzdW1tYXJ5OiAnR2V0IHBsYXllciBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIHBsYXllciBpbmNsdWRpbmcgYmFsYW5jZSwgZGVidCwgbmV0d29ydGgsIGVudGl0eSBjb3VudHMsIGFuZCBwcmljaW5nIGZvciBuZXh0IHB1cmNoYXNlcy4gUmV0dXJucyBpc19wbGF5ZXI9ZmFsc2UgaWYgdGhlIGFjY291bnQgaGFzIG5vdCBqb2luZWQgdGhlIGdhbWUuAABQ1SF1s2IJZ2V0cmVjaXBl2gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVjaXBlCnN1bW1hcnk6ICdHZXQgYSBzaW5nbGUgY3JhZnRpbmcgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgcmVjaXBlIHdob3NlIG91dHB1dCBtYXRjaGVzIHRoZSBnaXZlbiBpdGVtIGlkLCBpbmNsdWRpbmcgaXRzIGlucHV0cywgYmxlbmQgd2VpZ2h0cywgc3RhdCBzbG90cywgYW5kIHJlc29sdmVkIGl0ZW0gbWFzcyBpbmZvLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRpc3BsYXkgY3JhZnRpbmcgcmVxdWlyZW1lbnRzLiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS4AAFbVIXWzYgpnZXRyZWNpcGVz4AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVjaXBlcwpzdW1tYXJ5OiAnTGlzdCBjcmFmdGluZyByZWNpcGVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyBhIHBhZ2luYXRlZCBsaXN0IG9mIGNyYWZ0aW5nIHJlY2lwZXMgc3RhcnRpbmcgYXQgdGhlIHByb3ZpZGVkIGxvd2VyIGJvdW5kIG91dHB1dCBpdGVtIGlkLCB1cCB0byB0aGUgc3BlY2lmaWVkIGxpbWl0LiBFYWNoIGVudHJ5IGluY2x1ZGVzIGlucHV0cywgYmxlbmQgd2VpZ2h0cywgc3RhdCBzbG90cywgYW5kIHJlc29sdmVkIGl0ZW0gbWFzcyBpbmZvLiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS6AFbqaYnWzYgxnZXRyZXNvdXJjZXO7Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZXNvdXJjZXMKc3VtbWFyeTogJ0dldCBhbGwgcmVzb3VyY2UgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyByZXNvdXJjZXMsIGluY2x1ZGluZyBlYWNoIHJlc291cmNlJ3MgaWQsIG1hc3MsIHN1YnR5cGUsIGFuZCB0aWVyLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGVudW1lcmF0ZSBnYXRoZXJhYmxlIG1hdGVyaWFscy4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUuAIDU2dyMs2IKZ2V0c3RyYXR1bdICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN0cmF0dW0Kc3VtbWFyeTogJ0dldCByZXNvdXJjZSBzdHJhdHVtIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhIGZvciBhIHNwZWNpZmljIGRlcHRoIGxheWVyIGF0IGEgY29vcmRpbmF0ZSwgaW5jbHVkaW5nIHRoZSBzdHJhdHVtIHNlZWQgaW5mbyBhbmQgZGVyaXZlZCByZXNvdXJjZSBzdGF0cy6AlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgCi2ubmqullC2dyb3VwdHJhdmVsmgQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ3JvdXB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgbXVsdGlwbGUgZW50aXRpZXMgdG9nZXRoZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIGdyb3VwIHRyYXZlbCBmb3IgbXVsdGlwbGUgZW50aXRpZXMgdG8gYSBkZXN0aW5hdGlvbi4gQWxsIGVudGl0aWVzIG11c3QgYmUgYXQgdGhlIHNhbWUgbG9jYXRpb24gYW5kIG93bmVkIGJ5IHRoZSBjYWxsZXIuIEF0IGxlYXN0IG9uZSBlbnRpdHkgd2l0aCBlbmdpbmVzIGlzIHJlcXVpcmVkIHRvIHByb3ZpZGUgdGhydXN0LiBGbGlnaHQgZHVyYXRpb24gaXMgY2FsY3VsYXRlZCBmcm9tIGNvbWJpbmVkIHRocnVzdCBhbmQgdG90YWwgbWFzcyBvZiBhbGwgZW50aXRpZXMuIENyZWF0ZXMgYW4gZW50aXR5Z3JvdXAgZm9yIGF0b21pYyByZXNvbHV0aW9uIGFuZCBjYW5jZWxsYXRpb24uAAAAAADQsGkEaGFzaPgBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2gKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGEyNTYgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhMjU2IGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AAABAhNKwaQdoYXNoNTEy+wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaDUxMgpzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTUxMiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGE1MTIgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgAAAAAAkN10BGluaXT6AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBpbml0CnN1bW1hcnk6ICdJbml0aWFsaXplIGdhbWUgc2VlZCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhbGl6ZSBhIHRoZSBnYW1lcyBzZWVkIGFuZCBzZWVkIHZhbHVlcyB0byBib290c3RyYXAgZ2FtZSBzdGF0ZS4AAAAAADAdfQRqb2luxAEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogam9pbgpzdW1tYXJ5OiAnSm9pbiBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkpvaW4gYSBnYW1lIG9mIFNoaXBsb2FkAAAAAPjlMp0Gbm90aWZ5igMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbm90aWZ5CnN1bW1hcnk6ICdUYXNrIGxpZmVjeWNsZSBub3RpZmljYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IG5vdGlmaWVzIGVudGl0eSBvd25lcnMgb2YgdGFzayBsaWZlY3ljbGUgZXZlbnRzIChyZXNvbHZlZCwgY2FuY2VsbGVkKS4gQ2FsbGVkIGlubGluZSB3aGVuIHRhc2tzIGNoYW5nZSBzdGF0ZS4gVXNlcyByZXF1aXJlX3JlY2lwaWVudCB0byBlbmFibGUgb2ZmLWNoYWluIG1vbml0b3JpbmcgdmlhIGFjdGlvbiB0cmFjZXMuAAAAil3TkLoIcmVjaGFyZ2XNAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZWNoYXJnZQpzdW1tYXJ5OiAnUmVjaGFyZ2Ugc2hpcCBlbmVyZ3knCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNjaGVkdWxlIGEgcmVjaGFyZ2UgdGFzayBmb3IgYW4gZW50aXR5IHRvIHJlc3RvcmUgZW5lcmd5IHRvIGZ1bGwgY2FwYWNpdHkuIFRoZSByZWNoYXJnZSBkdXJhdGlvbiBkZXBlbmRzIG9uIGN1cnJlbnQgZW5lcmd5IGxldmVsIGFuZCByZWNoYXJnZSByYXRlLgAAAEDtSLG6B3Jlc29sdmXQAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuAAAAKupEpbwIcm1tb2R1bGW8Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW1vZHVsZQpzdW1tYXJ5OiAnUmVtb3ZlIGEgbW9kdWxlIGZyb20gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgYW4gaW5zdGFsbGVkIG1vZHVsZSBmcm9tIGEgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgaXMgcmV0dXJuZWQgdG8gY2FyZ28uIEZhaWxzIGlmIHRoZSBlbnRpdHkgZG9lcyBub3QgaGF2ZSBlbm91Z2ggY2FyZ28gY2FwYWNpdHkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgbW9kdWxlLgAAAGyhvKa8CHJtbmZ0Y2ZnoQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcm1uZnRjZmcKc3VtbWFyeTogJ1JlbW92ZSBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVtb3ZlIHRoZSBBdG9taWNBc3NldHMgdGVtcGxhdGUgbWFwcGluZyBmb3IgdGhlIHNwZWNpZmllZCBpdGVtIGlkIGZyb20gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBBZnRlciByZW1vdmFsIHRoZSBpdGVtIGNhbiBubyBsb25nZXIgYmUgd3JhcHBlZCBvciB1bndyYXBwZWQgdW50aWwgYSBuZXcgbWFwcGluZyBpcyBzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAAJCjwQRzYWx02AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2FsdApzdW1tYXJ5OiAnQXBwZW5kIFNhbHQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkZCBhZGRpdGlvbmFsIHNhbHQgdG8gdGhlIG5leHQgZXBvY2ggc2VlZC4AAGAL5TWzwglzZXRuZnRjZmfEAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzZXRuZnRjZmcKc3VtbWFyeTogJ1NldCBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQmluZCBhbiBpdGVtIGlkIHRvIGFuIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBpZCBhbmQgc2NoZW1hIG5hbWUuIFVzZWQgdG8gY29uZmlndXJlIGhvdyB0aGUgY29udHJhY3QgbWludHMgYW5kIHJlY29nbml6ZXMgTkZUcyBmb3IgYSBnaXZlbiBpdGVtLiBJbnNlcnRzIGEgbmV3IG1hcHBpbmcgaWYgb25lIGRvZXMgbm90IGV4aXN0LCBvciB1cGRhdGVzIHRoZSBleGlzdGluZyBtYXBwaW5nLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAABl16DJTcUKc3Bhd25jYXJnb8UBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNwYXduY2FyZ28Kc3VtbWFyeTogJ0RFQlVHOiBzcGF3biBjYXJnbyBvbiBhbiBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AkoLI1MlNxQtzcGF3bnBhY2tlZOcBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNwYXducGFja2VkCnN1bW1hcnk6ICdERUJVRzogc3Bhd24gYSBwYWNrZWQgZW50aXR5IHdpdGggaW5zdGFsbGVkIG1vZHVsZXMgb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAJJKSuHJTcULc3Bhd25zZWVkZWTNAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bnNlZWRlZApzdW1tYXJ5OiAnREVCVUc6IHNwYXduIHNlZWRlZCBjYXJnbyBvbiBhbiBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAABXLTzNzQh0cmFuc2ZlcsgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYW5zZmVyCnN1bW1hcnk6ICdUcmFuc2ZlciBjYXJnbyBiZXR3ZWVuIGVudGl0aWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2ZlciBjYXJnbyBiZXR3ZWVuIHR3byBlbnRpdGllcyBhdCB0aGUgc2FtZSBsb2NhdGlvbi4gQm90aCBlbnRpdGllcyBtdXN0IGJlIG93bmVkIGJ5IHRoZSBjYWxsZXIgYW5kIGF0IGxlYXN0IG9uZSBtdXN0IGhhdmUgbG9hZGVycy4gQ3JlYXRlcyBsb2FkIGFuZCB1bmxvYWQgdGFza3Mgb24gYm90aCBlbnRpdGllcyB3aXRoIGR1cmF0aW9uIGJhc2VkIG9uIGNvbWJpbmVkIGxvYWRlciBjYXBhY2l0eSBhbmQgWi1kaXN0YW5jZSBiZXR3ZWVuIHRoZW0uAAAAAES1zc0GdHJhdmVs+wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIGEgc2hpcCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgdHJhdmVsIG9mIGFuIGVudGl0eSBmcm9tIGl0cyBjdXJyZW50IGxvY2F0aW9uIHRvIGEgbmV3IGRlc3RpbmF0aW9uLgAAAAAAUK/hBHdhcnCfAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3YXJwCnN1bW1hcnk6ICdXYXJwIHRvIGEgZGVzdGluYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbnRseSB0ZWxlcG9ydCBhbiBlbnRpdHkgdG8gYSBkZXN0aW5hdGlvbiBzeXN0ZW0uIFJlcXVpcmVzIHdhcnAgY2FwYWJpbGl0eSwgZnVsbCBlbmVyZ3ksIGVtcHR5IGNhcmdvLCBhbmQgYW4gZW1wdHkgc2NoZWR1bGUuIFRoZSBkZXN0aW5hdGlvbiBtdXN0IGJlIGEgdmFsaWQgc3lzdGVtIHdpdGhpbiB3YXJwIHJhbmdlLiBSZXNvbHZlcyBpbW1lZGlhdGVseSBhcyBhIHplcm8tZHVyYXRpb24gdGFzay4AAAAAAKCq4wR3aXBlsgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2lwZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0toNBU2iqsquMMd2lwZXNlcXVlbmNlwgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2lwZXNlcXVlbmNlCnN1bW1hcnk6ICdERUJVRzogd2lwZXNlcXVlbmNlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAAAAUM3lBHdyYXD+Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3cmFwCnN1bW1hcnk6ICdXcmFwIGNhcmdvIGludG8gYW4gTkZUJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpXcmFwIGEgcXVhbnRpdHkgb2YgY2FyZ28gZnJvbSBhbiBlbnRpdHkgaW50byBhbiBBdG9taWNBc3NldHMgTkZUIG1pbnRlZCB0byB0aGUgc3BlY2lmaWVkIG93bmVyLiBUaGUgZW50aXR5IG11c3QgYmUgYXQgYSBuZXh1cywgaGF2ZSBsb2FkZXJzLCBhbmQgY29udGFpbiBlbm91Z2ggb2YgdGhlIHJlcXVlc3RlZCBjYXJnby4gU2NoZWR1bGVzIGEgd3JhcCB0YXNrIHRoYXQsIG9uIHJlc29sdXRpb24sIHJlbW92ZXMgdGhlIGNhcmdvIGZyb20gdGhlIGVudGl0eSBhbmQgbWludHMgdGhlIE5GVCB1c2luZyB0aGUgdGVtcGxhdGUgY29uZmlndXJlZCBmb3IgdGhhdCBpdGVtIGlkLg0AAAAAAMquQQNpNjQAAAljYXJnb19yb3cAALhqOpMnRQNpNjQAAA1jb250YWluZXJfcm93AKqml/ns8lQDaTY0AAAPZW50aXR5Z3JvdXBfcm93AAAAk7psEI0DaTY0AAAMbG9jYXRpb25fcm93AAAAAACsu5oDaTY0AAAJbmV4dXNfcm93AABgbk2K8poDaTY0AAANbmZ0Y29uZmlnX3JvdwAAAABc5U2sA2k2NAAACnBsYXllcl9yb3cAAABA7auwugNpNjQAAAtyZXNlcnZlX3JvdwAAAApNpa3CA2k2NAAADHNlcXVlbmNlX3JvdwAAAAAAUF3DA2k2NAAACHNoaXBfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93AAAAAACsqs8DaTY0AAAJdHlwZXNfcm93AABQWNOmruEDaTY0AAANd2FyZWhvdXNlX3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAAAeAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAAAAgLzMRQx0YXNrX3Jlc3VsdHMAAAAAeBqrSgx0YXNrX3Jlc3VsdHMAgM8uT4WwSgZzdHJpbmcAAAAAXNWyYQx0YXNrX3Jlc3VsdHMAAGBuTYqyYgtnYW1lX2NvbmZpZwCwctnlqbJiDWVudGl0eV9pbmZvW10AAPDZ5amyYgtlbnRpdHlfaW5mbwBMNkmq7LJiD2l0ZW1kYXRhX3Jlc3VsdAAAAFiq7LJiCml0ZW1zX2luZm8AJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZAAAVlEnKrNiDm1vZHVsZXNfcmVzdWx0AADw5xo1s2ILbmVhcmJ5X2luZm8AAF3T5TWzYg5uZnRpbmZvX3Jlc3VsdAAAuMqbWLNiC3BsYXllcl9pbmZvAABQ1SF1s2IOcmVjaXBlc19yZXN1bHQAAFbVIXWzYg5yZWNpcGVzX3Jlc3VsdIAVuppidbNiEHJlc291cmNlc19yZXN1bHQAgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAKLa5uaq6WUMdGFza19yZXN1bHRzAAAAAADQsGkLY2hlY2tzdW0yNTYAAABAhNKwaQtjaGVja3N1bTUxMgAAAIpd05C6DHRhc2tfcmVzdWx0cwAAAEDtSLG6D3Jlc29sdmVfcmVzdWx0cwAAAFctPM3NDHRhc2tfcmVzdWx0cwAAAABEtc3NDHRhc2tfcmVzdWx0cwAAAAAAUK/hDHRhc2tfcmVzdWx0cwAAAAAAUM3lDHRhc2tfcmVzdWx0cw==');
|
|
209
209
|
const abi = ABI.from(abiBlob);
|
|
210
210
|
var Types;
|
|
211
211
|
(function (Types) {
|
|
@@ -257,25 +257,25 @@ var Types;
|
|
|
257
257
|
Struct.type('advance')
|
|
258
258
|
], advance);
|
|
259
259
|
Types.advance = advance;
|
|
260
|
-
let
|
|
260
|
+
let packed_module = class packed_module extends Struct {
|
|
261
261
|
};
|
|
262
262
|
__decorate([
|
|
263
263
|
Struct.field(UInt16)
|
|
264
|
-
],
|
|
264
|
+
], packed_module.prototype, "item_id", void 0);
|
|
265
265
|
__decorate([
|
|
266
266
|
Struct.field(UInt64)
|
|
267
|
-
],
|
|
268
|
-
|
|
269
|
-
Struct.type('
|
|
270
|
-
],
|
|
271
|
-
Types.
|
|
267
|
+
], packed_module.prototype, "stats", void 0);
|
|
268
|
+
packed_module = __decorate([
|
|
269
|
+
Struct.type('packed_module')
|
|
270
|
+
], packed_module);
|
|
271
|
+
Types.packed_module = packed_module;
|
|
272
272
|
let module_entry = class module_entry extends Struct {
|
|
273
273
|
};
|
|
274
274
|
__decorate([
|
|
275
275
|
Struct.field(UInt8)
|
|
276
276
|
], module_entry.prototype, "type", void 0);
|
|
277
277
|
__decorate([
|
|
278
|
-
Struct.field(
|
|
278
|
+
Struct.field(packed_module, { optional: true })
|
|
279
279
|
], module_entry.prototype, "installed", void 0);
|
|
280
280
|
module_entry = __decorate([
|
|
281
281
|
Struct.type('module_entry')
|
|
@@ -290,8 +290,8 @@ var Types;
|
|
|
290
290
|
Struct.field(UInt32)
|
|
291
291
|
], cargo_item.prototype, "quantity", void 0);
|
|
292
292
|
__decorate([
|
|
293
|
-
Struct.field(UInt64
|
|
294
|
-
], cargo_item.prototype, "
|
|
293
|
+
Struct.field(UInt64)
|
|
294
|
+
], cargo_item.prototype, "stats", void 0);
|
|
295
295
|
__decorate([
|
|
296
296
|
Struct.field(module_entry, { array: true })
|
|
297
297
|
], cargo_item.prototype, "modules", void 0);
|
|
@@ -381,7 +381,7 @@ var Types;
|
|
|
381
381
|
], cargo_row.prototype, "quantity", void 0);
|
|
382
382
|
__decorate([
|
|
383
383
|
Struct.field(UInt64)
|
|
384
|
-
], cargo_row.prototype, "
|
|
384
|
+
], cargo_row.prototype, "stats", void 0);
|
|
385
385
|
__decorate([
|
|
386
386
|
Struct.field(module_entry, { array: true })
|
|
387
387
|
], cargo_row.prototype, "modules", void 0);
|
|
@@ -645,7 +645,7 @@ var Types;
|
|
|
645
645
|
], deploy.prototype, "packed_item_id", void 0);
|
|
646
646
|
__decorate([
|
|
647
647
|
Struct.field(UInt64)
|
|
648
|
-
], deploy.prototype, "
|
|
648
|
+
], deploy.prototype, "stats", void 0);
|
|
649
649
|
__decorate([
|
|
650
650
|
Struct.field('string')
|
|
651
651
|
], deploy.prototype, "entity_name", void 0);
|
|
@@ -660,13 +660,13 @@ var Types;
|
|
|
660
660
|
], descentity.prototype, "item_id", void 0);
|
|
661
661
|
__decorate([
|
|
662
662
|
Struct.field(UInt64)
|
|
663
|
-
], descentity.prototype, "
|
|
663
|
+
], descentity.prototype, "hull_stats", void 0);
|
|
664
664
|
__decorate([
|
|
665
665
|
Struct.field(UInt16, { array: true })
|
|
666
666
|
], descentity.prototype, "module_items", void 0);
|
|
667
667
|
__decorate([
|
|
668
668
|
Struct.field(UInt64, { array: true })
|
|
669
|
-
], descentity.prototype, "
|
|
669
|
+
], descentity.prototype, "module_stats", void 0);
|
|
670
670
|
descentity = __decorate([
|
|
671
671
|
Struct.type('descentity')
|
|
672
672
|
], descentity);
|
|
@@ -914,11 +914,11 @@ var Types;
|
|
|
914
914
|
let gather = class gather extends Struct {
|
|
915
915
|
};
|
|
916
916
|
__decorate([
|
|
917
|
-
Struct.field(
|
|
918
|
-
], gather.prototype, "
|
|
917
|
+
Struct.field(entity_ref)
|
|
918
|
+
], gather.prototype, "source", void 0);
|
|
919
919
|
__decorate([
|
|
920
|
-
Struct.field(
|
|
921
|
-
], gather.prototype, "
|
|
920
|
+
Struct.field(entity_ref)
|
|
921
|
+
], gather.prototype, "destination", void 0);
|
|
922
922
|
__decorate([
|
|
923
923
|
Struct.field(UInt16)
|
|
924
924
|
], gather.prototype, "stratum", void 0);
|
|
@@ -1734,7 +1734,7 @@ var Types;
|
|
|
1734
1734
|
], ship_row.prototype, "name", void 0);
|
|
1735
1735
|
__decorate([
|
|
1736
1736
|
Struct.field(UInt64)
|
|
1737
|
-
], ship_row.prototype, "
|
|
1737
|
+
], ship_row.prototype, "stats", void 0);
|
|
1738
1738
|
__decorate([
|
|
1739
1739
|
Struct.field(coordinates)
|
|
1740
1740
|
], ship_row.prototype, "coordinates", void 0);
|
|
@@ -1806,9 +1806,9 @@ var Types;
|
|
|
1806
1806
|
], spawnpacked.prototype, "item_id", void 0);
|
|
1807
1807
|
__decorate([
|
|
1808
1808
|
Struct.field(UInt64)
|
|
1809
|
-
], spawnpacked.prototype, "
|
|
1809
|
+
], spawnpacked.prototype, "hull_stats", void 0);
|
|
1810
1810
|
__decorate([
|
|
1811
|
-
Struct.field(
|
|
1811
|
+
Struct.field(packed_module, { array: true })
|
|
1812
1812
|
], spawnpacked.prototype, "installed", void 0);
|
|
1813
1813
|
spawnpacked = __decorate([
|
|
1814
1814
|
Struct.type('spawnpacked')
|
|
@@ -1827,7 +1827,7 @@ var Types;
|
|
|
1827
1827
|
], spawnseeded.prototype, "quantity", void 0);
|
|
1828
1828
|
__decorate([
|
|
1829
1829
|
Struct.field(UInt64)
|
|
1830
|
-
], spawnseeded.prototype, "
|
|
1830
|
+
], spawnseeded.prototype, "stats", void 0);
|
|
1831
1831
|
spawnseeded = __decorate([
|
|
1832
1832
|
Struct.type('spawnseeded')
|
|
1833
1833
|
], spawnseeded);
|
|
@@ -1912,6 +1912,9 @@ var Types;
|
|
|
1912
1912
|
__decorate([
|
|
1913
1913
|
Struct.field(UInt16)
|
|
1914
1914
|
], transfer.prototype, "item_id", void 0);
|
|
1915
|
+
__decorate([
|
|
1916
|
+
Struct.field(UInt64)
|
|
1917
|
+
], transfer.prototype, "stats", void 0);
|
|
1915
1918
|
__decorate([
|
|
1916
1919
|
Struct.field(UInt32)
|
|
1917
1920
|
], transfer.prototype, "quantity", void 0);
|
|
@@ -1968,7 +1971,7 @@ var Types;
|
|
|
1968
1971
|
], warehouse_row.prototype, "name", void 0);
|
|
1969
1972
|
__decorate([
|
|
1970
1973
|
Struct.field(UInt64)
|
|
1971
|
-
], warehouse_row.prototype, "
|
|
1974
|
+
], warehouse_row.prototype, "stats", void 0);
|
|
1972
1975
|
__decorate([
|
|
1973
1976
|
Struct.field(coordinates)
|
|
1974
1977
|
], warehouse_row.prototype, "coordinates", void 0);
|
|
@@ -5349,13 +5352,13 @@ const moduleRecipes = [
|
|
|
5349
5352
|
{ itemId: ITEM_FOCUSING_ARRAY, quantity: 3 },
|
|
5350
5353
|
],
|
|
5351
5354
|
stats: [
|
|
5352
|
-
{ key: '
|
|
5355
|
+
{ key: 'resonance', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'resonance' },
|
|
5353
5356
|
{
|
|
5354
|
-
key: '
|
|
5357
|
+
key: 'conductivity',
|
|
5355
5358
|
sourceComponentId: ITEM_FOCUSING_ARRAY,
|
|
5356
5359
|
sourceStatKey: 'conductivity',
|
|
5357
5360
|
},
|
|
5358
|
-
{ key: '
|
|
5361
|
+
{ key: 'clarity', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'clarity' },
|
|
5359
5362
|
{ key: 'ductility', sourceComponentId: ITEM_FOCUSING_ARRAY, sourceStatKey: 'ductility' },
|
|
5360
5363
|
],
|
|
5361
5364
|
},
|
|
@@ -5668,40 +5671,40 @@ function deriveResourceStats(seed) {
|
|
|
5668
5671
|
}
|
|
5669
5672
|
|
|
5670
5673
|
function encodeStats(values) {
|
|
5671
|
-
let
|
|
5674
|
+
let stats = 0n;
|
|
5672
5675
|
for (let i = 0; i < values.length && i < 6; i++) {
|
|
5673
|
-
|
|
5676
|
+
stats |= BigInt(values[i] & 0x3ff) << BigInt(i * 10);
|
|
5674
5677
|
}
|
|
5675
|
-
return
|
|
5678
|
+
return stats;
|
|
5676
5679
|
}
|
|
5677
|
-
function decodeStat(
|
|
5678
|
-
return Number((
|
|
5680
|
+
function decodeStat(stats, index) {
|
|
5681
|
+
return Number((stats >> BigInt(index * 10)) & 0x3ffn);
|
|
5679
5682
|
}
|
|
5680
|
-
function decodeStats(
|
|
5681
|
-
const
|
|
5683
|
+
function decodeStats(stats, count) {
|
|
5684
|
+
const result = [];
|
|
5682
5685
|
for (let i = 0; i < count; i++) {
|
|
5683
|
-
|
|
5686
|
+
result.push(decodeStat(stats, i));
|
|
5684
5687
|
}
|
|
5685
|
-
return
|
|
5688
|
+
return result;
|
|
5686
5689
|
}
|
|
5687
|
-
function mapStatsToKeys(
|
|
5688
|
-
const values = decodeStats(
|
|
5690
|
+
function mapStatsToKeys(stats, statDefs) {
|
|
5691
|
+
const values = decodeStats(stats, statDefs.length);
|
|
5689
5692
|
const result = {};
|
|
5690
5693
|
for (let i = 0; i < statDefs.length; i++) {
|
|
5691
5694
|
result[statDefs[i].key] = values[i];
|
|
5692
5695
|
}
|
|
5693
5696
|
return result;
|
|
5694
5697
|
}
|
|
5695
|
-
function decodeCraftedItemStats(itemId,
|
|
5698
|
+
function decodeCraftedItemStats(itemId, stats) {
|
|
5696
5699
|
const comp = getComponentById(itemId);
|
|
5697
5700
|
if (comp)
|
|
5698
|
-
return mapStatsToKeys(
|
|
5701
|
+
return mapStatsToKeys(stats, comp.stats);
|
|
5699
5702
|
const entityRecipe = entityRecipes.find((r) => r.packedItemId === itemId);
|
|
5700
5703
|
if (entityRecipe)
|
|
5701
|
-
return mapStatsToKeys(
|
|
5704
|
+
return mapStatsToKeys(stats, entityRecipe.stats);
|
|
5702
5705
|
const moduleRecipe = moduleRecipes.find((r) => r.itemId === itemId);
|
|
5703
5706
|
if (moduleRecipe)
|
|
5704
|
-
return mapStatsToKeys(
|
|
5707
|
+
return mapStatsToKeys(stats, moduleRecipe.stats);
|
|
5705
5708
|
return {};
|
|
5706
5709
|
}
|
|
5707
5710
|
function blendStacks(stacks, statKey) {
|
|
@@ -5754,12 +5757,12 @@ function computeEntityStats(entityRecipeId, componentStacks) {
|
|
|
5754
5757
|
return { key: stat.key, value: Math.max(1, Math.min(999, value)) };
|
|
5755
5758
|
});
|
|
5756
5759
|
}
|
|
5757
|
-
function decodeStackStats(itemId,
|
|
5760
|
+
function decodeStackStats(itemId, stats) {
|
|
5758
5761
|
if (itemId >= 10000) {
|
|
5759
|
-
return decodeCraftedItemStats(itemId, BigInt(
|
|
5762
|
+
return decodeCraftedItemStats(itemId, BigInt(stats.toString()));
|
|
5760
5763
|
}
|
|
5761
|
-
const
|
|
5762
|
-
return { stat1:
|
|
5764
|
+
const s = BigInt(stats.toString());
|
|
5765
|
+
return { stat1: decodeStat(s, 0), stat2: decodeStat(s, 1), stat3: decodeStat(s, 2) };
|
|
5763
5766
|
}
|
|
5764
5767
|
const categoryItemMass = {
|
|
5765
5768
|
metal: 30000,
|
|
@@ -5813,25 +5816,24 @@ function blendCrossGroup(sources) {
|
|
|
5813
5816
|
function blendCargoStacks(itemId, stacks) {
|
|
5814
5817
|
const decoded = stacks.map((s) => ({
|
|
5815
5818
|
quantity: s.quantity,
|
|
5816
|
-
stats: decodeStackStats(itemId, s.
|
|
5819
|
+
stats: decodeStackStats(itemId, s.stats),
|
|
5817
5820
|
}));
|
|
5818
5821
|
const allKeys = Object.keys(decoded[0]?.stats ?? {});
|
|
5819
5822
|
const blended = allKeys.map((key) => Math.max(1, Math.min(999, blendStacks(decoded, key))));
|
|
5820
5823
|
return UInt64.from(encodeStats(blended));
|
|
5821
5824
|
}
|
|
5822
|
-
function decodeRawStackToCategoryStats(
|
|
5823
|
-
const raw = deriveResourceStats(seed);
|
|
5825
|
+
function decodeRawStackToCategoryStats(stats, category) {
|
|
5824
5826
|
const defs = getStatDefinitions(category);
|
|
5825
5827
|
const result = {};
|
|
5826
5828
|
if (defs[0])
|
|
5827
|
-
result[defs[0].key] =
|
|
5829
|
+
result[defs[0].key] = decodeStat(stats, 0);
|
|
5828
5830
|
if (defs[1])
|
|
5829
|
-
result[defs[1].key] =
|
|
5831
|
+
result[defs[1].key] = decodeStat(stats, 1);
|
|
5830
5832
|
if (defs[2])
|
|
5831
|
-
result[defs[2].key] =
|
|
5833
|
+
result[defs[2].key] = decodeStat(stats, 2);
|
|
5832
5834
|
return result;
|
|
5833
5835
|
}
|
|
5834
|
-
function
|
|
5836
|
+
function computeCraftedOutputStats(outputItemId, slotInputs) {
|
|
5835
5837
|
var _a;
|
|
5836
5838
|
const component = getComponentById(outputItemId);
|
|
5837
5839
|
if (component) {
|
|
@@ -5843,8 +5845,8 @@ function computeCraftedOutputSeed(outputItemId, slotInputs) {
|
|
|
5843
5845
|
const stacks = slot.stacks.map((s) => ({
|
|
5844
5846
|
quantity: s.quantity,
|
|
5845
5847
|
stats: slotIsComponent
|
|
5846
|
-
? decodeCraftedItemStats(slot.itemId, s.
|
|
5847
|
-
: decodeRawStackToCategoryStats(s.
|
|
5848
|
+
? decodeCraftedItemStats(slot.itemId, s.stats)
|
|
5849
|
+
: decodeRawStackToCategoryStats(s.stats, slot.category),
|
|
5848
5850
|
}));
|
|
5849
5851
|
categoryStacks.push({ category: slot.category, stacks });
|
|
5850
5852
|
}
|
|
@@ -5866,7 +5868,7 @@ function computeCraftedOutputSeed(outputItemId, slotInputs) {
|
|
|
5866
5868
|
for (const s of slot.stacks) {
|
|
5867
5869
|
list.push({
|
|
5868
5870
|
quantity: s.quantity,
|
|
5869
|
-
stats: decodeCraftedItemStats(slot.itemId, s.
|
|
5871
|
+
stats: decodeCraftedItemStats(slot.itemId, s.stats),
|
|
5870
5872
|
});
|
|
5871
5873
|
}
|
|
5872
5874
|
}
|
|
@@ -5877,7 +5879,11 @@ function computeCraftedOutputSeed(outputItemId, slotInputs) {
|
|
|
5877
5879
|
});
|
|
5878
5880
|
return UInt64.from(encodeStats(ordered));
|
|
5879
5881
|
}
|
|
5880
|
-
throw new Error(`
|
|
5882
|
+
throw new Error(`computeCraftedOutputStats: no recipe found for outputItemId=${outputItemId}`);
|
|
5883
|
+
}
|
|
5884
|
+
function encodeGatheredCargoStats(depositSeed) {
|
|
5885
|
+
const raw = deriveResourceStats(depositSeed);
|
|
5886
|
+
return UInt64.from(encodeStats([raw.stat1, raw.stat2, raw.stat3]));
|
|
5881
5887
|
}
|
|
5882
5888
|
|
|
5883
5889
|
const itemsById = new Map();
|
|
@@ -6251,6 +6257,9 @@ function capsHasGatherer(caps) {
|
|
|
6251
6257
|
function capsHasMass(caps) {
|
|
6252
6258
|
return caps.hullmass !== undefined;
|
|
6253
6259
|
}
|
|
6260
|
+
function capsHasHauler(caps) {
|
|
6261
|
+
return caps.hauler !== undefined;
|
|
6262
|
+
}
|
|
6254
6263
|
|
|
6255
6264
|
function calcCargoItemMass(item) {
|
|
6256
6265
|
const itemDef = getItem(item.item_id);
|
|
@@ -6305,7 +6314,7 @@ function cargoItemToStack(item) {
|
|
|
6305
6314
|
return {
|
|
6306
6315
|
item_id: UInt16.from(item.item_id),
|
|
6307
6316
|
quantity: UInt32.from(item.quantity),
|
|
6308
|
-
|
|
6317
|
+
stats: item.stats,
|
|
6309
6318
|
modules: item.modules ?? [],
|
|
6310
6319
|
};
|
|
6311
6320
|
}
|
|
@@ -6313,23 +6322,18 @@ function stackToCargoItem(stack) {
|
|
|
6313
6322
|
return Types.cargo_item.from({
|
|
6314
6323
|
item_id: stack.item_id,
|
|
6315
6324
|
quantity: stack.quantity,
|
|
6316
|
-
|
|
6325
|
+
stats: stack.stats,
|
|
6317
6326
|
modules: stack.modules,
|
|
6318
6327
|
});
|
|
6319
6328
|
}
|
|
6320
|
-
function
|
|
6321
|
-
if (!a && !b)
|
|
6322
|
-
return true;
|
|
6323
|
-
if (!a || !b)
|
|
6324
|
-
return false;
|
|
6329
|
+
function statsEquals(a, b) {
|
|
6325
6330
|
return a.equals(b);
|
|
6326
6331
|
}
|
|
6327
6332
|
function stackIdentityEqual(a, b) {
|
|
6328
|
-
return a.item_id.equals(b.item_id) &&
|
|
6333
|
+
return a.item_id.equals(b.item_id) && statsEquals(a.stats, b.stats);
|
|
6329
6334
|
}
|
|
6330
6335
|
function stackKey(s) {
|
|
6331
|
-
|
|
6332
|
-
return `${s.item_id.toNumber()}:${seedVal}`;
|
|
6336
|
+
return `${s.item_id.toNumber()}:${s.stats.toString()}`;
|
|
6333
6337
|
}
|
|
6334
6338
|
function stacksEqual(a, b) {
|
|
6335
6339
|
return stackIdentityEqual(a, b) && a.quantity.equals(b.quantity);
|
|
@@ -6653,7 +6657,9 @@ function applyGatherTask(projected, task, options) {
|
|
|
6653
6657
|
if (!options.complete)
|
|
6654
6658
|
return;
|
|
6655
6659
|
applyEnergyCost(projected, task);
|
|
6656
|
-
|
|
6660
|
+
if (!task.entitytarget) {
|
|
6661
|
+
applyAddCargoTask(projected, task);
|
|
6662
|
+
}
|
|
6657
6663
|
}
|
|
6658
6664
|
function applyCraftTask(projected, task) {
|
|
6659
6665
|
applyEnergyCost(projected, task);
|
|
@@ -6949,9 +6955,19 @@ function needsRecharge(entity) {
|
|
|
6949
6955
|
}
|
|
6950
6956
|
|
|
6951
6957
|
class Ship extends Types.entity_info {
|
|
6958
|
+
constructor() {
|
|
6959
|
+
super(...arguments);
|
|
6960
|
+
this._modules = [];
|
|
6961
|
+
}
|
|
6952
6962
|
get name() {
|
|
6953
6963
|
return this.entity_name;
|
|
6954
6964
|
}
|
|
6965
|
+
get modules() {
|
|
6966
|
+
return this._modules;
|
|
6967
|
+
}
|
|
6968
|
+
setModules(modules) {
|
|
6969
|
+
this._modules = modules;
|
|
6970
|
+
}
|
|
6955
6971
|
get inv() {
|
|
6956
6972
|
return (this._inv ?? (this._inv = new InventoryAccessor(this)));
|
|
6957
6973
|
}
|
|
@@ -7070,10 +7086,188 @@ class Ship extends Types.entity_info {
|
|
|
7070
7086
|
}
|
|
7071
7087
|
}
|
|
7072
7088
|
|
|
7089
|
+
function computeShipHullCapabilities(stats) {
|
|
7090
|
+
const density = stats.density ?? 500;
|
|
7091
|
+
const strength = stats.strength ?? 500;
|
|
7092
|
+
const ductility = stats.ductility ?? 500;
|
|
7093
|
+
const purity = stats.purity ?? 500;
|
|
7094
|
+
const hullmass = 25000 + 75 * density;
|
|
7095
|
+
const statSum = strength + ductility + purity;
|
|
7096
|
+
const exponent = statSum / 2997.0;
|
|
7097
|
+
const capacity = Math.floor(1000000 * Math.pow(10, exponent));
|
|
7098
|
+
return { hullmass, capacity };
|
|
7099
|
+
}
|
|
7100
|
+
function computeEngineCapabilities(stats) {
|
|
7101
|
+
const vol = stats.volatility ?? 500;
|
|
7102
|
+
const thm = stats.thermal ?? 500;
|
|
7103
|
+
return {
|
|
7104
|
+
thrust: 400 + Math.floor((vol * 3) / 4),
|
|
7105
|
+
drain: Math.max(30, 50 - Math.floor(thm / 70)),
|
|
7106
|
+
};
|
|
7107
|
+
}
|
|
7108
|
+
function computeGeneratorCapabilities(stats) {
|
|
7109
|
+
const res = stats.resonance ?? 500;
|
|
7110
|
+
const clr = stats.clarity ?? 500;
|
|
7111
|
+
return {
|
|
7112
|
+
capacity: 300 + Math.floor(res / 6),
|
|
7113
|
+
recharge: 1 + Math.floor((clr * 3) / 1000),
|
|
7114
|
+
};
|
|
7115
|
+
}
|
|
7116
|
+
function computeGathererCapabilities(stats) {
|
|
7117
|
+
const str = stats.strength ?? 500;
|
|
7118
|
+
const con = stats.conductivity ?? 500;
|
|
7119
|
+
const ref = stats.reflectivity ?? 500;
|
|
7120
|
+
const tol = stats.tolerance ?? 500;
|
|
7121
|
+
return {
|
|
7122
|
+
yield: 200 + str,
|
|
7123
|
+
drain: Math.max(250, 1250 - Math.floor((con * 25) / 20)),
|
|
7124
|
+
depth: 200 + Math.floor((tol * 3) / 2),
|
|
7125
|
+
speed: 100 + Math.floor((ref * 4) / 5),
|
|
7126
|
+
};
|
|
7127
|
+
}
|
|
7128
|
+
function computeLoaderCapabilities(stats) {
|
|
7129
|
+
const duc = stats.ductility ?? 500;
|
|
7130
|
+
const pla = stats.plasticity ?? 500;
|
|
7131
|
+
return {
|
|
7132
|
+
mass: Math.max(200, 2000 - Math.floor(duc * 2)),
|
|
7133
|
+
thrust: 1 + Math.floor(pla / 500),
|
|
7134
|
+
quantity: 1,
|
|
7135
|
+
};
|
|
7136
|
+
}
|
|
7137
|
+
function computeManufacturingCapabilities(stats) {
|
|
7138
|
+
const rea = stats.reactivity ?? 500;
|
|
7139
|
+
const clr = stats.clarity ?? 500;
|
|
7140
|
+
return {
|
|
7141
|
+
speed: 100 + Math.floor((rea * 4) / 5),
|
|
7142
|
+
drain: Math.max(5, 30 - Math.floor(clr / 33)),
|
|
7143
|
+
};
|
|
7144
|
+
}
|
|
7145
|
+
function computeHaulerCapabilities(stats) {
|
|
7146
|
+
const res = stats.resonance ?? 500;
|
|
7147
|
+
const con = stats.conductivity ?? 500;
|
|
7148
|
+
const clr = stats.clarity ?? 500;
|
|
7149
|
+
return {
|
|
7150
|
+
capacity: Math.max(1, 1 + Math.floor(res / 400)),
|
|
7151
|
+
efficiency: 2000 + con * 6,
|
|
7152
|
+
drain: Math.max(3, 15 - Math.floor(clr / 80)),
|
|
7153
|
+
};
|
|
7154
|
+
}
|
|
7155
|
+
function computeStorageCapabilities(stats, baseCapacity) {
|
|
7156
|
+
const strength = stats.strength ?? 500;
|
|
7157
|
+
const ductility = stats.ductility ?? 500;
|
|
7158
|
+
const purity = stats.purity ?? 500;
|
|
7159
|
+
const statSum = strength + ductility + purity;
|
|
7160
|
+
const capacityBonus = Math.floor((baseCapacity * (10 + Math.floor((statSum * 10) / 2997))) / 100);
|
|
7161
|
+
return { capacityBonus };
|
|
7162
|
+
}
|
|
7163
|
+
function computeWarehouseHullCapabilities(stats) {
|
|
7164
|
+
const density = stats.density ?? 500;
|
|
7165
|
+
const strength = stats.strength ?? 500;
|
|
7166
|
+
const ductility = stats.ductility ?? 500;
|
|
7167
|
+
const purity = stats.purity ?? 500;
|
|
7168
|
+
const hullmass = 25000 + 75 * density;
|
|
7169
|
+
const statSum = strength + ductility + purity;
|
|
7170
|
+
const exponent = statSum / 2997.0;
|
|
7171
|
+
const capacity = Math.floor(20000000 * Math.pow(10, exponent));
|
|
7172
|
+
return { hullmass, capacity };
|
|
7173
|
+
}
|
|
7174
|
+
function computeShipCapabilities(modules) {
|
|
7175
|
+
const ship = {};
|
|
7176
|
+
const engineModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_ENGINE);
|
|
7177
|
+
if (engineModules.length > 0) {
|
|
7178
|
+
let totalThrust = 0;
|
|
7179
|
+
let totalDrain = 0;
|
|
7180
|
+
for (const m of engineModules) {
|
|
7181
|
+
const caps = computeEngineCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7182
|
+
totalThrust += caps.thrust;
|
|
7183
|
+
totalDrain += caps.drain;
|
|
7184
|
+
}
|
|
7185
|
+
ship.engines = { thrust: totalThrust, drain: totalDrain };
|
|
7186
|
+
}
|
|
7187
|
+
const generatorModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GENERATOR);
|
|
7188
|
+
if (generatorModules.length > 0) {
|
|
7189
|
+
let totalCapacity = 0;
|
|
7190
|
+
let totalRecharge = 0;
|
|
7191
|
+
for (const m of generatorModules) {
|
|
7192
|
+
const caps = computeGeneratorCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7193
|
+
totalCapacity += caps.capacity;
|
|
7194
|
+
totalRecharge += caps.recharge;
|
|
7195
|
+
}
|
|
7196
|
+
ship.generator = { capacity: totalCapacity, recharge: totalRecharge };
|
|
7197
|
+
}
|
|
7198
|
+
const gathererModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GATHERER);
|
|
7199
|
+
if (gathererModules.length > 0) {
|
|
7200
|
+
let totalYield = 0;
|
|
7201
|
+
let totalDrain = 0;
|
|
7202
|
+
let totalDepth = 0;
|
|
7203
|
+
let totalSpeed = 0;
|
|
7204
|
+
for (const m of gathererModules) {
|
|
7205
|
+
const caps = computeGathererCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7206
|
+
totalYield += caps.yield;
|
|
7207
|
+
totalDrain += caps.drain;
|
|
7208
|
+
totalDepth += caps.depth;
|
|
7209
|
+
totalSpeed += caps.speed;
|
|
7210
|
+
}
|
|
7211
|
+
ship.gatherer = { yield: totalYield, drain: totalDrain, depth: totalDepth, speed: totalSpeed };
|
|
7212
|
+
}
|
|
7213
|
+
const haulerModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_HAULER);
|
|
7214
|
+
if (haulerModules.length > 0) {
|
|
7215
|
+
let totalCapacity = 0;
|
|
7216
|
+
let weightedEffNum = 0;
|
|
7217
|
+
let totalDrain = 0;
|
|
7218
|
+
for (const m of haulerModules) {
|
|
7219
|
+
const caps = computeHaulerCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7220
|
+
totalCapacity += caps.capacity;
|
|
7221
|
+
weightedEffNum += caps.efficiency * caps.capacity;
|
|
7222
|
+
totalDrain += caps.drain;
|
|
7223
|
+
}
|
|
7224
|
+
ship.hauler = {
|
|
7225
|
+
capacity: totalCapacity,
|
|
7226
|
+
efficiency: totalCapacity > 0 ? Math.floor(weightedEffNum / totalCapacity) : 0,
|
|
7227
|
+
drain: totalDrain,
|
|
7228
|
+
};
|
|
7229
|
+
}
|
|
7230
|
+
const loaderModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_LOADER);
|
|
7231
|
+
if (loaderModules.length > 0) {
|
|
7232
|
+
let totalMass = 0;
|
|
7233
|
+
let totalThrust = 0;
|
|
7234
|
+
let totalQuantity = 0;
|
|
7235
|
+
for (const m of loaderModules) {
|
|
7236
|
+
const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7237
|
+
totalMass += caps.mass;
|
|
7238
|
+
totalThrust += caps.thrust;
|
|
7239
|
+
totalQuantity += caps.quantity;
|
|
7240
|
+
}
|
|
7241
|
+
ship.loaders = { mass: totalMass, thrust: totalThrust, quantity: totalQuantity };
|
|
7242
|
+
}
|
|
7243
|
+
const crafterModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_CRAFTER);
|
|
7244
|
+
if (crafterModules.length > 0) {
|
|
7245
|
+
let totalSpeed = 0;
|
|
7246
|
+
let totalDrain = 0;
|
|
7247
|
+
for (const m of crafterModules) {
|
|
7248
|
+
const caps = computeManufacturingCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7249
|
+
totalSpeed += caps.speed;
|
|
7250
|
+
totalDrain += caps.drain;
|
|
7251
|
+
}
|
|
7252
|
+
ship.crafter = { speed: totalSpeed, drain: totalDrain };
|
|
7253
|
+
}
|
|
7254
|
+
return ship;
|
|
7255
|
+
}
|
|
7256
|
+
|
|
7073
7257
|
class Warehouse extends Types.entity_info {
|
|
7258
|
+
constructor() {
|
|
7259
|
+
super(...arguments);
|
|
7260
|
+
this._modules = [];
|
|
7261
|
+
}
|
|
7074
7262
|
get name() {
|
|
7075
7263
|
return this.entity_name;
|
|
7076
7264
|
}
|
|
7265
|
+
get modules() {
|
|
7266
|
+
return this._modules;
|
|
7267
|
+
}
|
|
7268
|
+
setModules(modules) {
|
|
7269
|
+
this._modules = modules;
|
|
7270
|
+
}
|
|
7077
7271
|
get inv() {
|
|
7078
7272
|
return (this._inv ?? (this._inv = new InventoryAccessor(this)));
|
|
7079
7273
|
}
|
|
@@ -7122,6 +7316,23 @@ class Warehouse extends Types.entity_info {
|
|
|
7122
7316
|
return hull.adding(this.totalCargoMass);
|
|
7123
7317
|
}
|
|
7124
7318
|
}
|
|
7319
|
+
function computeWarehouseCapabilities(modules) {
|
|
7320
|
+
const warehouse = {};
|
|
7321
|
+
const loaderModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_LOADER);
|
|
7322
|
+
if (loaderModules.length > 0) {
|
|
7323
|
+
let totalMass = 0;
|
|
7324
|
+
let totalThrust = 0;
|
|
7325
|
+
let totalQuantity = 0;
|
|
7326
|
+
for (const m of loaderModules) {
|
|
7327
|
+
const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7328
|
+
totalMass += caps.mass;
|
|
7329
|
+
totalThrust += caps.thrust;
|
|
7330
|
+
totalQuantity += caps.quantity;
|
|
7331
|
+
}
|
|
7332
|
+
warehouse.loaders = { mass: totalMass, thrust: totalThrust, quantity: totalQuantity };
|
|
7333
|
+
}
|
|
7334
|
+
return warehouse;
|
|
7335
|
+
}
|
|
7125
7336
|
|
|
7126
7337
|
class Container extends Types.entity_info {
|
|
7127
7338
|
get name() {
|
|
@@ -7382,13 +7593,14 @@ class ActionsManager extends BaseManager {
|
|
|
7382
7593
|
id: UInt64.from(shipId),
|
|
7383
7594
|
});
|
|
7384
7595
|
}
|
|
7385
|
-
transfer(sourceType, sourceId, destType, destId,
|
|
7596
|
+
transfer(sourceType, sourceId, destType, destId, itemId, stats, quantity) {
|
|
7386
7597
|
return this.server.action('transfer', {
|
|
7387
7598
|
source_type: sourceType,
|
|
7388
7599
|
source_id: UInt64.from(sourceId),
|
|
7389
7600
|
dest_type: destType,
|
|
7390
7601
|
dest_id: UInt64.from(destId),
|
|
7391
|
-
item_id: UInt16.from(
|
|
7602
|
+
item_id: UInt16.from(itemId),
|
|
7603
|
+
stats: UInt64.from(stats),
|
|
7392
7604
|
quantity: UInt32.from(quantity),
|
|
7393
7605
|
});
|
|
7394
7606
|
}
|
|
@@ -7403,10 +7615,16 @@ class ActionsManager extends BaseManager {
|
|
|
7403
7615
|
account: Name.from(account),
|
|
7404
7616
|
});
|
|
7405
7617
|
}
|
|
7406
|
-
gather(
|
|
7618
|
+
gather(source, destination, stratum, quantity) {
|
|
7407
7619
|
return this.server.action('gather', {
|
|
7408
|
-
|
|
7409
|
-
|
|
7620
|
+
source: Types.entity_ref.from({
|
|
7621
|
+
entity_type: source.entityType,
|
|
7622
|
+
entity_id: UInt64.from(source.entityId),
|
|
7623
|
+
}),
|
|
7624
|
+
destination: Types.entity_ref.from({
|
|
7625
|
+
entity_type: destination.entityType,
|
|
7626
|
+
entity_id: UInt64.from(destination.entityId),
|
|
7627
|
+
}),
|
|
7410
7628
|
stratum: UInt16.from(stratum),
|
|
7411
7629
|
quantity: UInt32.from(quantity),
|
|
7412
7630
|
});
|
|
@@ -7439,12 +7657,12 @@ class ActionsManager extends BaseManager {
|
|
|
7439
7657
|
inputs: cargoInputs,
|
|
7440
7658
|
});
|
|
7441
7659
|
}
|
|
7442
|
-
deploy(entityType, entityId, packedItemId,
|
|
7660
|
+
deploy(entityType, entityId, packedItemId, stats, entityName) {
|
|
7443
7661
|
return this.server.action('deploy', {
|
|
7444
7662
|
entity_type: entityType,
|
|
7445
7663
|
id: UInt64.from(entityId),
|
|
7446
7664
|
packed_item_id: UInt16.from(packedItemId),
|
|
7447
|
-
|
|
7665
|
+
stats: UInt64.from(stats),
|
|
7448
7666
|
entity_name: entityName,
|
|
7449
7667
|
});
|
|
7450
7668
|
}
|
|
@@ -7465,6 +7683,15 @@ class ActionsManager extends BaseManager {
|
|
|
7465
7683
|
target_cargo_id: UInt64.from(targetCargoId),
|
|
7466
7684
|
});
|
|
7467
7685
|
}
|
|
7686
|
+
wrap(owner, entityType, entityId, cargoId, quantity) {
|
|
7687
|
+
return this.server.action('wrap', {
|
|
7688
|
+
owner: Name.from(owner),
|
|
7689
|
+
entity_type: entityType,
|
|
7690
|
+
entity_id: UInt64.from(entityId),
|
|
7691
|
+
cargo_id: UInt64.from(cargoId),
|
|
7692
|
+
quantity: UInt64.from(quantity),
|
|
7693
|
+
});
|
|
7694
|
+
}
|
|
7468
7695
|
joinGame(account, companyName) {
|
|
7469
7696
|
return [this.foundCompany(account, companyName), this.join(account)];
|
|
7470
7697
|
}
|
|
@@ -7604,6 +7831,51 @@ class Shipload {
|
|
|
7604
7831
|
}
|
|
7605
7832
|
}
|
|
7606
7833
|
|
|
7834
|
+
function assignModulesToSlots(packedEntityItemId, modules, entityLabel) {
|
|
7835
|
+
const slots = getEntitySlotLayout(packedEntityItemId);
|
|
7836
|
+
const result = slots.map((s) => ({ type: s.type, installed: undefined }));
|
|
7837
|
+
for (const mod of modules) {
|
|
7838
|
+
const itemId = Number(UInt16.from(mod.itemId).value.toString());
|
|
7839
|
+
const modType = getModuleCapabilityType(itemId);
|
|
7840
|
+
const slotIdx = result.findIndex((r) => !r.installed && moduleAccepts(r.type, modType));
|
|
7841
|
+
if (slotIdx === -1) {
|
|
7842
|
+
const recipe = getModuleRecipeByItemId(itemId);
|
|
7843
|
+
const modName = recipe?.name ?? `item ${itemId}`;
|
|
7844
|
+
throw new Error(`No compatible slot for module ${modName} (type ${modType}) on ${entityLabel}`);
|
|
7845
|
+
}
|
|
7846
|
+
result[slotIdx].installed = Types.packed_module.from({
|
|
7847
|
+
item_id: UInt16.from(mod.itemId),
|
|
7848
|
+
stats: UInt64.from(mod.stats),
|
|
7849
|
+
});
|
|
7850
|
+
}
|
|
7851
|
+
return result.map((r) => Types.module_entry.from({
|
|
7852
|
+
type: UInt8.from(r.type),
|
|
7853
|
+
installed: r.installed,
|
|
7854
|
+
}));
|
|
7855
|
+
}
|
|
7856
|
+
function decodePackedInput(m) {
|
|
7857
|
+
return {
|
|
7858
|
+
itemId: Number(UInt16.from(m.itemId).value.toString()),
|
|
7859
|
+
stats: BigInt(UInt64.from(m.stats).toString()),
|
|
7860
|
+
};
|
|
7861
|
+
}
|
|
7862
|
+
function computeStorageBonus(decoded, baseCapacity) {
|
|
7863
|
+
let totalBonus = 0;
|
|
7864
|
+
for (const m of decoded) {
|
|
7865
|
+
if (getModuleCapabilityType(m.itemId) !== MODULE_STORAGE)
|
|
7866
|
+
continue;
|
|
7867
|
+
const stats = decodeCraftedItemStats(m.itemId, m.stats);
|
|
7868
|
+
const { capacityBonus } = computeStorageCapabilities(stats, baseCapacity);
|
|
7869
|
+
totalBonus += capacityBonus;
|
|
7870
|
+
}
|
|
7871
|
+
return totalBonus;
|
|
7872
|
+
}
|
|
7873
|
+
function deriveShipFromModules(modules, baseCapacity) {
|
|
7874
|
+
const decoded = modules.map(decodePackedInput);
|
|
7875
|
+
const capabilities = computeShipCapabilities(decoded);
|
|
7876
|
+
const totalBonus = computeStorageBonus(decoded, baseCapacity);
|
|
7877
|
+
return { capabilities, finalCapacity: baseCapacity + totalBonus };
|
|
7878
|
+
}
|
|
7607
7879
|
function makeShip(state) {
|
|
7608
7880
|
const info = {
|
|
7609
7881
|
type: Name.from('ship'),
|
|
@@ -7620,20 +7892,38 @@ function makeShip(state) {
|
|
|
7620
7892
|
};
|
|
7621
7893
|
if (state.hullmass !== undefined)
|
|
7622
7894
|
info.hullmass = UInt32.from(state.hullmass);
|
|
7623
|
-
if (state.capacity !== undefined)
|
|
7624
|
-
info.capacity = UInt32.from(state.capacity);
|
|
7625
7895
|
if (state.energy !== undefined)
|
|
7626
7896
|
info.energy = UInt16.from(state.energy);
|
|
7627
|
-
if (state.engines)
|
|
7628
|
-
info.engines = state.engines;
|
|
7629
|
-
if (state.generator)
|
|
7630
|
-
info.generator = state.generator;
|
|
7631
|
-
if (state.loaders)
|
|
7632
|
-
info.loaders = state.loaders;
|
|
7633
7897
|
if (state.schedule)
|
|
7634
7898
|
info.schedule = state.schedule;
|
|
7899
|
+
let moduleEntries = [];
|
|
7900
|
+
if (state.modules && state.modules.length > 0) {
|
|
7901
|
+
moduleEntries = assignModulesToSlots(ITEM_SHIP_T1_PACKED, state.modules, 'Ship T1');
|
|
7902
|
+
const { capabilities, finalCapacity } = deriveShipFromModules(state.modules, state.capacity ?? 0);
|
|
7903
|
+
if (capabilities.engines)
|
|
7904
|
+
info.engines = capabilities.engines;
|
|
7905
|
+
if (capabilities.generator)
|
|
7906
|
+
info.generator = capabilities.generator;
|
|
7907
|
+
if (capabilities.gatherer)
|
|
7908
|
+
info.gatherer = capabilities.gatherer;
|
|
7909
|
+
if (capabilities.hauler)
|
|
7910
|
+
info.hauler = capabilities.hauler;
|
|
7911
|
+
if (capabilities.loaders)
|
|
7912
|
+
info.loaders = capabilities.loaders;
|
|
7913
|
+
if (capabilities.crafter)
|
|
7914
|
+
info.crafter = capabilities.crafter;
|
|
7915
|
+
if (state.capacity !== undefined)
|
|
7916
|
+
info.capacity = UInt32.from(finalCapacity);
|
|
7917
|
+
}
|
|
7918
|
+
else {
|
|
7919
|
+
moduleEntries = assignModulesToSlots(ITEM_SHIP_T1_PACKED, [], 'Ship T1');
|
|
7920
|
+
if (state.capacity !== undefined)
|
|
7921
|
+
info.capacity = UInt32.from(state.capacity);
|
|
7922
|
+
}
|
|
7635
7923
|
const entityInfo = Types.entity_info.from(info);
|
|
7636
|
-
|
|
7924
|
+
const ship = new Ship(entityInfo);
|
|
7925
|
+
ship.setModules(moduleEntries);
|
|
7926
|
+
return ship;
|
|
7637
7927
|
}
|
|
7638
7928
|
function makeWarehouse(state) {
|
|
7639
7929
|
const info = {
|
|
@@ -7652,12 +7942,25 @@ function makeWarehouse(state) {
|
|
|
7652
7942
|
};
|
|
7653
7943
|
if (state.hullmass !== undefined)
|
|
7654
7944
|
info.hullmass = UInt32.from(state.hullmass);
|
|
7655
|
-
if (state.loaders)
|
|
7656
|
-
info.loaders = state.loaders;
|
|
7657
7945
|
if (state.schedule)
|
|
7658
7946
|
info.schedule = state.schedule;
|
|
7947
|
+
let moduleEntries = [];
|
|
7948
|
+
if (state.modules && state.modules.length > 0) {
|
|
7949
|
+
moduleEntries = assignModulesToSlots(ITEM_WAREHOUSE_T1_PACKED, state.modules, 'Warehouse T1');
|
|
7950
|
+
const decoded = state.modules.map(decodePackedInput);
|
|
7951
|
+
const capabilities = computeWarehouseCapabilities(decoded);
|
|
7952
|
+
if (capabilities.loaders)
|
|
7953
|
+
info.loaders = capabilities.loaders;
|
|
7954
|
+
const totalBonus = computeStorageBonus(decoded, state.capacity);
|
|
7955
|
+
info.capacity = UInt32.from(state.capacity + totalBonus);
|
|
7956
|
+
}
|
|
7957
|
+
else {
|
|
7958
|
+
moduleEntries = assignModulesToSlots(ITEM_WAREHOUSE_T1_PACKED, [], 'Warehouse T1');
|
|
7959
|
+
}
|
|
7659
7960
|
const entityInfo = Types.entity_info.from(info);
|
|
7660
|
-
|
|
7961
|
+
const warehouse = new Warehouse(entityInfo);
|
|
7962
|
+
warehouse.setModules(moduleEntries);
|
|
7963
|
+
return warehouse;
|
|
7661
7964
|
}
|
|
7662
7965
|
function makeContainer(state) {
|
|
7663
7966
|
const entityInfo = Types.entity_info.from({
|
|
@@ -7669,7 +7972,7 @@ function makeContainer(state) {
|
|
|
7669
7972
|
hullmass: UInt32.from(state.hullmass),
|
|
7670
7973
|
capacity: UInt32.from(state.capacity),
|
|
7671
7974
|
cargomass: UInt32.from(state.cargomass || 0),
|
|
7672
|
-
cargo: [],
|
|
7975
|
+
cargo: state.cargo || [],
|
|
7673
7976
|
is_idle: !state.schedule,
|
|
7674
7977
|
current_task_elapsed: UInt32.from(0),
|
|
7675
7978
|
current_task_remaining: UInt32.from(0),
|
|
@@ -7829,6 +8132,13 @@ const tierColors = {
|
|
|
7829
8132
|
t4: '#c084fc',
|
|
7830
8133
|
t5: '#fbbf24',
|
|
7831
8134
|
};
|
|
8135
|
+
const tierLabels = {
|
|
8136
|
+
t1: 'Common',
|
|
8137
|
+
t2: 'Uncommon',
|
|
8138
|
+
t3: 'Rare',
|
|
8139
|
+
t4: 'Epic',
|
|
8140
|
+
t5: 'Legendary',
|
|
8141
|
+
};
|
|
7832
8142
|
const categoryIcons = {
|
|
7833
8143
|
metal: '⬡',
|
|
7834
8144
|
precious: '◈',
|
|
@@ -7836,9 +8146,16 @@ const categoryIcons = {
|
|
|
7836
8146
|
mineral: '◇',
|
|
7837
8147
|
organic: '❋',
|
|
7838
8148
|
};
|
|
8149
|
+
const categoryIconShapes = {
|
|
8150
|
+
metal: 'hex',
|
|
8151
|
+
precious: 'diamond',
|
|
8152
|
+
gas: 'circle',
|
|
8153
|
+
mineral: 'square',
|
|
8154
|
+
organic: 'star',
|
|
8155
|
+
};
|
|
7839
8156
|
const componentIcon = '▣';
|
|
7840
8157
|
const moduleIcon = '⬢';
|
|
7841
|
-
const
|
|
8158
|
+
const itemAbbreviations = {
|
|
7842
8159
|
10001: 'HP',
|
|
7843
8160
|
10002: 'CL',
|
|
7844
8161
|
10003: 'TC',
|
|
@@ -8380,194 +8697,21 @@ function getStatMappingsForCapability(capability) {
|
|
|
8380
8697
|
return statMappings.filter((m) => m.capability === capability);
|
|
8381
8698
|
}
|
|
8382
8699
|
|
|
8383
|
-
function computeShipHullCapabilities(stats) {
|
|
8384
|
-
const density = stats.density ?? 500;
|
|
8385
|
-
const strength = stats.strength ?? 500;
|
|
8386
|
-
const ductility = stats.ductility ?? 500;
|
|
8387
|
-
const purity = stats.purity ?? 500;
|
|
8388
|
-
const hullmass = 25000 + 75 * density;
|
|
8389
|
-
const statSum = strength + ductility + purity;
|
|
8390
|
-
const exponent = statSum / 2997.0;
|
|
8391
|
-
const capacity = Math.floor(1000000 * Math.pow(10, exponent));
|
|
8392
|
-
return { hullmass, capacity };
|
|
8393
|
-
}
|
|
8394
|
-
function computeEngineCapabilities(stats) {
|
|
8395
|
-
const vol = stats.volatility ?? 500;
|
|
8396
|
-
const thm = stats.thermal ?? 500;
|
|
8397
|
-
return {
|
|
8398
|
-
thrust: 400 + Math.floor((vol * 3) / 4),
|
|
8399
|
-
drain: Math.max(30, 50 - Math.floor(thm / 70)),
|
|
8400
|
-
};
|
|
8401
|
-
}
|
|
8402
|
-
function computeGeneratorCapabilities(stats) {
|
|
8403
|
-
const res = stats.resonance ?? 500;
|
|
8404
|
-
const clr = stats.clarity ?? 500;
|
|
8405
|
-
return {
|
|
8406
|
-
capacity: 300 + Math.floor(res / 6),
|
|
8407
|
-
recharge: 5 + Math.floor((clr * 15) / 1000),
|
|
8408
|
-
};
|
|
8409
|
-
}
|
|
8410
|
-
function computeGathererCapabilities(stats) {
|
|
8411
|
-
const str = stats.strength ?? 500;
|
|
8412
|
-
const con = stats.conductivity ?? 500;
|
|
8413
|
-
const ref = stats.reflectivity ?? 500;
|
|
8414
|
-
const tol = stats.tolerance ?? 500;
|
|
8415
|
-
return {
|
|
8416
|
-
yield: 200 + str,
|
|
8417
|
-
drain: Math.max(10, 50 - Math.floor(con / 20)),
|
|
8418
|
-
depth: 200 + Math.floor((tol * 3) / 2),
|
|
8419
|
-
speed: 100 + Math.floor((ref * 4) / 5),
|
|
8420
|
-
};
|
|
8421
|
-
}
|
|
8422
|
-
function computeLoaderCapabilities(stats) {
|
|
8423
|
-
const duc = stats.ductility ?? 500;
|
|
8424
|
-
const pla = stats.plasticity ?? 500;
|
|
8425
|
-
return {
|
|
8426
|
-
mass: Math.max(200, 2000 - Math.floor(duc * 2)),
|
|
8427
|
-
thrust: 1 + Math.floor(pla / 500),
|
|
8428
|
-
quantity: 1,
|
|
8429
|
-
};
|
|
8430
|
-
}
|
|
8431
|
-
function computeManufacturingCapabilities(stats) {
|
|
8432
|
-
const rea = stats.reactivity ?? 500;
|
|
8433
|
-
const clr = stats.clarity ?? 500;
|
|
8434
|
-
return {
|
|
8435
|
-
speed: 100 + Math.floor((rea * 4) / 5),
|
|
8436
|
-
drain: Math.max(5, 30 - Math.floor(clr / 33)),
|
|
8437
|
-
};
|
|
8438
|
-
}
|
|
8439
|
-
function computeHaulerCapabilities(stats) {
|
|
8440
|
-
const res = stats.resonance ?? 500;
|
|
8441
|
-
const con = stats.conductivity ?? 500;
|
|
8442
|
-
const clr = stats.clarity ?? 500;
|
|
8443
|
-
return {
|
|
8444
|
-
capacity: Math.max(1, 1 + Math.floor(res / 400)),
|
|
8445
|
-
efficiency: 2000 + con * 6,
|
|
8446
|
-
drain: Math.max(3, 15 - Math.floor(clr / 80)),
|
|
8447
|
-
};
|
|
8448
|
-
}
|
|
8449
|
-
function computeStorageCapabilities(stats, baseCapacity) {
|
|
8450
|
-
const strength = stats.strength ?? 500;
|
|
8451
|
-
const ductility = stats.ductility ?? 500;
|
|
8452
|
-
const purity = stats.purity ?? 500;
|
|
8453
|
-
const statSum = strength + ductility + purity;
|
|
8454
|
-
const capacityBonus = Math.floor((baseCapacity * (10 + Math.floor((statSum * 10) / 2997))) / 100);
|
|
8455
|
-
return { capacityBonus };
|
|
8456
|
-
}
|
|
8457
|
-
function computeWarehouseHullCapabilities(stats) {
|
|
8458
|
-
const density = stats.density ?? 500;
|
|
8459
|
-
const strength = stats.strength ?? 500;
|
|
8460
|
-
const ductility = stats.ductility ?? 500;
|
|
8461
|
-
const purity = stats.purity ?? 500;
|
|
8462
|
-
const hullmass = 25000 + 75 * density;
|
|
8463
|
-
const statSum = strength + ductility + purity;
|
|
8464
|
-
const exponent = statSum / 2997.0;
|
|
8465
|
-
const capacity = Math.floor(20000000 * Math.pow(10, exponent));
|
|
8466
|
-
return { hullmass, capacity };
|
|
8467
|
-
}
|
|
8468
|
-
function computeShipCapabilities(modules) {
|
|
8469
|
-
const ship = {};
|
|
8470
|
-
const engineModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_ENGINE);
|
|
8471
|
-
if (engineModules.length > 0) {
|
|
8472
|
-
let totalThrust = 0;
|
|
8473
|
-
let totalDrain = 0;
|
|
8474
|
-
for (const m of engineModules) {
|
|
8475
|
-
const caps = computeEngineCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8476
|
-
totalThrust += caps.thrust;
|
|
8477
|
-
totalDrain += caps.drain;
|
|
8478
|
-
}
|
|
8479
|
-
ship.engines = { thrust: totalThrust, drain: totalDrain };
|
|
8480
|
-
}
|
|
8481
|
-
const generatorModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GENERATOR);
|
|
8482
|
-
if (generatorModules.length > 0) {
|
|
8483
|
-
let totalCapacity = 0;
|
|
8484
|
-
let totalRecharge = 0;
|
|
8485
|
-
for (const m of generatorModules) {
|
|
8486
|
-
const caps = computeGeneratorCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8487
|
-
totalCapacity += caps.capacity;
|
|
8488
|
-
totalRecharge += caps.recharge;
|
|
8489
|
-
}
|
|
8490
|
-
ship.generator = { capacity: totalCapacity, recharge: totalRecharge };
|
|
8491
|
-
}
|
|
8492
|
-
const gathererModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GATHERER);
|
|
8493
|
-
if (gathererModules.length > 0) {
|
|
8494
|
-
let totalYield = 0;
|
|
8495
|
-
let totalDrain = 0;
|
|
8496
|
-
let totalDepth = 0;
|
|
8497
|
-
let totalSpeed = 0;
|
|
8498
|
-
for (const m of gathererModules) {
|
|
8499
|
-
const caps = computeGathererCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8500
|
-
totalYield += caps.yield;
|
|
8501
|
-
totalDrain += caps.drain;
|
|
8502
|
-
totalDepth += caps.depth;
|
|
8503
|
-
totalSpeed += caps.speed;
|
|
8504
|
-
}
|
|
8505
|
-
ship.gatherer = { yield: totalYield, drain: totalDrain, depth: totalDepth, speed: totalSpeed };
|
|
8506
|
-
}
|
|
8507
|
-
const haulerModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_HAULER);
|
|
8508
|
-
if (haulerModules.length > 0) {
|
|
8509
|
-
let totalCapacity = 0;
|
|
8510
|
-
let weightedEffNum = 0;
|
|
8511
|
-
let totalDrain = 0;
|
|
8512
|
-
for (const m of haulerModules) {
|
|
8513
|
-
const decoded = decodeCraftedItemStats(m.itemId, m.seed);
|
|
8514
|
-
const caps = computeHaulerCapabilities({
|
|
8515
|
-
resonance: decoded.capacity,
|
|
8516
|
-
conductivity: decoded.efficiency,
|
|
8517
|
-
clarity: decoded.drain,
|
|
8518
|
-
});
|
|
8519
|
-
totalCapacity += caps.capacity;
|
|
8520
|
-
weightedEffNum += caps.efficiency * caps.capacity;
|
|
8521
|
-
totalDrain += caps.drain;
|
|
8522
|
-
}
|
|
8523
|
-
ship.hauler = {
|
|
8524
|
-
capacity: totalCapacity,
|
|
8525
|
-
efficiency: totalCapacity > 0 ? Math.floor(weightedEffNum / totalCapacity) : 0,
|
|
8526
|
-
drain: totalDrain,
|
|
8527
|
-
};
|
|
8528
|
-
}
|
|
8529
|
-
const loaderModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_LOADER);
|
|
8530
|
-
if (loaderModules.length > 0) {
|
|
8531
|
-
let totalMass = 0;
|
|
8532
|
-
let totalThrust = 0;
|
|
8533
|
-
let totalQuantity = 0;
|
|
8534
|
-
for (const m of loaderModules) {
|
|
8535
|
-
const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8536
|
-
totalMass += caps.mass;
|
|
8537
|
-
totalThrust += caps.thrust;
|
|
8538
|
-
totalQuantity += caps.quantity;
|
|
8539
|
-
}
|
|
8540
|
-
ship.loaders = { mass: totalMass, thrust: totalThrust, quantity: totalQuantity };
|
|
8541
|
-
}
|
|
8542
|
-
const crafterModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_CRAFTER);
|
|
8543
|
-
if (crafterModules.length > 0) {
|
|
8544
|
-
let totalSpeed = 0;
|
|
8545
|
-
let totalDrain = 0;
|
|
8546
|
-
for (const m of crafterModules) {
|
|
8547
|
-
const caps = computeManufacturingCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8548
|
-
totalSpeed += caps.speed;
|
|
8549
|
-
totalDrain += caps.drain;
|
|
8550
|
-
}
|
|
8551
|
-
ship.crafter = { speed: totalSpeed, drain: totalDrain };
|
|
8552
|
-
}
|
|
8553
|
-
return ship;
|
|
8554
|
-
}
|
|
8555
|
-
|
|
8556
8700
|
function toNum(v) {
|
|
8557
8701
|
return Number(UInt16.from(v).value.toString());
|
|
8558
8702
|
}
|
|
8559
|
-
function
|
|
8703
|
+
function toBigStats(v) {
|
|
8560
8704
|
return BigInt(UInt64.from(v).toString());
|
|
8561
8705
|
}
|
|
8562
|
-
function resolveResource(id,
|
|
8706
|
+
function resolveResource(id, stats) {
|
|
8563
8707
|
const item = getItem(id);
|
|
8564
8708
|
const cat = item.category;
|
|
8565
|
-
let
|
|
8566
|
-
if (
|
|
8567
|
-
const
|
|
8709
|
+
let resolvedStats;
|
|
8710
|
+
if (stats !== undefined) {
|
|
8711
|
+
const bigStats = toBigStats(stats);
|
|
8568
8712
|
const defs = getStatDefinitions(cat);
|
|
8569
|
-
const values = [
|
|
8570
|
-
|
|
8713
|
+
const values = [decodeStat(bigStats, 0), decodeStat(bigStats, 1), decodeStat(bigStats, 2)];
|
|
8714
|
+
resolvedStats = defs.map((d, i) => ({
|
|
8571
8715
|
key: d.key,
|
|
8572
8716
|
label: d.label,
|
|
8573
8717
|
abbreviation: d.abbreviation,
|
|
@@ -8581,19 +8725,20 @@ function resolveResource(id, seed) {
|
|
|
8581
8725
|
itemId: id,
|
|
8582
8726
|
name: String(item.name),
|
|
8583
8727
|
icon: categoryIcons[cat] ?? '⬡',
|
|
8728
|
+
abbreviation: null,
|
|
8584
8729
|
category: cat,
|
|
8585
8730
|
tier: item.tier,
|
|
8586
8731
|
mass: Number(item.mass.value.toString()),
|
|
8587
8732
|
itemType: 'resource',
|
|
8588
|
-
stats,
|
|
8733
|
+
stats: resolvedStats,
|
|
8589
8734
|
};
|
|
8590
8735
|
}
|
|
8591
|
-
function resolveComponent(id,
|
|
8736
|
+
function resolveComponent(id, stats) {
|
|
8592
8737
|
const comp = getComponentById(id);
|
|
8593
|
-
let
|
|
8594
|
-
if (
|
|
8595
|
-
const decoded = decodeCraftedItemStats(id,
|
|
8596
|
-
|
|
8738
|
+
let resolvedStats;
|
|
8739
|
+
if (stats !== undefined) {
|
|
8740
|
+
const decoded = decodeCraftedItemStats(id, toBigStats(stats));
|
|
8741
|
+
resolvedStats = Object.entries(decoded).map(([key, value]) => {
|
|
8597
8742
|
const allDefs = getStatDefinitions('metal')
|
|
8598
8743
|
.concat(getStatDefinitions('precious'))
|
|
8599
8744
|
.concat(getStatDefinitions('gas'))
|
|
@@ -8616,11 +8761,12 @@ function resolveComponent(id, seed) {
|
|
|
8616
8761
|
return {
|
|
8617
8762
|
itemId: id,
|
|
8618
8763
|
name: comp.name,
|
|
8619
|
-
icon:
|
|
8764
|
+
icon: itemAbbreviations[id] ?? componentIcon,
|
|
8765
|
+
abbreviation: itemAbbreviations[id] ?? null,
|
|
8620
8766
|
tier: 't1',
|
|
8621
8767
|
mass: comp.mass,
|
|
8622
8768
|
itemType: 'component',
|
|
8623
|
-
stats,
|
|
8769
|
+
stats: resolvedStats,
|
|
8624
8770
|
};
|
|
8625
8771
|
}
|
|
8626
8772
|
function computeCapabilityGroup(moduleType, stats) {
|
|
@@ -8678,6 +8824,17 @@ function computeCapabilityGroup(moduleType, stats) {
|
|
|
8678
8824
|
],
|
|
8679
8825
|
};
|
|
8680
8826
|
}
|
|
8827
|
+
case MODULE_HAULER: {
|
|
8828
|
+
const caps = computeHaulerCapabilities(stats);
|
|
8829
|
+
return {
|
|
8830
|
+
capability: 'Hauler',
|
|
8831
|
+
attributes: [
|
|
8832
|
+
{ label: 'Capacity', value: caps.capacity },
|
|
8833
|
+
{ label: 'Efficiency', value: caps.efficiency },
|
|
8834
|
+
{ label: 'Drain', value: caps.drain },
|
|
8835
|
+
],
|
|
8836
|
+
};
|
|
8837
|
+
}
|
|
8681
8838
|
case MODULE_STORAGE: {
|
|
8682
8839
|
const str = stats.strength ?? 500;
|
|
8683
8840
|
const duc = stats.ductility ?? 500;
|
|
@@ -8690,36 +8847,37 @@ function computeCapabilityGroup(moduleType, stats) {
|
|
|
8690
8847
|
return undefined;
|
|
8691
8848
|
}
|
|
8692
8849
|
}
|
|
8693
|
-
function resolveModule(id,
|
|
8850
|
+
function resolveModule(id, stats) {
|
|
8694
8851
|
const recipe = getModuleRecipeByItemId(id);
|
|
8695
8852
|
let attributes;
|
|
8696
|
-
if (
|
|
8697
|
-
const
|
|
8853
|
+
if (stats !== undefined) {
|
|
8854
|
+
const decoded = decodeCraftedItemStats(id, toBigStats(stats));
|
|
8698
8855
|
const modType = getModuleCapabilityType(id);
|
|
8699
|
-
const group = computeCapabilityGroup(modType,
|
|
8856
|
+
const group = computeCapabilityGroup(modType, decoded);
|
|
8700
8857
|
if (group)
|
|
8701
8858
|
attributes = [group];
|
|
8702
8859
|
}
|
|
8703
8860
|
return {
|
|
8704
8861
|
itemId: id,
|
|
8705
8862
|
name: recipe.name,
|
|
8706
|
-
icon:
|
|
8863
|
+
icon: itemAbbreviations[id] ?? moduleIcon,
|
|
8864
|
+
abbreviation: itemAbbreviations[id] ?? null,
|
|
8707
8865
|
tier: 't1',
|
|
8708
8866
|
mass: 0,
|
|
8709
8867
|
itemType: 'module',
|
|
8710
8868
|
attributes,
|
|
8711
8869
|
};
|
|
8712
8870
|
}
|
|
8713
|
-
function resolveEntity(id,
|
|
8871
|
+
function resolveEntity(id, stats, modules) {
|
|
8714
8872
|
const recipe = getEntityRecipeByItemId(id);
|
|
8715
8873
|
let attributes;
|
|
8716
8874
|
let moduleSlots;
|
|
8717
|
-
if (
|
|
8718
|
-
const
|
|
8875
|
+
if (stats !== undefined) {
|
|
8876
|
+
const decoded = decodeCraftedItemStats(id, toBigStats(stats));
|
|
8719
8877
|
attributes = [];
|
|
8720
8878
|
const isShip = recipe.id === 'ship-t1';
|
|
8721
8879
|
if (isShip) {
|
|
8722
|
-
const hullCaps = computeShipHullCapabilities(
|
|
8880
|
+
const hullCaps = computeShipHullCapabilities(decoded);
|
|
8723
8881
|
attributes.push({
|
|
8724
8882
|
capability: 'Hull',
|
|
8725
8883
|
attributes: [
|
|
@@ -8729,7 +8887,7 @@ function resolveEntity(id, seed, modules) {
|
|
|
8729
8887
|
});
|
|
8730
8888
|
}
|
|
8731
8889
|
else {
|
|
8732
|
-
const containerCaps = computeContainerCapabilities(
|
|
8890
|
+
const containerCaps = computeContainerCapabilities(decoded);
|
|
8733
8891
|
attributes.push({
|
|
8734
8892
|
capability: 'Hull',
|
|
8735
8893
|
attributes: [
|
|
@@ -8744,10 +8902,10 @@ function resolveEntity(id, seed, modules) {
|
|
|
8744
8902
|
const mod = modules?.[i];
|
|
8745
8903
|
if (mod?.installed) {
|
|
8746
8904
|
const modItemId = Number(mod.installed.item_id.value.toString());
|
|
8747
|
-
const
|
|
8748
|
-
const
|
|
8905
|
+
const modStats = BigInt(mod.installed.stats.toString());
|
|
8906
|
+
const decodedStats = decodeCraftedItemStats(modItemId, modStats);
|
|
8749
8907
|
const modType = getModuleCapabilityType(modItemId);
|
|
8750
|
-
const group = computeCapabilityGroup(modType,
|
|
8908
|
+
const group = computeCapabilityGroup(modType, decodedStats);
|
|
8751
8909
|
const modRecipe = getModuleRecipeByItemId(modItemId);
|
|
8752
8910
|
return {
|
|
8753
8911
|
name: modRecipe?.name ?? 'Module',
|
|
@@ -8761,7 +8919,8 @@ function resolveEntity(id, seed, modules) {
|
|
|
8761
8919
|
return {
|
|
8762
8920
|
itemId: id,
|
|
8763
8921
|
name: recipe.name,
|
|
8764
|
-
icon:
|
|
8922
|
+
icon: itemAbbreviations[id] ?? componentIcon,
|
|
8923
|
+
abbreviation: itemAbbreviations[id] ?? null,
|
|
8765
8924
|
tier: 't1',
|
|
8766
8925
|
mass: 0,
|
|
8767
8926
|
itemType: 'entity',
|
|
@@ -8769,28 +8928,157 @@ function resolveEntity(id, seed, modules) {
|
|
|
8769
8928
|
moduleSlots,
|
|
8770
8929
|
};
|
|
8771
8930
|
}
|
|
8772
|
-
function resolveItem(itemId,
|
|
8931
|
+
function resolveItem(itemId, stats, modules) {
|
|
8773
8932
|
const id = toNum(itemId);
|
|
8774
8933
|
if (isModuleItem(id))
|
|
8775
|
-
return resolveModule(id,
|
|
8934
|
+
return resolveModule(id, stats);
|
|
8776
8935
|
if (getComponentById(id))
|
|
8777
|
-
return resolveComponent(id,
|
|
8936
|
+
return resolveComponent(id, stats);
|
|
8778
8937
|
if (getEntityRecipeByItemId(id))
|
|
8779
|
-
return resolveEntity(id,
|
|
8780
|
-
return resolveResource(id,
|
|
8938
|
+
return resolveEntity(id, stats, modules);
|
|
8939
|
+
return resolveResource(id, stats);
|
|
8940
|
+
}
|
|
8941
|
+
|
|
8942
|
+
const TEMPLATES = {
|
|
8943
|
+
engine: {
|
|
8944
|
+
id: 'module.engine.description',
|
|
8945
|
+
template: 'generates {thrust} thrust for travel while draining {drain} energy per distance travelled',
|
|
8946
|
+
params: [
|
|
8947
|
+
['thrust', 'Thrust'],
|
|
8948
|
+
['drain', 'Drain'],
|
|
8949
|
+
],
|
|
8950
|
+
highlightKeys: ['thrust', 'drain'],
|
|
8951
|
+
},
|
|
8952
|
+
generator: {
|
|
8953
|
+
id: 'module.generator.description',
|
|
8954
|
+
template: 'holds {capacity} maximum energy and restores {recharge} per second while recharging',
|
|
8955
|
+
params: [
|
|
8956
|
+
['capacity', 'Capacity'],
|
|
8957
|
+
['recharge', 'Recharge'],
|
|
8958
|
+
],
|
|
8959
|
+
highlightKeys: ['capacity', 'recharge'],
|
|
8960
|
+
},
|
|
8961
|
+
gatherer: {
|
|
8962
|
+
id: 'module.gatherer.description',
|
|
8963
|
+
template: 'mines resources at {yield} speed to a max depth of {depth} with {speed} gather speed while draining {drain} energy per second',
|
|
8964
|
+
params: [
|
|
8965
|
+
['yield', 'Yield'],
|
|
8966
|
+
['drain', 'Drain'],
|
|
8967
|
+
['depth', 'Depth'],
|
|
8968
|
+
['speed', 'Speed'],
|
|
8969
|
+
],
|
|
8970
|
+
highlightKeys: ['yield', 'depth', 'speed', 'drain'],
|
|
8971
|
+
},
|
|
8972
|
+
loader: {
|
|
8973
|
+
id: 'module.loader.description',
|
|
8974
|
+
template: '{quantity} loader that generates {thrust} thrust with a weight of {mass} per unit',
|
|
8975
|
+
params: [
|
|
8976
|
+
['quantity', 'Quantity'],
|
|
8977
|
+
['thrust', 'Thrust'],
|
|
8978
|
+
['mass', 'Mass'],
|
|
8979
|
+
],
|
|
8980
|
+
highlightKeys: ['quantity', 'thrust', 'mass'],
|
|
8981
|
+
},
|
|
8982
|
+
manufacturing: {
|
|
8983
|
+
id: 'module.manufacturing.description',
|
|
8984
|
+
template: 'manufactures items at {speed} speed while draining {drain} energy per second',
|
|
8985
|
+
params: [
|
|
8986
|
+
['speed', 'Speed'],
|
|
8987
|
+
['drain', 'Drain'],
|
|
8988
|
+
],
|
|
8989
|
+
highlightKeys: ['speed', 'drain'],
|
|
8990
|
+
},
|
|
8991
|
+
storage: {
|
|
8992
|
+
id: 'module.storage.description',
|
|
8993
|
+
template: 'boosts cargo capacity by {bonus}%',
|
|
8994
|
+
params: [['bonus', 'Capacity Bonus']],
|
|
8995
|
+
highlightKeys: ['bonus'],
|
|
8996
|
+
},
|
|
8997
|
+
hauler: {
|
|
8998
|
+
id: 'module.hauler.description',
|
|
8999
|
+
template: 'locks onto up to {capacity} targets at {efficiency} efficiency while draining {drain} energy per distance travelled per target',
|
|
9000
|
+
params: [
|
|
9001
|
+
['capacity', 'Capacity'],
|
|
9002
|
+
['efficiency', 'Efficiency'],
|
|
9003
|
+
['drain', 'Drain'],
|
|
9004
|
+
],
|
|
9005
|
+
highlightKeys: ['capacity', 'efficiency', 'drain'],
|
|
9006
|
+
},
|
|
9007
|
+
};
|
|
9008
|
+
function describeModule(input) {
|
|
9009
|
+
if (!input.attributes || input.attributes.length === 0)
|
|
9010
|
+
return null;
|
|
9011
|
+
const key = input.capability.toLowerCase();
|
|
9012
|
+
const spec = TEMPLATES[key];
|
|
9013
|
+
if (!spec)
|
|
9014
|
+
return null;
|
|
9015
|
+
const params = {};
|
|
9016
|
+
for (const [paramName, attrLabel] of spec.params) {
|
|
9017
|
+
const attr = input.attributes.find((a) => a.label === attrLabel);
|
|
9018
|
+
if (attr)
|
|
9019
|
+
params[paramName] = attr.value;
|
|
9020
|
+
}
|
|
9021
|
+
return {
|
|
9022
|
+
id: spec.id,
|
|
9023
|
+
template: spec.template,
|
|
9024
|
+
params,
|
|
9025
|
+
highlightKeys: spec.highlightKeys,
|
|
9026
|
+
};
|
|
9027
|
+
}
|
|
9028
|
+
function describeModuleForItem(resolved) {
|
|
9029
|
+
if (resolved.itemType !== 'module')
|
|
9030
|
+
return null;
|
|
9031
|
+
const group = resolved.attributes?.[0];
|
|
9032
|
+
if (!group)
|
|
9033
|
+
return null;
|
|
9034
|
+
return describeModule({ capability: group.capability, attributes: group.attributes });
|
|
9035
|
+
}
|
|
9036
|
+
function describeModuleForSlot(slot) {
|
|
9037
|
+
if (!slot.installed || !slot.name || !slot.attributes)
|
|
9038
|
+
return null;
|
|
9039
|
+
return describeModule({ capability: slot.name, attributes: slot.attributes });
|
|
9040
|
+
}
|
|
9041
|
+
function renderDescription(desc, options) {
|
|
9042
|
+
const translate = options?.translate ?? ((_id, fallback) => fallback);
|
|
9043
|
+
const formatNumber = options?.formatNumber ?? ((n) => n.toLocaleString('en-US'));
|
|
9044
|
+
const tpl = translate(desc.id, desc.template);
|
|
9045
|
+
const spans = [];
|
|
9046
|
+
const regex = /\{([A-Za-z_][A-Za-z0-9_]*)\}/g;
|
|
9047
|
+
let lastIndex = 0;
|
|
9048
|
+
let m;
|
|
9049
|
+
while ((m = regex.exec(tpl)) !== null) {
|
|
9050
|
+
if (m.index > lastIndex) {
|
|
9051
|
+
spans.push({ text: tpl.slice(lastIndex, m.index) });
|
|
9052
|
+
}
|
|
9053
|
+
const paramName = m[1] ?? '';
|
|
9054
|
+
const raw = desc.params[paramName];
|
|
9055
|
+
if (raw === undefined) {
|
|
9056
|
+
spans.push({ text: `{${paramName}}` });
|
|
9057
|
+
}
|
|
9058
|
+
else {
|
|
9059
|
+
const formatted = typeof raw === 'number' ? formatNumber(raw) : raw;
|
|
9060
|
+
const highlight = desc.highlightKeys.includes(paramName);
|
|
9061
|
+
spans.push(highlight ? { text: formatted, highlight: true } : { text: formatted });
|
|
9062
|
+
}
|
|
9063
|
+
lastIndex = m.index + m[0].length;
|
|
9064
|
+
}
|
|
9065
|
+
if (lastIndex < tpl.length) {
|
|
9066
|
+
spans.push({ text: tpl.slice(lastIndex) });
|
|
9067
|
+
}
|
|
9068
|
+
return spans;
|
|
8781
9069
|
}
|
|
8782
9070
|
|
|
8783
9071
|
function readCommonBase(data) {
|
|
8784
9072
|
return {
|
|
8785
9073
|
quantity: Number(data.quantity),
|
|
8786
|
-
|
|
9074
|
+
stats: String(data.stats),
|
|
8787
9075
|
origin_x: String(data.origin_x),
|
|
8788
9076
|
origin_y: String(data.origin_y),
|
|
8789
9077
|
};
|
|
8790
9078
|
}
|
|
8791
9079
|
function deserializeScalar(data, itemId) {
|
|
8792
9080
|
const base = readCommonBase(data);
|
|
8793
|
-
return { item_id: itemId, quantity: base.quantity,
|
|
9081
|
+
return { item_id: itemId, quantity: base.quantity, stats: base.stats };
|
|
8794
9082
|
}
|
|
8795
9083
|
const deserializeResource = deserializeScalar;
|
|
8796
9084
|
const deserializeComponent = deserializeScalar;
|
|
@@ -8798,15 +9086,15 @@ const deserializeModule = deserializeScalar;
|
|
|
8798
9086
|
function deserializeEntity(data, itemId) {
|
|
8799
9087
|
const base = readCommonBase(data);
|
|
8800
9088
|
const moduleItems = (data.module_items ?? []).map((v) => Number(v));
|
|
8801
|
-
const
|
|
9089
|
+
const moduleStats = (data.module_stats ?? []).map((v) => String(v));
|
|
8802
9090
|
const layout = getEntitySlotLayout(itemId);
|
|
8803
9091
|
const modules = layout.map((slot, i) => ({
|
|
8804
9092
|
type: slot.type,
|
|
8805
9093
|
installed: moduleItems[i] && moduleItems[i] !== 0
|
|
8806
|
-
? { item_id: moduleItems[i],
|
|
9094
|
+
? { item_id: moduleItems[i], stats: moduleStats[i] }
|
|
8807
9095
|
: undefined,
|
|
8808
9096
|
}));
|
|
8809
|
-
return { item_id: itemId, quantity: base.quantity,
|
|
9097
|
+
return { item_id: itemId, quantity: base.quantity, stats: base.stats, modules };
|
|
8810
9098
|
}
|
|
8811
9099
|
function deserializeAsset(data, itemId) {
|
|
8812
9100
|
const type = itemTypeCode(itemId);
|
|
@@ -8825,24 +9113,24 @@ function deserializeAsset(data, itemId) {
|
|
|
8825
9113
|
function idiv(a, b) {
|
|
8826
9114
|
return Math.floor(a / b);
|
|
8827
9115
|
}
|
|
8828
|
-
function computeBaseHullmass(
|
|
8829
|
-
const density = decodeStat(
|
|
9116
|
+
function computeBaseHullmass(stats) {
|
|
9117
|
+
const density = decodeStat(stats, 1);
|
|
8830
9118
|
return 25000 + 75 * density;
|
|
8831
9119
|
}
|
|
8832
|
-
function computeBaseCapacityShip(
|
|
8833
|
-
const s = decodeStat(
|
|
9120
|
+
function computeBaseCapacityShip(stats) {
|
|
9121
|
+
const s = decodeStat(stats, 0) + decodeStat(stats, 2) + decodeStat(stats, 3);
|
|
8834
9122
|
return Math.floor(1000000 * Math.pow(10, s / 2997));
|
|
8835
9123
|
}
|
|
8836
|
-
function computeBaseCapacityWarehouse(
|
|
8837
|
-
const s = decodeStat(
|
|
9124
|
+
function computeBaseCapacityWarehouse(stats) {
|
|
9125
|
+
const s = decodeStat(stats, 0) + decodeStat(stats, 2) + decodeStat(stats, 3);
|
|
8838
9126
|
return Math.floor(20000000 * Math.pow(10, s / 2997));
|
|
8839
9127
|
}
|
|
8840
9128
|
const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
|
|
8841
9129
|
const computeEngineDrain = (thm) => Math.max(30, 50 - idiv(thm, 70));
|
|
8842
9130
|
const computeGeneratorCap = (res) => 300 + idiv(res, 6);
|
|
8843
|
-
const computeGeneratorRech = (clr) =>
|
|
9131
|
+
const computeGeneratorRech = (clr) => 1 + idiv(clr * 3, 1000);
|
|
8844
9132
|
const computeGathererYield = (str) => 200 + str;
|
|
8845
|
-
const computeGathererDrain = (con) => Math.max(
|
|
9133
|
+
const computeGathererDrain = (con) => Math.max(250, 1250 - idiv(con * 25, 20));
|
|
8846
9134
|
const computeGathererDepth = (tol) => 200 + idiv(tol * 3, 2);
|
|
8847
9135
|
const computeGathererSpeed = (ref) => 100 + idiv(ref * 4, 5);
|
|
8848
9136
|
const computeLoaderMass = (duc) => Math.max(200, 2000 - duc * 2);
|
|
@@ -8881,7 +9169,7 @@ function moduleDisplayName(itemId) {
|
|
|
8881
9169
|
return 'Module';
|
|
8882
9170
|
}
|
|
8883
9171
|
}
|
|
8884
|
-
function formatModuleLine(slot, itemId,
|
|
9172
|
+
function formatModuleLine(slot, itemId, stats) {
|
|
8885
9173
|
let out = `Slot ${slot} - `;
|
|
8886
9174
|
if (itemId === 0) {
|
|
8887
9175
|
out += '(empty)';
|
|
@@ -8891,41 +9179,41 @@ function formatModuleLine(slot, itemId, seed) {
|
|
|
8891
9179
|
const subtype = getModuleCapabilityType(itemId);
|
|
8892
9180
|
switch (subtype) {
|
|
8893
9181
|
case MODULE_ENGINE: {
|
|
8894
|
-
const vol = decodeStat(
|
|
8895
|
-
const thm = decodeStat(
|
|
9182
|
+
const vol = decodeStat(stats, 0);
|
|
9183
|
+
const thm = decodeStat(stats, 1);
|
|
8896
9184
|
out += ` Thrust ${computeEngineThrust(vol)} Drain ${computeEngineDrain(thm)}`;
|
|
8897
9185
|
break;
|
|
8898
9186
|
}
|
|
8899
9187
|
case MODULE_GENERATOR: {
|
|
8900
|
-
const res = decodeStat(
|
|
8901
|
-
const clr = decodeStat(
|
|
9188
|
+
const res = decodeStat(stats, 0);
|
|
9189
|
+
const clr = decodeStat(stats, 1);
|
|
8902
9190
|
out += ` Capacity ${computeGeneratorCap(res)} Recharge ${computeGeneratorRech(clr)}`;
|
|
8903
9191
|
break;
|
|
8904
9192
|
}
|
|
8905
9193
|
case MODULE_GATHERER: {
|
|
8906
|
-
const str = decodeStat(
|
|
8907
|
-
const tol = decodeStat(
|
|
8908
|
-
const con = decodeStat(
|
|
8909
|
-
const ref = decodeStat(
|
|
9194
|
+
const str = decodeStat(stats, 0);
|
|
9195
|
+
const tol = decodeStat(stats, 1);
|
|
9196
|
+
const con = decodeStat(stats, 3);
|
|
9197
|
+
const ref = decodeStat(stats, 4);
|
|
8910
9198
|
out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol)} Speed ${computeGathererSpeed(ref)} Drain ${computeGathererDrain(con)}`;
|
|
8911
9199
|
break;
|
|
8912
9200
|
}
|
|
8913
9201
|
case MODULE_LOADER: {
|
|
8914
|
-
const duc = decodeStat(
|
|
8915
|
-
const pla = decodeStat(
|
|
9202
|
+
const duc = decodeStat(stats, 0);
|
|
9203
|
+
const pla = decodeStat(stats, 1);
|
|
8916
9204
|
out += ` Mass ${computeLoaderMass(duc)} Thrust ${computeLoaderThrust(pla)}`;
|
|
8917
9205
|
break;
|
|
8918
9206
|
}
|
|
8919
9207
|
case MODULE_CRAFTER: {
|
|
8920
|
-
const rea = decodeStat(
|
|
8921
|
-
const clr = decodeStat(
|
|
9208
|
+
const rea = decodeStat(stats, 0);
|
|
9209
|
+
const clr = decodeStat(stats, 1);
|
|
8922
9210
|
out += ` Speed ${computeCrafterSpeed(rea)} Drain ${computeCrafterDrain(clr)}`;
|
|
8923
9211
|
break;
|
|
8924
9212
|
}
|
|
8925
9213
|
case MODULE_STORAGE: {
|
|
8926
|
-
const str = decodeStat(
|
|
8927
|
-
const duc = decodeStat(
|
|
8928
|
-
const pur = decodeStat(
|
|
9214
|
+
const str = decodeStat(stats, 0);
|
|
9215
|
+
const duc = decodeStat(stats, 1);
|
|
9216
|
+
const pur = decodeStat(stats, 2);
|
|
8929
9217
|
const sum = str + duc + pur;
|
|
8930
9218
|
const pct = 10 + idiv(sum * 10, 2997);
|
|
8931
9219
|
out += ` +${pct}% capacity`;
|
|
@@ -8934,14 +9222,14 @@ function formatModuleLine(slot, itemId, seed) {
|
|
|
8934
9222
|
}
|
|
8935
9223
|
return out;
|
|
8936
9224
|
}
|
|
8937
|
-
function buildEntityDescription(itemId,
|
|
8938
|
-
const hullMass = computeBaseHullmass(
|
|
9225
|
+
function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
|
|
9226
|
+
const hullMass = computeBaseHullmass(hullStats);
|
|
8939
9227
|
let baseCapacity = 0;
|
|
8940
9228
|
if (itemId === ITEM_SHIP_T1_PACKED) {
|
|
8941
|
-
baseCapacity = computeBaseCapacityShip(
|
|
9229
|
+
baseCapacity = computeBaseCapacityShip(hullStats);
|
|
8942
9230
|
}
|
|
8943
9231
|
else if (itemId === ITEM_WAREHOUSE_T1_PACKED) {
|
|
8944
|
-
baseCapacity = computeBaseCapacityWarehouse(
|
|
9232
|
+
baseCapacity = computeBaseCapacityWarehouse(hullStats);
|
|
8945
9233
|
}
|
|
8946
9234
|
let out = entityDisplayName(itemId);
|
|
8947
9235
|
out += ` - Hull ${hullMass} mass`;
|
|
@@ -8950,7 +9238,7 @@ function buildEntityDescription(itemId, hullSeed, moduleItems, moduleSeeds) {
|
|
|
8950
9238
|
}
|
|
8951
9239
|
out += '\n\n';
|
|
8952
9240
|
for (let i = 0; i < moduleItems.length; i++) {
|
|
8953
|
-
out += formatModuleLine(i, moduleItems[i],
|
|
9241
|
+
out += formatModuleLine(i, moduleItems[i], moduleStats[i] ?? 0n);
|
|
8954
9242
|
out += '\n';
|
|
8955
9243
|
}
|
|
8956
9244
|
return out;
|
|
@@ -8986,5 +9274,5 @@ var index = /*#__PURE__*/Object.freeze({
|
|
|
8986
9274
|
buildEntityDescription: buildEntityDescription
|
|
8987
9275
|
});
|
|
8988
9276
|
|
|
8989
|
-
export { ActionsManager, BASE_ORBITAL_MASS, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, CONTAINER_Z, CRAFT_ENERGY_DIVISOR, Container, Coordinates, DEPTH_THRESHOLD_T1, DEPTH_THRESHOLD_T2, DEPTH_THRESHOLD_T3, DEPTH_THRESHOLD_T4, DEPTH_THRESHOLD_T5, ENTITY_CAPACITY_EXCEEDED, EPOCH_NON_ZERO, EPOCH_NOT_READY, ERROR_SYSTEM_ALREADY_INITIALIZED, ERROR_SYSTEM_DISABLED, ERROR_SYSTEM_NOT_INITIALIZED, EntitiesManager, EntityInventory, EntityType, EpochsManager, GAME_NOT_FOUND, GAME_SEED_NOT_SET, GameState, INITIAL_CONTAINER_CAPACITY, INITIAL_CONTAINER_HULLMASS, INITIAL_WAREHOUSE_CAPACITY, INSUFFICIENT_BALANCE, INSUFFICIENT_ITEM_QUANTITY, INSUFFICIENT_ITEM_SUPPLY, INVALID_AMOUNT, ITEM_CARGO_ARM, ITEM_CARGO_LINING, ITEM_CARGO_LINING_T2, ITEM_CONTAINER_T1_PACKED, ITEM_CONTAINER_T2_PACKED, ITEM_DOES_NOT_EXIST, ITEM_ENGINE_T1, ITEM_FOCUSING_ARRAY, ITEM_GATHERER_T1, ITEM_GENERATOR_T1, ITEM_HAULER_T1, ITEM_HULL_PLATES, ITEM_HULL_PLATES_T2, ITEM_LOADER_T1, ITEM_MANUFACTURING_T1, ITEM_MATTER_CONDUIT, ITEM_NOT_AVAILABLE_AT_LOCATION, ITEM_POWER_CELL, ITEM_REACTION_CHAMBER, ITEM_SHIP_T1_PACKED, ITEM_STORAGE_T1, ITEM_SURVEY_PROBE, ITEM_THRUSTER_CORE, ITEM_TOOL_BIT, ITEM_TYPE_COMPONENT, ITEM_TYPE_ENTITY, ITEM_TYPE_MODULE, ITEM_TYPE_RESOURCE, ITEM_WAREHOUSE_T1_PACKED, InventoryAccessor, Item, LOCATION_MAX_DEPTH, LOCATION_MIN_DEPTH, Location, LocationType, LocationsManager, MAX_ORBITAL_ALTITUDE, MIN_ORBITAL_ALTITUDE, MODULE_ANY, MODULE_CRAFTER, MODULE_ENGINE, MODULE_GATHERER, MODULE_GENERATOR, MODULE_HAULER, MODULE_LAUNCHER, MODULE_LOADER, MODULE_STORAGE, MODULE_WARP, index as NFT, NO_SCHEDULE, PLANET_SUBTYPE_GAS_GIANT, PLANET_SUBTYPE_ICY, PLANET_SUBTYPE_INDUSTRIAL, PLANET_SUBTYPE_OCEAN, PLANET_SUBTYPE_ROCKY, PLANET_SUBTYPE_TERRESTRIAL, PLAYER_ALREADY_JOINED, PLAYER_NOT_FOUND, PRECISION$1 as PRECISION, platform as PlatformContract, Player, PlayersManager, RECIPE_INPUTS_EXCESS, RECIPE_INPUTS_INSUFFICIENT, RECIPE_INPUTS_INVALID, RECIPE_INPUTS_MIXED, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, RESERVE_TIERS, SHIP_ALREADY_THERE, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_CARGO_NOT_LOADED, SHIP_CARGO_NOT_OWNED, SHIP_INVALID_CARGO, SHIP_INVALID_DESTINATION, SHIP_INVALID_TRAVEL_DURATION, SHIP_NOT_ARRIVED, SHIP_NOT_ENOUGH_ENERGY, SHIP_NOT_ENOUGH_ENERGY_CAPACITY, SHIP_NOT_FOUND, SHIP_NOT_IDLE, SHIP_NOT_OWNED, SHIP_NO_COMPLETED_TASKS, SHIP_NO_TASKS_TO_CANCEL, ScheduleAccessor, server as ServerContract, Ship, Shipload, TIER_ROLL_MAX, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_CAPACITY_EXCEEDED, WAREHOUSE_NOT_FOUND, WAREHOUSE_Z, Warehouse, availableCapacity$1 as availableCapacity, availableCapacityFromMass, blendCargoStacks, blendComponentStacks, blendCrossGroup, blendStacks, buildEntityDescription, calcCargoItemMass, calcCargoMass, calcEnergyUsage, calcLoadDuration, calcStacksMass, calc_acceleration, calc_craft_duration, calc_craft_energy, calc_energyusage, calc_flighttime, calc_gather_duration, calc_gather_energy, calc_loader_acceleration, calc_loader_flighttime, calc_orbital_altitude, calc_rechargetime, calc_ship_acceleration, calc_ship_flighttime, calc_ship_mass, calc_ship_rechargetime, calc_transfer_duration, calculateFlightTime, calculateLoadTimeBreakdown, calculateRefuelingTime, calculateTransferTime, canMove, capabilityAttributes, capabilityNames, capsHasCrafter, capsHasGatherer, capsHasLoaders, capsHasMass, capsHasMovement, capsHasStorage, cargoItemToStack, cargoUtils, categoryColors, categoryIcons, categoryItemMass, componentIcon, components, computeBaseCapacityShip, computeBaseCapacityWarehouse, computeBaseHullmass, computeComponentStats, computeContainerCapabilities, computeContainerT2Capabilities,
|
|
9277
|
+
export { ActionsManager, BASE_ORBITAL_MASS, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, CONTAINER_Z, CRAFT_ENERGY_DIVISOR, Container, Coordinates, DEPTH_THRESHOLD_T1, DEPTH_THRESHOLD_T2, DEPTH_THRESHOLD_T3, DEPTH_THRESHOLD_T4, DEPTH_THRESHOLD_T5, ENTITY_CAPACITY_EXCEEDED, EPOCH_NON_ZERO, EPOCH_NOT_READY, ERROR_SYSTEM_ALREADY_INITIALIZED, ERROR_SYSTEM_DISABLED, ERROR_SYSTEM_NOT_INITIALIZED, EntitiesManager, EntityInventory, EntityType, EpochsManager, GAME_NOT_FOUND, GAME_SEED_NOT_SET, GameState, INITIAL_CONTAINER_CAPACITY, INITIAL_CONTAINER_HULLMASS, INITIAL_WAREHOUSE_CAPACITY, INSUFFICIENT_BALANCE, INSUFFICIENT_ITEM_QUANTITY, INSUFFICIENT_ITEM_SUPPLY, INVALID_AMOUNT, ITEM_CARGO_ARM, ITEM_CARGO_LINING, ITEM_CARGO_LINING_T2, ITEM_CONTAINER_T1_PACKED, ITEM_CONTAINER_T2_PACKED, ITEM_DOES_NOT_EXIST, ITEM_ENGINE_T1, ITEM_FOCUSING_ARRAY, ITEM_GATHERER_T1, ITEM_GENERATOR_T1, ITEM_HAULER_T1, ITEM_HULL_PLATES, ITEM_HULL_PLATES_T2, ITEM_LOADER_T1, ITEM_MANUFACTURING_T1, ITEM_MATTER_CONDUIT, ITEM_NOT_AVAILABLE_AT_LOCATION, ITEM_POWER_CELL, ITEM_REACTION_CHAMBER, ITEM_SHIP_T1_PACKED, ITEM_STORAGE_T1, ITEM_SURVEY_PROBE, ITEM_THRUSTER_CORE, ITEM_TOOL_BIT, ITEM_TYPE_COMPONENT, ITEM_TYPE_ENTITY, ITEM_TYPE_MODULE, ITEM_TYPE_RESOURCE, ITEM_WAREHOUSE_T1_PACKED, InventoryAccessor, Item, LOCATION_MAX_DEPTH, LOCATION_MIN_DEPTH, Location, LocationType, LocationsManager, MAX_ORBITAL_ALTITUDE, MIN_ORBITAL_ALTITUDE, MODULE_ANY, MODULE_CRAFTER, MODULE_ENGINE, MODULE_GATHERER, MODULE_GENERATOR, MODULE_HAULER, MODULE_LAUNCHER, MODULE_LOADER, MODULE_STORAGE, MODULE_WARP, index as NFT, NO_SCHEDULE, PLANET_SUBTYPE_GAS_GIANT, PLANET_SUBTYPE_ICY, PLANET_SUBTYPE_INDUSTRIAL, PLANET_SUBTYPE_OCEAN, PLANET_SUBTYPE_ROCKY, PLANET_SUBTYPE_TERRESTRIAL, PLAYER_ALREADY_JOINED, PLAYER_NOT_FOUND, PRECISION$1 as PRECISION, platform as PlatformContract, Player, PlayersManager, RECIPE_INPUTS_EXCESS, RECIPE_INPUTS_INSUFFICIENT, RECIPE_INPUTS_INVALID, RECIPE_INPUTS_MIXED, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, RESERVE_TIERS, SHIP_ALREADY_THERE, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_CARGO_NOT_LOADED, SHIP_CARGO_NOT_OWNED, SHIP_INVALID_CARGO, SHIP_INVALID_DESTINATION, SHIP_INVALID_TRAVEL_DURATION, SHIP_NOT_ARRIVED, SHIP_NOT_ENOUGH_ENERGY, SHIP_NOT_ENOUGH_ENERGY_CAPACITY, SHIP_NOT_FOUND, SHIP_NOT_IDLE, SHIP_NOT_OWNED, SHIP_NO_COMPLETED_TASKS, SHIP_NO_TASKS_TO_CANCEL, ScheduleAccessor, server as ServerContract, Ship, Shipload, TIER_ROLL_MAX, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_CAPACITY_EXCEEDED, WAREHOUSE_NOT_FOUND, WAREHOUSE_Z, Warehouse, availableCapacity$1 as availableCapacity, availableCapacityFromMass, blendCargoStacks, blendComponentStacks, blendCrossGroup, blendStacks, buildEntityDescription, calcCargoItemMass, calcCargoMass, calcEnergyUsage, calcLoadDuration, calcStacksMass, calc_acceleration, calc_craft_duration, calc_craft_energy, calc_energyusage, calc_flighttime, calc_gather_duration, calc_gather_energy, calc_loader_acceleration, calc_loader_flighttime, calc_orbital_altitude, calc_rechargetime, calc_ship_acceleration, calc_ship_flighttime, calc_ship_mass, calc_ship_rechargetime, calc_transfer_duration, calculateFlightTime, calculateLoadTimeBreakdown, calculateRefuelingTime, calculateTransferTime, canMove, capabilityAttributes, capabilityNames, capsHasCrafter, capsHasGatherer, capsHasHauler, capsHasLoaders, capsHasMass, capsHasMovement, capsHasStorage, cargoItemToStack, cargoUtils, categoryColors, categoryIconShapes, categoryIcons, categoryItemMass, componentIcon, components, computeBaseCapacityShip, computeBaseCapacityWarehouse, computeBaseHullmass, computeComponentStats, computeContainerCapabilities, computeContainerT2Capabilities, computeCraftedOutputStats, computeCrafterDrain, computeCrafterSpeed, computeEngineCapabilities, computeEngineDrain, computeEngineThrust, computeEntityStats, computeGathererCapabilities, computeGathererDepth, computeGathererDrain, computeGathererSpeed, computeGathererYield, computeGeneratorCap, computeGeneratorCapabilities, computeGeneratorRech, computeHaulPenalty, computeHaulerCapabilities, computeHaulerDrain, computeInputMass, computeLoaderCapabilities, computeLoaderMass, computeLoaderThrust, computeManufacturingCapabilities, computeShipCapabilities, computeShipHullCapabilities, computeStorageCapabilities, computeWarehouseCapabilities, computeWarehouseHullCapabilities, coordsToLocationId, createInventoryAccessor, createProjectedEntity, createScheduleAccessor, decodeCraftedItemStats, decodeStat, decodeStats, Shipload as default, deriveLocation, deriveLocationEpoch, deriveLocationSize, deriveLocationStatic, deriveResourceStats, deriveStratum, describeModule, describeModuleForItem, describeModuleForSlot, deserializeAsset, deserializeComponent, deserializeEntity, deserializeModule, deserializeResource, distanceBetweenCoordinates, distanceBetweenPoints, encodeGatheredCargoStats, encodeStats, energyPercent, entityDisplayName, entityRecipes, estimateDealTravelTime, estimateTravelTime, findNearbyPlanets, formatModuleLine, getAllCraftableItems, getCapabilityAttributes, getCategoryInfo, getComponentById, getComponentsForCategory, getComponentsForStat, getCurrentEpoch, getDepthThreshold, getDestinationLocation, getEligibleResources, getEntityRecipe, getEntityRecipeByItemId, getEntitySlotLayout, getEpochInfo, getFlightOrigin, getItem, getItems, getLocationCandidates, getLocationType, getLocationTypeName, getModuleCapabilityType, getModuleRecipe, getModuleRecipeByItemId, getPlanetSubtype, getPlanetSubtypes, getPositionAt, getResourceTier, getResourceWeight, getStatDefinitions, getStatMappings, getStatMappingsForCapability, getStatMappingsForStat, getStatName, getSystemName, hasEnergy, hasEnergyForDistance$1 as hasEnergyForDistance, hasGatherer, hasLoaders, hasMass, hasSchedule, hasSpace$1 as hasSpace, hasSpaceForMass, hasStorage, hasSystem, hash, hash512, isCraftedItem, isFull$1 as isFull, isFullFromMass, isGatherableLocation, isInvertedAttribute, isModuleItem, isRelatedItem, itemAbbreviations, itemCategory, itemIds, itemOffset, itemTier, itemTypeCode, lerp, makeContainer, makeShip, makeWarehouse, maxTravelDistance, mergeStacks, moduleAccepts, moduleDisplayName, moduleIcon, moduleRecipes, needsRecharge, projectEntity, projectEntityAt, readCommonBase, removeFromStacks, renderDescription, resolveItem, resolveStats, rollTier, rollWithinTier, rotation, schedule, stackKey, stackToCargoItem, stacksEqual, statMappings, tierColors, tierLabels, toLocation, validateSchedule };
|
|
8990
9278
|
//# sourceMappingURL=shipload.m.js.map
|