@shipload/sdk 1.0.0-next.59 → 1.0.0-next.60

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.m.js CHANGED
@@ -440,7 +440,7 @@ var platform = /*#__PURE__*/Object.freeze({
440
440
  Contract: Contract$1
441
441
  });
442
442
 
443
- const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDjYAQlhZGRtb2R1bGUABAllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZgp0YXJnZXRfcmVmCmNhcmdvX3JlZj8IYWRkbmV4dXMAAwpuZXh1c19uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQJYWRkb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUFYmxlbmQAAgJpZAZ1aW50NjQGaW5wdXRzDGNhcmdvX2l0ZW1bXQxidWlsZGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYJYnVpbGRwbG90AAIKYnVpbGRlcl9pZAZ1aW50NjQHcGxvdF9pZAZ1aW50NjQGY2FuY2VsAAMCaWQGdWludDY0CGxhbmVfa2V5BXVpbnQ4BWNvdW50BnVpbnQ2NA5jYW5jZWxfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ9jYW5jZWxsZWRfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwljYW5jZWxqb2IAAgZqb2JfaWQGdWludDY0B3NoaXBfaWQGdWludDY0CmNhcmdvX2l0ZW0ABQdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIJZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcmVmAAQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10JZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcm93AAcCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdC3NlcXVlbmNlX2lkB3VpbnQ2ND8KY2FyZ29fdmlldwAGB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHF1YW50aXR5BnVpbnQzMgJpZAZ1aW50NjQJZW50aXR5X2lkB3VpbnQ2ND8PY2l2aWNjb25maWdfcm93AAELY2l2aWNfb3duZXIEbmFtZQljbGFpbV9yb3cAAQVvd25lcgRuYW1lCGNsYWltam9iAAIGam9iX2lkBnVpbnQ2NAdzaGlwX2lkBnVpbnQ2NAljbGFpbXBsb3QAAwpidWlsZGVyX2lkBnVpbnQ2NA50YXJnZXRfaXRlbV9pZAZ1aW50MTYEc2xvdAxjbHVzdGVyX3Nsb3QMY2xhaW1zdGFydGVyAAEFb3duZXIEbmFtZQljbGVhbnJzdnAAAgVlcG9jaAZ1aW50NjQIbWF4X3Jvd3MGdWludDY0CmNsZWFydGFibGUAAwp0YWJsZV9uYW1lBG5hbWUFc2NvcGUFbmFtZT8IbWF4X3Jvd3MHdWludDY0PwxjbHVzdGVyX2NlbGwAAwJneARpbnQ4Amd5BGludDgGZW50aXR5BnVpbnQ2NAtjbHVzdGVyX3JvdwACBHJvb3QGdWludDY0BWNlbGxzDmNsdXN0ZXJfY2VsbFtdDGNsdXN0ZXJfc2xvdAADA2h1YgZ1aW50NjQCZ3gEaW50OAJneQRpbnQ4BmNvbW1pdAADCW9yYWNsZV9pZARuYW1lBWVwb2NoBnVpbnQ2NAZjb21taXQLY2hlY2tzdW0yNTYKY29tbWl0X3JvdwAEAmlkBnVpbnQ2NAVlcG9jaAZ1aW50NjQJb3JhY2xlX2lkBG5hbWUGY29tbWl0C2NoZWNrc3VtMjU2CWNvbmZpZ2xvZwABBmNvbmZpZwtnYW1lX2NvbmZpZwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8IY291cGxpbmcAAwtjb3VudGVycGFydAplbnRpdHlfcmVmBGhvbGQGdWludDY0BGtpbmQFdWludDgFY3JhZnQABgJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQZ0YXJnZXQHdWludDY0PwRzbG90BnVpbnQ4PwxjcmFmdGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYIY3JhZnRqb2IABgdzaGlwX2lkBnVpbnQ2NAt3b3Jrc2hvcF9pZAZ1aW50NjQEc2xvdAV1aW50OAlyZWNpcGVfaWQGdWludDE2CHF1YW50aXR5BnVpbnQzMgZpbnB1dHMMY2FyZ29faXRlbVtdCWRlbGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQIZGVtb2xpc2gAAQllbnRpdHlfaWQGdWludDY0BmRlcGxveQADAmlkBnVpbnQ2NANyZWYJY2FyZ29fcmVmBHNsb3QNY2x1c3Rlcl9zbG90PwpkZXNjZW50aXR5AAQHaXRlbV9pZAZ1aW50MTYKaHVsbF9zdGF0cwZ1aW50NjQMbW9kdWxlX2l0ZW1zCHVpbnQxNltdDG1vZHVsZV9zdGF0cwh1aW50NjRbXQZlbmFibGUAAQdlbmFibGVkBGJvb2wMZW5lcmd5X3N0YXRzAAIIY2FwYWNpdHkGdWludDMyCHJlY2hhcmdlBnVpbnQzMhRlbnRpdHlfY3VycmVudF9zdGF0ZQACC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzBmVuZXJneQZ1aW50MzIPZW50aXR5X2RlZmF1bHRzAAILd2FyZWhvdXNlX3oGdWludDE2C2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAXBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXRlbV9pZAZ1aW50MTYJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDMyPwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPw5nYXRoZXJlcl9sYW5lcw9nYXRoZXJlcl9sYW5lW10NY3JhZnRlcl9sYW5lcw5jcmFmdGVyX2xhbmVbXQ1idWlsZGVyX2xhbmVzDmJ1aWxkZXJfbGFuZVtdDGxvYWRlcl9sYW5lcw1sb2FkZXJfbGFuZVtdCGxhdW5jaGVyD2xhdW5jaGVyX3N0YXRzPwVsYW5lcwZsYW5lW10FaG9sZHMGaG9sZFtdDWVudGl0eV9sYXlvdXQAAw5lbnRpdHlfaXRlbV9pZAZ1aW50MTYFc2xvdHMKc2xvdF9kZWZbXQ1iYXNlX2h1bGxtYXNzBnVpbnQzMhVlbnRpdHlfbGF5b3V0c19yZXN1bHQAAQhlbnRpdGllcw9lbnRpdHlfbGF5b3V0W10KZW50aXR5X3JlZgACC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAplbnRpdHlfcm93AAwCaWQGdWludDY0BW93bmVyBG5hbWUEa2luZARuYW1lB2l0ZW1faWQGdWludDE2BG5hbWUGc3RyaW5nBXN0YXRzBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kHdWludDMyPwljYXJnb21hc3MGdWludDMyB21vZHVsZXMObW9kdWxlX2VudHJ5W10FbGFuZXMGbGFuZVtdBWhvbGRzBmhvbGRbXQ5lbnRpdHlfc2VxX3JvdwABB25leHRfaWQGdWludDY0DmVudGl0eV9zdW1tYXJ5AAgEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwdpc19pZGxlBGJvb2wOcmVzb2x2ZWRfY291bnQGdWludDMyDXBlbmRpbmdfY291bnQGdWludDMyEGVudGl0eV90YXNrX2luZm8ABAllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUKdGFza19jb3VudAZ1aW50MzIQc2NoZWR1bGVfc3RhcnRlZAp0aW1lX3BvaW50D2VudGl0eWdyb3VwX3JvdwACAmlkBnVpbnQ2NAxwYXJ0aWNpcGFudHMMZW50aXR5X3JlZltdC2VudW1fbWVtYmVyAAIFdmFsdWUFdWludDgEbmFtZQZzdHJpbmcLZW51bV9yZXN1bHQAAQdtZW1iZXJzDWVudW1fbWVtYmVyW10JZXBvY2hfcm93AAQFZXBvY2gGdWludDY0Cm9yYWNsZV9pZHMGbmFtZVtdCXRocmVzaG9sZAV1aW50OARzZWVkC2NoZWNrc3VtMjU2DGZpeGNhcmdvbWFzcwABCWVudGl0eV9pZAZ1aW50NjQQZm9vdHByaW50X3Jlc3VsdAABBWNlbGxzC2dyaWRfY2VsbFtdC2ZvcmNlcmV2ZWFsAAEFZXBvY2gGdWludDY0C2dhbWVfY29uZmlnAAMHdmVyc2lvbgZ1aW50MzIIZGVmYXVsdHMPZW50aXR5X2RlZmF1bHRzBWl0ZW1zCml0ZW1fZGVmW10GZ2F0aGVyAAUJc291cmNlX2lkBnVpbnQ2NA5kZXN0aW5hdGlvbl9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYIcXVhbnRpdHkGdWludDMyBHNsb3QGdWludDg/DWdhdGhlcmVyX2xhbmUABQpzbG90X2luZGV4BXVpbnQ4BXlpZWxkBnVpbnQxNgVkcmFpbgZ1aW50MzIFZGVwdGgGdWludDE2Cm91dHB1dF9wY3QGdWludDE2CmdhdGhlcnBsYW4ABglzb3VyY2VfaWQGdWludDY0DmRlc3RpbmF0aW9uX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIIcmVjaGFyZ2UEYm9vbAVzbG90cwVieXRlcwxnZW5lc2lzZmxlZXQAAQhlbnRpdGllcwxlbnRpdHlfcm93W10KZ2V0Y2x1c3RlcgABBmh1Yl9pZAZ1aW50NjQJZ2V0Y29uZmlnAAAKZ2V0ZGVwb3NpdAACBW93bmVyBG5hbWUIYXNzZXRfaWQGdWludDY0C2dldGRpc3RhbmNlAAQCYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQLZ2V0ZWxpZ2libGUAAgZjb29yZHMLY29vcmRpbmF0ZXMHc3RyYXR1bQZ1aW50MTYJZ2V0ZW50Y2xzAAALZ2V0ZW50aXRpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/CWdldGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQMZ2V0Zm9vdHByaW50AAEHaXRlbV9pZAZ1aW50MTYLZ2V0aXRlbWRhdGEAAApnZXRpdGVtaWRzAAAIZ2V0aXRlbXMAAAtnZXRpdGVtdHlwZQABB2l0ZW1faWQGdWludDE2DGdldGl0ZW10eXBlcwAAB2dldGpvYnMAAQt3b3Jrc2hvcF9pZAZ1aW50NjQLZ2V0a2luZG1ldGEAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0C2dldG1vZHR5cGVzAAAKZ2V0bW9kdWxlcwAACWdldG5lYXJieQACCWVudGl0eV9pZAZ1aW50NjQIcmVjaGFyZ2UEYm9vbApnZXRuZnRiYXNlAAAKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQxnZXRwcm9qc3RhdGUAAgllbnRpdHlfaWQGdWludDY0CnRhc2tfY291bnQGdWludDg/CWdldHJlY2lwZQABDm91dHB1dF9pdGVtX2lkBnVpbnQxNgpnZXRyZWNpcGVzAAILbG93ZXJfYm91bmQGdWludDE2BWxpbWl0BXVpbnQ4CmdldHJlc2NhdHMAAAtnZXRyZXNlcnZlcwACAXgFaW50NjQBeQVpbnQ2NAxnZXRyZXNvdXJjZXMAAApnZXRzZXJ2aWNlAAELd29ya3Nob3BfaWQGdWludDY0CGdldHNsb3RzAAAKZ2V0c3RyYXR1bQADAXgFaW50NjQBeQVpbnQ2NAdzdHJhdHVtBnVpbnQxNgxnZXRzdW1tYXJpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/C2dldHdvcm1ob2xlAAIBeAVpbnQ2NAF5BWludDY0CWdyaWRfY2VsbAACAmd4BGludDgCZ3kEaW50OAxncm91cHRyYW5zaXQABQhlbnRpdGllcwxlbnRpdHlfcmVmW10CYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQLZ3JvdXB0cmF2ZWwABAhlbnRpdGllcwxlbnRpdHlfcmVmW10BeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wEaGFzaAABBXZhbHVlBnN0cmluZwdoYXNoNTEyAAEFdmFsdWUGc3RyaW5nDGhhdWxlcl9zdGF0cwAECGNhcGFjaXR5BXVpbnQ4CmVmZmljaWVuY3kGdWludDE2BWRyYWluBnVpbnQzMhBjYXBhY2l0eV9ieV90aWVyEWhhdWxlcl90aWVyX2NhcFtdD2hhdWxlcl90aWVyX2NhcAACBHRpZXIFdWludDgIY2FwYWNpdHkFdWludDgEaG9sZAAFAmlkBnVpbnQ2NARraW5kBXVpbnQ4C2NvdW50ZXJwYXJ0CmVudGl0eV9yZWYFdW50aWwKdGltZV9wb2ludA1pbmNvbWluZ19tYXNzBnVpbnQzMgtpbXBvcnRjYXJnbwABA3JvdwljYXJnb19yb3cKaW1wb3J0Y2VsbAAEBHJvb3QGdWludDY0Amd4BGludDgCZ3kEaW50OAllbnRpdHlfaWQGdWludDY0DGltcG9ydGVudGl0eQABA3JvdwplbnRpdHlfcm93C2ltcG9ydGdyb3VwAAEDcm93D2VudGl0eWdyb3VwX3JvdwxpbXBvcnRwbGF5ZXIAAQVvd25lcgRuYW1lDWltcG9ydHJlc2VydmUAAgtlcG9jaF9zY29wZQZ1aW50MzIDcm93C3Jlc2VydmVfcm93C2ltcG9ydHN0YXRlAAEDcm93CXN0YXRlX3JvdwhpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OAxpdGVtX2lkX3BhaXIAAgJpZAZ1aW50MTYEbmFtZQZzdHJpbmcPaXRlbV9pZHNfcmVzdWx0AAEFaXRlbXMOaXRlbV9pZF9wYWlyW10PaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdC2pvYl9yZWNlaXB0AAMGam9iX2lkBnVpbnQ2NAlzdGFydHNfYXQKdGltZV9wb2ludAxjb21wbGV0ZXNfYXQKdGltZV9wb2ludAdqb2Jfcm93AAwCaWQGdWludDY0CHdvcmtzaG9wBnVpbnQ2NAZzb2NrZXQFdWludDgFb3duZXIEbmFtZQdzaGlwX2lkBnVpbnQ2NAZjb29yZHMLY29vcmRpbmF0ZXMJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzILZW5lcmd5X3BhaWQGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQtqb2JzX3Jlc3VsdAABBGpvYnMJam9iX3Jvd1tdBGpvaW4AAQdhY2NvdW50BG5hbWUQa2luZF9tZXRhX3Jlc3VsdAACBWtpbmRzD2tpbmRfbWV0YV9yb3dbXQl0ZW1wbGF0ZXMTdGVtcGxhdGVfbWV0YV9yb3dbXQ1raW5kX21ldGFfcm93AAUEa2luZARuYW1lDmNsYXNzaWZpY2F0aW9uBXVpbnQ4EGNhcGFiaWxpdHlfZmxhZ3MFdWludDgHel9jb29yZAZ1aW50MzINZGVmYXVsdF9sYWJlbAZzdHJpbmcEbGFuZQACCGxhbmVfa2V5BXVpbnQ4CHNjaGVkdWxlCHNjaGVkdWxlBmxhdW5jaAADC2xhdW5jaGVyX2lkBnVpbnQ2NApjYXRjaGVyX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10ObGF1bmNoZXJfc3RhdHMAAwtjaGFyZ2VfcmF0ZQZ1aW50MTYIdmVsb2NpdHkGdWludDE2BWRyYWluBnVpbnQxNgRsb2FkAAMCaWQGdWludDY0B2Zyb21faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQtsb2FkZXJfbGFuZQAECnNsb3RfaW5kZXgFdWludDgEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNgpvdXRwdXRfcGN0BnVpbnQxNhBsb2NhdGlvbl9kZXJpdmVkAAIMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwRzaXplBnVpbnQxNg1sb2NhdGlvbl9pbmZvAAMGY29vcmRzC2Nvb3JkaW5hdGVzCWlzX3N5c3RlbQRib29sC2lzX3dvcm1ob2xlBGJvb2wPbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkDnBhY2tlZF9tb2R1bGU/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQzMghtb3ZldGlsZQAFBmh1Yl9pZAZ1aW50NjQHZnJvbV9neARpbnQ4B2Zyb21fZ3kEaW50OAV0b19neARpbnQ4BXRvX2d5BGludDgLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MzIHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8ObmZ0X2NhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIQbmZ0X2l0ZW1fcGF5bG9hZAACBGl0ZW0ObmZ0X2NhcmdvX2l0ZW0IbG9jYXRpb24MY29vcmRpbmF0ZXM/Dm5mdF9zY2hlbWFfZGVmAAILc2NoZW1hX25hbWUEbmFtZQZmaWVsZHMOc2NoZW1hX2ZpZWxkW10QbmZ0X3RlbXBsYXRlX2RlZgADB2l0ZW1faWQGdWludDE2C3NjaGVtYV9uYW1lBG5hbWULdGVtcGxhdGVfaWQFaW50MzINbmZ0Y29uZmlnX3JvdwADB2l0ZW1faWQGdWludDE2C3RlbXBsYXRlX2lkBWludDMyC3NjaGVtYV9uYW1lBG5hbWUJbmZ0aW1ndXJsAAIEaXRlbQpjYXJnb19pdGVtCGxvY2F0aW9uDGNvb3JkaW5hdGVzPw5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQRb3JhY2xlX2NvbmZpZ19yb3cAAQl0aHJlc2hvbGQFdWludDgKb3JhY2xlX3JvdwABAmlkBG5hbWUNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NApwbGFjZWNhcmdvAAMFb3duZXIEbmFtZQdob3N0X2lkBnVpbnQ2NAhhc3NldF9pZAZ1aW50NjQLcGxhY2VlbnRpdHkAAwVvd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NA90YXJnZXRfbmV4dXNfaWQGdWludDY0C3BsYXllcl9pbmZvAAMFb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nCnBsYXllcl9yb3cAAQVvd25lcgRuYW1lD3Byb2plY3RlZF9zdGF0ZQARBW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10IaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8OZ2F0aGVyZXJfbGFuZXMPZ2F0aGVyZXJfbGFuZVtdDWNyYWZ0ZXJfbGFuZXMOY3JhZnRlcl9sYW5lW10NYnVpbGRlcl9sYW5lcw5idWlsZGVyX2xhbmVbXQxsb2FkZXJfbGFuZXMNbG9hZGVyX2xhbmVbXQhsYXVuY2hlcg9sYXVuY2hlcl9zdGF0cz8EdGllcgV1aW50OAhyZWNoYXJnZQABAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQAAgdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIQcmVjaXBlX2l0ZW1faW5mbwACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMg9yZWNpcGVfcmVzcG9uc2UACA5vdXRwdXRfaXRlbV9pZAZ1aW50MTYLb3V0cHV0X21hc3MGdWludDMyBmlucHV0cw5yZWNpcGVfaW5wdXRbXQpzdGF0X3Nsb3RzFHN0YXRfc2xvdF9yZXNwb25zZVtdDWJsZW5kX3dlaWdodHMFYnl0ZXMLb3V0cHV0X2l0ZW0QcmVjaXBlX2l0ZW1faW5mbwtpbnB1dF9pdGVtcxJyZWNpcGVfaXRlbV9pbmZvW10Pc291cmNlX3N1YmNsYXNzB3VpbnQxNj8OcmVjaXBlc19yZXN1bHQAAQdyZWNpcGVzEXJlY2lwZV9yZXNwb25zZVtdCHJlZml0X29wAAICb3AFdWludDgEc2xvdAV1aW50OAxyZWZyc2hlbnRpdHkAAQllbnRpdHlfaWQGdWludDY0DHJlbW92ZW9yYWNsZQABCW9yYWNsZV9pZARuYW1lBnJlbmFtZQACAmlkBnVpbnQ2NARuYW1lBnN0cmluZwtyZXNlcnZlX3JvdwAFAmlkBnVpbnQ2NAhjb29yZF9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYJcmVtYWluaW5nBnVpbnQzMgpsYXN0X2Jsb2NrFGJsb2NrX3RpbWVzdGFtcF90eXBlB3Jlc29sdmUAAgJpZAZ1aW50NjQFY291bnQHdWludDY0Pw9yZXNvbHZlX3Jlc3VsdHMABgllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUOcmVzb2x2ZWRfY291bnQGdWludDMyFG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CnJlc29sdmVhbGwAAQVvd25lcgRuYW1lEnJlc29sdmVhbGxfcmVzdWx0cwACB3NjYW5uZWQGdWludDMyCHJlc29sdmVkBnVpbnQzMgxyZXNvbHZlZWFybHkAAgJpZAZ1aW50NjQFY291bnQHdWludDY0Pw1yZXNvdXJjZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyCGNhdGVnb3J5BXVpbnQ4BHRpZXIFdWludDgOcmVzb3VyY2Vfc3RhdHMAAwVzdGF0MQZ1aW50MTYFc3RhdDIGdWludDE2BXN0YXQzBnVpbnQxNhByZXNvdXJjZXNfcmVzdWx0AAEJcmVzb3VyY2VzD3Jlc291cmNlX2luZm9bXQZyZXZlYWwAAwlvcmFjbGVfaWQEbmFtZQVlcG9jaAZ1aW50NjQGcmV2ZWFsC2NoZWNrc3VtMjU2CnJldmVhbF9yb3cABAJpZAZ1aW50NjQFZXBvY2gGdWludDY0CW9yYWNsZV9pZARuYW1lBnJldmVhbAtjaGVja3N1bTI1NghybW1vZHVsZQADCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4CnRhcmdldF9yZWYKY2FyZ29fcmVmPwhybW5mdGNmZwABB2l0ZW1faWQGdWludDE2DnJvdXRlX3dheXBvaW50AAIBeAVpbnQ2NAF5BWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwtzZXJ2aWNlX3JvdwACBmVudGl0eQZ1aW50NjQHc29ja2V0cxBzZXJ2aWNlX3NvY2tldFtdDnNlcnZpY2Vfc29ja2V0AAEEb3BlbgRib29sCHNldGNpdmljAAEHYWNjb3VudARuYW1lCnNldGNsdXN0ZXIAAQNyb3cLY2x1c3Rlcl9yb3cJc2V0Y29vcmRzAAMJZW50aXR5X2lkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQJc2V0bmV4dGlkAAEHbmV4dF9pZAZ1aW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQlzZXRzb2NrZXQAAwt3b3Jrc2hvcF9pZAZ1aW50NjQEc2xvdAV1aW50OARvcGVuBGJvb2wMc2V0dGhyZXNob2xkAAEJdGhyZXNob2xkBXVpbnQ4C3NldHdyYXBjb3N0AAMJaXRlbV90eXBlBXVpbnQ4BHRpZXIFdWludDgGYW1vdW50BnVpbnQ2NApzZXR3cmFwZmVlAAIHZmVlX3BjdAZ1aW50MTYLZmVlX2FjY291bnQEbmFtZQdzaHV0dGxlAAQHY2FycmllcgZ1aW50NjQHZnJvbV9pZAZ1aW50NjQFdG9faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQhzbG90X2RlZgADBHR5cGUFdWludDgKb3V0cHV0X3BjdAZ1aW50MTYIbWF4X3RpZXIFdWludDgSc3RhdF9zbG90X3Jlc3BvbnNlAAEHc291cmNlcw1zdGF0X3NvdXJjZVtdC3N0YXRfc291cmNlAAILaW5wdXRfaW5kZXgFdWludDgQaW5wdXRfc3RhdF9pbmRleAV1aW50OAlzdGF0ZV9yb3cAAwdlbmFibGVkBGJvb2wFZXBvY2gGdWludDMyBHNlZWQLY2hlY2tzdW0yNTYJc3Rvd2NhcmdvAAUFb3duZXIEbmFtZQllbnRpdHlfaWQGdWludDY0CG5leHVzX2lkBnVpbnQ2NAhjYXJnb19pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0CnN0b3dlbnRpdHkAAwVvd25lcgRuYW1lCWVudGl0eV9pZAZ1aW50NjQIbmV4dXNfaWQGdWludDY0DHN0cmF0dW1fZGF0YQACB3N0cmF0dW0Mc3RyYXR1bV9pbmZvBXN0YXRzDnJlc291cmNlX3N0YXRzDHN0cmF0dW1faW5mbwAFB2l0ZW1faWQGdWludDE2BHNlZWQGdWludDY0CHJpY2huZXNzBnVpbnQxNgdyZXNlcnZlBnVpbnQzMgtyZXNlcnZlX21heAZ1aW50MzIRc3RyYXR1bV9yZW1haW5pbmcAAwdzdHJhdHVtBnVpbnQxNglyZW1haW5pbmcGdWludDMyCmxhc3RfYmxvY2sUYmxvY2tfdGltZXN0YW1wX3R5cGUKc3dhcG1vZHVsZQADCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4Cm1vZHVsZV9yZWYJY2FyZ29fcmVmCHN3YXB0aWxlAAUGaHViX2lkBnVpbnQ2NARhX2d4BGludDgEYV9neQRpbnQ4BGJfZ3gEaW50OARiX2d5BGludDgEdGFzawALBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQljb3VwbGluZ3MKY291cGxpbmdbXQdzdWJqZWN0C2VudGl0eV9yZWY/C2VudGl0eWdyb3VwB3VpbnQ2ND8LZW5lcmd5X2Nvc3QHdWludDMyPw50YXJnZXRfaXRlbV9pZAd1aW50MTY/BXJlZml0CXJlZml0X29wPwp0YXNrX2V2ZW50AAoKZXZlbnRfdHlwZQV1aW50OAVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAp0YXNrX2luZGV4BnVpbnQzMgR0YXNrBHRhc2sJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQKbmV3X2VuZXJneQd1aW50MzI/CGxhbmVfa2V5BXVpbnQ4DHRhc2tfcmVzdWx0cwABCGVudGl0aWVzEmVudGl0eV90YXNrX2luZm9bXRF0ZW1wbGF0ZV9tZXRhX3JvdwADB2l0ZW1faWQGdWludDE2BGtpbmQEbmFtZQ1kaXNwbGF5X2xhYmVsBnN0cmluZwd0cmFuc2l0AAUCaWQGdWludDY0AmF4BWludDY0AmF5BWludDY0AmJ4BWludDY0AmJ5BWludDY0BnRyYXZlbAAEAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAp0cmF2ZWxwbGFuAAMIZW50aXRpZXMMZW50aXR5X3JlZltdCXdheXBvaW50cxByb3V0ZV93YXlwb2ludFtdCHJlY2hhcmdlBGJvb2wJdHlwZXNfcm93AAUCaWQGdWludDY0E2VudGl0eV9zdW1tYXJ5X3R5cGUOZW50aXR5X3N1bW1hcnkQZ2FtZV9jb25maWdfdHlwZQtnYW1lX2NvbmZpZxZzdHJhdHVtX3JlbWFpbmluZ190eXBlEXN0cmF0dW1fcmVtYWluaW5nFW5mdF9pdGVtX3BheWxvYWRfdHlwZRBuZnRfaXRlbV9wYXlsb2FkCHVuZGVwbG95AAIHaG9zdF9pZAZ1aW50NjQJdGFyZ2V0X2lkBnVpbnQ2NAZ1bmxvYWQAAwJpZAZ1aW50NjQFdG9faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQd1cGdyYWRlAAUKYnVpbGRlcl9pZAZ1aW50NjQJdGFyZ2V0X2lkBnVpbnQ2NA50YXJnZXRfaXRlbV9pZAZ1aW50MTYGaW5wdXRzDGNhcmdvX2l0ZW1bXQRzbG90BnVpbnQ4PwR3YXJwAAMCaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAp3YXJwX3N0YXRzAAEFcmFuZ2UGdWludDMyBHdpcGUAAA13b3JtaG9sZV9pbmZvAAMGY29vcmRzC2Nvb3JkaW5hdGVzC2lzX3dvcm1ob2xlBGJvb2wLZGVzdGluYXRpb24LY29vcmRpbmF0ZXMOd3JhcGNvbmZpZ19yb3cAAgdmZWVfcGN0BnVpbnQxNgtmZWVfYWNjb3VudARuYW1lDHdyYXBjb3N0X3JvdwADCWl0ZW1fdHlwZQV1aW50OAR0aWVyBXVpbnQ4BmFtb3VudAZ1aW50NjRwAABQUScqUzIJYWRkbW9kdWxlxwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWRkbW9kdWxlCnN1bW1hcnk6ICdJbnN0YWxsIGEgbW9kdWxlIGludG8gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YWxsIGEgbW9kdWxlIGZyb20gY2FyZ28gaW50byBhIG1vZHVsZSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSB0eXBlIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSB0YXJnZXQgc2xvdCB0eXBlLiBUaGUgbW9kdWxlIGl0ZW0gaXMgcmVtb3ZlZCBmcm9tIGNhcmdvIHVwb24gaW5zdGFsbGF0aW9uLgAAAFh3NVMyCGFkZG5leHVzpwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWRkbmV4dXMKc3VtbWFyeTogJ0FkZCBhIG5leHVzIGxvY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDcmVhdGUgYSBuZXcgbmV4dXMgZW50aXR5IGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcy4gTmV4dXNlcyBhcmUgb3duZWQgYnkgdGhlIGNvbnRyYWN0IGFuZCBzZXJ2ZSBhcyBmaXhlZCBnYXRoZXJpbmcgcG9pbnRzIHdoZXJlIHBsYXllcnMgY2FuIHdyYXAsIHVud3JhcCwgZGVwbG95LCBhbmQgb3RoZXJ3aXNlIGludGVyYWN0IHdpdGggTkZULWJhY2tlZCBhc3NldHMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAFARmUtTMglhZGRvcmFjbGUAAAAAAIA0VTwFYmxlbmT8Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBibGVuZApzdW1tYXJ5OiAnQmxlbmQgY2FyZ28gc3RhY2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDb21iaW5lIG11bHRpcGxlIGNhcmdvIHN0YWNrcyBvZiB0aGUgc2FtZSBpdGVtIHR5cGUgaW50byBhIHNpbmdsZSBzdGFjayB3aXRoIG5ldyBibGVuZGVkIHN0YXRzLiBBbGwgaW5wdXQgc3RhY2tzIG11c3Qgc2hhcmUgdGhlIHNhbWUgaXRlbSBpZC4gVGhlIG91dHB1dCBzdGFjayBoYXMgdGhlIGNvbWJpbmVkIHF1YW50aXR5IG9mIGFsbCBpbnB1dHMuAADINNYUnT4JYnVpbGRwbG90AAAAAABEhaZBBmNhbmNlbMICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNhbmNlbApzdW1tYXJ5OiAnQ2FuY2VsIHNjaGVkdWxlZCB0YXNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FuY2VsIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRhc2tzIGZyb20gdGhlIGVuZCBvZiBhbiBlbnRpdHkncyBzY2hlZHVsZS4gVGFza3MgdGhhdCBhcmUgaW1tdXRhYmxlIGFuZCBpbiBwcm9ncmVzcyBjYW5ub3QgYmUgY2FuY2VsbGVkLgAAOPRFhaZBCWNhbmNlbGpvYgAAAACHPulMRAhjbGFpbWpvYgAAAMg0VulMRAljbGFpbXBsb3QAcFW+JmPpTEQMY2xhaW1zdGFydGVyAAAAqBvfaVRECWNsZWFucnN2cOwCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFucnN2cApzdW1tYXJ5OiAnQ2xlYW4gdXAgcGFzdCBlcG9jaCByZXNlcnZlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRXJhc2UgcmVzZXJ2ZSB0YWJsZSByb3dzIGZyb20gYSBwYXN0IGVwb2NoLiBDYW5ub3QgY2xlYW4gdGhlIGN1cnJlbnQgb3IgZnV0dXJlIGVwb2Nocy4gVGhlIG1heF9yb3dzIHBhcmFtZXRlciBjYXBzIHRoZSBudW1iZXIgb2Ygcm93cyBlcmFzZWQgcGVyIGNhbGwgdG8gbGltaXQgQ1BVIHVzYWdlLgCAisfka1RECmNsZWFydGFibGW+AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhcnRhYmxlCnN1bW1hcnk6ICdERUJVRzogY2xlYXJ0YWJsZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAZCclRQZjb21taXTsAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb21taXQKc3VtbWFyeTogJ1NldCBjb21taXQgdmFsdWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNldCB0aGUgaW5pdGlhbCBjb21taXQgdmFsdWUgZHVyaW5nIGdhbWUgaW5pdGlhbGl6YXRpb24uAABgNDK3JkUJY29uZmlnbG9n3QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29uZmlnbG9nCnN1bW1hcnk6ICdMb2cgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBsb2dzIHRoZSBjdXJyZW50IGdhbWUgY29uZmlndXJhdGlvbi4gQ2FsbGVkIGlubGluZSBhZnRlciBpbml0aWFsaXphdGlvbiB0byBicm9hZGNhc3QgY29uZmlnIHZpYSBhY3Rpb24gdHJhY2VzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAAIC8zEUFY3JhZnTIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjcmFmdApzdW1tYXJ5OiAnQ3JhZnQgaXRlbXMgZnJvbSBhIHJlY2lwZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmb3JtIGNhcmdvIGl0ZW1zIGludG8gYSBuZXcgaXRlbSB1c2luZyBhIHJlY2lwZS4gVGhlIGVudGl0eSBtdXN0IGhhdmUgYSBjcmFmdGVyIG1vZHVsZSBpbnN0YWxsZWQuIENvbnN1bWVzIGVuZXJneSBhbmQgc2NoZWR1bGVzIGEgY3JhZnRpbmcgdGFzayB3aXRoIGR1cmF0aW9uIGJhc2VkIG9uIHRvdGFsIGlucHV0IG1hc3MgYW5kIGNyYWZ0ZXIgc3BlZWQuIElucHV0IHF1YW50aXRpZXMgbXVzdCBleGFjdGx5IG1hdGNoIHRoZSByZWNpcGUgcmVxdWlyZW1lbnRzLgAAAIe+vMxFCGNyYWZ0am9iAAAA8NnlqaJKCWRlbGVudGl0eQAAAAANu0ilSghkZW1vbGlzaPEDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlbW9saXNoCnN1bW1hcnk6ICdEZW1vbGlzaCBhIHN0YXRpb25hcnkgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpEZWNvbW1pc3Npb24gYW4gZW50aXR5LCBlcmFzaW5nIGl0IGZyb20gdGhlIGdhbWUuIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlLCBoYXZlIGVtcHR5IGNhcmdvLCBhbmQgaGF2ZSBubyBpbnN0YWxsZWQgbW9kdWxlcyAocmVtb3ZlIGVhY2ggdmlhIHJtbW9kdWxlIGZpcnN0KS4gU2NoZWR1bGVzIGEgZGVtb2xpc2ggdGFzayB0aGF0IGVyYXNlcyB0aGUgZW50aXR5IG9uIHJlc29sdXRpb24uIE9ubHkgdmFsaWQgZm9yIGVudGl0aWVzIHRoYXQgY2Fubm90IG1vdmU7IHVzZSB1bmRlcGxveSBvciB3cmFwZW50aXR5IGZvciB0aGUgcmVzdC4AAAAAeBqrSgZkZXBsb3nsAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXBsb3kKc3VtbWFyeTogJ0RlcGxveSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClVucGFjayBhIHBhY2tlZCBlbnRpdHkgaXRlbSAocGFja2VkIHNoaXAgb3IgcGFja2VkIGNvbnRhaW5lcikgZnJvbSBjYXJnbywgc2NoZWR1bGluZyBhIGRlcGxveSB0YXNrIHRoYXQgY3JlYXRlcyB0aGUgbmV3IGVudGl0eSBhdCB0aGUgZGVwbG95aW5nIGVudGl0eSdzIGxvY2F0aW9uIHVwb24gcmVzb2x1dGlvbi4AgM8uT4WwSgpkZXNjZW50aXR5yQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVzY2VudGl0eQpzdW1tYXJ5OiAnRGVzY3JpYmUgYSBwYWNrZWQgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIHN0cmluZyBmb3IgYSBwYWNrZWQgZW50aXR5LCBkZXJpdmVkIGZyb20gdGhlIGVudGl0eSBpdGVtIGlkLCBodWxsIHN0YXRzLCBhbmQgdGhlIGxpc3Qgb2YgaW5zdGFsbGVkIG1vZHVsZSBpdGVtIGlkcyBhbmQgc3RhdHMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgYW5kIE5GVCByZW5kZXJlcnMgdG8gZGlzcGxheSBwYWNrZWQgZW50aXRpZXMuAAAAAKh4zFQGZW5hYmxl3QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZW5hYmxlCnN1bW1hcnk6ICdTZXQgZW5hYmxlZCBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhpcyBnYW1lIG9mIFNoaXBsb2FkLoCxkZRdg7pbDGZpeGNhcmdvbWFzc5ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGZpeGNhcmdvbWFzcwpzdW1tYXJ5OiAnREVCVUc6IHJlY29tcHV0ZSBlbnRpdHkgY2FyZ28gbWFzcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVjb21wdXRlIGFuZCByZXdyaXRlIGFuIGVudGl0eSdzIGNhcmdvIG1hc3MgZnJvbSBpdHMgY3VycmVudCBjYXJnby4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LiBBdmFpbGFibGUgZm9yIHJlcGFpcmluZyBkcmlmdCBiZXR3ZWVuIGNhY2hlZCBjYXJnbyBtYXNzIGFuZCB0aGUgdHJ1ZSBtYXNzIGRlcml2ZWQgZnJvbSBjYXJnbyByb3dzLgCiUVtdhS5dC2ZvcmNlcmV2ZWFsvgQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZm9yY2VyZXZlYWwKc3VtbWFyeTogJ0RFQlVHOiBmb3JjZS1maW5hbGl6ZSBhbiBlcG9jaCBmcm9tIGV4aXN0aW5nIHJldmVhbHMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkZpbmFsaXplIGEgc3R1Y2sgZXBvY2ggYnkgY29tcHV0aW5nIGl0cyBzZWVkIGZyb20gdGhlIHJldmVhbHMgYWxyZWFkeSBzdWJtaXR0ZWQsIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGNvbmZpZ3VyZWQgdGhyZXNob2xkLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuIFRoZSBzZWVkIGlzIGRlcml2ZWQgc29sZWx5IGZyb20gdGhlIHByZS1pbWFnZS1sb2NrZWQgcmV2ZWFscyBhbHJlYWR5IG9uIGNoYWluOyBubyBhZG1pbi1zdXBwbGllZCBlbnRyb3B5IGlzIGludHJvZHVjZWQuIFVzZWQgdG8gdW5ibG9jayBlcG9jaCBwcm9ncmVzc2lvbiB3aGVuIHRoZSB0aHJlc2hvbGQgY2Fubm90IG90aGVyd2lzZSBiZSBtZXQuAAAAAFzVsmEGZ2F0aGVylwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2F0aGVyCnN1bW1hcnk6ICdHYXRoZXIgcmVzb3VyY2VzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpHYXRoZXIgcmVzb3VyY2VzIGF0IHRoZSBzaGlwJ3MgY3VycmVudCBsb2NhdGlvbi4gT25seSB3b3JrcyBhdCBnYXRoZXJhYmxlIGxvY2F0aW9uIHR5cGVzLiBTY2hlZHVsZXMgYSBnYXRoZXIgdGFzayB0aGF0IGNvbnN1bWVzIGVuZXJneSBhbmQgeWllbGRzIGNhcmdvIGJhc2VkIG9uIHRoZSBzaGlwJ3MgZ2F0aGVyZXIgc3RhdHMgYW5kIHRoZSBsb2NhdGlvbidzIHJlc291cmNlIGNvbXBvc2l0aW9uLgDANLFe1bJhCmdhdGhlcnBsYW4AkJWKCzuspmIMZ2VuZXNpc2ZsZWV0qQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2VuZXNpc2ZsZWV0CnN1bW1hcnk6ICdNaW50IHRoZSBvbmUtdGltZSBnZW5lc2lzIGZsZWV0JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbXBsYWNlIHRoZSBvbmUtdGltZSBnZW5lc2lzIGZsZWV0OiBhIGNhbGxlci1zdXBwbGllZCBzZXQgb2YgZW50aXRpZXMgKHNoaXBzLCBzdHJ1Y3R1cmVzLCBhbmQgY29udGFpbmVycykgd3JpdHRlbiB0byB0aGUgd29ybGQgYXMtaXMuIFZhbGlkIG9ubHkgZHVyaW5nIHRoZSBwcmUtZ2VuZXNpcyB3aW5kb3csIGJlZm9yZSBlcG9jaCAxIGlzIGZpbmFsaXplZC4gVGhlIHN1cHBsaWVkIGVudGl0eSBpZHMgYXJlIGhvbm9yZWQgYW5kIHRoZSBpZCBzZXF1ZW5jZSBpcyBhZHZhbmNlZCBwYXN0IHRoZW07IGlkIDAgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBHZW5lc2lzIE5leHVzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAMBVGeuIsmIKZ2V0Y2x1c3RlcgAAAGBuTYqyYglnZXRjb25maWfKAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRjb25maWcKc3VtbWFyeTogJ0dldCBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgdGhlIGdhbWUgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgZGVmYXVsdCBlbnRpdHkgc3RhdHMgZm9yIHdhcmVob3VzZXMgYW5kIGNvbnRhaW5lcnMsIGFuZCB0aGUgZnVsbCBpdGVtIGRlZmluaXRpb25zIHRhYmxlLgBAdphWlbJiCmdldGRlcG9zaXQAABSaJmOXsmILZ2V0ZGlzdGFuY2UAAFQ8jrmosmILZ2V0ZWxpZ2libGXIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbGlnaWJsZQpzdW1tYXJ5OiAnR2V0IGVsaWdpYmxlIHJlc291cmNlIGl0ZW0gSURzIGF0IGEgbG9jYXRpb24gYW5kIHN0cmF0dW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBsaXN0IG9mIHJlc291cmNlIGl0ZW0gSURzIGVsaWdpYmxlIHRvIGJlIGdhdGhlcmVkIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcyBhbmQgc3RyYXR1bSBkZXB0aC4gSXRlbXMgYXJlIGdhdGVkIGJ5IGJvdGggdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgcHJvZmlsZSBhbmQgdGhlIGRlcHRoIHRocmVzaG9sZCBmb3IgZWFjaCB0aWVyLgAAwBHlqbJiCWdldGVudGNsc4wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGNscwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBjbGFzcyBlbnVtIHZhbHVlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgc2V0IG9mIGVudGl0eSBjbGFzcyBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChPcmJpdGFsVmVzc2VsLCBQbGFuZXRhcnlTdHJ1Y3R1cmUpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSBlbnRpdHkgY2xhc3MgaWRlbnRpZmllcnMuALBy2eWpsmILZ2V0ZW50aXRpZXOkAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRpdGllcwpzdW1tYXJ5OiAnR2V0IGFsbCBlbnRpdGllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgZnVsbCBlbnRpdHkgaW5mbyBmb3IgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4AAPDZ5amyYglnZXRlbnRpdHmiAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRpdHkKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYW4gZW50aXR5IGluY2x1ZGluZyBpZGVudGl0eSwgY2FyZ28sIHNjaGVkdWxlIHN0YXRlLCBhbmQgdHlwZS1zcGVjaWZpYyBmaWVsZHMukKe7NVO6smIMZ2V0Zm9vdHByaW50AABMNkmq7LJiC2dldGl0ZW1kYXRhqAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbWRhdGEKc3VtbWFyeTogJ0dldCBmdWxsIGl0ZW0gY2F0YWxvZycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGNvbXBsZXRlIGl0ZW0gY2F0YWxvZyBhcyB0aGUgY29udHJhY3Qgc2VlcyBpdCwgaW5jbHVkaW5nIHR5cGUsIHN1YnR5cGUsIHRpZXIsIG1hc3MsIGFuZCBvdGhlciBzdGF0aWMgbWV0YWRhdGEuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgYW5kIGNsaWVudHMgdG8gbWlycm9yIHRoZSBjb250cmFjdCdzIGl0ZW0gZGVmaW5pdGlvbnMuAABOTqrssmIKZ2V0aXRlbWlkc4YDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1pZHMKc3VtbWFyeTogJ0dldCBpdGVtIGlkIHRvIG5hbWUgbWFwcGluZ3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIG1hcHBpbmcgb2YgaXRlbSBpZCBjb25zdGFudHMgdG8gdGhlaXIgY2Fub25pY2FsIHN0cmluZyBuYW1lcy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byByZXNvbHZlIG51bWVyaWMgaXRlbSBpZHMgdG8gaHVtYW4tcmVhZGFibGUgaWRlbnRpZmllcnMuAAAAWKrssmIIZ2V0aXRlbXOaAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtcwpzdW1tYXJ5OiAnR2V0IGFsbCBhdmFpbGFibGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgYSBsaXN0IG9mIGFsbCBpdGVtcyBpbiB0aGUgZ2FtZSBpbmNsdWRpbmcgdGhlaXIgaWQsIGJhc2UgcHJpY2UsIGFuZCBtYXNzLgBU9Vmq7LJiC2dldGl0ZW10eXBlAIBV9Vmq7LJiDGdldGl0ZW10eXBlc4gDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW10eXBlcwpzdW1tYXJ5OiAnR2V0IGl0ZW0gdHlwZSBlbnVtIHZhbHVlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgc2V0IG9mIGl0ZW0gdHlwZSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChyZXNvdXJjZSwgY29tcG9uZW50LCBtb2R1bGUsIGVudGl0eSkuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIGl0ZW0gdHlwZSBpZGVudGlmaWVycy4AAAAAH/qyYgdnZXRqb2JzAABMVjJNB7NiC2dldGtpbmRtZXRh+AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0a2luZG1ldGEKc3VtbWFyeTogJ0dldCBlbnRpdHkga2luZCBtZXRhZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGVudGl0eSBraW5kIHJlZ2lzdHJ5IGFuZCB0ZW1wbGF0ZSByZWdpc3RyeSwgaW5jbHVkaW5nIGVhY2gga2luZCdzIGNsYXNzaWZpY2F0aW9uLCBjYXBhYmlsaXR5IGZsYWdzLCBaLWNvb3JkaW5hdGUsIGFuZCBkZWZhdWx0IGxhYmVsLCBwbHVzIHRoZSBtYXBwaW5nIG9mIGVudGl0eSBpdGVtIGlkcyB0byBraW5kcyB3aXRoIGRpc3BsYXkgbGFiZWxzLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGludGVycHJldCBlbnRpdHkga2luZHMgYW5kIGNhcGFiaWxpdGllcy4AJnXZIBqzYgtnZXRsb2NhdGlvbuICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGxvY2F0aW9uCnN1bW1hcnk6ICdHZXQgbG9jYXRpb24gaW5mb3JtYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBsb2NhdGlvbiBpbmNsdWRpbmcgd2hldGhlciBhIHN5c3RlbSBleGlzdHMsIGFuZCBmb3IgZWFjaCBpdGVtOiBwcmljZSwgc3VwcGx5LCByYXJpdHkgbXVsdGlwbGllciwgYW5kIGxvY2F0aW9uIG11bHRpcGxpZXIuAIDJJiEas2IKZ2V0bG9jZGF0Yf4CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGxvY2RhdGEKc3VtbWFyeTogJ0dldCBkZXJpdmVkIGxvY2F0aW9uIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgZGVyaXZlZCBsb2NhdGlvbiBkYXRhIGluY2x1ZGluZyBzdGF0aWMgcHJvcGVydGllcyAodHlwZSwgZGlmZmljdWx0eSwgc2VlZHMpIGZyb20gdGhlIGdhbWUgc2VlZCBhbmQgZXBvY2gtc3BlY2lmaWMgcHJvcGVydGllcyAoYWN0aXZlLCBzZWVkcykgZnJvbSB0aGUgY3VycmVudCBlcG9jaCBzZWVkLgCwqj4nKrNiC2dldG1vZHR5cGVz1gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bW9kdHlwZXMKc3VtbWFyeTogJ0dldCBtb2R1bGUgdHlwZSBlbnVtIHZhbHVlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgc2V0IG9mIG1vZHVsZSB0eXBlIGVudW0gdmFsdWVzIGFuZCB0aGVpciBzdHJpbmcgbmFtZXMgKGFueSwgZW5naW5lLCBnZW5lcmF0b3IsIGdhdGhlcmVyLCBsb2FkZXIsIHdhcnAsIGNyYWZ0ZXIsIGxhdW5jaGVyLCBzdG9yYWdlLCBoYXVsZXIpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSBtb2R1bGUgc3VidHlwZSBpZGVudGlmaWVycyBhbmQgc2xvdCBjb21wYXRpYmlsaXR5LgAAVlEnKrNiCmdldG1vZHVsZXOAAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRtb2R1bGVzCnN1bW1hcnk6ICdHZXQgYWxsIG1vZHVsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHN1YnNldCBvZiBpdGVtcyBjbGFzc2lmaWVkIGFzIG1vZHVsZXMsIGluY2x1ZGluZyBlYWNoIG1vZHVsZSdzIGlkLCBtYXNzLCBzdWJ0eXBlLCBhbmQgdGllci4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBlbnVtZXJhdGUgaW5zdGFsbGFibGUgZXF1aXBtZW50LgAA8OcaNbNiCWdldG5lYXJiecoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG5lYXJieQpzdW1tYXJ5OiAnR2V0IG5lYXJieSByZWFjaGFibGUgc3lzdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBuZWFyYnkgc3lzdGVtcyByZWFjaGFibGUgYnkgYW4gZW50aXR5IGZyb20gaXRzIHByb2plY3RlZCBsb2NhdGlvbi4gUmV0dXJucyBjdXJyZW50IHN0YXRlICh3aXRoIGNvbXBsZXRlZCB0YXNrcyByZXNvbHZlZCksIHByb2plY3RlZCBzdGF0ZSAoYWZ0ZXIgYWxsIHNjaGVkdWxlZCB0YXNrcyksIGFuZCBhIGxpc3Qgb2YgcmVhY2hhYmxlIHN5c3RlbXMgd2l0aCBkaXN0YW5jZSwgZW5lcmd5IGNvc3QsIGFuZCBmbGlnaHQgdGltZS4AgMLm5DWzYgpnZXRuZnRiYXNlAAAAXdPlNbNiCmdldG5mdGluZm/wAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRuZnRpbmZvCnN1bW1hcnk6ICdHZXQgTkZUIHNjaGVtYSBhbmQgdGVtcGxhdGUgY29uZmlndXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgc2V0IG9mIEF0b21pY0Fzc2V0cyBzY2hlbWFzIGFuZCB0ZW1wbGF0ZXMgdGhlIGdhbWUgY29udHJhY3QgZXhwZWN0cywgcGx1cyB0aGUgY3VycmVudCBgaXRlbV9pZCDihpIgKHRlbXBsYXRlX2lkLCBzY2hlbWFfbmFtZSlgIG1hcHBpbmcgc3RvcmVkIGluIHRoZSBgbmZ0Y29uZmlnYCB0YWJsZS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBzeW5jIGF0b21pY2Fzc2V0cyBzdGF0ZSB3aXRoIHRoZSBjb250cmFjdC4AALjKm1izYglnZXRwbGF5ZXL9Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRwbGF5ZXIKc3VtbWFyeTogJ0dldCBwbGF5ZXIgaW5mb3JtYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBwbGF5ZXIgaW5jbHVkaW5nIGJhbGFuY2UsIGRlYnQsIG5ldHdvcnRoLCBlbnRpdHkgY291bnRzLCBhbmQgcHJpY2luZyBmb3IgbmV4dCBwdXJjaGFzZXMuIFJldHVybnMgaXNfcGxheWVyPWZhbHNlIGlmIHRoZSBhY2NvdW50IGhhcyBub3Qgam9pbmVkIHRoZSBnYW1lLqCyyfjRW7NiDGdldHByb2pzdGF0ZcsDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHByb2pzdGF0ZQpzdW1tYXJ5OiAnR2V0IHByb2plY3RlZCBlbnRpdHkgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBwcm9qZWN0ZWQgc3RhdGUgb2YgYW4gZW50aXR5IGFmdGVyIGFwcGx5aW5nIHRoZSBuZXh0IHRhc2tfY291bnQgc2NoZWR1bGVkIHRhc2tzIChvciBhbGwgdGFza3MgaWYgdGFza19jb3VudCBpcyBvbWl0dGVkKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBwcmV2aWV3IHRoZSByZXN1bHQgb2YgYW4gZW50aXR5J3Mgc2NoZWR1bGUgd2l0aG91dCByZXNvbHZpbmcgb24tY2hhaW4uAABQ1SF1s2IJZ2V0cmVjaXBlpgMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVjaXBlCnN1bW1hcnk6ICdHZXQgYSBzaW5nbGUgY3JhZnRpbmcgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgcmVjaXBlIHdob3NlIG91dHB1dCBtYXRjaGVzIHRoZSBnaXZlbiBpdGVtIGlkLCBpbmNsdWRpbmcgaXRzIGlucHV0cywgYmxlbmQgd2VpZ2h0cywgc3RhdCBzbG90cywgYW5kIHJlc29sdmVkIGl0ZW0gbWFzcyBpbmZvLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRpc3BsYXkgY3JhZnRpbmcgcmVxdWlyZW1lbnRzLgAAVtUhdbNiCmdldHJlY2lwZXOsAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZWNpcGVzCnN1bW1hcnk6ICdMaXN0IGNyYWZ0aW5nIHJlY2lwZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgcGFnaW5hdGVkIGxpc3Qgb2YgY3JhZnRpbmcgcmVjaXBlcyBzdGFydGluZyBhdCB0aGUgcHJvdmlkZWQgbG93ZXIgYm91bmQgb3V0cHV0IGl0ZW0gaWQsIHVwIHRvIHRoZSBzcGVjaWZpZWQgbGltaXQuIEVhY2ggZW50cnkgaW5jbHVkZXMgaW5wdXRzLCBibGVuZCB3ZWlnaHRzLCBzdGF0IHNsb3RzLCBhbmQgcmVzb2x2ZWQgaXRlbSBtYXNzIGluZm8uAADOBmF1s2IKZ2V0cmVzY2F0c54DLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc2NhdHMKc3VtbWFyeTogJ0dldCByZXNvdXJjZSBjYXRlZ29yeSBlbnVtIHZhbHVlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgc2V0IG9mIHJlc291cmNlIGNhdGVnb3J5IGVudW0gdmFsdWVzIGFuZCB0aGVpciBzdHJpbmcgbmFtZXMgKG9yZSwgZ2FzLCByZWdvbGl0aCwgYmlvbWFzcywgY3J5c3RhbCkuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIHJlc291cmNlIHN1YnR5cGUgaWRlbnRpZmllcnMuALDaV2F1s2ILZ2V0cmVzZXJ2ZXP8Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZXNlcnZlcwpzdW1tYXJ5OiAnR2V0IGN1cnJlbnQgcmVzZXJ2ZSBtb2RpZmljYXRpb25zIGF0IGEgbG9jYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgdGhlIGNoYWluJ3MgbW9kaWZpY2F0aW9ucyB0byBkZXJpdmVkIHJlc2VydmVzIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlIGZvciB0aGUgY3VycmVudCBlcG9jaCBhcyBhIGxpc3Qgb2Yge3N0cmF0dW0sIHJlbWFpbmluZ30gcGFpcnMuIFN0cmF0YSBub3QgcHJlc2VudCBpbiB0aGUgcmVzcG9uc2UgdXNlIHRoZWlyIGRlcml2ZWQgaW5pdGlhbCByZXNlcnZlLiBDb21wb3NlIHdpdGggU0RLIGRlcml2YXRpb24gdG8gZ2V0IHRoZSBmdWxsIHBlci1sb2NhdGlvbiBzdHJhdGEgdmlldy6AFbqaYnWzYgxnZXRyZXNvdXJjZXOHAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZXNvdXJjZXMKc3VtbWFyeTogJ0dldCBhbGwgcmVzb3VyY2UgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyByZXNvdXJjZXMsIGluY2x1ZGluZyBlYWNoIHJlc291cmNlJ3MgaWQsIG1hc3MsIHN1YnR5cGUsIGFuZCB0aWVyLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGVudW1lcmF0ZSBnYXRoZXJhYmxlIG1hdGVyaWFscy4AgEJuX4WzYgpnZXRzZXJ2aWNlAAAAADjTiLNiCGdldHNsb3RzuwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c2xvdHMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc2xvdCBsYXlvdXRzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgbW9kdWxlIHNsb3QgbGF5b3V0IGZvciBldmVyeSBlbnRpdHkgaXRlbSB0eXBlLCBsaXN0aW5nIHRoZSBvcmRlcmVkIHNsb3QgdHlwZXMgYXZhaWxhYmxlIGZvciBtb2R1bGUgaW5zdGFsbGF0aW9uLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRldGVybWluZSB3aGljaCBtb2R1bGUgdHlwZXMgYXJlIGNvbXBhdGlibGUgd2l0aCBhIGdpdmVuIGVudGl0eSBodWxsLgCA1NncjLNiCmdldHN0cmF0dW3SAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdHJhdHVtCnN1bW1hcnk6ICdHZXQgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHJlc291cmNlIHN0cmF0dW0gZGF0YSBmb3IgYSBzcGVjaWZpYyBkZXB0aCBsYXllciBhdCBhIGNvb3JkaW5hdGUsIGluY2x1ZGluZyB0aGUgc3RyYXR1bSBzZWVkIGluZm8gYW5kIGRlcml2ZWQgcmVzb3VyY2Ugc3RhdHMugJW7RkqNs2IMZ2V0c3VtbWFyaWVz6AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3VtbWFyaWVzCnN1bW1hcnk6ICdHZXQgZW50aXR5IHN1bW1hcmllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgbGlnaHR3ZWlnaHQgc3VtbWFyaWVzIG9mIGFsbCBlbnRpdGllcyBvd25lZCBieSBhIHBsYXllciBpbmNsdWRpbmcgdHlwZSwgaWQsIG93bmVyLCBuYW1lLCBsb2NhdGlvbiwgYW5kIGlkbGUgc3RhdHVzLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4AVKRNXsqzYgtnZXR3b3JtaG9sZQCQHZ7m5qrpZQxncm91cHRyYW5zaXQAAKLa5uaq6WULZ3JvdXB0cmF2ZWyaBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBncm91cHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBtdWx0aXBsZSBlbnRpdGllcyB0b2dldGhlcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgZ3JvdXAgdHJhdmVsIGZvciBtdWx0aXBsZSBlbnRpdGllcyB0byBhIGRlc3RpbmF0aW9uLiBBbGwgZW50aXRpZXMgbXVzdCBiZSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBhbmQgb3duZWQgYnkgdGhlIGNhbGxlci4gQXQgbGVhc3Qgb25lIGVudGl0eSB3aXRoIGVuZ2luZXMgaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aHJ1c3QuIEZsaWdodCBkdXJhdGlvbiBpcyBjYWxjdWxhdGVkIGZyb20gY29tYmluZWQgdGhydXN0IGFuZCB0b3RhbCBtYXNzIG9mIGFsbCBlbnRpdGllcy4gQ3JlYXRlcyBhbiBlbnRpdHlncm91cCBmb3IgYXRvbWljIHJlc29sdXRpb24gYW5kIGNhbmNlbGxhdGlvbi4AAAAAANCwaQRoYXNo+AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaApzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTI1NiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGEyNTYgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgAAAECE0rBpB2hhc2g1MTL7AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoNTEyCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhNTEyIGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTUxMiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuACi7BuVLq3QLaW1wb3J0Y2FyZ28AAECMCuVLq3QKaW1wb3J0Y2VsbADgs8tT5UurdAxpbXBvcnRlbnRpdHkAAKqml+VLq3QLaW1wb3J0Z3JvdXAAcJU3seZLq3QMaW1wb3J0cGxheWVyALqvwurmS6t0DWltcG9ydHJlc2VydmUAAFQ2GedLq3QLaW1wb3J0c3RhdGUAAAAAAAAwHX0Eam9pbsQBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAAAAAA0NLWJBmxhdW5jaAAAAAAAAJAMjQRsb2FkAAAAACq6rDaVCG1vdmV0aWxlAAAAiFcz6fKaCW5mdGltZ3VybLIDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5mdGltZ3VybApzdW1tYXJ5OiAnR2V0IE5GVCBpbWFnZSBVUkwgZm9yIGEgY2FyZ28gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGltYWdlIFVSTCB0aGUgY29udHJhY3QgZW1pdHMgZm9yIGEgZ2l2ZW4gY2FyZ28gaXRlbSwgb3B0aW9uYWxseSBzY29wZWQgdG8gYSBsb2NhdGlvbi4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBmZXRjaCB0aGUgY2Fub25pY2FsIGFydHdvcmsgZm9yIGFuIGl0ZW0gb3IgcGFja2VkIGVudGl0eS4AAAAA+OUynQZub3RpZnmKAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBub3RpZnkKc3VtbWFyeTogJ1Rhc2sgbGlmZWN5Y2xlIG5vdGlmaWNhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIHRoYXQgbm90aWZpZXMgZW50aXR5IG93bmVycyBvZiB0YXNrIGxpZmVjeWNsZSBldmVudHMgKHJlc29sdmVkLCBjYW5jZWxsZWQpLiBDYWxsZWQgaW5saW5lIHdoZW4gdGFza3MgY2hhbmdlIHN0YXRlLiBVc2VzIHJlcXVpcmVfcmVjaXBpZW50IHRvIGVuYWJsZSBvZmYtY2hhaW4gbW9uaXRvcmluZyB2aWEgYWN0aW9uIHRyYWNlcy4AAGXXIIVMrApwbGFjZWNhcmdvyQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcGxhY2VjYXJnbwpzdW1tYXJ5OiAnUmVzdG9yZSBORlQgY2FyZ28gb250byBhIGhvc3QgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSB0aGUgcGxhdGZvcm0gY29udHJhY3Qgb25seS4gUmVzdG9yZXMgdGhlIGNhcmdvIHJlY29yZGVkIGluIGFuIHVud3JhcHBlZCBORlQgb250byBhIGhvc3QgZW50aXR5LiBWYWxpZGF0ZXMgaG9zdCBvd25lcnNoaXAsIGxvYWRlcnMsIGFuZCByZW1haW5pbmcgY2FwYWNpdHksIGRlc2VyaWFsaXplcyB0aGUgTkZUJ3MgaXRlbSBkYXRhLCBhbmQgYXBwZW5kcyBhbiB1bndyYXAgdGFzayB0byBkZWxpdmVyIHRoZSBjYXJnbyB0byB0aGUgaG9zdC4gVGhlIHBsYXRmb3JtIGNvbnRyYWN0IGNyZWRpdHMgdGhlIGRlcG9zaXQgcmVmdW5kIGFuZCBidXJucyB0aGUgYXNzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AfHZ5KoVMrAtwbGFjZWVudGl0ecAELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHBsYWNlZW50aXR5CnN1bW1hcnk6ICdNYXRlcmlhbGl6ZSBhIHBhY2tlZC1lbnRpdHkgTkZUIGFzIGEgbGl2ZSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBFbXBsYWNlcyBhIGxpdmUgb3JiaXRhbCB2ZXNzZWwgKHNoaXAgb3IgY29udGFpbmVyKSBmcm9tIGl0cyBwYWNrZWQtZW50aXR5IE5GVCBkYXRhIGF0IHRoZSByZWNvcmRlZCB3cmFwIG9yaWdpbiwgdGhlbiBxdWV1ZXMgdHJhdmVsIGFuZCByZWNoYXJnZSB0YXNrcyB0byBkZWxpdmVyIGl0IHRvIHRoZSB0YXJnZXQgbmV4dXMgYXQgZnVsbCBlbmVyZ3kuIFRoZSBwbGF0Zm9ybSBjb250cmFjdCBjcmVkaXRzIHRoZSBkZXBvc2l0IHJlZnVuZCBhbmQgYnVybnMgdGhlIGFzc2V0LiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAil3TkLoIcmVjaGFyZ2XNAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZWNoYXJnZQpzdW1tYXJ5OiAnUmVjaGFyZ2Ugc2hpcCBlbmVyZ3knCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNjaGVkdWxlIGEgcmVjaGFyZ2UgdGFzayBmb3IgYW4gZW50aXR5IHRvIHJlc3RvcmUgZW5lcmd5IHRvIGZ1bGwgY2FwYWNpdHkuIFRoZSByZWNoYXJnZSBkdXJhdGlvbiBkZXBlbmRzIG9uIGN1cnJlbnQgZW5lcmd5IGxldmVsIGFuZCByZWNoYXJnZSByYXRlLuCzy1M1fJe6DHJlZnJzaGVudGl0ebgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlZnJzaGVudGl0eQpzdW1tYXJ5OiAnUmVmcmVzaCBkZXJpdmVkIGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVjb21wdXRlIGRlcml2ZWQgZmllbGRzIG9uIGFuIGVudGl0eSBmcm9tIGl0cyBjdXJyZW50IGNhcmdvIGFuZCBtb2R1bGVzLCByZWZyZXNoaW5nIGNhcGFiaWxpdHkgc3RhdHMgYW5kIGNhcmdvIG1hc3MuIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBVc2VkIHRvIHJlY29uY2lsZSBkZXJpdmVkIHN0YXRlIGFmdGVyIGRhdGEgbWlncmF0aW9ucyBvciBjb250cmFjdCB1cGdyYWRlcy6gIjKXqk2lugxyZW1vdmVvcmFjbGUAAAAAAChpproGcmVuYW1lAAAAAEDtSLG6B3Jlc29sdmXQAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuAECMRu1IsboKcmVzb2x2ZWFsbADg4zVK7UixugxyZXNvbHZlZWFybHkAAAAAAESjtroGcmV2ZWFsAAAAACrqRKW8CHJtbW9kdWxlvAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcm1tb2R1bGUKc3VtbWFyeTogJ1JlbW92ZSBhIG1vZHVsZSBmcm9tIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVtb3ZlIGFuIGluc3RhbGxlZCBtb2R1bGUgZnJvbSBhIHNsb3Qgb24gYSBsaXZlIGVudGl0eSBvciBhIHBhY2tlZCBlbnRpdHkgaW4gY2FyZ28uIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBUaGUgbW9kdWxlIGlzIHJldHVybmVkIHRvIGNhcmdvLiBGYWlscyBpZiB0aGUgZW50aXR5IGRvZXMgbm90IGhhdmUgZW5vdWdoIGNhcmdvIGNhcGFjaXR5IHRvIGhvbGQgdGhlIHJldHVybmVkIG1vZHVsZS4AAABsobymvAhybW5mdGNmZ6EDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbmZ0Y2ZnCnN1bW1hcnk6ICdSZW1vdmUgTkZUIHRlbXBsYXRlIG1hcHBpbmcgZm9yIGFuIGl0ZW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSB0aGUgQXRvbWljQXNzZXRzIHRlbXBsYXRlIG1hcHBpbmcgZm9yIHRoZSBzcGVjaWZpZWQgaXRlbSBpZCBmcm9tIHRoZSBgbmZ0Y29uZmlnYCB0YWJsZS4gQWZ0ZXIgcmVtb3ZhbCB0aGUgaXRlbSBjYW4gbm8gbG9uZ2VyIGJlIHdyYXBwZWQgb3IgdW53cmFwcGVkIHVudGlsIGEgbmV3IG1hcHBpbmcgaXMgc2V0LiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAyG2HssIIc2V0Y2l2aWMAAMBVGeuIssIKc2V0Y2x1c3RlcgAAAMDpUoqywglzZXRjb29yZHMAAABILnc1s8IJc2V0bmV4dGlkAAAAYAvlNbPCCXNldG5mdGNmZ8QDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNldG5mdGNmZwpzdW1tYXJ5OiAnU2V0IE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpCaW5kIGFuIGl0ZW0gaWQgdG8gYW4gQXRvbWljQXNzZXRzIHRlbXBsYXRlIGlkIGFuZCBzY2hlbWEgbmFtZS4gVXNlZCB0byBjb25maWd1cmUgaG93IHRoZSBjb250cmFjdCBtaW50cyBhbmQgcmVjb2duaXplcyBORlRzIGZvciBhIGdpdmVuIGl0ZW0uIEluc2VydHMgYSBuZXcgbWFwcGluZyBpZiBvbmUgZG9lcyBub3QgZXhpc3QsIG9yIHVwZGF0ZXMgdGhlIGV4aXN0aW5nIG1hcHBpbmcuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAMgKIoqzwglzZXRzb2NrZXQAkCJtWN2Ws8IMc2V0dGhyZXNob2xkAAAypqiay7PCC3NldHdyYXBjb3N0AACAUquay7PCCnNldHdyYXBmZWUAAAAAQMWcdcMHc2h1dHRsZQAAAKDsGsRpxglzdG93Y2FyZ2/VBS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzdG93Y2FyZ28Kc3VtbWFyeTogJ1Jlc2VydmUgYSBjYXJnbyBzdGFjayBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBSZXNlcnZlcyBhbmQgY29uc3VtZXMgYSBjYXJnbyBzdGFjayBvbiBhIGxpdmUgZW50aXR5IGZvciB3cmFwcGluZyBpbnRvIGFuIE5GVC4gVmFsaWRhdGVzIGVudGl0eSBvd25lcnNoaXAsIGxvYWRlcnMsIGFuZCBwcmVzZW5jZSBhdCB0aGUgbmV4dXMsIGFuZCBjb25maXJtcyB0aGUgdGFyZ2V0IGNhcmdvIHN0YWNrIGlzIGF2YWlsYWJsZSBhbmQgbm90IHJlc2VydmVkIGJ5IGEgcGVuZGluZyB0YXNrLiBDb21wdXRlcyB0aGUgd3JhcCBjb3N0IGFuZCBmZWUsIGRlYml0cyB0aGVtIGZyb20gdGhlIG93bmVyJ3MgcGxhdGZvcm0gZGVwb3NpdCBiYWxhbmNlLCBkZXJpdmVzIHRoZSBORlQncyBpbW11dGFibGUgZGF0YSwgYW5kIG1pbnRzIHRoZSBORlQgaW5saW5lIGFzIHRoZSBnYW1lIGNvbnRyYWN0IGJlZm9yZSBjb25zdW1pbmcgdGhlIGNhcmdvLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAIDPLk/FacYKc3Rvd2VudGl0eZkFLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHN0b3dlbnRpdHkKc3VtbWFyeTogJ1Jlc2VydmUgYW4gZW50aXR5IGZvciB3cmFwcGluZyBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIGNhbGxlZCBpbmxpbmUgYnkgdGhlIHBsYXRmb3JtIGNvbnRyYWN0IG9ubHkuIFJlc2VydmVzIGEgd2hvbGUgZW50aXR5IChzaGlwLCBjb250YWluZXIsIG9yIHBsYW5ldGFyeSBzdHJ1Y3R1cmUpIGZvciB3cmFwcGluZyBpbnRvIGFuIE5GVC4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBlbXB0eSBjYXJnbyBhbmQgbm8gc2NoZWR1bGVkIHRhc2tzLiBDb21wdXRlcyB0aGUgd3JhcCBjb3N0IGFuZCBmZWUsIGRlYml0cyB0aGVtIGZyb20gdGhlIG93bmVyJ3MgcGxhdGZvcm0gZGVwb3NpdCBiYWxhbmNlLCBkZXJpdmVzIHRoZSBlbnRpdHkgTkZUJ3MgaW1tdXRhYmxlIGRhdGEsIG1pbnRzIHRoZSBORlQgaW5saW5lIGFzIHRoZSBnYW1lIGNvbnRyYWN0LCBhbmQgZXJhc2VzIHRoZSBlbnRpdHkgZnJvbSB0aGUgd29ybGQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AgIo6UVkNxwpzd2FwbW9kdWxlAAAAACq6XA3HCHN3YXB0aWxlAAAAACA7PM3NB3RyYW5zaXQAAAAAAES1zc0GdHJhdmVs+wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIGEgc2hpcCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgdHJhdmVsIG9mIGFuIGVudGl0eSBmcm9tIGl0cyBjdXJyZW50IGxvY2F0aW9uIHRvIGEgbmV3IGRlc3RpbmF0aW9uLgDANLFGtc3NCnRyYXZlbHBsYW4AAAAAnsaq0tQIdW5kZXBsb3nnBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1bmRlcGxveQpzdW1tYXJ5OiAnUGFjayBhIGRlcGxveWVkIGVudGl0eSBpbnRvIGEgaG9zdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUGFjayBhbiBlbnRpdHkgaW50byBhIGhvc3QgZW50aXR5J3MgY2FyZ28gYXMgYSBwYWNrZWQtZW50aXR5IGl0ZW0uIEhvc3QgYW5kIHRhcmdldCBtdXN0IHNoYXJlIHRoZSBzYW1lIG93bmVyIGFuZCBjb29yZGluYXRlcywgdGhlIGhvc3QgbXVzdCBoYXZlIGxvYWRlcnMgYW5kIGVub3VnaCBjYXBhY2l0eSBmb3IgdGhlIHBhY2tlZCBtYXNzLCBhbmQgdGhlIHRhcmdldCBtdXN0IGJlIGlkbGUgd2l0aCBlbXB0eSBjYXJnby4gQ3JlYXRlcyBhbiBlbnRpdHlncm91cCBhbmQgc2NoZWR1bGVzIHVuZGVwbG95IHRhc2tzIG9uIGJvdGggZW50aXRpZXM7IG9uIHJlc29sdXRpb24gdGhlIHRhcmdldCBpcyBlcmFzZWQgYW5kIHRoZSBwYWNrZWQgZW50aXR5IGlzIGFkZGVkIHRvIHRoZSBob3N0J3MgY2FyZ28uIEludmVyc2Ugb2YgZGVwbG95LgAAAAAkQ+PUBnVubG9hZAAAAABAJXNZ1Qd1cGdyYWRlAAAAAAAAUK/hBHdhcnCfAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3YXJwCnN1bW1hcnk6ICdXYXJwIHRvIGEgZGVzdGluYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbnRseSB0ZWxlcG9ydCBhbiBlbnRpdHkgdG8gYSBkZXN0aW5hdGlvbiBzeXN0ZW0uIFJlcXVpcmVzIHdhcnAgY2FwYWJpbGl0eSwgZnVsbCBlbmVyZ3ksIGVtcHR5IGNhcmdvLCBhbmQgYW4gZW1wdHkgc2NoZWR1bGUuIFRoZSBkZXN0aW5hdGlvbiBtdXN0IGJlIGEgdmFsaWQgc3lzdGVtIHdpdGhpbiB3YXJwIHJhbmdlLiBSZXNvbHZlcyBpbW1lZGlhdGVseSBhcyBhIHplcm8tZHVyYXRpb24gdGFzay4AAAAAAKCq4wR3aXBlsgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2lwZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tFQAAAAAAyq5BA2k2NAAACWNhcmdvX3JvdwCYW5Mi5LZDA2k2NAAAD2NpdmljY29uZmlnX3JvdwAAAABg6UxEA2k2NAAACWNsYWltX3JvdwAAAOCqjHVEA2k2NAAAC2NsdXN0ZXJfcm93AAAAAGQnJUUDaTY0AAAKY29tbWl0X3JvdwAAAAD47PJUA2k2NAAACmVudGl0eV9yb3cAqqaX+ezyVANpNjQAAA9lbnRpdHlncm91cF9yb3cAALAK++zyVANpNjQAAA5lbnRpdHlfc2VxX3JvdwAAAACAhmhVA2k2NAAACWVwb2NoX3JvdwAAAAAAgA99A2k2NAAAB2pvYl9yb3cAAGBuTYrymgNpNjQAAA1uZnRjb25maWdfcm93AABgC6mIzKUDaTY0AAARb3JhY2xlX2NvbmZpZ19yb3cAAAAAq4jMpQNpNjQAAApvcmFjbGVfcm93AAAAAFzlTawDaTY0AAAKcGxheWVyX3JvdwAAAEDtq7C6A2k2NAAAC3Jlc2VydmVfcm93AAAAAESjtroDaTY0AAAKcmV2ZWFsX3JvdwAAAEAht6/CA2k2NAAAC3NlcnZpY2Vfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93AAAAAACsqs8DaTY0AAAJdHlwZXNfcm93AABza1JUzeUDaTY0AAAOd3JhcGNvbmZpZ19yb3cAAAAZU1TN5QNpNjQAAAx3cmFwY29zdF9yb3cBEVNoaXBsb2FkIChTZXJ2ZXIpEVNoaXBsb2FkIChTZXJ2ZXIpAAAARgAAyDTWFJ0+DHRhc2tfcmVzdWx0cwAAAABEhaZBDmNhbmNlbF9yZXN1bHRzAADINFbpTEQMdGFza19yZXN1bHRzAAAAAIC8zEUMdGFza19yZXN1bHRzAAAAh768zEULam9iX3JlY2VpcHQAAAANu0ilSgx0YXNrX3Jlc3VsdHMAAAAAeBqrSgx0YXNrX3Jlc3VsdHMAgM8uT4WwSgZzdHJpbmcAAAAAXNWyYQx0YXNrX3Jlc3VsdHMAwDSxXtWyYQx0YXNrX3Jlc3VsdHMAwFUZ64iyYgtjbHVzdGVyX3JvdwAAYG5NirJiC2dhbWVfY29uZmlnAEB2mFaVsmIOZXh0ZW5kZWRfYXNzZXQAFJomY5eyYgZ1aW50NjQAVDyOuaiyYgh1aW50MTZbXQAAwBHlqbJiC2VudW1fcmVzdWx0ALBy2eWpsmINZW50aXR5X2luZm9bXQAA8NnlqbJiC2VudGl0eV9pbmZvkKe7NVO6smIQZm9vdHByaW50X3Jlc3VsdABMNkmq7LJiD2l0ZW1kYXRhX3Jlc3VsdAAATk6q7LJiD2l0ZW1faWRzX3Jlc3VsdAAAAFiq7LJiCml0ZW1zX2luZm8AVPVZquyyYgV1aW50OIBV9Vmq7LJiC2VudW1fcmVzdWx0AAAAAB/6smILam9ic19yZXN1bHQATFYyTQezYhBraW5kX21ldGFfcmVzdWx0ACZ12SAas2INbG9jYXRpb25faW5mbwCAySYhGrNiEGxvY2F0aW9uX2Rlcml2ZWQAsKo+JyqzYgtlbnVtX3Jlc3VsdAAAVlEnKrNiDm1vZHVsZXNfcmVzdWx0AADw5xo1s2ILbmVhcmJ5X2luZm8AgMLm5DWzYghzdHJpbmdbXQAAXdPlNbNiDm5mdGluZm9fcmVzdWx0AAC4yptYs2ILcGxheWVyX2luZm+gssn40VuzYg9wcm9qZWN0ZWRfc3RhdGUAAFDVIXWzYg5yZWNpcGVzX3Jlc3VsdAAAVtUhdbNiDnJlY2lwZXNfcmVzdWx0AADOBmF1s2ILZW51bV9yZXN1bHQAsNpXYXWzYhNzdHJhdHVtX3JlbWFpbmluZ1tdgBW6mmJ1s2IQcmVzb3VyY2VzX3Jlc3VsdACAQm5fhbNiC3NlcnZpY2Vfcm93AAAAONOIs2IVZW50aXR5X2xheW91dHNfcmVzdWx0AIDU2dyMs2IMc3RyYXR1bV9kYXRhgJW7RkqNs2IQZW50aXR5X3N1bW1hcnlbXQBUpE1eyrNiDXdvcm1ob2xlX2luZm+QHZ7m5qrpZQx0YXNrX3Jlc3VsdHMAotrm5qrpZQx0YXNrX3Jlc3VsdHMAAAAAANCwaQtjaGVja3N1bTI1NgAAAECE0rBpC2NoZWNrc3VtNTEyAAAAADQ0tYkMdGFza19yZXN1bHRzAAAAAACQDI0MdGFza19yZXN1bHRzAAAAKrqsNpUMdGFza19yZXN1bHRzAACIVzPp8poGc3RyaW5nAABl1yCFTKwMdGFza19yZXN1bHRzAHx2eSqFTKwMdGFza19yZXN1bHRzAAAAil3TkLoMdGFza19yZXN1bHRzAAAAQO1IsboPcmVzb2x2ZV9yZXN1bHRzAECMRu1IsboScmVzb2x2ZWFsbF9yZXN1bHRz4OM1Su1IsboPcmVzb2x2ZV9yZXN1bHRzAAAAQMWcdcMMdGFza19yZXN1bHRzAACg7BrEacYMdGFza19yZXN1bHRzAIDPLk/FacYMdGFza19yZXN1bHRzAAAAKrpcDccMdGFza19yZXN1bHRzAAAAIDs8zc0MdGFza19yZXN1bHRzAAAAAES1zc0MdGFza19yZXN1bHRzAMA0sUa1zc0MdGFza19yZXN1bHRzAAAAnsaq0tQMdGFza19yZXN1bHRzAAAAACRD49QMdGFza19yZXN1bHRzAAAAQCVzWdUMdGFza19yZXN1bHRzAAAAAABQr+EMdGFza19yZXN1bHRz');
443
+ const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDjaAQlhZGRtb2R1bGUABAllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZgp0YXJnZXRfcmVmCmNhcmdvX3JlZj8IYWRkbmV4dXMAAwpuZXh1c19uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQJYWRkb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUFYmxlbmQAAgJpZAZ1aW50NjQGaW5wdXRzDGNhcmdvX2l0ZW1bXQxidWlsZGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYJYnVpbGRwbG90AAIKYnVpbGRlcl9pZAZ1aW50NjQHcGxvdF9pZAZ1aW50NjQGY2FuY2VsAAMCaWQGdWludDY0CGxhbmVfa2V5BXVpbnQ4BWNvdW50BnVpbnQ2NA5jYW5jZWxfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ9jYW5jZWxsZWRfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwljYW5jZWxqb2IAAgZqb2JfaWQGdWludDY0B3NoaXBfaWQGdWludDY0CmNhcmdvX2l0ZW0ABQdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIJZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcmVmAAQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10JZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcm93AAcCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdC3NlcXVlbmNlX2lkB3VpbnQ2ND8KY2FyZ29fdmlldwAGB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHF1YW50aXR5BnVpbnQzMgJpZAZ1aW50NjQJZW50aXR5X2lkB3VpbnQ2ND8PY2l2aWNjb25maWdfcm93AAELY2l2aWNfb3duZXIEbmFtZQljbGFpbV9yb3cAAQVvd25lcgRuYW1lCGNsYWltam9iAAIGam9iX2lkBnVpbnQ2NAdzaGlwX2lkBnVpbnQ2NAljbGFpbXBsb3QAAwpidWlsZGVyX2lkBnVpbnQ2NA50YXJnZXRfaXRlbV9pZAZ1aW50MTYEc2xvdAxjbHVzdGVyX3Nsb3QMY2xhaW1zdGFydGVyAAEFb3duZXIEbmFtZQljbGVhbnJzdnAAAgVlcG9jaAZ1aW50NjQIbWF4X3Jvd3MGdWludDY0CmNsZWFydGFibGUAAwp0YWJsZV9uYW1lBG5hbWUFc2NvcGUFbmFtZT8IbWF4X3Jvd3MHdWludDY0PwxjbHVzdGVyX2NlbGwAAwJneARpbnQ4Amd5BGludDgGZW50aXR5BnVpbnQ2NAtjbHVzdGVyX3JvdwACBHJvb3QGdWludDY0BWNlbGxzDmNsdXN0ZXJfY2VsbFtdDGNsdXN0ZXJfc2xvdAADA2h1YgZ1aW50NjQCZ3gEaW50OAJneQRpbnQ4DmNsdXN0ZXJfc291cmNlAAIJc291cmNlX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10MY2x1c3RlcmNyYWZ0AAYCaWQGdWludDY0CXJlY2lwZV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyB3NvdXJjZXMQY2x1c3Rlcl9zb3VyY2VbXQZ0YXJnZXQHdWludDY0PwRzbG90BnVpbnQ4PwZjb21taXQAAwlvcmFjbGVfaWQEbmFtZQVlcG9jaAZ1aW50NjQGY29tbWl0C2NoZWNrc3VtMjU2CmNvbW1pdF9yb3cABAJpZAZ1aW50NjQFZXBvY2gGdWludDY0CW9yYWNsZV9pZARuYW1lBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcLY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/CGNvdXBsaW5nAAMLY291bnRlcnBhcnQKZW50aXR5X3JlZgRob2xkBnVpbnQ2NARraW5kBXVpbnQ4BWNyYWZ0AAYCaWQGdWludDY0CXJlY2lwZV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyBmlucHV0cwxjYXJnb19pdGVtW10GdGFyZ2V0B3VpbnQ2ND8Ec2xvdAZ1aW50OD8MY3JhZnRlcl9sYW5lAAQKc2xvdF9pbmRleAV1aW50OAVzcGVlZAZ1aW50MTYFZHJhaW4GdWludDMyCm91dHB1dF9wY3QGdWludDE2CGNyYWZ0am9iAAYHc2hpcF9pZAZ1aW50NjQLd29ya3Nob3BfaWQGdWludDY0BHNsb3QFdWludDgJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQlkZWxlbnRpdHkAAQllbnRpdHlfaWQGdWludDY0CGRlbW9saXNoAAEJZW50aXR5X2lkBnVpbnQ2NAZkZXBsb3kAAwJpZAZ1aW50NjQDcmVmCWNhcmdvX3JlZgRzbG90DWNsdXN0ZXJfc2xvdD8KZGVzY2VudGl0eQAEB2l0ZW1faWQGdWludDE2Cmh1bGxfc3RhdHMGdWludDY0DG1vZHVsZV9pdGVtcwh1aW50MTZbXQxtb2R1bGVfc3RhdHMIdWludDY0W10GZW5hYmxlAAEHZW5hYmxlZARib29sDGVuZXJneV9zdGF0cwACCGNhcGFjaXR5BnVpbnQzMghyZWNoYXJnZQZ1aW50MzIUZW50aXR5X2N1cnJlbnRfc3RhdGUAAgtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kGdWludDMyD2VudGl0eV9kZWZhdWx0cwACC3dhcmVob3VzZV96BnVpbnQxNgtjb250YWluZXJfegZ1aW50MTYLZW50aXR5X2luZm8AFwR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzB2l0ZW1faWQGdWludDE2CWNhcmdvbWFzcwZ1aW50MzIFY2FyZ28MY2FyZ29fdmlld1tdB21vZHVsZXMObW9kdWxlX2VudHJ5W10GZW5lcmd5B3VpbnQzMj8IaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8OZ2F0aGVyZXJfbGFuZXMPZ2F0aGVyZXJfbGFuZVtdDWNyYWZ0ZXJfbGFuZXMOY3JhZnRlcl9sYW5lW10NYnVpbGRlcl9sYW5lcw5idWlsZGVyX2xhbmVbXQxsb2FkZXJfbGFuZXMNbG9hZGVyX2xhbmVbXQhsYXVuY2hlcg9sYXVuY2hlcl9zdGF0cz8FbGFuZXMGbGFuZVtdBWhvbGRzBmhvbGRbXQ1lbnRpdHlfbGF5b3V0AAMOZW50aXR5X2l0ZW1faWQGdWludDE2BXNsb3RzCnNsb3RfZGVmW10NYmFzZV9odWxsbWFzcwZ1aW50MzIVZW50aXR5X2xheW91dHNfcmVzdWx0AAEIZW50aXRpZXMPZW50aXR5X2xheW91dFtdCmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKZW50aXR5X3JvdwAMAmlkBnVpbnQ2NAVvd25lcgRuYW1lBGtpbmQEbmFtZQdpdGVtX2lkBnVpbnQxNgRuYW1lBnN0cmluZwVzdGF0cwZ1aW50NjQLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdBWxhbmVzBmxhbmVbXQVob2xkcwZob2xkW10OZW50aXR5X3NlcV9yb3cAAQduZXh0X2lkBnVpbnQ2NA5lbnRpdHlfc3VtbWFyeQAIBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXNfaWRsZQRib29sDnJlc29sdmVkX2NvdW50BnVpbnQzMg1wZW5kaW5nX2NvdW50BnVpbnQzMhBlbnRpdHlfdGFza19pbmZvAAQJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lCnRhc2tfY291bnQGdWludDMyEHNjaGVkdWxlX3N0YXJ0ZWQKdGltZV9wb2ludA9lbnRpdHlncm91cF9yb3cAAgJpZAZ1aW50NjQMcGFydGljaXBhbnRzDGVudGl0eV9yZWZbXQtlbnVtX21lbWJlcgACBXZhbHVlBXVpbnQ4BG5hbWUGc3RyaW5nC2VudW1fcmVzdWx0AAEHbWVtYmVycw1lbnVtX21lbWJlcltdCWVwb2NoX3JvdwAEBWVwb2NoBnVpbnQ2NApvcmFjbGVfaWRzBm5hbWVbXQl0aHJlc2hvbGQFdWludDgEc2VlZAtjaGVja3N1bTI1NgxmaXhjYXJnb21hc3MAAQllbnRpdHlfaWQGdWludDY0EGZvb3RwcmludF9yZXN1bHQAAQVjZWxscwtncmlkX2NlbGxbXQtmb3JjZXJldmVhbAABBWVwb2NoBnVpbnQ2NAtnYW1lX2NvbmZpZwADB3ZlcnNpb24GdWludDMyCGRlZmF1bHRzD2VudGl0eV9kZWZhdWx0cwVpdGVtcwppdGVtX2RlZltdBmdhdGhlcgAFCXNvdXJjZV9pZAZ1aW50NjQOZGVzdGluYXRpb25faWQGdWludDY0B3N0cmF0dW0GdWludDE2CHF1YW50aXR5BnVpbnQzMgRzbG90BnVpbnQ4Pw1nYXRoZXJlcl9sYW5lAAUKc2xvdF9pbmRleAV1aW50OAV5aWVsZAZ1aW50MTYFZHJhaW4GdWludDMyBWRlcHRoBnVpbnQxNgpvdXRwdXRfcGN0BnVpbnQxNgpnYXRoZXJwbGFuAAYJc291cmNlX2lkBnVpbnQ2NA5kZXN0aW5hdGlvbl9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYIcXVhbnRpdHkGdWludDMyCHJlY2hhcmdlBGJvb2wFc2xvdHMFYnl0ZXMMZ2VuZXNpc2ZsZWV0AAEIZW50aXRpZXMMZW50aXR5X3Jvd1tdCmdldGNsdXN0ZXIAAQZodWJfaWQGdWludDY0CWdldGNvbmZpZwAACmdldGRlcG9zaXQAAgVvd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NAtnZXRkaXN0YW5jZQAEAmF4BWludDY0AmF5BWludDY0AmJ4BWludDY0AmJ5BWludDY0C2dldGVsaWdpYmxlAAIGY29vcmRzC2Nvb3JkaW5hdGVzB3N0cmF0dW0GdWludDE2CWdldGVudGNscwAAC2dldGVudGl0aWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwlnZXRlbnRpdHkAAQllbnRpdHlfaWQGdWludDY0DGdldGZvb3RwcmludAABB2l0ZW1faWQGdWludDE2C2dldGl0ZW1kYXRhAAAKZ2V0aXRlbWlkcwAACGdldGl0ZW1zAAALZ2V0aXRlbXR5cGUAAQdpdGVtX2lkBnVpbnQxNgxnZXRpdGVtdHlwZXMAAAdnZXRqb2JzAAELd29ya3Nob3BfaWQGdWludDY0C2dldGtpbmRtZXRhAAALZ2V0bG9jYXRpb24AAgF4BWludDY0AXkFaW50NjQKZ2V0bG9jZGF0YQACAXgFaW50NjQBeQVpbnQ2NAtnZXRtb2R0eXBlcwAACmdldG1vZHVsZXMAAAlnZXRuZWFyYnkAAgllbnRpdHlfaWQGdWludDY0CHJlY2hhcmdlBGJvb2wKZ2V0bmZ0YmFzZQAACmdldG5mdGluZm8AAAlnZXRwbGF5ZXIAAQdhY2NvdW50BG5hbWUMZ2V0cHJvanN0YXRlAAIJZW50aXR5X2lkBnVpbnQ2NAp0YXNrX2NvdW50BnVpbnQ4PwlnZXRyZWNpcGUAAQ5vdXRwdXRfaXRlbV9pZAZ1aW50MTYKZ2V0cmVjaXBlcwACC2xvd2VyX2JvdW5kBnVpbnQxNgVsaW1pdAV1aW50OApnZXRyZXNjYXRzAAALZ2V0cmVzZXJ2ZXMAAgF4BWludDY0AXkFaW50NjQMZ2V0cmVzb3VyY2VzAAAKZ2V0c2VydmljZQABC3dvcmtzaG9wX2lkBnVpbnQ2NAhnZXRzbG90cwAACmdldHN0cmF0dW0AAwF4BWludDY0AXkFaW50NjQHc3RyYXR1bQZ1aW50MTYMZ2V0c3VtbWFyaWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwtnZXR3b3JtaG9sZQACAXgFaW50NjQBeQVpbnQ2NAlncmlkX2NlbGwAAgJneARpbnQ4Amd5BGludDgMZ3JvdXB0cmFuc2l0AAUIZW50aXRpZXMMZW50aXR5X3JlZltdAmF4BWludDY0AmF5BWludDY0AmJ4BWludDY0AmJ5BWludDY0C2dyb3VwdHJhdmVsAAQIZW50aXRpZXMMZW50aXR5X3JlZltdAXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sBGhhc2gAAQV2YWx1ZQZzdHJpbmcHaGFzaDUxMgABBXZhbHVlBnN0cmluZwxoYXVsZXJfc3RhdHMABAhjYXBhY2l0eQV1aW50OAplZmZpY2llbmN5BnVpbnQxNgVkcmFpbgZ1aW50MzIQY2FwYWNpdHlfYnlfdGllchFoYXVsZXJfdGllcl9jYXBbXQ9oYXVsZXJfdGllcl9jYXAAAgR0aWVyBXVpbnQ4CGNhcGFjaXR5BXVpbnQ4BGhvbGQABQJpZAZ1aW50NjQEa2luZAV1aW50OAtjb3VudGVycGFydAplbnRpdHlfcmVmBXVudGlsCnRpbWVfcG9pbnQNaW5jb21pbmdfbWFzcwZ1aW50MzILaW1wb3J0Y2FyZ28AAQNyb3cJY2FyZ29fcm93CmltcG9ydGNlbGwABARyb290BnVpbnQ2NAJneARpbnQ4Amd5BGludDgJZW50aXR5X2lkBnVpbnQ2NAxpbXBvcnRlbnRpdHkAAQNyb3cKZW50aXR5X3JvdwtpbXBvcnRncm91cAABA3Jvdw9lbnRpdHlncm91cF9yb3cMaW1wb3J0cGxheWVyAAEFb3duZXIEbmFtZQ1pbXBvcnRyZXNlcnZlAAILZXBvY2hfc2NvcGUGdWludDMyA3JvdwtyZXNlcnZlX3JvdwtpbXBvcnRzdGF0ZQABA3JvdwlzdGF0ZV9yb3cIaXRlbV9kZWYABQJpZAZ1aW50MTYEbWFzcwZ1aW50MzIEdHlwZQV1aW50OAdzdWJ0eXBlBXVpbnQ4BHRpZXIFdWludDgMaXRlbV9pZF9wYWlyAAICaWQGdWludDE2BG5hbWUGc3RyaW5nD2l0ZW1faWRzX3Jlc3VsdAABBWl0ZW1zDml0ZW1faWRfcGFpcltdD2l0ZW1kYXRhX3Jlc3VsdAACBWl0ZW1zCml0ZW1fZGVmW10HcmVjaXBlcw5yZWNpcGVzX3Jlc3VsdAppdGVtc19pbmZvAAEFaXRlbXMKaXRlbV9kZWZbXQtqb2JfcmVjZWlwdAADBmpvYl9pZAZ1aW50NjQJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQHam9iX3JvdwAMAmlkBnVpbnQ2NAh3b3Jrc2hvcAZ1aW50NjQGc29ja2V0BXVpbnQ4BW93bmVyBG5hbWUHc2hpcF9pZAZ1aW50NjQGY29vcmRzC2Nvb3JkaW5hdGVzCXN0YXJ0c19hdAp0aW1lX3BvaW50DGNvbXBsZXRlc19hdAp0aW1lX3BvaW50CXJlY2lwZV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyC2VuZXJneV9wYWlkBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10Lam9ic19yZXN1bHQAAQRqb2JzCWpvYl9yb3dbXQRqb2luAAEHYWNjb3VudARuYW1lEGtpbmRfbWV0YV9yZXN1bHQAAgVraW5kcw9raW5kX21ldGFfcm93W10JdGVtcGxhdGVzE3RlbXBsYXRlX21ldGFfcm93W10Na2luZF9tZXRhX3JvdwAFBGtpbmQEbmFtZQ5jbGFzc2lmaWNhdGlvbgV1aW50OBBjYXBhYmlsaXR5X2ZsYWdzBXVpbnQ4B3pfY29vcmQGdWludDMyDWRlZmF1bHRfbGFiZWwGc3RyaW5nBGxhbmUAAghsYW5lX2tleQV1aW50OAhzY2hlZHVsZQhzY2hlZHVsZQZsYXVuY2gAAwtsYXVuY2hlcl9pZAZ1aW50NjQKY2F0Y2hlcl9pZAZ1aW50NjQFaXRlbXMMY2FyZ29faXRlbVtdDmxhdW5jaGVyX3N0YXRzAAMLY2hhcmdlX3JhdGUGdWludDE2CHZlbG9jaXR5BnVpbnQxNgVkcmFpbgZ1aW50MTYEbG9hZAADAmlkBnVpbnQ2NAdmcm9tX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10LbG9hZGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BG1hc3MGdWludDMyBnRocnVzdAZ1aW50MTYKb3V0cHV0X3BjdAZ1aW50MTYQbG9jYXRpb25fZGVyaXZlZAACDHN0YXRpY19wcm9wcw9sb2NhdGlvbl9zdGF0aWMEc2l6ZQZ1aW50MTYNbG9jYXRpb25faW5mbwADBmNvb3Jkcwtjb29yZGluYXRlcwlpc19zeXN0ZW0EYm9vbAtpc193b3JtaG9sZQRib29sD2xvY2F0aW9uX3N0YXRpYwAFBmNvb3Jkcwtjb29yZGluYXRlcwR0eXBlDWxvY2F0aW9uX3R5cGUHc3VidHlwZQV1aW50OAVzZWVkMAV1aW50OAVzZWVkMQV1aW50OAxtb2R1bGVfZW50cnkAAgR0eXBlBXVpbnQ4CWluc3RhbGxlZA5wYWNrZWRfbW9kdWxlPwttb2R1bGVfaW5mbwAEAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgttb2R1bGVfdHlwZQV1aW50OAR0aWVyBXVpbnQ4Dm1vZHVsZXNfcmVzdWx0AAEHbW9kdWxlcw1tb2R1bGVfaW5mb1tdDm1vdmVtZW50X3N0YXRzAAIGdGhydXN0BnVpbnQzMgVkcmFpbgZ1aW50MzIIbW92ZXRpbGUABQZodWJfaWQGdWludDY0B2Zyb21fZ3gEaW50OAdmcm9tX2d5BGludDgFdG9fZ3gEaW50OAV0b19neQRpbnQ4C25lYXJieV9pbmZvAAUKY2FuX3RyYXZlbARib29sB2N1cnJlbnQUZW50aXR5X2N1cnJlbnRfc3RhdGUJcHJvamVjdGVkFGVudGl0eV9jdXJyZW50X3N0YXRlCm1heF9lbmVyZ3kGdWludDMyB3N5c3RlbXMPbmVhcmJ5X3N5c3RlbVtdDW5lYXJieV9zeXN0ZW0ABAhkaXN0YW5jZQZ1aW50NjQLZW5lcmd5X2Nvc3QGdWludDY0C2ZsaWdodF90aW1lBnVpbnQzMghsb2NhdGlvbg1sb2NhdGlvbl9pbmZvDm5mdF9jYXJnb19pdGVtAAQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10IcXVhbnRpdHkGdWludDMyEG5mdF9pdGVtX3BheWxvYWQAAgRpdGVtDm5mdF9jYXJnb19pdGVtCGxvY2F0aW9uDGNvb3JkaW5hdGVzPw5uZnRfc2NoZW1hX2RlZgACC3NjaGVtYV9uYW1lBG5hbWUGZmllbGRzDnNjaGVtYV9maWVsZFtdEG5mdF90ZW1wbGF0ZV9kZWYAAwdpdGVtX2lkBnVpbnQxNgtzY2hlbWFfbmFtZQRuYW1lC3RlbXBsYXRlX2lkBWludDMyDW5mdGNvbmZpZ19yb3cAAwdpdGVtX2lkBnVpbnQxNgt0ZW1wbGF0ZV9pZAVpbnQzMgtzY2hlbWFfbmFtZQRuYW1lCW5mdGltZ3VybAACBGl0ZW0KY2FyZ29faXRlbQhsb2NhdGlvbgxjb29yZGluYXRlcz8ObmZ0aW5mb19yZXN1bHQAAgdzY2hlbWFzEG5mdF9zY2hlbWFfZGVmW10JdGVtcGxhdGVzEm5mdF90ZW1wbGF0ZV9kZWZbXQZub3RpZnkAAQVldmVudAp0YXNrX2V2ZW50EW9yYWNsZV9jb25maWdfcm93AAEJdGhyZXNob2xkBXVpbnQ4Cm9yYWNsZV9yb3cAAQJpZARuYW1lDXBhY2tlZF9tb2R1bGUAAgdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQKcGxhY2VjYXJnbwADBW93bmVyBG5hbWUHaG9zdF9pZAZ1aW50NjQIYXNzZXRfaWQGdWludDY0C3BsYWNlZW50aXR5AAMFb3duZXIEbmFtZQhhc3NldF9pZAZ1aW50NjQPdGFyZ2V0X25leHVzX2lkBnVpbnQ2NAtwbGF5ZXJfaW5mbwADBW93bmVyBG5hbWUJaXNfcGxheWVyBGJvb2wMY29tcGFueV9uYW1lBnN0cmluZwpwbGF5ZXJfcm93AAEFb3duZXIEbmFtZQ9wcm9qZWN0ZWRfc3RhdGUAEQVvd25lcgRuYW1lC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzBmVuZXJneQd1aW50MzI/CWNhcmdvbWFzcwZ1aW50MzIFY2FyZ28MY2FyZ29fdmlld1tdCGh1bGxtYXNzB3VpbnQzMj8IY2FwYWNpdHkHdWludDMyPwdlbmdpbmVzD21vdmVtZW50X3N0YXRzPwR3YXJwC3dhcnBfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/BmhhdWxlcg1oYXVsZXJfc3RhdHM/DmdhdGhlcmVyX2xhbmVzD2dhdGhlcmVyX2xhbmVbXQ1jcmFmdGVyX2xhbmVzDmNyYWZ0ZXJfbGFuZVtdDWJ1aWxkZXJfbGFuZXMOYnVpbGRlcl9sYW5lW10MbG9hZGVyX2xhbmVzDWxvYWRlcl9sYW5lW10IbGF1bmNoZXIPbGF1bmNoZXJfc3RhdHM/BHRpZXIFdWludDgIcmVjaGFyZ2UAAQJpZAZ1aW50NjQMcmVjaXBlX2lucHV0AAIHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyEHJlY2lwZV9pdGVtX2luZm8AAgJpZAZ1aW50MTYEbWFzcwZ1aW50MzIPcmVjaXBlX3Jlc3BvbnNlAAgOb3V0cHV0X2l0ZW1faWQGdWludDE2C291dHB1dF9tYXNzBnVpbnQzMgZpbnB1dHMOcmVjaXBlX2lucHV0W10Kc3RhdF9zbG90cxRzdGF0X3Nsb3RfcmVzcG9uc2VbXQ1ibGVuZF93ZWlnaHRzBWJ5dGVzC291dHB1dF9pdGVtEHJlY2lwZV9pdGVtX2luZm8LaW5wdXRfaXRlbXMScmVjaXBlX2l0ZW1faW5mb1tdD3NvdXJjZV9zdWJjbGFzcwd1aW50MTY/DnJlY2lwZXNfcmVzdWx0AAEHcmVjaXBlcxFyZWNpcGVfcmVzcG9uc2VbXQhyZWZpdF9vcAACAm9wBXVpbnQ4BHNsb3QFdWludDgMcmVmcnNoZW50aXR5AAEJZW50aXR5X2lkBnVpbnQ2NAxyZW1vdmVvcmFjbGUAAQlvcmFjbGVfaWQEbmFtZQZyZW5hbWUAAgJpZAZ1aW50NjQEbmFtZQZzdHJpbmcLcmVzZXJ2ZV9yb3cABQJpZAZ1aW50NjQIY29vcmRfaWQGdWludDY0B3N0cmF0dW0GdWludDE2CXJlbWFpbmluZwZ1aW50MzIKbGFzdF9ibG9jaxRibG9ja190aW1lc3RhbXBfdHlwZQdyZXNvbHZlAAICaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BnVpbnQzMhRuZXdfc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwpyZXNvbHZlYWxsAAEFb3duZXIEbmFtZRJyZXNvbHZlYWxsX3Jlc3VsdHMAAgdzY2FubmVkBnVpbnQzMghyZXNvbHZlZAZ1aW50MzIMcmVzb2x2ZWVhcmx5AAICaWQGdWludDY0BWNvdW50B3VpbnQ2ND8NcmVzb3VyY2VfaW5mbwAEAmlkBnVpbnQxNgRtYXNzBnVpbnQzMghjYXRlZ29yeQV1aW50OAR0aWVyBXVpbnQ4DnJlc291cmNlX3N0YXRzAAMFc3RhdDEGdWludDE2BXN0YXQyBnVpbnQxNgVzdGF0MwZ1aW50MTYQcmVzb3VyY2VzX3Jlc3VsdAABCXJlc291cmNlcw9yZXNvdXJjZV9pbmZvW10GcmV2ZWFsAAMJb3JhY2xlX2lkBG5hbWUFZXBvY2gGdWludDY0BnJldmVhbAtjaGVja3N1bTI1NgpyZXZlYWxfcm93AAQCaWQGdWludDY0BWVwb2NoBnVpbnQ2NAlvcmFjbGVfaWQEbmFtZQZyZXZlYWwLY2hlY2tzdW0yNTYIcm1tb2R1bGUAAwllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAp0YXJnZXRfcmVmCmNhcmdvX3JlZj8Icm1uZnRjZmcAAQdpdGVtX2lkBnVpbnQxNg5yb3V0ZV93YXlwb2ludAACAXgFaW50NjQBeQVpbnQ2NAhzY2hlZHVsZQACB3N0YXJ0ZWQKdGltZV9wb2ludAV0YXNrcwZ0YXNrW10Mc2NoZW1hX2ZpZWxkAAIEbmFtZQZzdHJpbmcKZmllbGRfdHlwZQZzdHJpbmcLc2VydmljZV9yb3cAAgZlbnRpdHkGdWludDY0B3NvY2tldHMQc2VydmljZV9zb2NrZXRbXQ5zZXJ2aWNlX3NvY2tldAABBG9wZW4EYm9vbAhzZXRjaXZpYwABB2FjY291bnQEbmFtZQpzZXRjbHVzdGVyAAEDcm93C2NsdXN0ZXJfcm93CXNldGNvb3JkcwADCWVudGl0eV9pZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CXNldG5leHRpZAABB25leHRfaWQGdWludDY0CXNldG5mdGNmZwADB2l0ZW1faWQGdWludDE2C3RlbXBsYXRlX2lkBWludDMyC3NjaGVtYV9uYW1lBG5hbWUJc2V0c29ja2V0AAMLd29ya3Nob3BfaWQGdWludDY0BHNsb3QFdWludDgEb3BlbgRib29sDHNldHRocmVzaG9sZAABCXRocmVzaG9sZAV1aW50OAtzZXR3cmFwY29zdAADCWl0ZW1fdHlwZQV1aW50OAR0aWVyBXVpbnQ4BmFtb3VudAZ1aW50NjQKc2V0d3JhcGZlZQACB2ZlZV9wY3QGdWludDE2C2ZlZV9hY2NvdW50BG5hbWUHc2h1dHRsZQAEB2NhcnJpZXIGdWludDY0B2Zyb21faWQGdWludDY0BXRvX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10Ic2xvdF9kZWYAAwR0eXBlBXVpbnQ4Cm91dHB1dF9wY3QGdWludDE2CG1heF90aWVyBXVpbnQ4EnN0YXRfc2xvdF9yZXNwb25zZQABB3NvdXJjZXMNc3RhdF9zb3VyY2VbXQtzdGF0X3NvdXJjZQACC2lucHV0X2luZGV4BXVpbnQ4EGlucHV0X3N0YXRfaW5kZXgFdWludDgJc3RhdGVfcm93AAMHZW5hYmxlZARib29sBWVwb2NoBnVpbnQzMgRzZWVkC2NoZWNrc3VtMjU2CXN0b3djYXJnbwAFBW93bmVyBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhuZXh1c19pZAZ1aW50NjQIY2FyZ29faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NApzdG93ZW50aXR5AAMFb3duZXIEbmFtZQllbnRpdHlfaWQGdWludDY0CG5leHVzX2lkBnVpbnQ2NAxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABQdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzILcmVzZXJ2ZV9tYXgGdWludDMyEXN0cmF0dW1fcmVtYWluaW5nAAMHc3RyYXR1bQZ1aW50MTYJcmVtYWluaW5nBnVpbnQzMgpsYXN0X2Jsb2NrFGJsb2NrX3RpbWVzdGFtcF90eXBlCnN3YXBtb2R1bGUAAwllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZghzd2FwdGlsZQAFBmh1Yl9pZAZ1aW50NjQEYV9neARpbnQ4BGFfZ3kEaW50OARiX2d4BGludDgEYl9neQRpbnQ4BHRhc2sACwR0eXBlBXVpbnQ4CGR1cmF0aW9uBnVpbnQzMgpjYW5jZWxhYmxlBXVpbnQ4C2Nvb3JkaW5hdGVzDGNvb3JkaW5hdGVzPwVjYXJnbwxjYXJnb19pdGVtW10JY291cGxpbmdzCmNvdXBsaW5nW10Hc3ViamVjdAtlbnRpdHlfcmVmPwtlbnRpdHlncm91cAd1aW50NjQ/C2VuZXJneV9jb3N0B3VpbnQzMj8OdGFyZ2V0X2l0ZW1faWQHdWludDE2PwVyZWZpdAlyZWZpdF9vcD8KdGFza19ldmVudAAKCmV2ZW50X3R5cGUFdWludDgFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKdGFza19pbmRleAZ1aW50MzIEdGFzawR0YXNrCXN0YXJ0c19hdAp0aW1lX3BvaW50DGNvbXBsZXRlc19hdAp0aW1lX3BvaW50Cm5ld19lbmVyZ3kHdWludDMyPwhsYW5lX2tleQV1aW50OAx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10RdGVtcGxhdGVfbWV0YV9yb3cAAwdpdGVtX2lkBnVpbnQxNgRraW5kBG5hbWUNZGlzcGxheV9sYWJlbAZzdHJpbmcHdHJhbnNpdAAFAmlkBnVpbnQ2NAJheAVpbnQ2NAJheQVpbnQ2NAJieAVpbnQ2NAJieQVpbnQ2NAZ0cmF2ZWwABAJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wKdHJhdmVscGxhbgADCGVudGl0aWVzDGVudGl0eV9yZWZbXQl3YXlwb2ludHMQcm91dGVfd2F5cG9pbnRbXQhyZWNoYXJnZQRib29sCXR5cGVzX3JvdwAFAmlkBnVpbnQ2NBNlbnRpdHlfc3VtbWFyeV90eXBlDmVudGl0eV9zdW1tYXJ5EGdhbWVfY29uZmlnX3R5cGULZ2FtZV9jb25maWcWc3RyYXR1bV9yZW1haW5pbmdfdHlwZRFzdHJhdHVtX3JlbWFpbmluZxVuZnRfaXRlbV9wYXlsb2FkX3R5cGUQbmZ0X2l0ZW1fcGF5bG9hZAh1bmRlcGxveQACB2hvc3RfaWQGdWludDY0CXRhcmdldF9pZAZ1aW50NjQGdW5sb2FkAAMCaWQGdWludDY0BXRvX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10HdXBncmFkZQAFCmJ1aWxkZXJfaWQGdWludDY0CXRhcmdldF9pZAZ1aW50NjQOdGFyZ2V0X2l0ZW1faWQGdWludDE2BmlucHV0cwxjYXJnb19pdGVtW10Ec2xvdAZ1aW50OD8Ed2FycAADAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQKd2FycF9zdGF0cwABBXJhbmdlBnVpbnQzMgR3aXBlAAANd29ybWhvbGVfaW5mbwADBmNvb3Jkcwtjb29yZGluYXRlcwtpc193b3JtaG9sZQRib29sC2Rlc3RpbmF0aW9uC2Nvb3JkaW5hdGVzDndyYXBjb25maWdfcm93AAIHZmVlX3BjdAZ1aW50MTYLZmVlX2FjY291bnQEbmFtZQx3cmFwY29zdF9yb3cAAwlpdGVtX3R5cGUFdWludDgEdGllcgV1aW50OAZhbW91bnQGdWludDY0cQAAUFEnKlMyCWFkZG1vZHVsZccDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG1vZHVsZQpzdW1tYXJ5OiAnSW5zdGFsbCBhIG1vZHVsZSBpbnRvIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFsbCBhIG1vZHVsZSBmcm9tIGNhcmdvIGludG8gYSBtb2R1bGUgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgdHlwZSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0IHNsb3QgdHlwZS4gVGhlIG1vZHVsZSBpdGVtIGlzIHJlbW92ZWQgZnJvbSBjYXJnbyB1cG9uIGluc3RhbGxhdGlvbi4AAABYdzVTMghhZGRuZXh1c6cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG5leHVzCnN1bW1hcnk6ICdBZGQgYSBuZXh1cyBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ3JlYXRlIGEgbmV3IG5leHVzIGVudGl0eSBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuIE5leHVzZXMgYXJlIG93bmVkIGJ5IHRoZSBjb250cmFjdCBhbmQgc2VydmUgYXMgZml4ZWQgZ2F0aGVyaW5nIHBvaW50cyB3aGVyZSBwbGF5ZXJzIGNhbiB3cmFwLCB1bndyYXAsIGRlcGxveSwgYW5kIG90aGVyd2lzZSBpbnRlcmFjdCB3aXRoIE5GVC1iYWNrZWQgYXNzZXRzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAABQEZlLUzIJYWRkb3JhY2xlAAAAAACANFU8BWJsZW5k/AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYmxlbmQKc3VtbWFyeTogJ0JsZW5kIGNhcmdvIHN0YWNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ29tYmluZSBtdWx0aXBsZSBjYXJnbyBzdGFja3Mgb2YgdGhlIHNhbWUgaXRlbSB0eXBlIGludG8gYSBzaW5nbGUgc3RhY2sgd2l0aCBuZXcgYmxlbmRlZCBzdGF0cy4gQWxsIGlucHV0IHN0YWNrcyBtdXN0IHNoYXJlIHRoZSBzYW1lIGl0ZW0gaWQuIFRoZSBvdXRwdXQgc3RhY2sgaGFzIHRoZSBjb21iaW5lZCBxdWFudGl0eSBvZiBhbGwgaW5wdXRzLgAAyDTWFJ0+CWJ1aWxkcGxvdAAAAAAARIWmQQZjYW5jZWzCAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjYW5jZWwKc3VtbWFyeTogJ0NhbmNlbCBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbmNlbCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0YXNrcyBmcm9tIHRoZSBlbmQgb2YgYW4gZW50aXR5J3Mgc2NoZWR1bGUuIFRhc2tzIHRoYXQgYXJlIGltbXV0YWJsZSBhbmQgaW4gcHJvZ3Jlc3MgY2Fubm90IGJlIGNhbmNlbGxlZC4AADj0RYWmQQljYW5jZWxqb2IAAAAAhz7pTEQIY2xhaW1qb2IAAADINFbpTEQJY2xhaW1wbG90AHBVviZj6UxEDGNsYWltc3RhcnRlcgAAAKgb32lURAljbGVhbnJzdnDsAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhbnJzdnAKc3VtbWFyeTogJ0NsZWFuIHVwIHBhc3QgZXBvY2ggcmVzZXJ2ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVyYXNlIHJlc2VydmUgdGFibGUgcm93cyBmcm9tIGEgcGFzdCBlcG9jaC4gQ2Fubm90IGNsZWFuIHRoZSBjdXJyZW50IG9yIGZ1dHVyZSBlcG9jaHMuIFRoZSBtYXhfcm93cyBwYXJhbWV0ZXIgY2FwcyB0aGUgbnVtYmVyIG9mIHJvd3MgZXJhc2VkIHBlciBjYWxsIHRvIGxpbWl0IENQVSB1c2FnZS4AgIrH5GtURApjbGVhcnRhYmxlvgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYXJ0YWJsZQpzdW1tYXJ5OiAnREVCVUc6IGNsZWFydGFibGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tkJe56KqMdUQMY2x1c3RlcmNyYWZ0AAAAAABkJyVFBmNvbW1pdOwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbW1pdApzdW1tYXJ5OiAnU2V0IGNvbW1pdCB2YWx1ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2V0IHRoZSBpbml0aWFsIGNvbW1pdCB2YWx1ZSBkdXJpbmcgZ2FtZSBpbml0aWFsaXphdGlvbi4AAGA0MrcmRQljb25maWdsb2fdAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb25maWdsb2cKc3VtbWFyeTogJ0xvZyBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IGxvZ3MgdGhlIGN1cnJlbnQgZ2FtZSBjb25maWd1cmF0aW9uLiBDYWxsZWQgaW5saW5lIGFmdGVyIGluaXRpYWxpemF0aW9uIHRvIGJyb2FkY2FzdCBjb25maWcgdmlhIGFjdGlvbiB0cmFjZXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAgLzMRQVjcmFmdMgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNyYWZ0CnN1bW1hcnk6ICdDcmFmdCBpdGVtcyBmcm9tIGEgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2Zvcm0gY2FyZ28gaXRlbXMgaW50byBhIG5ldyBpdGVtIHVzaW5nIGEgcmVjaXBlLiBUaGUgZW50aXR5IG11c3QgaGF2ZSBhIGNyYWZ0ZXIgbW9kdWxlIGluc3RhbGxlZC4gQ29uc3VtZXMgZW5lcmd5IGFuZCBzY2hlZHVsZXMgYSBjcmFmdGluZyB0YXNrIHdpdGggZHVyYXRpb24gYmFzZWQgb24gdG90YWwgaW5wdXQgbWFzcyBhbmQgY3JhZnRlciBzcGVlZC4gSW5wdXQgcXVhbnRpdGllcyBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIHJlY2lwZSByZXF1aXJlbWVudHMuAAAAh768zEUIY3JhZnRqb2IAAADw2eWpokoJZGVsZW50aXR5AAAAAA27SKVKCGRlbW9saXNo8QMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVtb2xpc2gKc3VtbWFyeTogJ0RlbW9saXNoIGEgc3RhdGlvbmFyeSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkRlY29tbWlzc2lvbiBhbiBlbnRpdHksIGVyYXNpbmcgaXQgZnJvbSB0aGUgZ2FtZS4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUsIGhhdmUgZW1wdHkgY2FyZ28sIGFuZCBoYXZlIG5vIGluc3RhbGxlZCBtb2R1bGVzIChyZW1vdmUgZWFjaCB2aWEgcm1tb2R1bGUgZmlyc3QpLiBTY2hlZHVsZXMgYSBkZW1vbGlzaCB0YXNrIHRoYXQgZXJhc2VzIHRoZSBlbnRpdHkgb24gcmVzb2x1dGlvbi4gT25seSB2YWxpZCBmb3IgZW50aXRpZXMgdGhhdCBjYW5ub3QgbW92ZTsgdXNlIHVuZGVwbG95IG9yIHdyYXBlbnRpdHkgZm9yIHRoZSByZXN0LgAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHnJAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4AAAAAqHjMVAZlbmFibGXdAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQugLGRlF2DulsMZml4Y2FyZ29tYXNzkAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZml4Y2FyZ29tYXNzCnN1bW1hcnk6ICdERUJVRzogcmVjb21wdXRlIGVudGl0eSBjYXJnbyBtYXNzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZWNvbXB1dGUgYW5kIHJld3JpdGUgYW4gZW50aXR5J3MgY2FyZ28gbWFzcyBmcm9tIGl0cyBjdXJyZW50IGNhcmdvLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuIEF2YWlsYWJsZSBmb3IgcmVwYWlyaW5nIGRyaWZ0IGJldHdlZW4gY2FjaGVkIGNhcmdvIG1hc3MgYW5kIHRoZSB0cnVlIG1hc3MgZGVyaXZlZCBmcm9tIGNhcmdvIHJvd3MuAKJRW12FLl0LZm9yY2VyZXZlYWy+BC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBmb3JjZXJldmVhbApzdW1tYXJ5OiAnREVCVUc6IGZvcmNlLWZpbmFsaXplIGFuIGVwb2NoIGZyb20gZXhpc3RpbmcgcmV2ZWFscycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRmluYWxpemUgYSBzdHVjayBlcG9jaCBieSBjb21wdXRpbmcgaXRzIHNlZWQgZnJvbSB0aGUgcmV2ZWFscyBhbHJlYWR5IHN1Ym1pdHRlZCwgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgY29uZmlndXJlZCB0aHJlc2hvbGQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4gVGhlIHNlZWQgaXMgZGVyaXZlZCBzb2xlbHkgZnJvbSB0aGUgcHJlLWltYWdlLWxvY2tlZCByZXZlYWxzIGFscmVhZHkgb24gY2hhaW47IG5vIGFkbWluLXN1cHBsaWVkIGVudHJvcHkgaXMgaW50cm9kdWNlZC4gVXNlZCB0byB1bmJsb2NrIGVwb2NoIHByb2dyZXNzaW9uIHdoZW4gdGhlIHRocmVzaG9sZCBjYW5ub3Qgb3RoZXJ3aXNlIGJlIG1ldC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAMA0sV7VsmEKZ2F0aGVycGxhbgCQlYoLO6ymYgxnZW5lc2lzZmxlZXSpBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZW5lc2lzZmxlZXQKc3VtbWFyeTogJ01pbnQgdGhlIG9uZS10aW1lIGdlbmVzaXMgZmxlZXQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVtcGxhY2UgdGhlIG9uZS10aW1lIGdlbmVzaXMgZmxlZXQ6IGEgY2FsbGVyLXN1cHBsaWVkIHNldCBvZiBlbnRpdGllcyAoc2hpcHMsIHN0cnVjdHVyZXMsIGFuZCBjb250YWluZXJzKSB3cml0dGVuIHRvIHRoZSB3b3JsZCBhcy1pcy4gVmFsaWQgb25seSBkdXJpbmcgdGhlIHByZS1nZW5lc2lzIHdpbmRvdywgYmVmb3JlIGVwb2NoIDEgaXMgZmluYWxpemVkLiBUaGUgc3VwcGxpZWQgZW50aXR5IGlkcyBhcmUgaG9ub3JlZCBhbmQgdGhlIGlkIHNlcXVlbmNlIGlzIGFkdmFuY2VkIHBhc3QgdGhlbTsgaWQgMCBpcyByZXNlcnZlZCBmb3IgdGhlIEdlbmVzaXMgTmV4dXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AwFUZ64iyYgpnZXRjbHVzdGVyAAAAYG5NirJiCWdldGNvbmZpZ8oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGNvbmZpZwpzdW1tYXJ5OiAnR2V0IGdhbWUgY29uZmlndXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgZ2FtZSBjb25maWd1cmF0aW9uIGluY2x1ZGluZyBkZWZhdWx0IGVudGl0eSBzdGF0cyBmb3Igd2FyZWhvdXNlcyBhbmQgY29udGFpbmVycywgYW5kIHRoZSBmdWxsIGl0ZW0gZGVmaW5pdGlvbnMgdGFibGUuAEB2mFaVsmIKZ2V0ZGVwb3NpdAAAFJomY5eyYgtnZXRkaXN0YW5jZQAAVDyOuaiyYgtnZXRlbGlnaWJsZcgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVsaWdpYmxlCnN1bW1hcnk6ICdHZXQgZWxpZ2libGUgcmVzb3VyY2UgaXRlbSBJRHMgYXQgYSBsb2NhdGlvbiBhbmQgc3RyYXR1bScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGxpc3Qgb2YgcmVzb3VyY2UgaXRlbSBJRHMgZWxpZ2libGUgdG8gYmUgZ2F0aGVyZWQgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGFuZCBzdHJhdHVtIGRlcHRoLiBJdGVtcyBhcmUgZ2F0ZWQgYnkgYm90aCB0aGUgbG9jYXRpb24ncyByZXNvdXJjZSBwcm9maWxlIGFuZCB0aGUgZGVwdGggdGhyZXNob2xkIGZvciBlYWNoIHRpZXIuAADAEeWpsmIJZ2V0ZW50Y2xzjAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50Y2xzCnN1bW1hcnk6ICdHZXQgZW50aXR5IGNsYXNzIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgZW50aXR5IGNsYXNzIGVudW0gdmFsdWVzIGFuZCB0aGVpciBzdHJpbmcgbmFtZXMgKE9yYml0YWxWZXNzZWwsIFBsYW5ldGFyeVN0cnVjdHVyZSkuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIGVudGl0eSBjbGFzcyBpZGVudGlmaWVycy4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy6Qp7s1U7qyYgxnZXRmb290cHJpbnQAAEw2SarssmILZ2V0aXRlbWRhdGGoAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtZGF0YQpzdW1tYXJ5OiAnR2V0IGZ1bGwgaXRlbSBjYXRhbG9nJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgY29tcGxldGUgaXRlbSBjYXRhbG9nIGFzIHRoZSBjb250cmFjdCBzZWVzIGl0LCBpbmNsdWRpbmcgdHlwZSwgc3VidHlwZSwgdGllciwgbWFzcywgYW5kIG90aGVyIHN0YXRpYyBtZXRhZGF0YS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgY2xpZW50cyB0byBtaXJyb3IgdGhlIGNvbnRyYWN0J3MgaXRlbSBkZWZpbml0aW9ucy4AAE5OquyyYgpnZXRpdGVtaWRzhgMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbWlkcwpzdW1tYXJ5OiAnR2V0IGl0ZW0gaWQgdG8gbmFtZSBtYXBwaW5ncycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgbWFwcGluZyBvZiBpdGVtIGlkIGNvbnN0YW50cyB0byB0aGVpciBjYW5vbmljYWwgc3RyaW5nIG5hbWVzLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHJlc29sdmUgbnVtZXJpYyBpdGVtIGlkcyB0byBodW1hbi1yZWFkYWJsZSBpZGVudGlmaWVycy4AAABYquyyYghnZXRpdGVtc5oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1zCnN1bW1hcnk6ICdHZXQgYWxsIGF2YWlsYWJsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgYWxsIGl0ZW1zIGluIHRoZSBnYW1lIGluY2x1ZGluZyB0aGVpciBpZCwgYmFzZSBwcmljZSwgYW5kIG1hc3MuAFT1WarssmILZ2V0aXRlbXR5cGUAgFX1WarssmIMZ2V0aXRlbXR5cGVziAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXR5cGVzCnN1bW1hcnk6ICdHZXQgaXRlbSB0eXBlIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgaXRlbSB0eXBlIGVudW0gdmFsdWVzIGFuZCB0aGVpciBzdHJpbmcgbmFtZXMgKHJlc291cmNlLCBjb21wb25lbnQsIG1vZHVsZSwgZW50aXR5KS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgaXRlbSB0eXBlIGlkZW50aWZpZXJzLgAAAAAf+rJiB2dldGpvYnMAAExWMk0Hs2ILZ2V0a2luZG1ldGH4Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRraW5kbWV0YQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBraW5kIG1ldGFkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZW50aXR5IGtpbmQgcmVnaXN0cnkgYW5kIHRlbXBsYXRlIHJlZ2lzdHJ5LCBpbmNsdWRpbmcgZWFjaCBraW5kJ3MgY2xhc3NpZmljYXRpb24sIGNhcGFiaWxpdHkgZmxhZ3MsIFotY29vcmRpbmF0ZSwgYW5kIGRlZmF1bHQgbGFiZWwsIHBsdXMgdGhlIG1hcHBpbmcgb2YgZW50aXR5IGl0ZW0gaWRzIHRvIGtpbmRzIHdpdGggZGlzcGxheSBsYWJlbHMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gaW50ZXJwcmV0IGVudGl0eSBraW5kcyBhbmQgY2FwYWJpbGl0aWVzLgAmddkgGrNiC2dldGxvY2F0aW9u4gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jYXRpb24Kc3VtbWFyeTogJ0dldCBsb2NhdGlvbiBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIGxvY2F0aW9uIGluY2x1ZGluZyB3aGV0aGVyIGEgc3lzdGVtIGV4aXN0cywgYW5kIGZvciBlYWNoIGl0ZW06IHByaWNlLCBzdXBwbHksIHJhcml0eSBtdWx0aXBsaWVyLCBhbmQgbG9jYXRpb24gbXVsdGlwbGllci4AgMkmIRqzYgpnZXRsb2NkYXRh/gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jZGF0YQpzdW1tYXJ5OiAnR2V0IGRlcml2ZWQgbG9jYXRpb24gZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBkZXJpdmVkIGxvY2F0aW9uIGRhdGEgaW5jbHVkaW5nIHN0YXRpYyBwcm9wZXJ0aWVzICh0eXBlLCBkaWZmaWN1bHR5LCBzZWVkcykgZnJvbSB0aGUgZ2FtZSBzZWVkIGFuZCBlcG9jaC1zcGVjaWZpYyBwcm9wZXJ0aWVzIChhY3RpdmUsIHNlZWRzKSBmcm9tIHRoZSBjdXJyZW50IGVwb2NoIHNlZWQuALCqPicqs2ILZ2V0bW9kdHlwZXPWAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRtb2R0eXBlcwpzdW1tYXJ5OiAnR2V0IG1vZHVsZSB0eXBlIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAoYW55LCBlbmdpbmUsIGdlbmVyYXRvciwgZ2F0aGVyZXIsIGxvYWRlciwgd2FycCwgY3JhZnRlciwgbGF1bmNoZXIsIHN0b3JhZ2UsIGhhdWxlcikuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIG1vZHVsZSBzdWJ0eXBlIGlkZW50aWZpZXJzIGFuZCBzbG90IGNvbXBhdGliaWxpdHkuAABWUScqs2IKZ2V0bW9kdWxlc4ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHVsZXMKc3VtbWFyeTogJ0dldCBhbGwgbW9kdWxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgc3Vic2V0IG9mIGl0ZW1zIGNsYXNzaWZpZWQgYXMgbW9kdWxlcywgaW5jbHVkaW5nIGVhY2ggbW9kdWxlJ3MgaWQsIG1hc3MsIHN1YnR5cGUsIGFuZCB0aWVyLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGVudW1lcmF0ZSBpbnN0YWxsYWJsZSBlcXVpcG1lbnQuAADw5xo1s2IJZ2V0bmVhcmJ5ygMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgYW5kIGZsaWdodCB0aW1lLgCAwubkNbNiCmdldG5mdGJhc2UAAABd0+U1s2IKZ2V0bmZ0aW5mb/ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG5mdGluZm8Kc3VtbWFyeTogJ0dldCBORlQgc2NoZW1hIGFuZCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgQXRvbWljQXNzZXRzIHNjaGVtYXMgYW5kIHRlbXBsYXRlcyB0aGUgZ2FtZSBjb250cmFjdCBleHBlY3RzLCBwbHVzIHRoZSBjdXJyZW50IGBpdGVtX2lkIOKGkiAodGVtcGxhdGVfaWQsIHNjaGVtYV9uYW1lKWAgbWFwcGluZyBzdG9yZWQgaW4gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHN5bmMgYXRvbWljYXNzZXRzIHN0YXRlIHdpdGggdGhlIGNvbnRyYWN0LgAAuMqbWLNiCWdldHBsYXllcv0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHBsYXllcgpzdW1tYXJ5OiAnR2V0IHBsYXllciBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIHBsYXllciBpbmNsdWRpbmcgYmFsYW5jZSwgZGVidCwgbmV0d29ydGgsIGVudGl0eSBjb3VudHMsIGFuZCBwcmljaW5nIGZvciBuZXh0IHB1cmNoYXNlcy4gUmV0dXJucyBpc19wbGF5ZXI9ZmFsc2UgaWYgdGhlIGFjY291bnQgaGFzIG5vdCBqb2luZWQgdGhlIGdhbWUuoLLJ+NFbs2IMZ2V0cHJvanN0YXRlywMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cHJvanN0YXRlCnN1bW1hcnk6ICdHZXQgcHJvamVjdGVkIGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHByb2plY3RlZCBzdGF0ZSBvZiBhbiBlbnRpdHkgYWZ0ZXIgYXBwbHlpbmcgdGhlIG5leHQgdGFza19jb3VudCBzY2hlZHVsZWQgdGFza3MgKG9yIGFsbCB0YXNrcyBpZiB0YXNrX2NvdW50IGlzIG9taXR0ZWQpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHByZXZpZXcgdGhlIHJlc3VsdCBvZiBhbiBlbnRpdHkncyBzY2hlZHVsZSB3aXRob3V0IHJlc29sdmluZyBvbi1jaGFpbi4AAFDVIXWzYglnZXRyZWNpcGWmAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZWNpcGUKc3VtbWFyeTogJ0dldCBhIHNpbmdsZSBjcmFmdGluZyByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSByZWNpcGUgd2hvc2Ugb3V0cHV0IG1hdGNoZXMgdGhlIGdpdmVuIGl0ZW0gaWQsIGluY2x1ZGluZyBpdHMgaW5wdXRzLCBibGVuZCB3ZWlnaHRzLCBzdGF0IHNsb3RzLCBhbmQgcmVzb2x2ZWQgaXRlbSBtYXNzIGluZm8uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGlzcGxheSBjcmFmdGluZyByZXF1aXJlbWVudHMuAABW1SF1s2IKZ2V0cmVjaXBlc6wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4AAM4GYXWzYgpnZXRyZXNjYXRzngMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzY2F0cwpzdW1tYXJ5OiAnR2V0IHJlc291cmNlIGNhdGVnb3J5IGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAob3JlLCBnYXMsIHJlZ29saXRoLCBiaW9tYXNzLCBjcnlzdGFsKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgcmVzb3VyY2Ugc3VidHlwZSBpZGVudGlmaWVycy4AsNpXYXWzYgtnZXRyZXNlcnZlc/wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc2VydmVzCnN1bW1hcnk6ICdHZXQgY3VycmVudCByZXNlcnZlIG1vZGlmaWNhdGlvbnMgYXQgYSBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgY2hhaW4ncyBtb2RpZmljYXRpb25zIHRvIGRlcml2ZWQgcmVzZXJ2ZXMgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGUgZm9yIHRoZSBjdXJyZW50IGVwb2NoIGFzIGEgbGlzdCBvZiB7c3RyYXR1bSwgcmVtYWluaW5nfSBwYWlycy4gU3RyYXRhIG5vdCBwcmVzZW50IGluIHRoZSByZXNwb25zZSB1c2UgdGhlaXIgZGVyaXZlZCBpbml0aWFsIHJlc2VydmUuIENvbXBvc2Ugd2l0aCBTREsgZGVyaXZhdGlvbiB0byBnZXQgdGhlIGZ1bGwgcGVyLWxvY2F0aW9uIHN0cmF0YSB2aWV3LoAVuppidbNiDGdldHJlc291cmNlc4cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc291cmNlcwpzdW1tYXJ5OiAnR2V0IGFsbCByZXNvdXJjZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHN1YnNldCBvZiBpdGVtcyBjbGFzc2lmaWVkIGFzIHJlc291cmNlcywgaW5jbHVkaW5nIGVhY2ggcmVzb3VyY2UncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGdhdGhlcmFibGUgbWF0ZXJpYWxzLgCAQm5fhbNiCmdldHNlcnZpY2UAAAAAONOIs2IIZ2V0c2xvdHO7Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzbG90cwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzbG90IGxheW91dHMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBtb2R1bGUgc2xvdCBsYXlvdXQgZm9yIGV2ZXJ5IGVudGl0eSBpdGVtIHR5cGUsIGxpc3RpbmcgdGhlIG9yZGVyZWQgc2xvdCB0eXBlcyBhdmFpbGFibGUgZm9yIG1vZHVsZSBpbnN0YWxsYXRpb24uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIG1vZHVsZSB0eXBlcyBhcmUgY29tcGF0aWJsZSB3aXRoIGEgZ2l2ZW4gZW50aXR5IGh1bGwuAIDU2dyMs2IKZ2V0c3RyYXR1bdICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN0cmF0dW0Kc3VtbWFyeTogJ0dldCByZXNvdXJjZSBzdHJhdHVtIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhIGZvciBhIHNwZWNpZmljIGRlcHRoIGxheWVyIGF0IGEgY29vcmRpbmF0ZSwgaW5jbHVkaW5nIHRoZSBzdHJhdHVtIHNlZWQgaW5mbyBhbmQgZGVyaXZlZCByZXNvdXJjZSBzdGF0cy6AlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgBUpE1eyrNiC2dldHdvcm1ob2xlAJAdnubmqullDGdyb3VwdHJhbnNpdAAAotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AKLsG5UurdAtpbXBvcnRjYXJnbwAAQIwK5UurdAppbXBvcnRjZWxsAOCzy1PlS6t0DGltcG9ydGVudGl0eQAAqqaX5UurdAtpbXBvcnRncm91cABwlTex5kurdAxpbXBvcnRwbGF5ZXIAuq/C6uZLq3QNaW1wb3J0cmVzZXJ2ZQAAVDYZ50urdAtpbXBvcnRzdGF0ZQAAAAAAADAdfQRqb2luxAEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogam9pbgpzdW1tYXJ5OiAnSm9pbiBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkpvaW4gYSBnYW1lIG9mIFNoaXBsb2FkAAAAADQ0tYkGbGF1bmNoAAAAAAAAkAyNBGxvYWQAAAAAKrqsNpUIbW92ZXRpbGUAAACIVzPp8poJbmZ0aW1ndXJssgMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbmZ0aW1ndXJsCnN1bW1hcnk6ICdHZXQgTkZUIGltYWdlIFVSTCBmb3IgYSBjYXJnbyBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgaW1hZ2UgVVJMIHRoZSBjb250cmFjdCBlbWl0cyBmb3IgYSBnaXZlbiBjYXJnbyBpdGVtLCBvcHRpb25hbGx5IHNjb3BlZCB0byBhIGxvY2F0aW9uLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBORlQgcmVuZGVyZXJzIHRvIGZldGNoIHRoZSBjYW5vbmljYWwgYXJ0d29yayBmb3IgYW4gaXRlbSBvciBwYWNrZWQgZW50aXR5LgAAAAD45TKdBm5vdGlmeYoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5vdGlmeQpzdW1tYXJ5OiAnVGFzayBsaWZlY3ljbGUgbm90aWZpY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBub3RpZmllcyBlbnRpdHkgb3duZXJzIG9mIHRhc2sgbGlmZWN5Y2xlIGV2ZW50cyAocmVzb2x2ZWQsIGNhbmNlbGxlZCkuIENhbGxlZCBpbmxpbmUgd2hlbiB0YXNrcyBjaGFuZ2Ugc3RhdGUuIFVzZXMgcmVxdWlyZV9yZWNpcGllbnQgdG8gZW5hYmxlIG9mZi1jaGFpbiBtb25pdG9yaW5nIHZpYSBhY3Rpb24gdHJhY2VzLgAAZdcghUysCnBsYWNlY2FyZ2/JBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBwbGFjZWNhcmdvCnN1bW1hcnk6ICdSZXN0b3JlIE5GVCBjYXJnbyBvbnRvIGEgaG9zdCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBSZXN0b3JlcyB0aGUgY2FyZ28gcmVjb3JkZWQgaW4gYW4gdW53cmFwcGVkIE5GVCBvbnRvIGEgaG9zdCBlbnRpdHkuIFZhbGlkYXRlcyBob3N0IG93bmVyc2hpcCwgbG9hZGVycywgYW5kIHJlbWFpbmluZyBjYXBhY2l0eSwgZGVzZXJpYWxpemVzIHRoZSBORlQncyBpdGVtIGRhdGEsIGFuZCBhcHBlbmRzIGFuIHVud3JhcCB0YXNrIHRvIGRlbGl2ZXIgdGhlIGNhcmdvIHRvIHRoZSBob3N0LiBUaGUgcGxhdGZvcm0gY29udHJhY3QgY3JlZGl0cyB0aGUgZGVwb3NpdCByZWZ1bmQgYW5kIGJ1cm5zIHRoZSBhc3NldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgB8dnkqhUysC3BsYWNlZW50aXR5wAQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcGxhY2VlbnRpdHkKc3VtbWFyeTogJ01hdGVyaWFsaXplIGEgcGFja2VkLWVudGl0eSBORlQgYXMgYSBsaXZlIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIGNhbGxlZCBpbmxpbmUgYnkgdGhlIHBsYXRmb3JtIGNvbnRyYWN0IG9ubHkuIEVtcGxhY2VzIGEgbGl2ZSBvcmJpdGFsIHZlc3NlbCAoc2hpcCBvciBjb250YWluZXIpIGZyb20gaXRzIHBhY2tlZC1lbnRpdHkgTkZUIGRhdGEgYXQgdGhlIHJlY29yZGVkIHdyYXAgb3JpZ2luLCB0aGVuIHF1ZXVlcyB0cmF2ZWwgYW5kIHJlY2hhcmdlIHRhc2tzIHRvIGRlbGl2ZXIgaXQgdG8gdGhlIHRhcmdldCBuZXh1cyBhdCBmdWxsIGVuZXJneS4gVGhlIHBsYXRmb3JtIGNvbnRyYWN0IGNyZWRpdHMgdGhlIGRlcG9zaXQgcmVmdW5kIGFuZCBidXJucyB0aGUgYXNzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAACKXdOQughyZWNoYXJnZc0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlY2hhcmdlCnN1bW1hcnk6ICdSZWNoYXJnZSBzaGlwIGVuZXJneScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2NoZWR1bGUgYSByZWNoYXJnZSB0YXNrIGZvciBhbiBlbnRpdHkgdG8gcmVzdG9yZSBlbmVyZ3kgdG8gZnVsbCBjYXBhY2l0eS4gVGhlIHJlY2hhcmdlIGR1cmF0aW9uIGRlcGVuZHMgb24gY3VycmVudCBlbmVyZ3kgbGV2ZWwgYW5kIHJlY2hhcmdlIHJhdGUu4LPLUzV8l7oMcmVmcnNoZW50aXR5uAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVmcnNoZW50aXR5CnN1bW1hcnk6ICdSZWZyZXNoIGRlcml2ZWQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZWNvbXB1dGUgZGVyaXZlZCBmaWVsZHMgb24gYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgY2FyZ28gYW5kIG1vZHVsZXMsIHJlZnJlc2hpbmcgY2FwYWJpbGl0eSBzdGF0cyBhbmQgY2FyZ28gbWFzcy4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFVzZWQgdG8gcmVjb25jaWxlIGRlcml2ZWQgc3RhdGUgYWZ0ZXIgZGF0YSBtaWdyYXRpb25zIG9yIGNvbnRyYWN0IHVwZ3JhZGVzLqAiMpeqTaW6DHJlbW92ZW9yYWNsZQAAAAAAKGmmugZyZW5hbWUAAAAAQO1IsboHcmVzb2x2ZdADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlc29sdmUKc3VtbWFyeTogJ0NvbXBsZXRlIHNjaGVkdWxlZCB0YXNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVzb2x2ZSBjb21wbGV0ZWQgdGFza3MgaW4gYW4gZW50aXR5J3Mgc2NoZWR1bGUsIGFwcGx5aW5nIHRoZWlyIGVmZmVjdHMgKHJlY2hhcmdlIGVuZXJneSwgdXBkYXRlIGxvY2F0aW9uLCBsb2FkL3VubG9hZCBjYXJnbykuIElmIGNvdW50IGlzIHNwZWNpZmllZCwgcmVzb2x2ZSBleGFjdGx5IHRoYXQgbWFueSB0YXNrczsgb3RoZXJ3aXNlIHJlc29sdmUgYWxsIGNvbXBsZXRlZCB0YXNrcy4gRmFpbHMgaWYgY291bnQgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB0YXNrcy4AQIxG7UixugpyZXNvbHZlYWxsAODjNUrtSLG6DHJlc29sdmVlYXJseQAAAAAARKO2ugZyZXZlYWwAAAAAKupEpbwIcm1tb2R1bGW8Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW1vZHVsZQpzdW1tYXJ5OiAnUmVtb3ZlIGEgbW9kdWxlIGZyb20gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgYW4gaW5zdGFsbGVkIG1vZHVsZSBmcm9tIGEgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgaXMgcmV0dXJuZWQgdG8gY2FyZ28uIEZhaWxzIGlmIHRoZSBlbnRpdHkgZG9lcyBub3QgaGF2ZSBlbm91Z2ggY2FyZ28gY2FwYWNpdHkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgbW9kdWxlLgAAAGyhvKa8CHJtbmZ0Y2ZnoQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcm1uZnRjZmcKc3VtbWFyeTogJ1JlbW92ZSBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVtb3ZlIHRoZSBBdG9taWNBc3NldHMgdGVtcGxhdGUgbWFwcGluZyBmb3IgdGhlIHNwZWNpZmllZCBpdGVtIGlkIGZyb20gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBBZnRlciByZW1vdmFsIHRoZSBpdGVtIGNhbiBubyBsb25nZXIgYmUgd3JhcHBlZCBvciB1bndyYXBwZWQgdW50aWwgYSBuZXcgbWFwcGluZyBpcyBzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAADIbYeywghzZXRjaXZpYwAAwFUZ64iywgpzZXRjbHVzdGVyAAAAwOlSirLCCXNldGNvb3JkcwAAAEgudzWzwglzZXRuZXh0aWQAAABgC+U1s8IJc2V0bmZ0Y2ZnxAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2V0bmZ0Y2ZnCnN1bW1hcnk6ICdTZXQgTkZUIHRlbXBsYXRlIG1hcHBpbmcgZm9yIGFuIGl0ZW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkJpbmQgYW4gaXRlbSBpZCB0byBhbiBBdG9taWNBc3NldHMgdGVtcGxhdGUgaWQgYW5kIHNjaGVtYSBuYW1lLiBVc2VkIHRvIGNvbmZpZ3VyZSBob3cgdGhlIGNvbnRyYWN0IG1pbnRzIGFuZCByZWNvZ25pemVzIE5GVHMgZm9yIGEgZ2l2ZW4gaXRlbS4gSW5zZXJ0cyBhIG5ldyBtYXBwaW5nIGlmIG9uZSBkb2VzIG5vdCBleGlzdCwgb3IgdXBkYXRlcyB0aGUgZXhpc3RpbmcgbWFwcGluZy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAyAoiirPCCXNldHNvY2tldACQIm1Y3ZazwgxzZXR0aHJlc2hvbGQAADKmqJrLs8ILc2V0d3JhcGNvc3QAAIBSq5rLs8IKc2V0d3JhcGZlZQAAAABAxZx1wwdzaHV0dGxlAAAAoOwaxGnGCXN0b3djYXJnb9UFLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHN0b3djYXJnbwpzdW1tYXJ5OiAnUmVzZXJ2ZSBhIGNhcmdvIHN0YWNrIGZvciB3cmFwcGluZyBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIGNhbGxlZCBpbmxpbmUgYnkgdGhlIHBsYXRmb3JtIGNvbnRyYWN0IG9ubHkuIFJlc2VydmVzIGFuZCBjb25zdW1lcyBhIGNhcmdvIHN0YWNrIG9uIGEgbGl2ZSBlbnRpdHkgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZULiBWYWxpZGF0ZXMgZW50aXR5IG93bmVyc2hpcCwgbG9hZGVycywgYW5kIHByZXNlbmNlIGF0IHRoZSBuZXh1cywgYW5kIGNvbmZpcm1zIHRoZSB0YXJnZXQgY2FyZ28gc3RhY2sgaXMgYXZhaWxhYmxlIGFuZCBub3QgcmVzZXJ2ZWQgYnkgYSBwZW5kaW5nIHRhc2suIENvbXB1dGVzIHRoZSB3cmFwIGNvc3QgYW5kIGZlZSwgZGViaXRzIHRoZW0gZnJvbSB0aGUgb3duZXIncyBwbGF0Zm9ybSBkZXBvc2l0IGJhbGFuY2UsIGRlcml2ZXMgdGhlIE5GVCdzIGltbXV0YWJsZSBkYXRhLCBhbmQgbWludHMgdGhlIE5GVCBpbmxpbmUgYXMgdGhlIGdhbWUgY29udHJhY3QgYmVmb3JlIGNvbnN1bWluZyB0aGUgY2FyZ28uIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AgM8uT8VpxgpzdG93ZW50aXR5mQUtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Rvd2VudGl0eQpzdW1tYXJ5OiAnUmVzZXJ2ZSBhbiBlbnRpdHkgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZUJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSB0aGUgcGxhdGZvcm0gY29udHJhY3Qgb25seS4gUmVzZXJ2ZXMgYSB3aG9sZSBlbnRpdHkgKHNoaXAsIGNvbnRhaW5lciwgb3IgcGxhbmV0YXJ5IHN0cnVjdHVyZSkgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZULiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIGVtcHR5IGNhcmdvIGFuZCBubyBzY2hlZHVsZWQgdGFza3MuIENvbXB1dGVzIHRoZSB3cmFwIGNvc3QgYW5kIGZlZSwgZGViaXRzIHRoZW0gZnJvbSB0aGUgb3duZXIncyBwbGF0Zm9ybSBkZXBvc2l0IGJhbGFuY2UsIGRlcml2ZXMgdGhlIGVudGl0eSBORlQncyBpbW11dGFibGUgZGF0YSwgbWludHMgdGhlIE5GVCBpbmxpbmUgYXMgdGhlIGdhbWUgY29udHJhY3QsIGFuZCBlcmFzZXMgdGhlIGVudGl0eSBmcm9tIHRoZSB3b3JsZC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgCAijpRWQ3HCnN3YXBtb2R1bGUAAAAAKrpcDccIc3dhcHRpbGUAAAAAIDs8zc0HdHJhbnNpdAAAAAAARLXNzQZ0cmF2ZWz7AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgYSBzaGlwJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSB0cmF2ZWwgb2YgYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgbG9jYXRpb24gdG8gYSBuZXcgZGVzdGluYXRpb24uAMA0sUa1zc0KdHJhdmVscGxhbgAAAACexqrS1Ah1bmRlcGxveecELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHVuZGVwbG95CnN1bW1hcnk6ICdQYWNrIGEgZGVwbG95ZWQgZW50aXR5IGludG8gYSBob3N0JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpQYWNrIGFuIGVudGl0eSBpbnRvIGEgaG9zdCBlbnRpdHkncyBjYXJnbyBhcyBhIHBhY2tlZC1lbnRpdHkgaXRlbS4gSG9zdCBhbmQgdGFyZ2V0IG11c3Qgc2hhcmUgdGhlIHNhbWUgb3duZXIgYW5kIGNvb3JkaW5hdGVzLCB0aGUgaG9zdCBtdXN0IGhhdmUgbG9hZGVycyBhbmQgZW5vdWdoIGNhcGFjaXR5IGZvciB0aGUgcGFja2VkIG1hc3MsIGFuZCB0aGUgdGFyZ2V0IG11c3QgYmUgaWRsZSB3aXRoIGVtcHR5IGNhcmdvLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGFuZCBzY2hlZHVsZXMgdW5kZXBsb3kgdGFza3Mgb24gYm90aCBlbnRpdGllczsgb24gcmVzb2x1dGlvbiB0aGUgdGFyZ2V0IGlzIGVyYXNlZCBhbmQgdGhlIHBhY2tlZCBlbnRpdHkgaXMgYWRkZWQgdG8gdGhlIGhvc3QncyBjYXJnby4gSW52ZXJzZSBvZiBkZXBsb3kuAAAAACRD49QGdW5sb2FkAAAAAEAlc1nVB3VwZ3JhZGUAAAAAAABQr+EEd2FycJ8DLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdhcnAKc3VtbWFyeTogJ1dhcnAgdG8gYSBkZXN0aW5hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFudGx5IHRlbGVwb3J0IGFuIGVudGl0eSB0byBhIGRlc3RpbmF0aW9uIHN5c3RlbS4gUmVxdWlyZXMgd2FycCBjYXBhYmlsaXR5LCBmdWxsIGVuZXJneSwgZW1wdHkgY2FyZ28sIGFuZCBhbiBlbXB0eSBzY2hlZHVsZS4gVGhlIGRlc3RpbmF0aW9uIG11c3QgYmUgYSB2YWxpZCBzeXN0ZW0gd2l0aGluIHdhcnAgcmFuZ2UuIFJlc29sdmVzIGltbWVkaWF0ZWx5IGFzIGEgemVyby1kdXJhdGlvbiB0YXNrLgAAAAAAoKrjBHdpcGWyAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlCnN1bW1hcnk6ICdERUJVRzogd2lwZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0VAAAAAADKrkEDaTY0AAAJY2FyZ29fcm93AJhbkyLktkMDaTY0AAAPY2l2aWNjb25maWdfcm93AAAAAGDpTEQDaTY0AAAJY2xhaW1fcm93AAAA4KqMdUQDaTY0AAALY2x1c3Rlcl9yb3cAAAAAZCclRQNpNjQAAApjb21taXRfcm93AAAAAPjs8lQDaTY0AAAKZW50aXR5X3JvdwCqppf57PJUA2k2NAAAD2VudGl0eWdyb3VwX3JvdwAAsAr77PJUA2k2NAAADmVudGl0eV9zZXFfcm93AAAAAICGaFUDaTY0AAAJZXBvY2hfcm93AAAAAACAD30DaTY0AAAHam9iX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAGALqYjMpQNpNjQAABFvcmFjbGVfY29uZmlnX3JvdwAAAACriMylA2k2NAAACm9yYWNsZV9yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAARKO2ugNpNjQAAApyZXZlYWxfcm93AAAAQCG3r8IDaTY0AAALc2VydmljZV9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAAAAAAKyqzwNpNjQAAAl0eXBlc19yb3cAAHNrUlTN5QNpNjQAAA53cmFwY29uZmlnX3JvdwAAABlTVM3lA2k2NAAADHdyYXBjb3N0X3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAABHAADINNYUnT4MdGFza19yZXN1bHRzAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAMg0VulMRAx0YXNrX3Jlc3VsdHOQl7noqox1RAx0YXNrX3Jlc3VsdHMAAAAAgLzMRQx0YXNrX3Jlc3VsdHMAAACHvrzMRQtqb2JfcmVjZWlwdAAAAA27SKVKDHRhc2tfcmVzdWx0cwAAAAB4GqtKDHRhc2tfcmVzdWx0cwCAzy5PhbBKBnN0cmluZwAAAABc1bJhDHRhc2tfcmVzdWx0cwDANLFe1bJhDHRhc2tfcmVzdWx0cwDAVRnriLJiC2NsdXN0ZXJfcm93AABgbk2KsmILZ2FtZV9jb25maWcAQHaYVpWyYg5leHRlbmRlZF9hc3NldAAUmiZjl7JiBnVpbnQ2NABUPI65qLJiCHVpbnQxNltdAADAEeWpsmILZW51bV9yZXN1bHQAsHLZ5amyYg1lbnRpdHlfaW5mb1tdAADw2eWpsmILZW50aXR5X2luZm+Qp7s1U7qyYhBmb290cHJpbnRfcmVzdWx0AEw2SarssmIPaXRlbWRhdGFfcmVzdWx0AABOTqrssmIPaXRlbV9pZHNfcmVzdWx0AAAAWKrssmIKaXRlbXNfaW5mbwBU9Vmq7LJiBXVpbnQ4gFX1WarssmILZW51bV9yZXN1bHQAAAAAH/qyYgtqb2JzX3Jlc3VsdABMVjJNB7NiEGtpbmRfbWV0YV9yZXN1bHQAJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZACwqj4nKrNiC2VudW1fcmVzdWx0AABWUScqs2IObW9kdWxlc19yZXN1bHQAAPDnGjWzYgtuZWFyYnlfaW5mbwCAwubkNbNiCHN0cmluZ1tdAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mb6CyyfjRW7NiD3Byb2plY3RlZF9zdGF0ZQAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHQAAM4GYXWzYgtlbnVtX3Jlc3VsdACw2ldhdbNiE3N0cmF0dW1fcmVtYWluaW5nW12AFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AIBCbl+Fs2ILc2VydmljZV9yb3cAAAA404izYhVlbnRpdHlfbGF5b3V0c19yZXN1bHQAgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAFSkTV7Ks2INd29ybWhvbGVfaW5mb5AdnubmqullDHRhc2tfcmVzdWx0cwCi2ubmqullDHRhc2tfcmVzdWx0cwAAAAAA0LBpC2NoZWNrc3VtMjU2AAAAQITSsGkLY2hlY2tzdW01MTIAAAAANDS1iQx0YXNrX3Jlc3VsdHMAAAAAAJAMjQx0YXNrX3Jlc3VsdHMAAAAquqw2lQx0YXNrX3Jlc3VsdHMAAIhXM+nymgZzdHJpbmcAAGXXIIVMrAx0YXNrX3Jlc3VsdHMAfHZ5KoVMrAx0YXNrX3Jlc3VsdHMAAACKXdOQugx0YXNrX3Jlc3VsdHMAAABA7Uixug9yZXNvbHZlX3Jlc3VsdHMAQIxG7UixuhJyZXNvbHZlYWxsX3Jlc3VsdHPg4zVK7Uixug9yZXNvbHZlX3Jlc3VsdHMAAABAxZx1wwx0YXNrX3Jlc3VsdHMAAKDsGsRpxgx0YXNrX3Jlc3VsdHMAgM8uT8Vpxgx0YXNrX3Jlc3VsdHMAAAAqulwNxwx0YXNrX3Jlc3VsdHMAAAAgOzzNzQx0YXNrX3Jlc3VsdHMAAAAARLXNzQx0YXNrX3Jlc3VsdHMAwDSxRrXNzQx0YXNrX3Jlc3VsdHMAAACexqrS1Ax0YXNrX3Jlc3VsdHMAAAAAJEPj1Ax0YXNrX3Jlc3VsdHMAAABAJXNZ1Qx0YXNrX3Jlc3VsdHMAAAAAAFCv4Qx0YXNrX3Jlc3VsdHM=');
444
444
  const abi = ABI.from(abiBlob);
445
445
  var Types;
446
446
  (function (Types) {
@@ -828,6 +828,42 @@ var Types;
828
828
  Struct.type('cluster_row')
829
829
  ], cluster_row);
830
830
  Types.cluster_row = cluster_row;
831
+ let cluster_source = class cluster_source extends Struct {
832
+ };
833
+ __decorate([
834
+ Struct.field(UInt64)
835
+ ], cluster_source.prototype, "source_id", void 0);
836
+ __decorate([
837
+ Struct.field(cargo_item, { array: true })
838
+ ], cluster_source.prototype, "items", void 0);
839
+ cluster_source = __decorate([
840
+ Struct.type('cluster_source')
841
+ ], cluster_source);
842
+ Types.cluster_source = cluster_source;
843
+ let clustercraft = class clustercraft extends Struct {
844
+ };
845
+ __decorate([
846
+ Struct.field(UInt64)
847
+ ], clustercraft.prototype, "id", void 0);
848
+ __decorate([
849
+ Struct.field(UInt16)
850
+ ], clustercraft.prototype, "recipe_id", void 0);
851
+ __decorate([
852
+ Struct.field(UInt32)
853
+ ], clustercraft.prototype, "quantity", void 0);
854
+ __decorate([
855
+ Struct.field(cluster_source, { array: true })
856
+ ], clustercraft.prototype, "sources", void 0);
857
+ __decorate([
858
+ Struct.field(UInt64, { optional: true })
859
+ ], clustercraft.prototype, "target", void 0);
860
+ __decorate([
861
+ Struct.field(UInt8, { optional: true })
862
+ ], clustercraft.prototype, "slot", void 0);
863
+ clustercraft = __decorate([
864
+ Struct.type('clustercraft')
865
+ ], clustercraft);
866
+ Types.clustercraft = clustercraft;
831
867
  let commit = class commit extends Struct {
832
868
  };
833
869
  __decorate([
@@ -3708,6 +3744,7 @@ var HoldKind;
3708
3744
  HoldKind[HoldKind["BUILD"] = 4] = "BUILD";
3709
3745
  HoldKind[HoldKind["FLIGHT"] = 5] = "FLIGHT";
3710
3746
  HoldKind[HoldKind["UPGRADE"] = 6] = "UPGRADE";
3747
+ HoldKind[HoldKind["SOURCE"] = 7] = "SOURCE";
3711
3748
  })(HoldKind || (HoldKind = {}));
3712
3749
  var LocationType;
3713
3750
  (function (LocationType) {
@@ -3869,8 +3906,14 @@ const ITEM_POLYMER_T2 = 20007;
3869
3906
  const ITEM_CERAMIC_T2 = 20008;
3870
3907
  const ITEM_REACTOR_T2 = 20009;
3871
3908
  const ITEM_RESIN_T2 = 20010;
3909
+ const ITEM_ENGINE_T2 = 20100;
3910
+ const ITEM_GENERATOR_T2 = 20101;
3872
3911
  const ITEM_GATHERER_T2 = 20102;
3912
+ const ITEM_LOADER_T2 = 20103;
3913
+ const ITEM_CRAFTER_T2 = 20104;
3873
3914
  const ITEM_HAULER_T2 = 20106;
3915
+ const ITEM_WARP_T2 = 20107;
3916
+ const ITEM_BUILDER_T2 = 20110;
3874
3917
  const ITEM_CONTAINER_T2_PACKED = 20200;
3875
3918
  const ITEM_PROSPECTOR_T2A_PACKED = 20212;
3876
3919
  const ITEM_PROSPECTOR_T2B_PACKED = 20213;
@@ -6007,19 +6050,15 @@ var recipes = [
6007
6050
  ]
6008
6051
  },
6009
6052
  {
6010
- outputItemId: 20102,
6053
+ outputItemId: 20100,
6011
6054
  outputMass: 1536000,
6012
6055
  inputs: [
6013
6056
  {
6014
- itemId: 20005,
6015
- quantity: 300
6016
- },
6017
- {
6018
- itemId: 20002,
6019
- quantity: 300
6057
+ itemId: 20003,
6058
+ quantity: 600
6020
6059
  },
6021
6060
  {
6022
- itemId: 10102,
6061
+ itemId: 10100,
6023
6062
  quantity: 1
6024
6063
  }
6025
6064
  ],
@@ -6031,7 +6070,7 @@ var recipes = [
6031
6070
  statIndex: 0
6032
6071
  },
6033
6072
  {
6034
- inputIndex: 2,
6073
+ inputIndex: 1,
6035
6074
  statIndex: 0
6036
6075
  }
6037
6076
  ]
@@ -6043,20 +6082,50 @@ var recipes = [
6043
6082
  statIndex: 1
6044
6083
  },
6045
6084
  {
6046
- inputIndex: 2,
6085
+ inputIndex: 1,
6047
6086
  statIndex: 1
6048
6087
  }
6049
6088
  ]
6089
+ }
6090
+ ],
6091
+ blendWeights: [
6092
+ ]
6093
+ },
6094
+ {
6095
+ outputItemId: 20101,
6096
+ outputMass: 1536000,
6097
+ inputs: [
6098
+ {
6099
+ itemId: 20004,
6100
+ quantity: 600
6050
6101
  },
6102
+ {
6103
+ itemId: 10101,
6104
+ quantity: 1
6105
+ }
6106
+ ],
6107
+ statSlots: [
6051
6108
  {
6052
6109
  sources: [
6110
+ {
6111
+ inputIndex: 0,
6112
+ statIndex: 0
6113
+ },
6053
6114
  {
6054
6115
  inputIndex: 1,
6055
- statIndex: 3
6116
+ statIndex: 0
6117
+ }
6118
+ ]
6119
+ },
6120
+ {
6121
+ sources: [
6122
+ {
6123
+ inputIndex: 0,
6124
+ statIndex: 1
6056
6125
  },
6057
6126
  {
6058
- inputIndex: 2,
6059
- statIndex: 2
6127
+ inputIndex: 1,
6128
+ statIndex: 1
6060
6129
  }
6061
6130
  ]
6062
6131
  }
@@ -6065,19 +6134,19 @@ var recipes = [
6065
6134
  ]
6066
6135
  },
6067
6136
  {
6068
- outputItemId: 20106,
6137
+ outputItemId: 20102,
6069
6138
  outputMass: 1536000,
6070
6139
  inputs: [
6071
6140
  {
6072
- itemId: 20004,
6141
+ itemId: 20005,
6073
6142
  quantity: 300
6074
6143
  },
6075
6144
  {
6076
- itemId: 20010,
6145
+ itemId: 20002,
6077
6146
  quantity: 300
6078
6147
  },
6079
6148
  {
6080
- itemId: 10106,
6149
+ itemId: 10102,
6081
6150
  quantity: 1
6082
6151
  }
6083
6152
  ],
@@ -6097,7 +6166,7 @@ var recipes = [
6097
6166
  {
6098
6167
  sources: [
6099
6168
  {
6100
- inputIndex: 1,
6169
+ inputIndex: 0,
6101
6170
  statIndex: 1
6102
6171
  },
6103
6172
  {
@@ -6109,8 +6178,8 @@ var recipes = [
6109
6178
  {
6110
6179
  sources: [
6111
6180
  {
6112
- inputIndex: 0,
6113
- statIndex: 2
6181
+ inputIndex: 1,
6182
+ statIndex: 3
6114
6183
  },
6115
6184
  {
6116
6185
  inputIndex: 2,
@@ -6123,19 +6192,15 @@ var recipes = [
6123
6192
  ]
6124
6193
  },
6125
6194
  {
6126
- outputItemId: 20200,
6127
- outputMass: 3100000,
6195
+ outputItemId: 20103,
6196
+ outputMass: 1536000,
6128
6197
  inputs: [
6129
6198
  {
6130
- itemId: 20001,
6131
- quantity: 600
6132
- },
6133
- {
6134
- itemId: 20008,
6199
+ itemId: 20007,
6135
6200
  quantity: 600
6136
6201
  },
6137
6202
  {
6138
- itemId: 10200,
6203
+ itemId: 10103,
6139
6204
  quantity: 1
6140
6205
  }
6141
6206
  ],
@@ -6144,10 +6209,10 @@ var recipes = [
6144
6209
  sources: [
6145
6210
  {
6146
6211
  inputIndex: 0,
6147
- statIndex: 0
6212
+ statIndex: 1
6148
6213
  },
6149
6214
  {
6150
- inputIndex: 2,
6215
+ inputIndex: 1,
6151
6216
  statIndex: 0
6152
6217
  }
6153
6218
  ]
@@ -6156,23 +6221,45 @@ var recipes = [
6156
6221
  sources: [
6157
6222
  {
6158
6223
  inputIndex: 0,
6159
- statIndex: 1
6224
+ statIndex: 0
6160
6225
  },
6161
6226
  {
6162
- inputIndex: 2,
6227
+ inputIndex: 1,
6163
6228
  statIndex: 1
6164
6229
  }
6165
6230
  ]
6231
+ }
6232
+ ],
6233
+ blendWeights: [
6234
+ ]
6235
+ },
6236
+ {
6237
+ outputItemId: 20104,
6238
+ outputMass: 1536000,
6239
+ inputs: [
6240
+ {
6241
+ itemId: 20009,
6242
+ quantity: 300
6243
+ },
6244
+ {
6245
+ itemId: 20006,
6246
+ quantity: 300
6166
6247
  },
6248
+ {
6249
+ itemId: 10104,
6250
+ quantity: 1
6251
+ }
6252
+ ],
6253
+ statSlots: [
6167
6254
  {
6168
6255
  sources: [
6169
6256
  {
6170
- inputIndex: 1,
6171
- statIndex: 0
6257
+ inputIndex: 0,
6258
+ statIndex: 2
6172
6259
  },
6173
6260
  {
6174
6261
  inputIndex: 2,
6175
- statIndex: 2
6262
+ statIndex: 0
6176
6263
  }
6177
6264
  ]
6178
6265
  },
@@ -6180,45 +6267,32 @@ var recipes = [
6180
6267
  sources: [
6181
6268
  {
6182
6269
  inputIndex: 1,
6183
- statIndex: 1
6270
+ statIndex: 0
6184
6271
  },
6185
6272
  {
6186
6273
  inputIndex: 2,
6187
- statIndex: 3
6274
+ statIndex: 1
6188
6275
  }
6189
6276
  ]
6190
6277
  }
6191
6278
  ],
6192
6279
  blendWeights: [
6193
- ],
6194
- sourceSubclass: 10200
6280
+ ]
6195
6281
  },
6196
6282
  {
6197
- outputItemId: 20212,
6198
- outputMass: 4320000,
6283
+ outputItemId: 20106,
6284
+ outputMass: 1536000,
6199
6285
  inputs: [
6200
6286
  {
6201
- itemId: 20001,
6202
- quantity: 200
6203
- },
6204
- {
6205
- itemId: 20008,
6206
- quantity: 200
6207
- },
6208
- {
6209
- itemId: 20007,
6210
- quantity: 200
6211
- },
6212
- {
6213
- itemId: 20003,
6214
- quantity: 200
6287
+ itemId: 20004,
6288
+ quantity: 300
6215
6289
  },
6216
6290
  {
6217
- itemId: 20006,
6218
- quantity: 200
6291
+ itemId: 20010,
6292
+ quantity: 300
6219
6293
  },
6220
6294
  {
6221
- itemId: 10211,
6295
+ itemId: 10106,
6222
6296
  quantity: 1
6223
6297
  }
6224
6298
  ],
@@ -6230,7 +6304,7 @@ var recipes = [
6230
6304
  statIndex: 0
6231
6305
  },
6232
6306
  {
6233
- inputIndex: 5,
6307
+ inputIndex: 2,
6234
6308
  statIndex: 0
6235
6309
  }
6236
6310
  ]
@@ -6239,10 +6313,10 @@ var recipes = [
6239
6313
  sources: [
6240
6314
  {
6241
6315
  inputIndex: 1,
6242
- statIndex: 0
6316
+ statIndex: 1
6243
6317
  },
6244
6318
  {
6245
- inputIndex: 5,
6319
+ inputIndex: 2,
6246
6320
  statIndex: 1
6247
6321
  }
6248
6322
  ]
@@ -6250,70 +6324,67 @@ var recipes = [
6250
6324
  {
6251
6325
  sources: [
6252
6326
  {
6253
- inputIndex: 2,
6254
- statIndex: 0
6327
+ inputIndex: 0,
6328
+ statIndex: 2
6255
6329
  },
6256
6330
  {
6257
- inputIndex: 5,
6331
+ inputIndex: 2,
6258
6332
  statIndex: 2
6259
6333
  }
6260
6334
  ]
6335
+ }
6336
+ ],
6337
+ blendWeights: [
6338
+ ]
6339
+ },
6340
+ {
6341
+ outputItemId: 20107,
6342
+ outputMass: 1536000,
6343
+ inputs: [
6344
+ {
6345
+ itemId: 20004,
6346
+ quantity: 300
6261
6347
  },
6262
6348
  {
6263
- sources: [
6264
- {
6265
- inputIndex: 3,
6266
- statIndex: 0
6267
- },
6268
- {
6269
- inputIndex: 5,
6270
- statIndex: 3
6271
- }
6272
- ]
6349
+ itemId: 20009,
6350
+ quantity: 300
6273
6351
  },
6352
+ {
6353
+ itemId: 10107,
6354
+ quantity: 1
6355
+ }
6356
+ ],
6357
+ statSlots: [
6274
6358
  {
6275
6359
  sources: [
6276
6360
  {
6277
- inputIndex: 4,
6278
- statIndex: 0
6361
+ inputIndex: 0,
6362
+ statIndex: 1
6279
6363
  },
6280
6364
  {
6281
- inputIndex: 5,
6282
- statIndex: 4
6365
+ inputIndex: 2,
6366
+ statIndex: 0
6283
6367
  }
6284
6368
  ]
6285
6369
  }
6286
6370
  ],
6287
6371
  blendWeights: [
6288
- ],
6289
- sourceSubclass: 10211
6372
+ ]
6290
6373
  },
6291
6374
  {
6292
- outputItemId: 20213,
6293
- outputMass: 5760000,
6375
+ outputItemId: 20110,
6376
+ outputMass: 1536000,
6294
6377
  inputs: [
6295
6378
  {
6296
- itemId: 20005,
6297
- quantity: 150
6298
- },
6299
- {
6300
- itemId: 20002,
6301
- quantity: 150
6302
- },
6303
- {
6304
- itemId: 20010,
6305
- quantity: 150
6306
- },
6307
- {
6308
- itemId: 20009,
6309
- quantity: 150
6379
+ itemId: 20006,
6380
+ quantity: 300
6310
6381
  },
6311
6382
  {
6312
- itemId: 20004,
6313
- quantity: 150
6383
+ itemId: 20008,
6384
+ quantity: 300
6314
6385
  },
6315
6386
  {
6316
- itemId: 20212,
6387
+ itemId: 10110,
6317
6388
  quantity: 1
6318
6389
  }
6319
6390
  ],
@@ -6322,10 +6393,10 @@ var recipes = [
6322
6393
  sources: [
6323
6394
  {
6324
6395
  inputIndex: 0,
6325
- statIndex: 0
6396
+ statIndex: 2
6326
6397
  },
6327
6398
  {
6328
- inputIndex: 5,
6399
+ inputIndex: 2,
6329
6400
  statIndex: 0
6330
6401
  }
6331
6402
  ]
@@ -6334,20 +6405,244 @@ var recipes = [
6334
6405
  sources: [
6335
6406
  {
6336
6407
  inputIndex: 1,
6337
- statIndex: 0
6408
+ statIndex: 1
6338
6409
  },
6339
6410
  {
6340
- inputIndex: 5,
6411
+ inputIndex: 2,
6341
6412
  statIndex: 1
6342
6413
  }
6343
6414
  ]
6415
+ }
6416
+ ],
6417
+ blendWeights: [
6418
+ ]
6419
+ },
6420
+ {
6421
+ outputItemId: 20200,
6422
+ outputMass: 3100000,
6423
+ inputs: [
6424
+ {
6425
+ itemId: 20001,
6426
+ quantity: 600
6344
6427
  },
6345
6428
  {
6346
- sources: [
6347
- {
6348
- inputIndex: 2,
6349
- statIndex: 0
6350
- },
6429
+ itemId: 20008,
6430
+ quantity: 600
6431
+ },
6432
+ {
6433
+ itemId: 10200,
6434
+ quantity: 1
6435
+ }
6436
+ ],
6437
+ statSlots: [
6438
+ {
6439
+ sources: [
6440
+ {
6441
+ inputIndex: 0,
6442
+ statIndex: 0
6443
+ },
6444
+ {
6445
+ inputIndex: 2,
6446
+ statIndex: 0
6447
+ }
6448
+ ]
6449
+ },
6450
+ {
6451
+ sources: [
6452
+ {
6453
+ inputIndex: 0,
6454
+ statIndex: 1
6455
+ },
6456
+ {
6457
+ inputIndex: 2,
6458
+ statIndex: 1
6459
+ }
6460
+ ]
6461
+ },
6462
+ {
6463
+ sources: [
6464
+ {
6465
+ inputIndex: 1,
6466
+ statIndex: 0
6467
+ },
6468
+ {
6469
+ inputIndex: 2,
6470
+ statIndex: 2
6471
+ }
6472
+ ]
6473
+ },
6474
+ {
6475
+ sources: [
6476
+ {
6477
+ inputIndex: 1,
6478
+ statIndex: 1
6479
+ },
6480
+ {
6481
+ inputIndex: 2,
6482
+ statIndex: 3
6483
+ }
6484
+ ]
6485
+ }
6486
+ ],
6487
+ blendWeights: [
6488
+ ],
6489
+ sourceSubclass: 10200
6490
+ },
6491
+ {
6492
+ outputItemId: 20212,
6493
+ outputMass: 4320000,
6494
+ inputs: [
6495
+ {
6496
+ itemId: 20001,
6497
+ quantity: 200
6498
+ },
6499
+ {
6500
+ itemId: 20008,
6501
+ quantity: 200
6502
+ },
6503
+ {
6504
+ itemId: 20007,
6505
+ quantity: 200
6506
+ },
6507
+ {
6508
+ itemId: 20003,
6509
+ quantity: 200
6510
+ },
6511
+ {
6512
+ itemId: 20006,
6513
+ quantity: 200
6514
+ },
6515
+ {
6516
+ itemId: 10211,
6517
+ quantity: 1
6518
+ }
6519
+ ],
6520
+ statSlots: [
6521
+ {
6522
+ sources: [
6523
+ {
6524
+ inputIndex: 0,
6525
+ statIndex: 0
6526
+ },
6527
+ {
6528
+ inputIndex: 5,
6529
+ statIndex: 0
6530
+ }
6531
+ ]
6532
+ },
6533
+ {
6534
+ sources: [
6535
+ {
6536
+ inputIndex: 1,
6537
+ statIndex: 0
6538
+ },
6539
+ {
6540
+ inputIndex: 5,
6541
+ statIndex: 1
6542
+ }
6543
+ ]
6544
+ },
6545
+ {
6546
+ sources: [
6547
+ {
6548
+ inputIndex: 2,
6549
+ statIndex: 0
6550
+ },
6551
+ {
6552
+ inputIndex: 5,
6553
+ statIndex: 2
6554
+ }
6555
+ ]
6556
+ },
6557
+ {
6558
+ sources: [
6559
+ {
6560
+ inputIndex: 3,
6561
+ statIndex: 0
6562
+ },
6563
+ {
6564
+ inputIndex: 5,
6565
+ statIndex: 3
6566
+ }
6567
+ ]
6568
+ },
6569
+ {
6570
+ sources: [
6571
+ {
6572
+ inputIndex: 4,
6573
+ statIndex: 0
6574
+ },
6575
+ {
6576
+ inputIndex: 5,
6577
+ statIndex: 4
6578
+ }
6579
+ ]
6580
+ }
6581
+ ],
6582
+ blendWeights: [
6583
+ ],
6584
+ sourceSubclass: 10211
6585
+ },
6586
+ {
6587
+ outputItemId: 20213,
6588
+ outputMass: 5760000,
6589
+ inputs: [
6590
+ {
6591
+ itemId: 20005,
6592
+ quantity: 150
6593
+ },
6594
+ {
6595
+ itemId: 20002,
6596
+ quantity: 150
6597
+ },
6598
+ {
6599
+ itemId: 20010,
6600
+ quantity: 150
6601
+ },
6602
+ {
6603
+ itemId: 20009,
6604
+ quantity: 150
6605
+ },
6606
+ {
6607
+ itemId: 20004,
6608
+ quantity: 150
6609
+ },
6610
+ {
6611
+ itemId: 20212,
6612
+ quantity: 1
6613
+ }
6614
+ ],
6615
+ statSlots: [
6616
+ {
6617
+ sources: [
6618
+ {
6619
+ inputIndex: 0,
6620
+ statIndex: 0
6621
+ },
6622
+ {
6623
+ inputIndex: 5,
6624
+ statIndex: 0
6625
+ }
6626
+ ]
6627
+ },
6628
+ {
6629
+ sources: [
6630
+ {
6631
+ inputIndex: 1,
6632
+ statIndex: 0
6633
+ },
6634
+ {
6635
+ inputIndex: 5,
6636
+ statIndex: 1
6637
+ }
6638
+ ]
6639
+ },
6640
+ {
6641
+ sources: [
6642
+ {
6643
+ inputIndex: 2,
6644
+ statIndex: 0
6645
+ },
6351
6646
  {
6352
6647
  inputIndex: 5,
6353
6648
  statIndex: 2
@@ -7589,6 +7884,20 @@ var items = [
7589
7884
  type: "component",
7590
7885
  tier: 2
7591
7886
  },
7887
+ {
7888
+ id: 20100,
7889
+ mass: 1536000,
7890
+ type: "module",
7891
+ tier: 2,
7892
+ subtype: "engine"
7893
+ },
7894
+ {
7895
+ id: 20101,
7896
+ mass: 1536000,
7897
+ type: "module",
7898
+ tier: 2,
7899
+ subtype: "generator"
7900
+ },
7592
7901
  {
7593
7902
  id: 20102,
7594
7903
  mass: 1536000,
@@ -7596,6 +7905,20 @@ var items = [
7596
7905
  tier: 2,
7597
7906
  subtype: "gatherer"
7598
7907
  },
7908
+ {
7909
+ id: 20103,
7910
+ mass: 1536000,
7911
+ type: "module",
7912
+ tier: 2,
7913
+ subtype: "loader"
7914
+ },
7915
+ {
7916
+ id: 20104,
7917
+ mass: 1536000,
7918
+ type: "module",
7919
+ tier: 2,
7920
+ subtype: "crafter"
7921
+ },
7599
7922
  {
7600
7923
  id: 20106,
7601
7924
  mass: 1536000,
@@ -7603,6 +7926,20 @@ var items = [
7603
7926
  tier: 2,
7604
7927
  subtype: "hauler"
7605
7928
  },
7929
+ {
7930
+ id: 20107,
7931
+ mass: 1536000,
7932
+ type: "module",
7933
+ tier: 2,
7934
+ subtype: "warp"
7935
+ },
7936
+ {
7937
+ id: 20110,
7938
+ mass: 1536000,
7939
+ type: "module",
7940
+ tier: 2,
7941
+ subtype: "builder"
7942
+ },
7606
7943
  {
7607
7944
  id: 20200,
7608
7945
  mass: 3100000,
@@ -7956,16 +8293,46 @@ const itemMetadata = {
7956
8293
  description: 'Advanced saturated organic binder reinforced with tier 2 biomass.',
7957
8294
  color: '#5A8B3E',
7958
8295
  },
8296
+ 20100: {
8297
+ name: 'Engine',
8298
+ description: 'Advanced propulsion system. Reinforced thrust chambers for higher velocity.',
8299
+ color: '#E86344',
8300
+ },
8301
+ 20101: {
8302
+ name: 'Power Core',
8303
+ description: 'Advanced energy system. Higher-density crystal matrix for increased energy throughput.',
8304
+ color: '#4ADBFF',
8305
+ },
7959
8306
  20102: {
7960
8307
  name: 'Limpet Bay',
7961
8308
  description: 'Advanced gathering system. Reinforced probes and conduits for deeper yield.',
7962
8309
  color: '#7B8D9E',
7963
8310
  },
8311
+ 20103: {
8312
+ name: 'Shuttle Bay',
8313
+ description: 'Advanced cargo handling system. Reinforced articulated arms for greater loading throughput.',
8314
+ color: '#5A8B3E',
8315
+ },
8316
+ 20104: {
8317
+ name: 'Fabricator',
8318
+ description: 'Advanced crafting system. Higher-grade reaction chambers for faster processing.',
8319
+ color: '#B877FF',
8320
+ },
7964
8321
  20106: {
7965
8322
  name: 'Tractor Beam',
7966
8323
  description: 'Advanced haul beam projector reinforced with tier 2 components for greater towing capacity.',
7967
8324
  color: '#4ADBFF',
7968
8325
  },
8326
+ 20107: {
8327
+ name: 'Warp Drive',
8328
+ description: 'Advanced warp system. Reinforced field coils project the hull across greater distances.',
8329
+ color: '#9be4ff',
8330
+ },
8331
+ 20110: {
8332
+ name: 'Assembly Arm',
8333
+ description: 'Advanced construction system. Reinforced manipulator arms for faster build and upgrade work.',
8334
+ color: '#FFB347',
8335
+ },
7969
8336
  20200: {
7970
8337
  name: 'Container',
7971
8338
  description: 'Advanced cargo container with improved capacity formulas.',
@@ -8401,7 +8768,20 @@ function dist$1(a, b) {
8401
8768
  function inBounds(c) {
8402
8769
  return c.x >= COORD_MIN && c.x <= COORD_MAX && c.y >= COORD_MIN && c.y <= COORD_MAX;
8403
8770
  }
8771
+ const regionCache = new Map();
8772
+ const REGION_CACHE_MAX = 16384;
8404
8773
  function wormholeOfRegion(seed, R) {
8774
+ const cacheKey = `${seed}:${R.rx}:${R.ry}`;
8775
+ const cached = regionCache.get(cacheKey);
8776
+ if (cached !== undefined)
8777
+ return cached;
8778
+ const result = deriveWormholeOfRegion(seed, R);
8779
+ if (regionCache.size >= REGION_CACHE_MAX)
8780
+ regionCache.clear();
8781
+ regionCache.set(cacheKey, result);
8782
+ return result;
8783
+ }
8784
+ function deriveWormholeOfRegion(seed, R) {
8405
8785
  const P = partnerRegion(seed, R);
8406
8786
  if (P.rx === R.rx && P.ry === R.ry)
8407
8787
  return null;
@@ -13437,8 +13817,10 @@ function moduleAccepts(slotType, moduleType) {
13437
13817
  function getModuleCapabilityType(itemId) {
13438
13818
  switch (itemId) {
13439
13819
  case ITEM_ENGINE_T1:
13820
+ case ITEM_ENGINE_T2:
13440
13821
  return MODULE_ENGINE;
13441
13822
  case ITEM_GENERATOR_T1:
13823
+ case ITEM_GENERATOR_T2:
13442
13824
  return MODULE_GENERATOR;
13443
13825
  case ITEM_GATHERER_T1:
13444
13826
  case ITEM_GATHERER_T2:
@@ -15440,6 +15822,21 @@ class ActionsManager extends BaseManager {
15440
15822
  };
15441
15823
  return this.server.action('craftjob', params);
15442
15824
  }
15825
+ clustercraft(entityId, recipeId, quantity, sources, target, slot) {
15826
+ const params = {
15827
+ id: UInt64.from(entityId),
15828
+ recipe_id: UInt16.from(recipeId),
15829
+ quantity: UInt32.from(quantity),
15830
+ sources,
15831
+ };
15832
+ if (target !== undefined) {
15833
+ params.target = UInt64.from(target);
15834
+ }
15835
+ if (slot !== undefined) {
15836
+ params.slot = UInt8.from(slot);
15837
+ }
15838
+ return this.server.action('clustercraft', params);
15839
+ }
15443
15840
  claimjob(jobId, shipId) {
15444
15841
  const params = {
15445
15842
  job_id: UInt64.from(jobId),
@@ -16446,7 +16843,7 @@ function computeBaseCapacityWarehouse(stats) {
16446
16843
  const s = decodeStat(stats, 0) + decodeStat(stats, 2);
16447
16844
  return Math.floor(100000000 * 6 ** (s / 1998));
16448
16845
  }
16449
- const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
16846
+ const computeEngineThrust = (vol, tier) => idiv((400 + idiv(vol * 3, 4)) * moduleTierPct(ENGINE_THRUST_TIER_PCT, tier), 100);
16450
16847
  const computeEngineDrain = (thm) => 2 * Math.max(30, 50 - idiv(thm, 70));
16451
16848
  const ENGINE_DRAIN_BASE = 156;
16452
16849
  const ENGINE_DRAIN_REF_THRUST = 775;
@@ -16458,16 +16855,15 @@ const computeTravelDrain = (totalThrust, avgThm) => {
16458
16855
  const thrustFactor = Math.sqrt(ENGINE_DRAIN_REF_THRUST / totalThrust);
16459
16856
  return Math.floor(ENGINE_DRAIN_BASE * 1000 * thermalFactor * thrustFactor);
16460
16857
  };
16461
- const computeGeneratorCap = (com) => 1300000 + com * 500;
16462
- const computeGeneratorRech = (fin) => 2000 + fin * 6;
16463
- const computeGathererYield = (str) => 200 + str;
16858
+ const computeGeneratorCap = (com, tier) => idiv((1300000 + com * 500) * moduleTierPct(GENERATOR_CAPACITY_TIER_PCT, tier), 100);
16859
+ const computeGeneratorRech = (fin, tier) => idiv((2000 + fin * 6) * moduleTierPct(GENERATOR_RECHARGE_TIER_PCT, tier), 100);
16464
16860
  const computeGathererDrain = (con) => 2 * Math.max(250000, 1250000 - con * 1250);
16465
16861
  const computeGathererDepth = (tol, tier) => gathererDepthForTier(tol, tier);
16466
16862
  const computeLoaderMass = (ins) => Math.max(200, 2000 - ins * 2);
16467
- const computeLoaderThrust = (pla) => 1 + idiv(pla * pla, 10000);
16468
- const computeCrafterSpeed = (rea) => 100 + idiv(rea * 4, 5);
16863
+ const computeLoaderThrust = (pla, tier) => idiv((1 + idiv(pla * pla, 10000)) * moduleTierPct(LOADER_THRUST_TIER_PCT, tier), 100);
16864
+ const computeCrafterSpeed = (rea, tier) => idiv((100 + idiv(rea * 4, 5)) * moduleTierPct(CRAFTER_SPEED_TIER_PCT, tier), 100);
16469
16865
  const computeCrafterDrain = (fin) => Math.max(5000, 30000 - idiv(fin * 1000, 33));
16470
- const computeBuilderSpeed = (resonance) => 100 + idiv(resonance * 4, 5);
16866
+ const computeBuilderSpeed = (resonance, tier) => idiv((100 + idiv(resonance * 4, 5)) * moduleTierPct(BUILDER_SPEED_TIER_PCT, tier), 100);
16471
16867
  const computeBuilderDrain = (fineness) => Math.max(5000, 30000 - idiv(fineness * 1000, 33));
16472
16868
  const computeHaulerCapacity = (fin, tier) => Math.max(tier, tier + idiv(fin, 400));
16473
16869
  const computeHaulerEfficiency = (con) => 2000 + con * 6;
@@ -16478,7 +16874,7 @@ const supportDrainTierPercent = (tier) => {
16478
16874
  const computeT1LogisticsDrain = (stat) => Math.max(3000, 15000 - Math.min(12000, idiv(stat * 1000, 80)));
16479
16875
  const computeHaulerDrain = (conductivity, tier) => idiv(computeT1LogisticsDrain(conductivity) * supportDrainTierPercent(tier), 100);
16480
16876
  const computeCargoBayDrain = (cohesion, tier) => idiv(computeT1LogisticsDrain(cohesion) * 3 * supportDrainTierPercent(tier), 400);
16481
- const computeWarpRange = (stat) => 100 + stat * 3;
16877
+ const computeWarpRange = (stat, tier) => idiv((100 + stat * 3) * moduleTierPct(WARP_RANGE_TIER_PCT, tier), 100);
16482
16878
  const computeCargoBayCapacity = (strength, density, hardness) => 10000000 + idiv((strength + density + hardness) * 50000000, 2997);
16483
16879
  const computeBatteryBankCapacity = (volatility, thermal, plasticity, insulation) => 2500000 + idiv((volatility + thermal + plasticity + insulation) * 7500000, 3996);
16484
16880
  function entityDisplayName(itemId) {
@@ -16524,17 +16920,22 @@ function entityDisplayName(itemId) {
16524
16920
  function moduleDisplayName(itemId) {
16525
16921
  switch (itemId) {
16526
16922
  case ITEM_ENGINE_T1:
16923
+ case ITEM_ENGINE_T2:
16527
16924
  return 'Engine';
16528
16925
  case ITEM_GENERATOR_T1:
16926
+ case ITEM_GENERATOR_T2:
16529
16927
  return 'Power Core';
16530
16928
  case ITEM_GATHERER_T1:
16531
16929
  case ITEM_GATHERER_T2:
16532
16930
  return 'Limpet Bay';
16533
16931
  case ITEM_LOADER_T1:
16932
+ case ITEM_LOADER_T2:
16534
16933
  return 'Shuttle Bay';
16535
16934
  case ITEM_CRAFTER_T1:
16935
+ case ITEM_CRAFTER_T2:
16536
16936
  return 'Fabricator';
16537
16937
  case ITEM_BUILDER_T1:
16938
+ case ITEM_BUILDER_T2:
16538
16939
  return 'Assembly Arm';
16539
16940
  case ITEM_STORAGE_T1:
16540
16941
  return 'Cargo Hold';
@@ -16542,6 +16943,7 @@ function moduleDisplayName(itemId) {
16542
16943
  case ITEM_HAULER_T2:
16543
16944
  return 'Tractor Beam';
16544
16945
  case ITEM_WARP_T1:
16946
+ case ITEM_WARP_T2:
16545
16947
  return 'Warp Drive';
16546
16948
  case ITEM_BATTERY_T1:
16547
16949
  return 'Battery Bank';
@@ -16563,13 +16965,15 @@ function formatModuleLine(slot, itemId, stats) {
16563
16965
  case MODULE_ENGINE: {
16564
16966
  const vol = computeEffectiveModuleStat(decodeStat(stats, 0));
16565
16967
  const thm = computeEffectiveModuleStat(decodeStat(stats, 1));
16566
- out += ` Thrust ${computeEngineThrust(vol)} Drain ${computeEngineDrain(thm)}`;
16968
+ const tier = getItem(itemId).tier;
16969
+ out += ` Thrust ${computeEngineThrust(vol, tier)} Drain ${computeEngineDrain(thm)}`;
16567
16970
  break;
16568
16971
  }
16569
16972
  case MODULE_GENERATOR: {
16570
16973
  const res = computeEffectiveModuleStat(decodeStat(stats, 0));
16571
16974
  const ref = computeEffectiveModuleStat(decodeStat(stats, 1));
16572
- out += ` Capacity ${toWholeEnergy$1(computeGeneratorCap(res))} Recharge ${toWholeEnergy$1(computeGeneratorRech(ref))}`;
16975
+ const tier = getItem(itemId).tier;
16976
+ out += ` Capacity ${toWholeEnergy$1(computeGeneratorCap(res, tier))} Recharge ${toWholeEnergy$1(computeGeneratorRech(ref, tier))}`;
16573
16977
  break;
16574
16978
  }
16575
16979
  case MODULE_GATHERER: {
@@ -16577,25 +16981,28 @@ function formatModuleLine(slot, itemId, stats) {
16577
16981
  const tol = decodeStat(stats, 1);
16578
16982
  const con = decodeStat(stats, 2);
16579
16983
  const tier = getItem(itemId).tier;
16580
- out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol, tier)} Drain ${toWholeEnergy$1(computeGathererDrain(con))}`;
16984
+ out += ` Yield ${computeGathererYield(str, tier)} Depth ${computeGathererDepth(tol, tier)} Drain ${toWholeEnergy$1(computeGathererDrain(con))}`;
16581
16985
  break;
16582
16986
  }
16583
16987
  case MODULE_LOADER: {
16584
16988
  const fin = decodeStat(stats, 0);
16585
16989
  const pla = decodeStat(stats, 1);
16586
- out += ` Mass ${computeLoaderMass(fin)} Thrust ${computeLoaderThrust(pla)}`;
16990
+ const tier = getItem(itemId).tier;
16991
+ out += ` Mass ${computeLoaderMass(fin)} Thrust ${computeLoaderThrust(pla, tier)}`;
16587
16992
  break;
16588
16993
  }
16589
16994
  case MODULE_CRAFTER: {
16590
16995
  const rea = decodeStat(stats, 0);
16591
16996
  const con = decodeStat(stats, 1);
16592
- out += ` Speed ${computeCrafterSpeed(rea)} Drain ${toWholeEnergy$1(computeCrafterDrain(con))}`;
16997
+ const tier = getItem(itemId).tier;
16998
+ out += ` Speed ${computeCrafterSpeed(rea, tier)} Drain ${toWholeEnergy$1(computeCrafterDrain(con))}`;
16593
16999
  break;
16594
17000
  }
16595
17001
  case MODULE_BUILDER: {
16596
17002
  const res = decodeStat(stats, 0);
16597
17003
  const fin = decodeStat(stats, 1);
16598
- out += ` Speed ${computeBuilderSpeed(res)} Drain ${toWholeEnergy$1(computeBuilderDrain(fin))}`;
17004
+ const tier = getItem(itemId).tier;
17005
+ out += ` Speed ${computeBuilderSpeed(res, tier)} Drain ${toWholeEnergy$1(computeBuilderDrain(fin))}`;
16599
17006
  break;
16600
17007
  }
16601
17008
  case MODULE_STORAGE: {
@@ -16617,7 +17024,8 @@ function formatModuleLine(slot, itemId, stats) {
16617
17024
  }
16618
17025
  case MODULE_WARP: {
16619
17026
  const stat = decodeStat(stats, 0);
16620
- out += ` Range ${computeWarpRange(stat)}`;
17027
+ const tier = getItem(itemId).tier;
17028
+ out += ` Range ${computeWarpRange(stat, tier)}`;
16621
17029
  break;
16622
17030
  }
16623
17031
  case MODULE_BATTERY: {
@@ -16685,20 +17093,20 @@ function computeShipHullCapabilities(stats, itemId = ITEM_SHIP_T1_PACKED) {
16685
17093
  capacity: Math.floor(5000000 * 6 ** exponent),
16686
17094
  };
16687
17095
  }
16688
- function computeEngineCapabilities(stats) {
17096
+ function computeEngineCapabilities(stats, tier) {
16689
17097
  const vol = computeEffectiveModuleStat(stats.volatility);
16690
17098
  const thm = computeEffectiveModuleStat(stats.thermal);
16691
17099
  return {
16692
- thrust: 400 + Math.floor((vol * 3) / 4),
17100
+ thrust: Math.floor(((400 + Math.floor((vol * 3) / 4)) * moduleTierPct(ENGINE_THRUST_TIER_PCT, tier)) / 100),
16693
17101
  drain: 2 * Math.max(30, 50 - Math.floor(thm / 70)),
16694
17102
  };
16695
17103
  }
16696
- function computeGeneratorCapabilities(stats) {
17104
+ function computeGeneratorCapabilities(stats, tier) {
16697
17105
  const res = computeEffectiveModuleStat(stats.resonance);
16698
17106
  const ref = computeEffectiveModuleStat(stats.reflectivity);
16699
17107
  return {
16700
- capacity: 1300000 + res * 500,
16701
- recharge: 2000 + ref * 6,
17108
+ capacity: Math.floor(((1300000 + res * 500) * moduleTierPct(GENERATOR_CAPACITY_TIER_PCT, tier)) / 100),
17109
+ recharge: Math.floor(((2000 + ref * 6) * moduleTierPct(GENERATOR_RECHARGE_TIER_PCT, tier)) / 100),
16702
17110
  };
16703
17111
  }
16704
17112
  const GATHERER_DEPTH_TABLE = [
@@ -16726,33 +17134,37 @@ function computeGathererCapabilities(stats, tier) {
16726
17134
  const con = stats.saturation;
16727
17135
  const tol = stats.tolerance ?? stats.hardness;
16728
17136
  return {
16729
- yield: 200 + str,
17137
+ yield: computeGathererYield(str, tier),
16730
17138
  drain: 2 * Math.max(250000, 1250000 - con * 1250),
16731
17139
  depth: gathererDepthForTier(tol, tier),
16732
17140
  };
16733
17141
  }
16734
- function computeLoaderCapabilities(stats) {
17142
+ function computeLoaderCapabilities(stats, tier) {
16735
17143
  const insulation = stats.insulation;
16736
17144
  const plasticity = stats.plasticity;
16737
17145
  return {
16738
17146
  mass: Math.max(200, 2000 - Math.floor(insulation * 2)),
16739
- thrust: 1 + Math.floor((plasticity * plasticity) / 10000),
17147
+ thrust: Math.floor(((1 + Math.floor((plasticity * plasticity) / 10000)) *
17148
+ moduleTierPct(LOADER_THRUST_TIER_PCT, tier)) /
17149
+ 100),
16740
17150
  quantity: 1,
16741
17151
  };
16742
17152
  }
16743
- function computeCrafterCapabilities(stats) {
17153
+ function computeCrafterCapabilities(stats, tier) {
16744
17154
  const fin = stats.fineness;
16745
17155
  const con = stats.conductivity;
16746
17156
  return {
16747
- speed: 100 + Math.floor((fin * 4) / 5),
17157
+ speed: Math.floor(((100 + Math.floor((fin * 4) / 5)) * moduleTierPct(CRAFTER_SPEED_TIER_PCT, tier)) / 100),
16748
17158
  drain: Math.max(5000, 30000 - Math.floor((con * 1000) / 33)),
16749
17159
  };
16750
17160
  }
16751
- function computeBuilderCapabilities(stats) {
17161
+ function computeBuilderCapabilities(stats, tier) {
16752
17162
  const resonance = stats.resonance;
16753
17163
  const fineness = stats.fineness;
16754
17164
  return {
16755
- speed: 100 + Math.floor((resonance * 4) / 5),
17165
+ speed: Math.floor(((100 + Math.floor((resonance * 4) / 5)) *
17166
+ moduleTierPct(BUILDER_SPEED_TIER_PCT, tier)) /
17167
+ 100),
16756
17168
  drain: Math.max(5000, 30000 - Math.floor((fineness * 1000) / 33)),
16757
17169
  };
16758
17170
  }
@@ -16795,6 +17207,28 @@ function capacityTierMultiplier(tier) {
16795
17207
  function applyCapacityTier(baseCapacity, tier) {
16796
17208
  return clampUint32(Math.floor(baseCapacity * capacityTierMultiplier(tier)));
16797
17209
  }
17210
+ const GATHERER_YIELD_TIER_TABLE = [100, 120, 140, 160, 180, 200, 220, 240, 260, 280];
17211
+ const MODULE_MAX_TIER = 10;
17212
+ const ENGINE_THRUST_TIER_PCT = [100, 120, 140, 160, 180, 200, 220, 240, 260, 280];
17213
+ const GENERATOR_CAPACITY_TIER_PCT = [
17214
+ 100, 110, 120, 130, 140, 150, 160, 170, 180, 190,
17215
+ ];
17216
+ const GENERATOR_RECHARGE_TIER_PCT = [
17217
+ 100, 120, 140, 160, 180, 200, 220, 240, 260, 280,
17218
+ ];
17219
+ const CRAFTER_SPEED_TIER_PCT = [100, 120, 140, 160, 180, 200, 220, 240, 260, 280];
17220
+ const BUILDER_SPEED_TIER_PCT = [100, 120, 140, 160, 180, 200, 220, 240, 260, 280];
17221
+ const WARP_RANGE_TIER_PCT = [100, 120, 140, 160, 180, 200, 220, 240, 260, 280];
17222
+ const LOADER_THRUST_TIER_PCT = [100, 120, 140, 160, 180, 200, 220, 240, 260, 280];
17223
+ function moduleTierPct(table, tier) {
17224
+ const clamped = Math.min(Math.max(tier, 1), MODULE_MAX_TIER);
17225
+ return table[clamped - 1];
17226
+ }
17227
+ function computeGathererYield(str, tier) {
17228
+ const clampedTier = Math.min(Math.max(tier, 1), GATHERER_YIELD_TIER_TABLE.length);
17229
+ const pct = GATHERER_YIELD_TIER_TABLE[clampedTier - 1];
17230
+ return Math.floor(((200 + str) * pct) / 100);
17231
+ }
16798
17232
  function computeBaseCapacity(itemId, stats) {
16799
17233
  let base;
16800
17234
  if (isShipHull(itemId)) {
@@ -16814,15 +17248,20 @@ function computeBaseCapacity(itemId, stats) {
16814
17248
  case ITEM_WAREHOUSE_T1_PACKED:
16815
17249
  base = computeWarehouseHullCapabilities(stats).capacity;
16816
17250
  break;
17251
+ case ITEM_WORKSHOP_T1_PACKED:
17252
+ base = computeWorkshopHullCapabilities(stats).capacity;
17253
+ break;
16817
17254
  default:
16818
17255
  return 0;
16819
17256
  }
16820
17257
  }
16821
17258
  return applyCapacityTier(base, getItem(itemId).tier);
16822
17259
  }
16823
- function computeWarpCapabilities(stats) {
17260
+ function computeWarpCapabilities(stats, tier) {
16824
17261
  const reflectivity = stats.reflectivity;
16825
- return { range: 100 + reflectivity * 3 };
17262
+ return {
17263
+ range: Math.floor(((100 + reflectivity * 3) * moduleTierPct(WARP_RANGE_TIER_PCT, tier)) / 100),
17264
+ };
16826
17265
  }
16827
17266
  function computeWarehouseHullCapabilities(stats) {
16828
17267
  const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
@@ -16832,6 +17271,14 @@ function computeWarehouseHullCapabilities(stats) {
16832
17271
  capacity: Math.floor(100000000 * 6 ** exponent),
16833
17272
  };
16834
17273
  }
17274
+ function computeWorkshopHullCapabilities(stats) {
17275
+ const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
17276
+ const exponent = statSum / 1998.0;
17277
+ return {
17278
+ hullmass: computeBaseHullmass(ITEM_WORKSHOP_T1_PACKED, stats),
17279
+ capacity: Math.floor(5000000 * 6 ** exponent),
17280
+ };
17281
+ }
16835
17282
  function computeEntityCapabilities(stats, itemId, modules, layout) {
16836
17283
  let totalThrust = 0;
16837
17284
  let totalEngineThm = 0;
@@ -16882,14 +17329,14 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
16882
17329
  installedModuleMass += item.mass;
16883
17330
  if (modType === MODULE_ENGINE) {
16884
17331
  hasEngine = true;
16885
- const caps = computeEngineCapabilities(decodedStats);
17332
+ const caps = computeEngineCapabilities(decodedStats, item.tier);
16886
17333
  totalThrust += applySlotMultiplier(caps.thrust, amp);
16887
17334
  totalEngineThm += computeEffectiveModuleStat(decodedStats.thermal ?? 0);
16888
17335
  engineCount += 1;
16889
17336
  }
16890
17337
  else if (modType === MODULE_GENERATOR) {
16891
17338
  hasGenerator = true;
16892
- const caps = computeGeneratorCapabilities(decodedStats);
17339
+ const caps = computeGeneratorCapabilities(decodedStats, item.tier);
16893
17340
  totalGenCapacity += applySlotMultiplierUint32(caps.capacity, amp);
16894
17341
  totalGenRecharge += applySlotMultiplierUint32(caps.recharge, amp);
16895
17342
  }
@@ -16916,7 +17363,7 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
16916
17363
  }
16917
17364
  else if (modType === MODULE_LOADER) {
16918
17365
  hasLoader = true;
16919
- const caps = computeLoaderCapabilities(decodedStats);
17366
+ const caps = computeLoaderCapabilities(decodedStats, item.tier);
16920
17367
  totalLoaderMass += caps.mass;
16921
17368
  totalLoaderThrust += applySlotMultiplier(caps.thrust, amp);
16922
17369
  totalLoaderQuantity += caps.quantity;
@@ -16934,7 +17381,7 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
16934
17381
  }
16935
17382
  else if (modType === MODULE_CRAFTER) {
16936
17383
  hasCrafter = true;
16937
- const caps = computeCrafterCapabilities(decodedStats);
17384
+ const caps = computeCrafterCapabilities(decodedStats, item.tier);
16938
17385
  const scaledSpeed = applySlotMultiplier(caps.speed, amp);
16939
17386
  totalCrafterSpeed += scaledSpeed;
16940
17387
  totalCrafterDrain += caps.drain;
@@ -16947,7 +17394,7 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
16947
17394
  }
16948
17395
  else if (modType === MODULE_BUILDER) {
16949
17396
  hasBuilder = true;
16950
- const caps = computeBuilderCapabilities(decodedStats);
17397
+ const caps = computeBuilderCapabilities(decodedStats, item.tier);
16951
17398
  const scaledSpeed = applySlotMultiplier(caps.speed, amp);
16952
17399
  totalBuilderSpeed += scaledSpeed;
16953
17400
  totalBuilderDrain += caps.drain;
@@ -16969,7 +17416,7 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
16969
17416
  }
16970
17417
  else if (modType === MODULE_WARP) {
16971
17418
  hasWarp = true;
16972
- const caps = computeWarpCapabilities(decodedStats);
17419
+ const caps = computeWarpCapabilities(decodedStats, item.tier);
16973
17420
  totalWarpRange += applySlotMultiplier(caps.range, amp);
16974
17421
  }
16975
17422
  else if (modType === MODULE_LAUNCHER) {
@@ -17222,6 +17669,13 @@ function calc_craft_duration(speed, totalInputMass) {
17222
17669
  const duration = Math.floor(totalInputMass / speed);
17223
17670
  return UInt32.from(duration + 1);
17224
17671
  }
17672
+ const INTAKE_RATE = 36000;
17673
+ function calcClusterIntake(sourcedMass) {
17674
+ return Math.floor(sourcedMass / INTAKE_RATE);
17675
+ }
17676
+ function calcClustercraftDuration(speed, totalInputMass, sourcedMass) {
17677
+ return UInt32.from(calc_craft_duration(speed, totalInputMass).toNumber() + calcClusterIntake(sourcedMass));
17678
+ }
17225
17679
  function calc_craft_energy(drain, totalInputMass) {
17226
17680
  const raw = Math.floor((totalInputMass * drain) / CRAFT_ENERGY_DIVISOR);
17227
17681
  return UInt32.from(Math.min(Math.max(raw + 1, 1000), 4294967295));
@@ -18046,7 +18500,7 @@ function resolveLaneGatherer(modules, entityItemId, laneKey) {
18046
18500
  const con = decodeStat(stats, 2);
18047
18501
  const layout = getEntityLayout(entityItemId)?.slots ?? [];
18048
18502
  const amp = getSlotAmp(layout, idx);
18049
- const yieldVal = applySlotMultiplier(computeGathererYield(str), amp);
18503
+ const yieldVal = applySlotMultiplier(computeGathererYield(str, item.tier ?? 1), amp);
18050
18504
  const drain = computeGathererDrain(con);
18051
18505
  const depth = gathererDepthForTier(tol, item.tier ?? 1);
18052
18506
  return { slotIndex: idx, yield: yieldVal, drain, depth, outputPct: amp };
@@ -18074,7 +18528,7 @@ function resolveLaneCrafter(modules, entityItemId, laneKey) {
18074
18528
  const fin = decodeStat(stats, 1);
18075
18529
  const layout = getEntityLayout(entityItemId)?.slots ?? [];
18076
18530
  const amp = getSlotAmp(layout, idx);
18077
- const speed = applySlotMultiplier(computeCrafterSpeed(rea), amp);
18531
+ const speed = applySlotMultiplier(computeCrafterSpeed(rea, item.tier ?? 1), amp);
18078
18532
  const drain = computeCrafterDrain(fin);
18079
18533
  return { slotIndex: idx, speed, drain, outputPct: amp };
18080
18534
  }
@@ -18091,7 +18545,7 @@ function resolveLaneBuilder(modules, entityItemId, laneKey) {
18091
18545
  const fin = decodeStat(stats, 1);
18092
18546
  const layout = getEntityLayout(entityItemId)?.slots ?? [];
18093
18547
  const amp = getSlotAmp(layout, idx);
18094
- const speed = applySlotMultiplier(computeBuilderSpeed(res), amp);
18548
+ const speed = applySlotMultiplier(computeBuilderSpeed(res, item.tier ?? 1), amp);
18095
18549
  const drain = computeBuilderDrain(fin);
18096
18550
  return { slotIndex: idx, speed, drain, outputPct: amp };
18097
18551
  }
@@ -18104,12 +18558,13 @@ function resolveLaneLoader(modules, entityItemId, laneKey) {
18104
18558
  if (!installed) {
18105
18559
  return { slotIndex: idx, thrust: 0, mass: 0, outputPct: 0, valid: false };
18106
18560
  }
18561
+ const item = getItem(Number(installed.item_id.value ?? installed.item_id));
18107
18562
  const stats = BigInt(installed.stats.toString());
18108
18563
  const ins = decodeStat(stats, 0);
18109
18564
  const pla = decodeStat(stats, 1);
18110
18565
  const layout = getEntityLayout(entityItemId)?.slots ?? [];
18111
18566
  const amp = getSlotAmp(layout, idx);
18112
- const thrust = applySlotMultiplier(computeLoaderThrust(pla), amp);
18567
+ const thrust = applySlotMultiplier(computeLoaderThrust(pla, item.tier ?? 1), amp);
18113
18568
  const mass = computeLoaderMass(ins);
18114
18569
  return { slotIndex: idx, thrust, mass, outputPct: amp, valid: true };
18115
18570
  }
@@ -18332,56 +18787,201 @@ function stackToCargoItem(stack) {
18332
18787
  function statsEquals(a, b) {
18333
18788
  return a.equals(b);
18334
18789
  }
18335
- function stackIdentityEqual(a, b) {
18336
- return a.item_id.equals(b.item_id) && statsEquals(a.stats, b.stats);
18790
+ function stackIdentityEqual(a, b) {
18791
+ return a.item_id.equals(b.item_id) && statsEquals(a.stats, b.stats);
18792
+ }
18793
+ function stackKey(s) {
18794
+ return `${s.item_id.toNumber()}:${s.stats.toString()}`;
18795
+ }
18796
+ function stacksEqual(a, b) {
18797
+ return stackIdentityEqual(a, b) && a.quantity.equals(b.quantity);
18798
+ }
18799
+ function mergeStacks(stacks, add) {
18800
+ const idx = stacks.findIndex((s) => stackIdentityEqual(s, add));
18801
+ if (idx === -1) {
18802
+ return [...stacks, { ...add }];
18803
+ }
18804
+ const result = stacks.slice();
18805
+ result[idx] = {
18806
+ ...result[idx],
18807
+ quantity: UInt32.from(result[idx].quantity.adding(add.quantity)),
18808
+ };
18809
+ return result;
18810
+ }
18811
+ function removeFromStacks(stacks, remove) {
18812
+ const idx = stacks.findIndex((s) => stackIdentityEqual(s, remove));
18813
+ if (idx === -1) {
18814
+ throw new Error(INSUFFICIENT_ITEM_QUANTITY);
18815
+ }
18816
+ const target = stacks[idx];
18817
+ if (target.quantity.lt(remove.quantity)) {
18818
+ throw new Error(INSUFFICIENT_ITEM_QUANTITY);
18819
+ }
18820
+ const remaining = UInt32.from(target.quantity.subtracting(remove.quantity));
18821
+ if (remaining.equals(UInt32.from(0))) {
18822
+ return [...stacks.slice(0, idx), ...stacks.slice(idx + 1)];
18823
+ }
18824
+ const result = stacks.slice();
18825
+ result[idx] = { ...target, quantity: remaining };
18826
+ return result;
18827
+ }
18828
+ function subtractFromStacks(stacks, remove) {
18829
+ const idx = stacks.findIndex((s) => stackIdentityEqual(s, remove));
18830
+ if (idx === -1) {
18831
+ return stacks;
18832
+ }
18833
+ const target = stacks[idx];
18834
+ if (target.quantity.lte(remove.quantity)) {
18835
+ return [...stacks.slice(0, idx), ...stacks.slice(idx + 1)];
18836
+ }
18837
+ const result = stacks.slice();
18838
+ result[idx] = { ...target, quantity: UInt32.from(target.quantity.subtracting(remove.quantity)) };
18839
+ return result;
18840
+ }
18841
+
18842
+ const INCOMING_COUPLING_KINDS = new Set([HoldKind.PUSH, HoldKind.GATHER, HoldKind.FLIGHT]);
18843
+ function isIncomingCouplingKind(kind) {
18844
+ return INCOMING_COUPLING_KINDS.has(kind);
18845
+ }
18846
+ function hasSourceCoupling(task) {
18847
+ return task.couplings.some((c) => c.kind.toNumber() === HoldKind.SOURCE);
18848
+ }
18849
+ function hasIncomingCoupling(task) {
18850
+ return task.couplings.some((c) => isIncomingCouplingKind(c.kind.toNumber()));
18851
+ }
18852
+ function craftCargoOwnership(task) {
18853
+ const clustered = hasSourceCoupling(task);
18854
+ return {
18855
+ clustered,
18856
+ ownOutput: clustered ? !hasIncomingCoupling(task) : task.couplings.length === 0,
18857
+ };
18858
+ }
18859
+ function calcCounterpartDelivery(task, coupling) {
18860
+ if (!isIncomingCouplingKind(coupling.kind.toNumber()))
18861
+ return [];
18862
+ if (task.type.toNumber() === TaskType.CRAFT) {
18863
+ return task.cargo.length === 0 ? [] : [task.cargo[task.cargo.length - 1]];
18864
+ }
18865
+ return task.cargo;
18866
+ }
18867
+ function taskCargoEffect(task) {
18868
+ switch (task.type.toNumber()) {
18869
+ case TaskType.LOAD:
18870
+ case TaskType.UNWRAP:
18871
+ case TaskType.UNDEPLOY:
18872
+ return { added: task.cargo, removed: [] };
18873
+ case TaskType.UNLOAD:
18874
+ case TaskType.UPGRADE:
18875
+ return { added: [], removed: task.cargo };
18876
+ case TaskType.GATHER:
18877
+ return task.couplings.length > 0
18878
+ ? { added: [], removed: [] }
18879
+ : { added: task.cargo, removed: [] };
18880
+ case TaskType.CRAFT: {
18881
+ if (task.cargo.length === 0)
18882
+ return { added: [], removed: [] };
18883
+ const { clustered, ownOutput } = craftCargoOwnership(task);
18884
+ return {
18885
+ added: ownOutput ? [task.cargo[task.cargo.length - 1]] : [],
18886
+ removed: clustered ? [] : task.cargo.slice(0, -1),
18887
+ };
18888
+ }
18889
+ default:
18890
+ return { added: [], removed: [] };
18891
+ }
18892
+ }
18893
+ function refKey(itemId, stats, modules, entityId) {
18894
+ const base = `${itemId}:${stats.toString()}`;
18895
+ const normalizedEntityId = entityId !== '0' ? entityId : '';
18896
+ if (modules.length === 0 && normalizedEntityId === '')
18897
+ return base;
18898
+ return `${base}:modules=${JSON.stringify(modules)}:entity=${normalizedEntityId}`;
18899
+ }
18900
+ function cargoKey(item) {
18901
+ return refKey(item.item_id.toNumber(), BigInt(item.stats.toString()), item.modules ?? [], item.entity_id?.toString() ?? '');
18337
18902
  }
18338
- function stackKey(s) {
18339
- return `${s.item_id.toNumber()}:${s.stats.toString()}`;
18903
+ function cargoInputKey(input) {
18904
+ return refKey(input.itemId, input.stats, input.modules ?? [], '');
18340
18905
  }
18341
- function stacksEqual(a, b) {
18342
- return stackIdentityEqual(a, b) && a.quantity.equals(b.quantity);
18906
+ function cargoQuantity(item) {
18907
+ return BigInt(item.quantity.toString());
18343
18908
  }
18344
- function mergeStacks(stacks, add) {
18345
- const idx = stacks.findIndex((s) => stackIdentityEqual(s, add));
18346
- if (idx === -1) {
18347
- return [...stacks, { ...add }];
18909
+ function projectedCargoAvailableAt(entity, at, incoming = []) {
18910
+ const avail = new Map();
18911
+ for (const item of entity.cargo) {
18912
+ const key = cargoKey(item);
18913
+ avail.set(key, (avail.get(key) ?? 0n) + cargoQuantity(item));
18348
18914
  }
18349
- const result = stacks.slice();
18350
- result[idx] = {
18351
- ...result[idx],
18352
- quantity: UInt32.from(result[idx].quantity.adding(add.quantity)),
18353
- };
18354
- return result;
18355
- }
18356
- function removeFromStacks(stacks, remove) {
18357
- const idx = stacks.findIndex((s) => stackIdentityEqual(s, remove));
18358
- if (idx === -1) {
18359
- throw new Error(INSUFFICIENT_ITEM_QUANTITY);
18915
+ const tasks = orderedTasks(entity);
18916
+ for (const ordered of tasks) {
18917
+ if (ordered.completesAt.getTime() >= at.getTime())
18918
+ continue;
18919
+ for (const item of taskCargoEffect(ordered.task).added) {
18920
+ const key = cargoKey(item);
18921
+ avail.set(key, (avail.get(key) ?? 0n) + cargoQuantity(item));
18922
+ }
18360
18923
  }
18361
- const target = stacks[idx];
18362
- if (target.quantity.lt(remove.quantity)) {
18363
- throw new Error(INSUFFICIENT_ITEM_QUANTITY);
18924
+ for (const src of incoming) {
18925
+ if (src.until.getTime() >= at.getTime())
18926
+ continue;
18927
+ for (const item of src.items) {
18928
+ const key = cargoKey(item);
18929
+ avail.set(key, (avail.get(key) ?? 0n) + cargoQuantity(item));
18930
+ }
18364
18931
  }
18365
- const remaining = UInt32.from(target.quantity.subtracting(remove.quantity));
18366
- if (remaining.equals(UInt32.from(0))) {
18367
- return [...stacks.slice(0, idx), ...stacks.slice(idx + 1)];
18932
+ for (const ordered of tasks) {
18933
+ for (const item of taskCargoEffect(ordered.task).removed) {
18934
+ const key = cargoKey(item);
18935
+ const current = avail.get(key) ?? 0n;
18936
+ const quantity = cargoQuantity(item);
18937
+ avail.set(key, current > quantity ? current - quantity : 0n);
18938
+ }
18368
18939
  }
18369
- const result = stacks.slice();
18370
- result[idx] = { ...target, quantity: remaining };
18371
- return result;
18940
+ return avail;
18372
18941
  }
18373
- function subtractFromStacks(stacks, remove) {
18374
- const idx = stacks.findIndex((s) => stackIdentityEqual(s, remove));
18375
- if (idx === -1) {
18376
- return stacks;
18942
+ function cargoReadyAt(entity, inputs, incoming = []) {
18943
+ const demand = new Map();
18944
+ for (const input of inputs) {
18945
+ const key = cargoInputKey(input);
18946
+ demand.set(key, (demand.get(key) ?? 0n) + BigInt(input.quantity));
18377
18947
  }
18378
- const target = stacks[idx];
18379
- if (target.quantity.lte(remove.quantity)) {
18380
- return [...stacks.slice(0, idx), ...stacks.slice(idx + 1)];
18948
+ const candidates = [0];
18949
+ for (const ordered of orderedTasks(entity)) {
18950
+ for (const item of taskCargoEffect(ordered.task).added) {
18951
+ if (demand.has(cargoKey(item))) {
18952
+ candidates.push(ordered.completesAt.getTime());
18953
+ break;
18954
+ }
18955
+ }
18381
18956
  }
18382
- const result = stacks.slice();
18383
- result[idx] = { ...target, quantity: UInt32.from(target.quantity.subtracting(remove.quantity)) };
18384
- return result;
18957
+ for (const src of incoming) {
18958
+ if (src.items.some((item) => demand.has(cargoKey(item)))) {
18959
+ candidates.push(src.until.getTime());
18960
+ }
18961
+ }
18962
+ candidates.sort((a, b) => a - b);
18963
+ for (const candidateMs of candidates) {
18964
+ const available = projectedCargoAvailableAt(entity, new Date(candidateMs + 1), incoming);
18965
+ let sufficient = true;
18966
+ for (const [key, quantity] of demand) {
18967
+ if ((available.get(key) ?? 0n) < quantity) {
18968
+ sufficient = false;
18969
+ break;
18970
+ }
18971
+ }
18972
+ if (sufficient)
18973
+ return new Date(candidateMs);
18974
+ }
18975
+ return new Date(candidates[candidates.length - 1]);
18976
+ }
18977
+ function availableForItem(avail, itemId) {
18978
+ const prefix = `${itemId}:`;
18979
+ let total = 0n;
18980
+ for (const [key, quantity] of avail) {
18981
+ if (key.startsWith(prefix))
18982
+ total += quantity;
18983
+ }
18984
+ return total;
18385
18985
  }
18386
18986
 
18387
18987
  function toInstalledModules(modules) {
@@ -18612,10 +19212,13 @@ function applyCraftTask(projected, task) {
18612
19212
  applyEnergyCost(projected, task);
18613
19213
  if (task.cargo.length === 0)
18614
19214
  return;
18615
- for (let i = 0; i < task.cargo.length - 1; i++) {
18616
- removeCargoItem(projected, task.cargo[i]);
19215
+ const { clustered, ownOutput } = craftCargoOwnership(task);
19216
+ if (!clustered) {
19217
+ for (let i = 0; i < task.cargo.length - 1; i++) {
19218
+ removeCargoItem(projected, task.cargo[i]);
19219
+ }
18617
19220
  }
18618
- if (task.couplings.length === 0) {
19221
+ if (ownOutput) {
18619
19222
  addCargoItem(projected, task.cargo[task.cargo.length - 1]);
18620
19223
  }
18621
19224
  }
@@ -18811,7 +19414,7 @@ function taskCargoChanges(task) {
18811
19414
  case TaskType.CRAFT:
18812
19415
  return [
18813
19416
  ...items.slice(0, -1).map((i) => toChange(i, 'out')),
18814
- toChange(items[items.length - 1], 'in'),
19417
+ ...(task.couplings.length > 0 ? [] : [toChange(items[items.length - 1], 'in')]),
18815
19418
  ];
18816
19419
  default:
18817
19420
  return [];
@@ -18886,136 +19489,6 @@ function composeIdleResolve(blocker, action, actions, now, lookupCounterpart) {
18886
19489
  return [...ids.map((id) => actions.resolve(id)), action];
18887
19490
  }
18888
19491
 
18889
- const INCOMING_COUPLING_KINDS = new Set([HoldKind.PUSH, HoldKind.GATHER, HoldKind.FLIGHT]);
18890
- function isIncomingCouplingKind(kind) {
18891
- return INCOMING_COUPLING_KINDS.has(kind);
18892
- }
18893
- function calcCounterpartDelivery(task, coupling) {
18894
- if (!isIncomingCouplingKind(coupling.kind.toNumber()))
18895
- return [];
18896
- if (task.type.toNumber() === TaskType.CRAFT) {
18897
- return task.cargo.length === 0 ? [] : [task.cargo[task.cargo.length - 1]];
18898
- }
18899
- return task.cargo;
18900
- }
18901
- function taskCargoEffect(task) {
18902
- switch (task.type.toNumber()) {
18903
- case TaskType.LOAD:
18904
- case TaskType.UNWRAP:
18905
- case TaskType.UNDEPLOY:
18906
- return { added: task.cargo, removed: [] };
18907
- case TaskType.UNLOAD:
18908
- case TaskType.UPGRADE:
18909
- return { added: [], removed: task.cargo };
18910
- case TaskType.GATHER:
18911
- return task.couplings.length > 0
18912
- ? { added: [], removed: [] }
18913
- : { added: task.cargo, removed: [] };
18914
- case TaskType.CRAFT:
18915
- if (task.cargo.length === 0)
18916
- return { added: [], removed: [] };
18917
- return {
18918
- added: task.couplings.length === 0 ? [task.cargo[task.cargo.length - 1]] : [],
18919
- removed: task.cargo.slice(0, -1),
18920
- };
18921
- default:
18922
- return { added: [], removed: [] };
18923
- }
18924
- }
18925
- function refKey(itemId, stats, modules, entityId) {
18926
- const base = `${itemId}:${stats.toString()}`;
18927
- const normalizedEntityId = entityId !== '0' ? entityId : '';
18928
- if (modules.length === 0 && normalizedEntityId === '')
18929
- return base;
18930
- return `${base}:modules=${JSON.stringify(modules)}:entity=${normalizedEntityId}`;
18931
- }
18932
- function cargoKey(item) {
18933
- return refKey(item.item_id.toNumber(), BigInt(item.stats.toString()), item.modules ?? [], item.entity_id?.toString() ?? '');
18934
- }
18935
- function cargoInputKey(input) {
18936
- return refKey(input.itemId, input.stats, input.modules ?? [], '');
18937
- }
18938
- function cargoQuantity(item) {
18939
- return BigInt(item.quantity.toString());
18940
- }
18941
- function projectedCargoAvailableAt(entity, at, incoming = []) {
18942
- const avail = new Map();
18943
- for (const item of entity.cargo) {
18944
- const key = cargoKey(item);
18945
- avail.set(key, (avail.get(key) ?? 0n) + cargoQuantity(item));
18946
- }
18947
- const tasks = orderedTasks(entity);
18948
- for (const ordered of tasks) {
18949
- if (ordered.completesAt.getTime() >= at.getTime())
18950
- continue;
18951
- for (const item of taskCargoEffect(ordered.task).added) {
18952
- const key = cargoKey(item);
18953
- avail.set(key, (avail.get(key) ?? 0n) + cargoQuantity(item));
18954
- }
18955
- }
18956
- for (const src of incoming) {
18957
- if (src.until.getTime() >= at.getTime())
18958
- continue;
18959
- for (const item of src.items) {
18960
- const key = cargoKey(item);
18961
- avail.set(key, (avail.get(key) ?? 0n) + cargoQuantity(item));
18962
- }
18963
- }
18964
- for (const ordered of tasks) {
18965
- for (const item of taskCargoEffect(ordered.task).removed) {
18966
- const key = cargoKey(item);
18967
- const current = avail.get(key) ?? 0n;
18968
- const quantity = cargoQuantity(item);
18969
- avail.set(key, current > quantity ? current - quantity : 0n);
18970
- }
18971
- }
18972
- return avail;
18973
- }
18974
- function cargoReadyAt(entity, inputs, incoming = []) {
18975
- const demand = new Map();
18976
- for (const input of inputs) {
18977
- const key = cargoInputKey(input);
18978
- demand.set(key, (demand.get(key) ?? 0n) + BigInt(input.quantity));
18979
- }
18980
- const candidates = [0];
18981
- for (const ordered of orderedTasks(entity)) {
18982
- for (const item of taskCargoEffect(ordered.task).added) {
18983
- if (demand.has(cargoKey(item))) {
18984
- candidates.push(ordered.completesAt.getTime());
18985
- break;
18986
- }
18987
- }
18988
- }
18989
- for (const src of incoming) {
18990
- if (src.items.some((item) => demand.has(cargoKey(item)))) {
18991
- candidates.push(src.until.getTime());
18992
- }
18993
- }
18994
- candidates.sort((a, b) => a - b);
18995
- for (const candidateMs of candidates) {
18996
- const available = projectedCargoAvailableAt(entity, new Date(candidateMs + 1), incoming);
18997
- let sufficient = true;
18998
- for (const [key, quantity] of demand) {
18999
- if ((available.get(key) ?? 0n) < quantity) {
19000
- sufficient = false;
19001
- break;
19002
- }
19003
- }
19004
- if (sufficient)
19005
- return new Date(candidateMs);
19006
- }
19007
- return new Date(candidates[candidates.length - 1]);
19008
- }
19009
- function availableForItem(avail, itemId) {
19010
- const prefix = `${itemId}:`;
19011
- let total = 0n;
19012
- for (const [key, quantity] of avail) {
19013
- if (key.startsWith(prefix))
19014
- total += quantity;
19015
- }
19016
- return total;
19017
- }
19018
-
19019
19492
  var CancelBlockReason;
19020
19493
  (function (CancelBlockReason) {
19021
19494
  CancelBlockReason["TASK_NEVER"] = "TASK_NEVER";
@@ -19315,6 +19788,16 @@ function receiveFits(dest, item, now) {
19315
19788
  return peak <= capacity;
19316
19789
  }
19317
19790
 
19791
+ function clusterStockAvailable(members, at) {
19792
+ const total = new Map();
19793
+ for (const member of members) {
19794
+ for (const [key, qty] of projectedCargoAvailableAt(member, at)) {
19795
+ total.set(key, (total.get(key) ?? 0n) + qty);
19796
+ }
19797
+ }
19798
+ return total;
19799
+ }
19800
+
19318
19801
  function itemReadyAt(entity, itemIds, incoming) {
19319
19802
  let readyMs = 0;
19320
19803
  for (const ordered of orderedTasks(entity)) {
@@ -20156,7 +20639,7 @@ function resolveComponent(id, stats) {
20156
20639
  function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
20157
20640
  switch (moduleType) {
20158
20641
  case MODULE_ENGINE: {
20159
- const caps = computeEngineCapabilities(stats);
20642
+ const caps = computeEngineCapabilities(stats, tier);
20160
20643
  return {
20161
20644
  capability: 'Engine',
20162
20645
  attributes: [
@@ -20166,7 +20649,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
20166
20649
  };
20167
20650
  }
20168
20651
  case MODULE_GENERATOR: {
20169
- const caps = computeGeneratorCapabilities(stats);
20652
+ const caps = computeGeneratorCapabilities(stats, tier);
20170
20653
  return {
20171
20654
  capability: 'Generator',
20172
20655
  attributes: [
@@ -20187,7 +20670,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
20187
20670
  };
20188
20671
  }
20189
20672
  case MODULE_LOADER: {
20190
- const caps = computeLoaderCapabilities(stats);
20673
+ const caps = computeLoaderCapabilities(stats, tier);
20191
20674
  return {
20192
20675
  capability: 'Loading',
20193
20676
  attributes: [
@@ -20198,7 +20681,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
20198
20681
  };
20199
20682
  }
20200
20683
  case MODULE_CRAFTER: {
20201
- const caps = computeCrafterCapabilities(stats);
20684
+ const caps = computeCrafterCapabilities(stats, tier);
20202
20685
  return {
20203
20686
  capability: 'Crafting',
20204
20687
  attributes: [
@@ -20208,7 +20691,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
20208
20691
  };
20209
20692
  }
20210
20693
  case MODULE_BUILDER: {
20211
- const caps = computeBuilderCapabilities(stats);
20694
+ const caps = computeBuilderCapabilities(stats, tier);
20212
20695
  return {
20213
20696
  capability: 'Build',
20214
20697
  attributes: [
@@ -20625,7 +21108,7 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
20625
21108
  base.push({ first: 'thermal', second: ['uint16', thm] });
20626
21109
  base.push({
20627
21110
  first: 'thrust',
20628
- second: ['uint32', computeEngineThrust(computeEffectiveModuleStat(vol))],
21111
+ second: ['uint32', computeEngineThrust(computeEffectiveModuleStat(vol), item.tier)],
20629
21112
  });
20630
21113
  base.push({
20631
21114
  first: 'drain',
@@ -20642,14 +21125,14 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
20642
21125
  first: 'capacity',
20643
21126
  second: [
20644
21127
  'uint16',
20645
- toWholeEnergy(computeGeneratorCap(computeEffectiveModuleStat(res))),
21128
+ toWholeEnergy(computeGeneratorCap(computeEffectiveModuleStat(res), item.tier)),
20646
21129
  ],
20647
21130
  });
20648
21131
  base.push({
20649
21132
  first: 'recharge',
20650
21133
  second: [
20651
21134
  'uint16',
20652
- toWholeEnergy(computeGeneratorRech(computeEffectiveModuleStat(ref))),
21135
+ toWholeEnergy(computeGeneratorRech(computeEffectiveModuleStat(ref), item.tier)),
20653
21136
  ],
20654
21137
  });
20655
21138
  break;
@@ -20661,7 +21144,10 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
20661
21144
  base.push({ first: 'strength', second: ['uint16', str] });
20662
21145
  base.push({ first: 'hardness', second: ['uint16', hrd] });
20663
21146
  base.push({ first: 'saturation', second: ['uint16', sat] });
20664
- base.push({ first: 'yield', second: ['uint16', computeGathererYield(str)] });
21147
+ base.push({
21148
+ first: 'yield',
21149
+ second: ['uint16', computeGathererYield(str, item.tier)],
21150
+ });
20665
21151
  base.push({
20666
21152
  first: 'drain',
20667
21153
  second: ['uint16', toWholeEnergy(computeGathererDrain(sat))],
@@ -20675,13 +21161,13 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
20675
21161
  base.push({ first: 'fineness', second: ['uint16', fin] });
20676
21162
  base.push({ first: 'plasticity', second: ['uint16', pla] });
20677
21163
  base.push({ first: 'mass', second: ['uint32', computeLoaderMass(fin)] });
20678
- base.push({ first: 'thrust', second: ['uint16', computeLoaderThrust(pla)] });
21164
+ base.push({ first: 'thrust', second: ['uint16', computeLoaderThrust(pla, item.tier)] });
20679
21165
  break;
20680
21166
  }
20681
21167
  case MODULE_WARP: {
20682
21168
  const ref = decodeStat(stats, 0);
20683
21169
  base.push({ first: 'reflectivity', second: ['uint16', ref] });
20684
- base.push({ first: 'range', second: ['uint32', computeWarpRange(ref)] });
21170
+ base.push({ first: 'range', second: ['uint32', computeWarpRange(ref, item.tier)] });
20685
21171
  break;
20686
21172
  }
20687
21173
  case MODULE_CRAFTER: {
@@ -20689,7 +21175,7 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
20689
21175
  const con = decodeStat(stats, 1);
20690
21176
  base.push({ first: 'fineness', second: ['uint16', fin] });
20691
21177
  base.push({ first: 'conductivity', second: ['uint16', con] });
20692
- base.push({ first: 'speed', second: ['uint16', computeCrafterSpeed(fin)] });
21178
+ base.push({ first: 'speed', second: ['uint16', computeCrafterSpeed(fin, item.tier)] });
20693
21179
  base.push({ first: 'drain', second: ['uint16', toWholeEnergy(computeCrafterDrain(con))] });
20694
21180
  break;
20695
21181
  }
@@ -20698,7 +21184,7 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
20698
21184
  const fin = decodeStat(stats, 1);
20699
21185
  base.push({ first: 'resonance', second: ['uint16', res] });
20700
21186
  base.push({ first: 'fineness', second: ['uint16', fin] });
20701
- base.push({ first: 'speed', second: ['uint16', computeBuilderSpeed(res)] });
21187
+ base.push({ first: 'speed', second: ['uint16', computeBuilderSpeed(res, item.tier)] });
20702
21188
  base.push({ first: 'drain', second: ['uint16', toWholeEnergy(computeBuilderDrain(fin))] });
20703
21189
  break;
20704
21190
  }
@@ -20814,7 +21300,6 @@ var index = /*#__PURE__*/Object.freeze({
20814
21300
  computeTravelDrain: computeTravelDrain,
20815
21301
  computeGeneratorCap: computeGeneratorCap,
20816
21302
  computeGeneratorRech: computeGeneratorRech,
20817
- computeGathererYield: computeGathererYield,
20818
21303
  computeGathererDrain: computeGathererDrain,
20819
21304
  computeGathererDepth: computeGathererDepth,
20820
21305
  computeLoaderMass: computeLoaderMass,
@@ -21073,5 +21558,5 @@ function planParallelTransfer(entity, target) {
21073
21558
  return allocateProportional(laneWeights, requestedQty).filter((e) => e.quantity > 0);
21074
21559
  }
21075
21560
 
21076
- export { ALL_ENTITY_TYPES, ATOMICASSETS_ACCOUNT, ActionsManager, BASE_HAUL_PENALTY_MILLI$1 as BASE_HAUL_PENALTY_MILLI, BASE_ORBITAL_MASS, BLEND_INPUTS_MUST_MATCH, BLEND_REQUIRES_MULTIPLE, BLEND_STAT_LESS_NOT_SUPPORTED, CANCEL_CONTAINS_GROUPED_TASK, CAPACITY_TIER_TABLE, CAP_DEMOLISH, CAP_MODULES, CAP_UNDEPLOY, CAP_WRAP, CATEGORY_LABELS, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, COMPONENT_TIER_PREFIXES, CONTAINER_NOT_FOUND, CONTAINER_Z, COORD_MAX, COORD_MIN, COORD_OFFSET, CRAFT_ENERGY_DIVISOR, CRAFT_EXCEEDS_ENERGY_CAPACITY, CRAFT_NOT_ENOUGH_ENERGY, CancelBlockReason, ClusterManager, ConstructionManager, Coordinates, DEFAULT_BASE_HULLMASS, DEPLOY_ENTITY_HAS_SCHEDULE, DEPTH_THRESHOLD_T1, DEPTH_THRESHOLD_T2, DEPTH_THRESHOLD_T3, DEPTH_THRESHOLD_T4, DEPTH_THRESHOLD_T5, DESTINATION_CAPACITY_EXCEEDED, ENGINE_DRAIN_BASE, ENGINE_DRAIN_REF_THM, ENGINE_DRAIN_REF_THRUST, ENTITY_ALREADY_THERE, ENTITY_CAPACITY_EXCEEDED, ENTITY_CARGO_NOT_LOADED, ENTITY_CARGO_NOT_OWNED, ENTITY_CONSTRUCTION_DOCK, ENTITY_CONTAINER, ENTITY_EXTRACTOR, ENTITY_FACTORY, ENTITY_HUB, ENTITY_INVALID_CARGO, ENTITY_INVALID_DESTINATION, ENTITY_INVALID_TRAVEL_DURATION, ENTITY_NEXUS, ENTITY_NOT_ENOUGH_ENERGY, ENTITY_NOT_ENOUGH_ENERGY_CAPACITY, ENTITY_NO_CRAFTER, ENTITY_SHIP, ENTITY_WAREHOUSE, ENTITY_WORKSHOP, EPOCH_NON_ZERO, EPOCH_NOT_READY, ERROR_SYSTEM_ALREADY_INITIALIZED, ERROR_SYSTEM_DISABLED, ERROR_SYSTEM_NOT_INITIALIZED, EntitiesManager, Entity, EntityClass, EntityInventory, EpochsManager, GAME_NOT_FOUND, GAME_SEED_NOT_SET, GATHERER_DEPTH_MAX_TIER, GATHERER_DEPTH_TABLE, GATHER_EXCEEDS_ENERGY_CAPACITY, GATHER_MASS_DIVISOR, GATHER_NOT_ENOUGH_ENERGY, GROUP_DUPLICATE_ENTITY, GROUP_EMPTY, GROUP_ENTITY_NOT_MOVABLE, GROUP_HAUL_CAPACITY_EXCEEDED, GROUP_NOT_FOUND, GROUP_NOT_SAME_LOCATION, GROUP_NOT_SAME_OWNER, GROUP_NO_THRUST, GameState, HAULER_EFFICIENCY_DENOM$1 as HAULER_EFFICIENCY_DENOM, HoldKind, INSUFFICIENT_BALANCE, INSUFFICIENT_ITEM_QUANTITY, INSUFFICIENT_ITEM_SUPPLY, INVALID_AMOUNT, ITEM_BATTERY_T1, ITEM_BEAM, ITEM_BEAM_T2, ITEM_BIOMASS_T1, ITEM_BIOMASS_T10, ITEM_BIOMASS_T2, ITEM_BIOMASS_T3, ITEM_BIOMASS_T4, ITEM_BIOMASS_T5, ITEM_BIOMASS_T6, ITEM_BIOMASS_T7, ITEM_BIOMASS_T8, ITEM_BIOMASS_T9, ITEM_BUILDER_T1, ITEM_CERAMIC, ITEM_CERAMIC_T2, ITEM_CONSTRUCTION_DOCK_T1_PACKED, ITEM_CONTAINER_T1_PACKED, ITEM_CONTAINER_T2_PACKED, ITEM_CRAFTER_T1, ITEM_CRYSTAL_T1, ITEM_CRYSTAL_T10, ITEM_CRYSTAL_T2, ITEM_CRYSTAL_T3, ITEM_CRYSTAL_T4, ITEM_CRYSTAL_T5, ITEM_CRYSTAL_T6, ITEM_CRYSTAL_T7, ITEM_CRYSTAL_T8, ITEM_CRYSTAL_T9, ITEM_DOES_NOT_EXIST, ITEM_DREDGER_T2A_PACKED, ITEM_ENGINE_T1, ITEM_EXTRACTOR_T1_PACKED, ITEM_FACTORY_T1_PACKED, ITEM_FRAME, ITEM_FRAME_T2, ITEM_GAS_T1, ITEM_GAS_T10, ITEM_GAS_T2, ITEM_GAS_T3, ITEM_GAS_T4, ITEM_GAS_T5, ITEM_GAS_T6, ITEM_GAS_T7, ITEM_GAS_T8, ITEM_GAS_T9, ITEM_GATHERER_T1, ITEM_GATHERER_T2, ITEM_GENERATOR_T1, ITEM_HAULER_T1, ITEM_HAULER_T2, ITEM_HUB_T1_PACKED, ITEM_LAUNCHER_T1, ITEM_LOADER_T1, ITEM_MASS_CATCHER_T1_PACKED, ITEM_MASS_DRIVER_T1_PACKED, ITEM_NOT_AVAILABLE_AT_LOCATION, ITEM_NOT_DEPLOYABLE, ITEM_NOT_PACKED_ENTITY, ITEM_ORE_T1, ITEM_ORE_T10, ITEM_ORE_T2, ITEM_ORE_T3, ITEM_ORE_T4, ITEM_ORE_T5, ITEM_ORE_T6, ITEM_ORE_T7, ITEM_ORE_T8, ITEM_ORE_T9, ITEM_PLASMA_CELL, ITEM_PLASMA_CELL_T2, ITEM_PLATE, ITEM_PLATE_T2, ITEM_POLYMER, ITEM_POLYMER_T2, ITEM_PORTER_T1A_PACKED, ITEM_PROSPECTOR_T1A_PACKED, ITEM_PROSPECTOR_T2A_PACKED, ITEM_PROSPECTOR_T2B_PACKED, ITEM_REACTOR, ITEM_REACTOR_T2, ITEM_REGOLITH_T1, ITEM_REGOLITH_T10, ITEM_REGOLITH_T2, ITEM_REGOLITH_T3, ITEM_REGOLITH_T4, ITEM_REGOLITH_T5, ITEM_REGOLITH_T6, ITEM_REGOLITH_T7, ITEM_REGOLITH_T8, ITEM_REGOLITH_T9, ITEM_RESIN, ITEM_RESIN_T2, ITEM_RESONATOR, ITEM_RESONATOR_T2, ITEM_ROUSTABOUT_T1A_PACKED, ITEM_SENSOR, ITEM_SENSOR_T2, ITEM_SHIP_T1_PACKED, ITEM_SMITH_T1A_PACKED, ITEM_STORAGE_T1, ITEM_TENDER_T1A_PACKED, ITEM_TUG_T1A_PACKED, ITEM_TYPE_COMPONENT, ITEM_TYPE_ENTITY, ITEM_TYPE_MODULE, ITEM_TYPE_RESOURCE, ITEM_WAREHOUSE_T1_PACKED, ITEM_WARP_T1, ITEM_WORKSHOP_T1_PACKED, ITEM_WRIGHT_T1A_PACKED, InventoryAccessor, JOB_QUEUE_CAP, LANE_BARRIER, LANE_MOBILITY, LOCAL_HALF, LOCATION_MAX_DEPTH, LOCATION_MIN_DEPTH, Location, LocationType, LocationsManager, MAX_LEGS, MAX_ORBITAL_ALTITUDE, MAX_STARS_PER_STAT, MAX_STAR_RATING, MIN_ORBITAL_ALTITUDE, MIN_TRANSFER_DISTANCE_ORBITAL_VESSEL, MIN_TRANSFER_DISTANCE_PLANETARY_STRUCTURE, MODULE_ANY, MODULE_AUX, MODULE_BATTERY, MODULE_BUILDER, MODULE_CARGO_NOT_FOUND, MODULE_CRAFTER, MODULE_ENGINE, MODULE_ENTITY_BUSY, MODULE_GATHERER, MODULE_GENERATOR, MODULE_HAULER, MODULE_LAUNCHER, MODULE_LOADER, MODULE_NOT_MODULE, MODULE_SLOT_EMPTY, MODULE_SLOT_INVALID, MODULE_SLOT_OCCUPIED, MODULE_STAT_SCALING_ANCHOR, MODULE_STAT_SCALING_POST_ANCHOR_PERCENT, MODULE_STORAGE, MODULE_TIER_PREFIXES, MODULE_TYPE_MISMATCH, MODULE_WARP, index as NFT, NO_SCHEDULE, NftManager, PLANETARY_STRUCTURE_Z, 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, PLAYER_NOT_JOINED, PRECISION, platform as PlatformContract, Types$1 as PlatformTypes, Player, PlayersManager, RECIPE_INPUTS_EXCESS, RECIPE_INPUTS_INSUFFICIENT, RECIPE_INPUTS_INVALID, RECIPE_INPUTS_MIXED, RECIPE_NOT_FOUND, REGION_DIV, REGION_PER_AXIS, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, RESERVE_TIERS, RESOLVE_COUNT_EXCEEDS_COMPLETED, RESOURCE_TIER_ADJECTIVES, RESOURCE_TIER_MULT_TENTHS, RefitOp, SECTORS_PER_AXIS, SECTOR_DIV, SHIPLOAD_COLLECTION, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_NOT_ARRIVED, SHIP_NOT_FOUND, SHIP_NOT_IDLE, SHIP_NOT_OWNED, SHIP_NO_COMPLETED_TASKS, SHIP_NO_TASKS_TO_CANCEL, SLOT_FORMULAS, STAR_STEP, ScheduleAccessor, server as ServerContract, Types as ServerTypes, Shipload, SubscriptionsManager, TIER_ROLL_MAX, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_NOT_FOUND, WARP_HAS_CARGO, WARP_HAS_SCHEDULE, WARP_NOT_FULL_ENERGY, WARP_NO_CAPABILITY, WARP_OUT_OF_RANGE, WH, WOULD_OVERFILL, WOULD_STRAND, WebSocketConnection, YIELD_FRACTION_DEEP, YIELD_FRACTION_SHALLOW, addressFromCoordinates, allBuildableItems, allPlotBuildableItems, allocateProportional, applyCapacityTier, applyResourceTierMultiplier, availableBuildMethods, availableCapacity, availableCapacityFromMass, availableForItem, baseName, blendCargoStacks, blendComponentStacks, blendCrossGroup, blendStacks, buildComponentImmutable, buildEntityDescription, buildEntityImmutable, buildGatherPlan, buildImmutableData, buildMintAssetAction, buildModuleImmutable, buildResourceImmutable, calcCargoItemMass, calcCargoMass, calcCounterpartDelivery, calcEnergyUsage, calcStacksMass, calc_acceleration, calc_build_duration, calc_build_energy, calc_craft_duration, calc_craft_energy, calc_energyusage, calc_flighttime, calc_gather_duration, calc_gather_energy, calc_gather_rate, calc_group_flighttime, calc_loader_acceleration, calc_loader_flighttime, calc_onesided_duration, calc_orbital_altitude, calc_rechargetime, calc_ship_acceleration, calc_ship_flighttime, calc_ship_mass, calc_ship_rechargetime, calc_transfer_duration, calc_transit_duration, calc_travel_flighttime, calculateFlightTime, calculateLoadTimeBreakdown, calculateRefuelingTime, calculateTransferTime, canMove, cancelEligibility, candidateLaneCompletesAt, capabilityAttributes, capabilityNames, capacityTierMultiplier, capsHasCrafter, capsHasGatherer, capsHasHauler, capsHasLauncher, capsHasLoaders, capsHasMass, capsHasMovement, capsHasStorage, cargoInputKey, cargoItem, cargoItemToStack, cargoKey, cargoReadyAt, cargoRef, cargoUtils, categoryColors, categoryFromIndex, categoryLabel, categoryLabelFromIndex, compareByStars, componentIcon, composeIdleResolve, computeBaseCapacity, computeBaseCapacityContainer, computeBaseCapacityShip, computeBaseCapacityWarehouse, computeBaseHullmass$1 as computeBaseHullmass, computeBatteryCapabilities, computeBuilderCapabilities, computeBuilderDrain, computeBuilderSpeed, computeComponentStats, computeContainerCapabilities, computeCraftedOutputStats, computeCrafterCapabilities, computeCrafterDrain, computeCrafterSpeed, computeEffectiveModuleStat, computeEngineCapabilities, computeEngineDrain, computeEngineThrust, computeEntityCapabilities, computeEntityStats, computeFreeCells, computeGathererCapabilities, computeGathererDepth, computeGathererDrain, computeGathererYield, computeGeneratorCap, computeGeneratorCapabilities, computeGeneratorRech, computeGroupPerLegReach, computeHaulPenalty, computeHaulerCapabilities, computeHaulerCapacity, computeHaulerEfficiency, computeInputMass, computeLauncherCapabilities, computeLoaderCapabilities, computeLoaderMass, computeLoaderThrust, computeNftImageUrl, computePerLegReach, computeShipHullCapabilities, computeStorageCapabilities, computeTravelDrain, computeWarehouseHullCapabilities, computeWarpCapabilities, computeWarpRange, coordsToLocationId, createInventoryAccessor, createProjectedEntity, createScheduleAccessor, decodeAddress, decodeAtomicAsset, decodeCraftedItemStats, decodeRegion, decodeSector, decodeStat, decodeStats, Shipload as default, deriveLocation, deriveLocationSize, deriveLocationStatic, deriveResourceStats, deriveStatMappings, deriveStrata, deriveStratum, derivedLoaders, describeItem, describeModule, describeModuleForItem, describeModuleForSlot, deserializeAsset, deserializeAtomicData, deserializeComponent, deserializeEntity, deserializeModule, deserializeResource, displayName, distanceBetweenCoordinates, distanceBetweenPoints, easeFlightProgress, eligibleUpgrades, encodeAddress, encodeAddressMemo, encodeGatheredCargoStats, encodeRegion, encodeSector, encodeStats, energyAtTime, energyPercent, entityDisplayName, estimateDealTravelTime, estimateTravelTime, estimateUnwrapDuration, feistel, feistelInv, fetchAtomicAssetsForOwner, fetchAtomicSchemas, filterByBuildMethod, findNearbyPlanets, flightSpeedFactor, formatLocation, formatMass, formatMassDelta, formatMassScaled, formatModuleLine, formatTier, gatherEnergyCost, gathererDepthForTier, getAllRecipes, getBaseHullmassFor, getCapabilityAttributeRows, getCapabilityAttributes, getCategoryInfo, getComponentDemand, getComponents, getCurrentEpoch, getDepthThreshold, getDestinationLocation, getEffectiveReserve, getEligibleResources, getEntityClass, getEntityItems, getEntityLayout, getEpochInfo, getFlightOrigin, getInterpolatedPosition, getItem, getItems, getKindMeta, getLocationCandidates, getLocationKind, getLocationProfile, getLocationType, getLocationTypeName, getModuleCapabilityType, getModules, getPackedEntityType, getPlanetSubtype, getPlanetSubtypes, getPositionAt, getProducersForAttribute, getRecipe, getRecipeConsumers, getResourceDemand, getResourceTier, getResourceWeight, getResources, getStatDefinitions, getStatMappings, getStatMappingsForCapability, getStatMappingsForStat, getStatName, getSystemName, getTemplateMeta, hasEnergy, hasEnergyForDistance, hasGatherer, hasLoaders, hasMass, hasSchedule, hasSpace, hasSpaceForMass, hasStorage, hasSystem, hash, hash512, incomingHoldMass, interpolateFlightPosition, isBuildable, isConstructionDock, isContainer, isCraftedItem, isExtractor, isFactory, isFull, isFullFromMass, isGatherableLocation, isHub, isInvertedAttribute, isLocationBuildable, isModuleItem, isNexus, isPlot, isPlotBuildable, isRelatedItem, isShip, isSubscriptionsDebugEnabled, isValidWormholePair, isWarehouse, isWorkshop, itemAbbreviations, itemCategory, itemIds, itemOffset, itemTier, itemTypeCode, jobsToLanes, kindCan, laneKeyForModule, lerp$1 as lerp, makeEntity, mapEntity, maxCraftable, maxQtyForCharge, maxTravelDistance, mergeStacks, moduleAccepts, moduleDisplayName, moduleIcon, moduleSlotTypeToCode, nearbyWormholes, needsRecharge, normalizeDisplayName, parseWireEntity, partnerRegion, pickFabricator, planParallelTransfer, planRoute, projectEntity, projectEntityAt, projectRemainingAt, projectedCargoAvailableAt, projectedPeakCargomass, rawScheduleEnd, readCommonBase, receiveFits, regionOf, removeFromStacks, renderDescription, resolveItem, resolveItemCategory, resolveLaneBuilder, resolveLaneCrafter, resolveLaneGatherer, resolveLaneLoader, resolveLockedAmount, resolveStats, rollTier, rollWithinTier, rollupBuilder, rollupCrafter, rollupGatherer, rollupLoaders, rotation, schedule, sdkSystemGraph, selectGatherLane, setSubscriptionsDebug, simulateRoute, slotAcceptsModule, socketTail, sourceLabelForOutput, splitCost, stackKey, stackToCargoItem, stacksEqual, starRating, starsForStat, statMagnitude, subtractFromStacks, taskCargoChanges, taskCargoEffect, tierAdjective, tierColors, tierOfReserve, toLocation, typeLabel, unwrapLoadDuration, unwrapTransitDuration, usedInputStatKeys, validateDisplayName, validateSchedule, workerLaneKey, wormholeAt, wormholeAtRegionEndpoint, yieldThresholdAt };
21561
+ export { ALL_ENTITY_TYPES, ATOMICASSETS_ACCOUNT, ActionsManager, BASE_HAUL_PENALTY_MILLI$1 as BASE_HAUL_PENALTY_MILLI, BASE_ORBITAL_MASS, BLEND_INPUTS_MUST_MATCH, BLEND_REQUIRES_MULTIPLE, BLEND_STAT_LESS_NOT_SUPPORTED, CANCEL_CONTAINS_GROUPED_TASK, CAPACITY_TIER_TABLE, CAP_DEMOLISH, CAP_MODULES, CAP_UNDEPLOY, CAP_WRAP, CATEGORY_LABELS, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, COMPONENT_TIER_PREFIXES, CONTAINER_NOT_FOUND, CONTAINER_Z, COORD_MAX, COORD_MIN, COORD_OFFSET, CRAFT_ENERGY_DIVISOR, CRAFT_EXCEEDS_ENERGY_CAPACITY, CRAFT_NOT_ENOUGH_ENERGY, CancelBlockReason, ClusterManager, ConstructionManager, Coordinates, DEFAULT_BASE_HULLMASS, DEPLOY_ENTITY_HAS_SCHEDULE, DEPTH_THRESHOLD_T1, DEPTH_THRESHOLD_T2, DEPTH_THRESHOLD_T3, DEPTH_THRESHOLD_T4, DEPTH_THRESHOLD_T5, DESTINATION_CAPACITY_EXCEEDED, ENGINE_DRAIN_BASE, ENGINE_DRAIN_REF_THM, ENGINE_DRAIN_REF_THRUST, ENTITY_ALREADY_THERE, ENTITY_CAPACITY_EXCEEDED, ENTITY_CARGO_NOT_LOADED, ENTITY_CARGO_NOT_OWNED, ENTITY_CONSTRUCTION_DOCK, ENTITY_CONTAINER, ENTITY_EXTRACTOR, ENTITY_FACTORY, ENTITY_HUB, ENTITY_INVALID_CARGO, ENTITY_INVALID_DESTINATION, ENTITY_INVALID_TRAVEL_DURATION, ENTITY_NEXUS, ENTITY_NOT_ENOUGH_ENERGY, ENTITY_NOT_ENOUGH_ENERGY_CAPACITY, ENTITY_NO_CRAFTER, ENTITY_SHIP, ENTITY_WAREHOUSE, ENTITY_WORKSHOP, EPOCH_NON_ZERO, EPOCH_NOT_READY, ERROR_SYSTEM_ALREADY_INITIALIZED, ERROR_SYSTEM_DISABLED, ERROR_SYSTEM_NOT_INITIALIZED, EntitiesManager, Entity, EntityClass, EntityInventory, EpochsManager, GAME_NOT_FOUND, GAME_SEED_NOT_SET, GATHERER_DEPTH_MAX_TIER, GATHERER_DEPTH_TABLE, GATHER_EXCEEDS_ENERGY_CAPACITY, GATHER_MASS_DIVISOR, GATHER_NOT_ENOUGH_ENERGY, GROUP_DUPLICATE_ENTITY, GROUP_EMPTY, GROUP_ENTITY_NOT_MOVABLE, GROUP_HAUL_CAPACITY_EXCEEDED, GROUP_NOT_FOUND, GROUP_NOT_SAME_LOCATION, GROUP_NOT_SAME_OWNER, GROUP_NO_THRUST, GameState, HAULER_EFFICIENCY_DENOM$1 as HAULER_EFFICIENCY_DENOM, HoldKind, INSUFFICIENT_BALANCE, INSUFFICIENT_ITEM_QUANTITY, INSUFFICIENT_ITEM_SUPPLY, INTAKE_RATE, INVALID_AMOUNT, ITEM_BATTERY_T1, ITEM_BEAM, ITEM_BEAM_T2, ITEM_BIOMASS_T1, ITEM_BIOMASS_T10, ITEM_BIOMASS_T2, ITEM_BIOMASS_T3, ITEM_BIOMASS_T4, ITEM_BIOMASS_T5, ITEM_BIOMASS_T6, ITEM_BIOMASS_T7, ITEM_BIOMASS_T8, ITEM_BIOMASS_T9, ITEM_BUILDER_T1, ITEM_BUILDER_T2, ITEM_CERAMIC, ITEM_CERAMIC_T2, ITEM_CONSTRUCTION_DOCK_T1_PACKED, ITEM_CONTAINER_T1_PACKED, ITEM_CONTAINER_T2_PACKED, ITEM_CRAFTER_T1, ITEM_CRAFTER_T2, ITEM_CRYSTAL_T1, ITEM_CRYSTAL_T10, ITEM_CRYSTAL_T2, ITEM_CRYSTAL_T3, ITEM_CRYSTAL_T4, ITEM_CRYSTAL_T5, ITEM_CRYSTAL_T6, ITEM_CRYSTAL_T7, ITEM_CRYSTAL_T8, ITEM_CRYSTAL_T9, ITEM_DOES_NOT_EXIST, ITEM_DREDGER_T2A_PACKED, ITEM_ENGINE_T1, ITEM_ENGINE_T2, ITEM_EXTRACTOR_T1_PACKED, ITEM_FACTORY_T1_PACKED, ITEM_FRAME, ITEM_FRAME_T2, ITEM_GAS_T1, ITEM_GAS_T10, ITEM_GAS_T2, ITEM_GAS_T3, ITEM_GAS_T4, ITEM_GAS_T5, ITEM_GAS_T6, ITEM_GAS_T7, ITEM_GAS_T8, ITEM_GAS_T9, ITEM_GATHERER_T1, ITEM_GATHERER_T2, ITEM_GENERATOR_T1, ITEM_GENERATOR_T2, ITEM_HAULER_T1, ITEM_HAULER_T2, ITEM_HUB_T1_PACKED, ITEM_LAUNCHER_T1, ITEM_LOADER_T1, ITEM_LOADER_T2, ITEM_MASS_CATCHER_T1_PACKED, ITEM_MASS_DRIVER_T1_PACKED, ITEM_NOT_AVAILABLE_AT_LOCATION, ITEM_NOT_DEPLOYABLE, ITEM_NOT_PACKED_ENTITY, ITEM_ORE_T1, ITEM_ORE_T10, ITEM_ORE_T2, ITEM_ORE_T3, ITEM_ORE_T4, ITEM_ORE_T5, ITEM_ORE_T6, ITEM_ORE_T7, ITEM_ORE_T8, ITEM_ORE_T9, ITEM_PLASMA_CELL, ITEM_PLASMA_CELL_T2, ITEM_PLATE, ITEM_PLATE_T2, ITEM_POLYMER, ITEM_POLYMER_T2, ITEM_PORTER_T1A_PACKED, ITEM_PROSPECTOR_T1A_PACKED, ITEM_PROSPECTOR_T2A_PACKED, ITEM_PROSPECTOR_T2B_PACKED, ITEM_REACTOR, ITEM_REACTOR_T2, ITEM_REGOLITH_T1, ITEM_REGOLITH_T10, ITEM_REGOLITH_T2, ITEM_REGOLITH_T3, ITEM_REGOLITH_T4, ITEM_REGOLITH_T5, ITEM_REGOLITH_T6, ITEM_REGOLITH_T7, ITEM_REGOLITH_T8, ITEM_REGOLITH_T9, ITEM_RESIN, ITEM_RESIN_T2, ITEM_RESONATOR, ITEM_RESONATOR_T2, ITEM_ROUSTABOUT_T1A_PACKED, ITEM_SENSOR, ITEM_SENSOR_T2, ITEM_SHIP_T1_PACKED, ITEM_SMITH_T1A_PACKED, ITEM_STORAGE_T1, ITEM_TENDER_T1A_PACKED, ITEM_TUG_T1A_PACKED, ITEM_TYPE_COMPONENT, ITEM_TYPE_ENTITY, ITEM_TYPE_MODULE, ITEM_TYPE_RESOURCE, ITEM_WAREHOUSE_T1_PACKED, ITEM_WARP_T1, ITEM_WARP_T2, ITEM_WORKSHOP_T1_PACKED, ITEM_WRIGHT_T1A_PACKED, InventoryAccessor, JOB_QUEUE_CAP, LANE_BARRIER, LANE_MOBILITY, LOCAL_HALF, LOCATION_MAX_DEPTH, LOCATION_MIN_DEPTH, Location, LocationType, LocationsManager, MAX_LEGS, MAX_ORBITAL_ALTITUDE, MAX_STARS_PER_STAT, MAX_STAR_RATING, MIN_ORBITAL_ALTITUDE, MIN_TRANSFER_DISTANCE_ORBITAL_VESSEL, MIN_TRANSFER_DISTANCE_PLANETARY_STRUCTURE, MODULE_ANY, MODULE_AUX, MODULE_BATTERY, MODULE_BUILDER, MODULE_CARGO_NOT_FOUND, MODULE_CRAFTER, MODULE_ENGINE, MODULE_ENTITY_BUSY, MODULE_GATHERER, MODULE_GENERATOR, MODULE_HAULER, MODULE_LAUNCHER, MODULE_LOADER, MODULE_NOT_MODULE, MODULE_SLOT_EMPTY, MODULE_SLOT_INVALID, MODULE_SLOT_OCCUPIED, MODULE_STAT_SCALING_ANCHOR, MODULE_STAT_SCALING_POST_ANCHOR_PERCENT, MODULE_STORAGE, MODULE_TIER_PREFIXES, MODULE_TYPE_MISMATCH, MODULE_WARP, index as NFT, NO_SCHEDULE, NftManager, PLANETARY_STRUCTURE_Z, 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, PLAYER_NOT_JOINED, PRECISION, platform as PlatformContract, Types$1 as PlatformTypes, Player, PlayersManager, RECIPE_INPUTS_EXCESS, RECIPE_INPUTS_INSUFFICIENT, RECIPE_INPUTS_INVALID, RECIPE_INPUTS_MIXED, RECIPE_NOT_FOUND, REGION_DIV, REGION_PER_AXIS, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, RESERVE_TIERS, RESOLVE_COUNT_EXCEEDS_COMPLETED, RESOURCE_TIER_ADJECTIVES, RESOURCE_TIER_MULT_TENTHS, RefitOp, SECTORS_PER_AXIS, SECTOR_DIV, SHIPLOAD_COLLECTION, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_NOT_ARRIVED, SHIP_NOT_FOUND, SHIP_NOT_IDLE, SHIP_NOT_OWNED, SHIP_NO_COMPLETED_TASKS, SHIP_NO_TASKS_TO_CANCEL, SLOT_FORMULAS, STAR_STEP, ScheduleAccessor, server as ServerContract, Types as ServerTypes, Shipload, SubscriptionsManager, TIER_ROLL_MAX, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_NOT_FOUND, WARP_HAS_CARGO, WARP_HAS_SCHEDULE, WARP_NOT_FULL_ENERGY, WARP_NO_CAPABILITY, WARP_OUT_OF_RANGE, WH, WOULD_OVERFILL, WOULD_STRAND, WebSocketConnection, YIELD_FRACTION_DEEP, YIELD_FRACTION_SHALLOW, addressFromCoordinates, allBuildableItems, allPlotBuildableItems, allocateProportional, applyCapacityTier, applyResourceTierMultiplier, availableBuildMethods, availableCapacity, availableCapacityFromMass, availableForItem, baseName, blendCargoStacks, blendComponentStacks, blendCrossGroup, blendStacks, buildComponentImmutable, buildEntityDescription, buildEntityImmutable, buildGatherPlan, buildImmutableData, buildMintAssetAction, buildModuleImmutable, buildResourceImmutable, calcCargoItemMass, calcCargoMass, calcClusterIntake, calcClustercraftDuration, calcCounterpartDelivery, calcEnergyUsage, calcStacksMass, calc_acceleration, calc_build_duration, calc_build_energy, calc_craft_duration, calc_craft_energy, calc_energyusage, calc_flighttime, calc_gather_duration, calc_gather_energy, calc_gather_rate, calc_group_flighttime, calc_loader_acceleration, calc_loader_flighttime, calc_onesided_duration, calc_orbital_altitude, calc_rechargetime, calc_ship_acceleration, calc_ship_flighttime, calc_ship_mass, calc_ship_rechargetime, calc_transfer_duration, calc_transit_duration, calc_travel_flighttime, calculateFlightTime, calculateLoadTimeBreakdown, calculateRefuelingTime, calculateTransferTime, canMove, cancelEligibility, candidateLaneCompletesAt, capabilityAttributes, capabilityNames, capacityTierMultiplier, capsHasCrafter, capsHasGatherer, capsHasHauler, capsHasLauncher, capsHasLoaders, capsHasMass, capsHasMovement, capsHasStorage, cargoInputKey, cargoItem, cargoItemToStack, cargoKey, cargoReadyAt, cargoRef, cargoUtils, categoryColors, categoryFromIndex, categoryLabel, categoryLabelFromIndex, clusterStockAvailable, compareByStars, componentIcon, composeIdleResolve, computeBaseCapacity, computeBaseCapacityContainer, computeBaseCapacityShip, computeBaseCapacityWarehouse, computeBaseHullmass$1 as computeBaseHullmass, computeBatteryCapabilities, computeBuilderCapabilities, computeBuilderDrain, computeBuilderSpeed, computeComponentStats, computeContainerCapabilities, computeCraftedOutputStats, computeCrafterCapabilities, computeCrafterDrain, computeCrafterSpeed, computeEffectiveModuleStat, computeEngineCapabilities, computeEngineDrain, computeEngineThrust, computeEntityCapabilities, computeEntityStats, computeFreeCells, computeGathererCapabilities, computeGathererDepth, computeGathererDrain, computeGathererYield, computeGeneratorCap, computeGeneratorCapabilities, computeGeneratorRech, computeGroupPerLegReach, computeHaulPenalty, computeHaulerCapabilities, computeHaulerCapacity, computeHaulerEfficiency, computeInputMass, computeLauncherCapabilities, computeLoaderCapabilities, computeLoaderMass, computeLoaderThrust, computeNftImageUrl, computePerLegReach, computeShipHullCapabilities, computeStorageCapabilities, computeTravelDrain, computeWarehouseHullCapabilities, computeWarpCapabilities, computeWarpRange, coordsToLocationId, createInventoryAccessor, createProjectedEntity, createScheduleAccessor, decodeAddress, decodeAtomicAsset, decodeCraftedItemStats, decodeRegion, decodeSector, decodeStat, decodeStats, Shipload as default, deriveLocation, deriveLocationSize, deriveLocationStatic, deriveResourceStats, deriveStatMappings, deriveStrata, deriveStratum, derivedLoaders, describeItem, describeModule, describeModuleForItem, describeModuleForSlot, deserializeAsset, deserializeAtomicData, deserializeComponent, deserializeEntity, deserializeModule, deserializeResource, displayName, distanceBetweenCoordinates, distanceBetweenPoints, easeFlightProgress, eligibleUpgrades, encodeAddress, encodeAddressMemo, encodeGatheredCargoStats, encodeRegion, encodeSector, encodeStats, energyAtTime, energyPercent, entityDisplayName, estimateDealTravelTime, estimateTravelTime, estimateUnwrapDuration, feistel, feistelInv, fetchAtomicAssetsForOwner, fetchAtomicSchemas, filterByBuildMethod, findNearbyPlanets, flightSpeedFactor, formatLocation, formatMass, formatMassDelta, formatMassScaled, formatModuleLine, formatTier, gatherEnergyCost, gathererDepthForTier, getAllRecipes, getBaseHullmassFor, getCapabilityAttributeRows, getCapabilityAttributes, getCategoryInfo, getComponentDemand, getComponents, getCurrentEpoch, getDepthThreshold, getDestinationLocation, getEffectiveReserve, getEligibleResources, getEntityClass, getEntityItems, getEntityLayout, getEpochInfo, getFlightOrigin, getInterpolatedPosition, getItem, getItems, getKindMeta, getLocationCandidates, getLocationKind, getLocationProfile, getLocationType, getLocationTypeName, getModuleCapabilityType, getModules, getPackedEntityType, getPlanetSubtype, getPlanetSubtypes, getPositionAt, getProducersForAttribute, getRecipe, getRecipeConsumers, getResourceDemand, getResourceTier, getResourceWeight, getResources, getStatDefinitions, getStatMappings, getStatMappingsForCapability, getStatMappingsForStat, getStatName, getSystemName, getTemplateMeta, hasEnergy, hasEnergyForDistance, hasGatherer, hasIncomingCoupling, hasLoaders, hasMass, hasSchedule, hasSourceCoupling, hasSpace, hasSpaceForMass, hasStorage, hasSystem, hash, hash512, incomingHoldMass, interpolateFlightPosition, isBuildable, isConstructionDock, isContainer, isCraftedItem, isExtractor, isFactory, isFull, isFullFromMass, isGatherableLocation, isHub, isInvertedAttribute, isLocationBuildable, isModuleItem, isNexus, isPlot, isPlotBuildable, isRelatedItem, isShip, isSubscriptionsDebugEnabled, isValidWormholePair, isWarehouse, isWorkshop, itemAbbreviations, itemCategory, itemIds, itemOffset, itemTier, itemTypeCode, jobsToLanes, kindCan, laneKeyForModule, lerp$1 as lerp, makeEntity, mapEntity, maxCraftable, maxQtyForCharge, maxTravelDistance, mergeStacks, moduleAccepts, moduleDisplayName, moduleIcon, moduleSlotTypeToCode, nearbyWormholes, needsRecharge, normalizeDisplayName, parseWireEntity, partnerRegion, pickFabricator, planParallelTransfer, planRoute, projectEntity, projectEntityAt, projectRemainingAt, projectedCargoAvailableAt, projectedPeakCargomass, rawScheduleEnd, readCommonBase, receiveFits, regionOf, removeFromStacks, renderDescription, resolveItem, resolveItemCategory, resolveLaneBuilder, resolveLaneCrafter, resolveLaneGatherer, resolveLaneLoader, resolveLockedAmount, resolveStats, rollTier, rollWithinTier, rollupBuilder, rollupCrafter, rollupGatherer, rollupLoaders, rotation, schedule, sdkSystemGraph, selectGatherLane, setSubscriptionsDebug, simulateRoute, slotAcceptsModule, socketTail, sourceLabelForOutput, splitCost, stackKey, stackToCargoItem, stacksEqual, starRating, starsForStat, statMagnitude, subtractFromStacks, taskCargoChanges, taskCargoEffect, tierAdjective, tierColors, tierOfReserve, toLocation, typeLabel, unwrapLoadDuration, unwrapTransitDuration, usedInputStatKeys, validateDisplayName, validateSchedule, workerLaneKey, wormholeAt, wormholeAtRegionEndpoint, yieldThresholdAt };
21077
21562
  //# sourceMappingURL=shipload.m.js.map