@sabstravtech/obtservices 0.2.2505201645 → 0.2.2506041247

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +1 -0
  2. package/base/lib/vendor/classes/management-info-and-valid.d.ts +2 -0
  3. package/base/lib/vendor/classes/user-favourite.enum.d.ts +1 -0
  4. package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +1 -0
  5. package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +2 -0
  6. package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +2 -1
  7. package/base/lib/vendor/interfaces/hotel-stars-to-hide.interface.d.ts +7 -0
  8. package/base/lib/vendor/types/types.d.ts +5 -1
  9. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  10. package/bundles/sabstravtech-obtservices-base.umd.js +285 -190
  11. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  12. package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +4 -3
  13. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +36 -9
  14. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +58 -26
  15. package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +4 -3
  16. package/esm2015/base/lib/vendor/classes/helpers.js +5 -5
  17. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +22 -31
  18. package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +17 -7
  19. package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +2 -1
  20. package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
  21. package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
  22. package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
  23. package/esm2015/base/lib/vendor/interfaces/hotel-stars-to-hide.interface.js +1 -1
  24. package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +5 -3
  25. package/esm2015/base/lib/vendor/services/logon.service.js +6 -3
  26. package/esm2015/base/lib/vendor/services/search.service.js +25 -14
  27. package/esm2015/base/lib/vendor/types/types.js +10 -2
  28. package/fesm2015/sabstravtech-obtservices-base.js +179 -93
  29. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  30. package/package.json +1 -1
@@ -604,6 +604,7 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
604
604
  return this.cabfetcher.fetchList(query);
605
605
  }
606
606
  gmtGetCabSearchQuery(fromLocation, toLocation, dateTme) {
607
+ var _a, _b;
607
608
  const createLocation = (location) => {
608
609
  var _a, _b;
609
610
  return {
@@ -628,14 +629,14 @@ export class CabHireEnterpriseSearch extends BaseEnterpriseSearch {
628
629
  countryCode: from.countryCode,
629
630
  postcode: from.postcode,
630
631
  streetAndNumber: from.streetAndNumber,
631
- town: from.town,
632
+ town: (_a = from.town) !== null && _a !== void 0 ? _a : undefined,
632
633
  },
633
634
  toLocation: {
634
635
  buildingName: to.buildingName,
635
636
  countryCode: to.countryCode,
636
637
  postcode: to.postcode,
637
638
  streetAndNumber: to.streetAndNumber,
638
- town: to.town,
639
+ town: (_b = to.town) !== null && _b !== void 0 ? _b : undefined,
639
640
  },
640
641
  travellers: this.travellers.map(traveller => { return { id: traveller.id }; })
641
642
  };
@@ -1395,4 +1396,4 @@ CabHireEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_cab';
1395
1396
  CabHireEnterpriseSearch.SECONDARY_STORAGE_SESSION_PARAMS = 'secondary_search_cab';
1396
1397
  CabHireEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_cab';
1397
1398
  CabHireEnterpriseSearch.MULTI_STORAGE_SESSION_RESULTS = 'multi_results_cab';
1398
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FiaGlyZS1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9jYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVELE9BQU8sRUFPTCw0QkFBNEIsRUFDNUIsZUFBZSxFQUVmLGFBQWEsRUFDZCxNQUFNLGdCQUFnQixDQUFDO0FBTXhCLE9BQU8sRUFDTCxXQUFXLEVBSVgsa0JBQWtCLEVBR2xCLFdBQVcsRUFZWCxXQUFXLEVBQ1gsYUFBYSxFQUNkLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLGlCQUFpQixFQUtqQixZQUFZLEVBRWIsTUFBTSwwQ0FBMEMsQ0FBQztBQVNsRCxNQUFNLE9BQU8sdUJBQ1gsU0FBUSxvQkFBeUY7SUErZGpHLFlBQ1UsVUFBeUMsRUFDakQsT0FBMkIsRUFDM0IsY0FBa0MsRUFDbEMsYUFBK0MsRUFDdkMsYUFBK0MsRUFDdkQsV0FBaUM7UUFFakMsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBUG5ELGVBQVUsR0FBVixVQUFVLENBQStCO1FBSXpDLGtCQUFhLEdBQWIsYUFBYSxDQUFrQztRQTNkbEQsU0FBSSxHQUFnQixXQUFXLENBQUMsR0FBRyxDQUFDO1FBQ25DLGVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBQ3JDLGtCQUFhLEdBQXlCLElBQUksT0FB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LENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XG5pbXBvcnQge1xuICBBZGRyZXNzRm9ybSxcbiAgQ2FiaGlyZVF1b3RlUmVzdWx0QXJyYXksXG4gIE5nYkRhdGVTdHJ1Y3QsXG4gIFJhaWxBaXJwb3J0LFxuICBSZWNlbnRTZWFyY2gsXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQsXG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXG4gIFNlcnZpY2VQcm92aWRlcixcbiAgS2V5VmFsdWUsXG4gIExvY2F0aW9uVHlwZXNcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XG5pbXBvcnQge1xuICBCYXNlQ2FiaGlyZVF1b3RlRmV0Y2hlcixcbiAgQ2FiaGlyZVF1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FiaGlyZS1xdW90ZS1mZXRjaGVyJztcbmltcG9ydCB7XG4gIEFkZHJlc3NUeXBlLFxuICBCYXNrZXRJdGVtLFxuICBDYWJIaXJlTG9jYXRpb25JbnB1dCxcbiAgQ2FiSGlyZVF1b3RlLFxuICBDYWJIaXJlVmVoaWNsZVR5cGUsXG4gIEN1cnJlbmN5Q29kZSxcbiAgTG9jYXRpb25EZXRhaWwsXG4gIE1lc3NhZ2VUeXBlLFxuICBRdWVyeVNlYXJjaENhYkhpcmVBcmdzLFxuICBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMsXG4gIFNlYXJjaENhYkhpcmVRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hFdXJvc3RhclF1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoSG90ZWxzUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hMb3VuZ2VzUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaFBhcmtpbmdRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoUmFpbFF1ZXJ5VmFyaWFibGVzLFxuICBTZXJ2aWNlVHlwZSxcbiAgVHJhbnNwb3J0VHlwZVxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7XG4gIEFpcnBvcnRTZWFyY2hNb2RlLFxuICBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcbiAgQ2FiSGlyZVRlbXBQYXJhbXMsXG4gIFRheGlBaXJwb3J0LFxuICBUYXhpQXR0cmlidXRlLFxuICBUYXhpRm9ybU1vZGUsXG4gIFRyYW5zVHlwZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0ljYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7XG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XG5pbXBvcnQgeyBJQ2FiSGlyZVNlYXJjaEFyZ3MgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NhYi1oaXJlLXNlYXJjaC1hcmcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoPENIX1EgZXh0ZW5kcyBDYWJoaXJlUXVvdGVGZXRjaGVyVHlwZT5cbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxDYWJIaXJlVGVtcFBhcmFtcywgQ2FiaGlyZVF1b3RlUmVzdWx0QXJyYXksIENhYmhpcmVRdW90ZVJlc3VsdEFycmF5PlxuICBpbXBsZW1lbnRzIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlXG57XG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ3NlYXJjaF9jYWInO1xuICBzdGF0aWMgcmVhZG9ubHkgU0VDT05EQVJZX1NUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2Vjb25kYXJ5X3NlYXJjaF9jYWInO1xuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAncmVzdWx0c19jYWInO1xuICBzdGF0aWMgcmVhZG9ubHkgTVVMVElfU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAnbXVsdGlfcmVzdWx0c19jYWInO1xuICBwcml2YXRlIG91dGJvdW5kVmlzaWJpbGl0eTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIGluYm91bmRWaXNpYmlsaXR5OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLkNhYjtcbiAgcHJpdmF0ZSB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSA9IFtdO1xuICBhaXJwb3J0Q2hhbmdlOiBTdWJqZWN0PFRheGlBaXJwb3J0PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcmVhZG9ubHkgdHJhbnNUeXBlczogVHJhbnNUeXBlW10gPSBbXG4gICAgeyBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5BbnksIHZhbHVlOiAnQW55ICgxLTggUGFzc2VuZ2VycyknLCBpZDogOCB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLlN0YW5kYXJkQ2FyLFxuICAgICAgdmFsdWU6ICdTYWxvb24gQ2FyICgxLTQgUGFzc2VuZ2VycyknLFxuICAgICAgaWQ6IDRcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkJsYWNrQ2FiLFxuICAgICAgdmFsdWU6ICdIYWNrbmV5IENhcnJpYWdlICgxLTQgUGFzc2VuZ2VycyknLFxuICAgICAgaWQ6IDRcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkRkYUNhcixcbiAgICAgIHZhbHVlOiAnRGRhIC0gd2hlZWxjaGFpciBhY2Nlc3NpYmxlICgxLTQgUGFzc2VuZ2VycyknLFxuICAgICAgaWQ6IDRcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLk1lZGl1bU1wdixcbiAgICAgIHZhbHVlOiAnUGVvcGxlIENhcnJpZXIgKDEtNyBQYXNzZW5nZXJzKScsXG4gICAgICBpZDogN1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuRXhlY3V0aXZlQ2FyLFxuICAgICAgdmFsdWU6ICdFeGVjdXRpdmUgKDEtNCBQYXNzZW5nZXJzKScsXG4gICAgICBpZDogNFxuICAgIH1cbiAgXTtcblxuICByZWFkb25seSBncm91bmRzcGFuVHJhbnNUeXBlczogVHJhbnNUeXBlW10gPSBbXG4gICAgLi4udGhpcy50cmFuc1R5cGVzLFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkxpbW8sXG4gICAgICB2YWx1ZTogJ0NoYXVmZmV1ciBDYXInLFxuICAgICAgaWQ6IDdcbiAgICB9XG4gIF07XG5cbiAgcmVhZG9ubHkgY21hY1RyYW5zVHlwZXM6IFRyYW5zVHlwZVtdID0gW1xuICAgIC4uLnRoaXMudHJhbnNUeXBlcyxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5EZGFDb2FjaCxcbiAgICAgIHZhbHVlOiAnRGRhIENvYWNoIC0gd2hlZWxjaGFpciBhY2Nlc3NpYmxlICgzMCAtIDEwMCBwYXNzZW5nZXJzKScsXG4gICAgICBpZDogMTJcbiAgICB9XG4gIF0uc29ydCgoYSxiKSA9PiB7XG4gICAgaWYgKGEudmFsdWUgPiBiLnZhbHVlKSByZXR1cm4gMTtcbiAgICBpZiAoYS52YWx1ZSA8IGIudmFsdWUpIHJldHVybiAtMTtcbiAgICByZXR1cm4gMDtcbiAgfSlcblxuICByZWFkb25seSBsaW1vVHlwZXM6IEtleVZhbHVlPENhYkhpcmVWZWhpY2xlVHlwZSwgc3RyaW5nPltdID0gW1xuICAgIHsga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuQW55LFxuICAgICAgdmFsdWU6ICdBbGwnXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5MaW1vLFxuICAgICAgdmFsdWU6ICdMaW1vJ1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuTGltb0J1cyxcbiAgICAgIHZhbHVlOiAnTGltbyBCdXMnXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5NaW5pQnVzLFxuICAgICAgdmFsdWU6ICdNaW5pIEJ1cydcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLk1pbmlDb2FjaCxcbiAgICAgIHZhbHVlOiAnTWluaSBDb2FjaCdcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLlNlZGFuLFxuICAgICAgdmFsdWU6ICdTZWRhbidcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLlN1dixcbiAgICAgIHZhbHVlOiAnU3V2J1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuVmFuLFxuICAgICAgdmFsdWU6ICdWYW4nXG4gICAgfVxuICBdO1xuXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZXM6IFRheGlBdHRyaWJ1dGVbXSA9IFtcbiAgICB7IGVuYWJsZWQ6IGZhbHNlLCBrZXk6ICd3aGVlbGNoYWlyJywgdmFsdWU6ICdXaGVlbGNoYWlyIChPbiBSZXF1ZXN0KScgfSxcbiAgICB7IGVuYWJsZWQ6IGZhbHNlLCBrZXk6ICdjYWxsX29uX2Fycml2YWwnLCB2YWx1ZTogJ0NhbGwgT24gQXJyaXZhbCcgfSxcbiAgICB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGtleTogJ21lZXRfYW5kX2dyZWV0JyxcbiAgICAgIHZhbHVlOiAnTWVldCBBbmQgR3JlZXQgKENoYXJnZSBBcHBsaWVzKSdcbiAgICB9LFxuICAgIHsgZW5hYmxlZDogZmFsc2UsIGtleTogJ3dhaXRfYW5kX3JldHVybicsIHZhbHVlOiAnV2FpdCBBbmQgUmV0dXJuJyB9XG4gIF07XG4gIHJlYWRvbmx5IHNlYXJjaFR5cGVzID0gWydPbmUtd2F5JywgJ1JldHVybiddO1xuXG4gIHJlYWRvbmx5IGFpcnBvcnRTZWFyY2hUeXBlcyA9IFsnQWlycG9ydCBkcm9wIG9mZicsICdBaXJwb3J0IFBpY2sgVXAnXTtcbiAgcmVhZG9ubHkgY3JpdGVyaWEgPSBbJ1BpY2sgVXAgVGltZSddO1xuXG4gIG1vZGU6IFRheGlGb3JtTW9kZSA9IFRheGlGb3JtTW9kZS5BRERSRVNTO1xuICBtb2RlVG86IFRheGlGb3JtTW9kZSA9IFRheGlGb3JtTW9kZS5BRERSRVNTO1xuICBtaW5TZWxlY3REYXRlOiBtb21lbnQuTW9tZW50ID0gbW9tZW50KCk7XG4gIG1pblJldHVyblNlbGVjdERhdGU6IE5nYkRhdGVTdHJ1Y3QgPSB7XG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKCksXG4gICAgbW9udGg6IG1vbWVudCgpLm1vbnRoKCkgKyAxLFxuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKVxuICB9O1xuXG4gIC8vIGdldHRlcnMgYW5kIHNldHRlcnNcbiAgcHJpdmF0ZSBfZGF0ZTogTmdiRGF0ZVN0cnVjdCA9IG51bGw7XG4gIHNlbGVjdGVkUGxhY2VzOiBhbnkgPSBbXTtcbiAgcHJpdmF0ZSBfZnJvbUxvY2F0aW9uOiBDYWJIaXJlTG9jYXRpb25JbnB1dDtcbiAgcHJpdmF0ZSBfdG9Mb2NhdGlvbjogQ2FiSGlyZUxvY2F0aW9uSW5wdXQ7XG4gIHByaXZhdGUgX3ZpYXM6IENhYkhpcmVMb2NhdGlvbklucHV0W10gPSBbbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF07XG5cbiAgZ2V0IGZyb21Mb2NhdGlvbigpOiBDYWJIaXJlTG9jYXRpb25JbnB1dCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zyb21Mb2NhdGlvbjtcbiAgfVxuXG4gIGdldCB0b0xvY2F0aW9uKCk6IENhYkhpcmVMb2NhdGlvbklucHV0IHtcbiAgICByZXR1cm4gdGhpcy5fdG9Mb2NhdGlvbjtcbiAgfVxuXG4gIGdldCBkYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgc2V0IGRhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcbiAgICB0aGlzLl9kYXRlID0gdmFsdWU7XG4gICAgdGhpcy5fdXBkYXRlRGF0ZVRpbWUoKTtcbiAgfVxuXG4gIC8qXG4gICAqIHNlYXJjaFR5cGVcbiAgICovXG4gIHByaXZhdGUgX3NlYXJjaFR5cGUgPSB0aGlzLnNlYXJjaFR5cGVzWzBdO1xuICBnZXQgc2VhcmNoVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoVHlwZTtcbiAgfVxuXG4gIHNldCBzZWFyY2hUeXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZWFyY2hUeXBlID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgLypcbiAgICogYWlycG9pcnQgc2VhcmNoVHlwZVxuICAgKi9cblxuICBfYWlycG9ydFNlYXJjaFR5cGU6IEFpcnBvcnRTZWFyY2hNb2RlID0gQWlycG9ydFNlYXJjaE1vZGUuRFJPUE9GRjtcbiAgZ2V0IGFpcnBvcnRTZWFyY2hUeXBlKCk6IEFpcnBvcnRTZWFyY2hNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fYWlycG9ydFNlYXJjaFR5cGU7XG4gIH1cbiAgc2V0IGFpcnBvcnRTZWFyY2hUeXBlKG1vZGU6IEFpcnBvcnRTZWFyY2hNb2RlKSB7XG4gICAgdGhpcy5fYWlycG9ydFNlYXJjaFR5cGUgPSBtb2RlO1xuICAgIGlmICh0aGlzLmZyb21BZGRyZXNzIHx8IHRoaXMudG9BZGRyZXNzKSB7XG4gICAgICB0aGlzLnN3aXRjaEZyb21BbmRUb0xvY2F0aW9uKCk7XG4gICAgfVxuICB9XG4gIC8qXG4gICAqIGFpcnBvaXJ0IGFuZCB0cmFpbiBzdGF0aW9uIHNlYXJjaFR5cGVcbiAgICovXG5cbiAgZ2V0IGZyb21Mb2NhdGlvblR5cGUoKTogVGF4aUZvcm1Nb2RlIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZyb21Mb2NhdGlvblR5cGU7XG4gIH1cbiAgc2V0IGZyb21Mb2NhdGlvblR5cGUobW9kZTogVGF4aUZvcm1Nb2RlKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmZyb21Mb2NhdGlvblR5cGUgPSBtb2RlO1xuICB9XG4gIGdldCB0b0xvY2F0aW9uVHlwZSgpOiBUYXhpRm9ybU1vZGUge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudG9Mb2NhdGlvblR5cGU7XG4gIH1cbiAgc2V0IHRvTG9jYXRpb25UeXBlKG1vZGU6IFRheGlGb3JtTW9kZSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy50b0xvY2F0aW9uVHlwZSA9IG1vZGU7XG4gIH1cblxuICBnZXQgc3BlY2lhbFJlcXVpcmVtZW50cygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuc3BlY2lhbFJlcXVpcmVtZW50cztcbiAgfVxuXG4gIHNldCBzcGVjaWFsUmVxdWlyZW1lbnRzKG5ld1JlcTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnNwZWNpYWxSZXF1aXJlbWVudHMgPSBuZXdSZXE7XG4gIH1cbiAgLypcbiAgICogc2VhcmNoQ3JpdGVyaWFcbiAgICovXG4gIHByaXZhdGUgX3NlYXJjaENyaXRlcmlhID0gdGhpcy5jcml0ZXJpYVswXTtcbiAgZ2V0IHNlYXJjaENyaXRlcmlhKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hDcml0ZXJpYTtcbiAgfVxuXG4gIHNldCBzZWFyY2hDcml0ZXJpYSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2VhcmNoQ3JpdGVyaWEgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qXG4gICAqIG91dGJvdW5kRGF0ZVRpbWVcbiAgICovXG4gIHByaXZhdGUgX291dGJvdW5kRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSB0aGlzLmhlbHBlcnMucm91bmQoXG4gICAgbW9tZW50KCksXG4gICAgbW9tZW50LmR1cmF0aW9uKDE1LCAnbWludXRlcycpXG4gICk7XG4gIGdldCBvdXRib3VuZERhdGVUaW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9vdXRib3VuZERhdGVUaW1lO1xuICB9XG5cbiAgc2V0IG91dGJvdW5kRGF0ZVRpbWUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcbiAgICB0aGlzLl9vdXRib3VuZERhdGVUaW1lID0gdmFsdWU7XG4gIH1cblxuICAvKlxuICAgKiByZXR1cm5EYXRlVGltZVxuICAgKi9cbiAgcHJpdmF0ZSBfcmV0dXJuRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSB0aGlzLmhlbHBlcnMucm91bmQoXG4gICAgbW9tZW50KCksXG4gICAgbW9tZW50LmR1cmF0aW9uKDE1LCAnbWludXRlcycpXG4gICk7XG4gIGdldCByZXR1cm5EYXRlVGltZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmV0dXJuRGF0ZVRpbWU7XG4gIH1cblxuICBzZXQgcmV0dXJuRGF0ZVRpbWUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcbiAgICB0aGlzLl9yZXR1cm5EYXRlVGltZSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIC8qXG4gICAqIGFpcnBvcnRcbiAgICovXG5cbiAgZ2V0IGFpcnBvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0O1xuICB9XG4gIHNldCBhaXJwb3J0KHZhbHVlOiBUYXhpQWlycG9ydCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5haXJwb3J0ID0gdmFsdWU7XG4gIH1cblxuICAvKlxuICAgKiB0ZXJtaW5hbFxuICAgKi9cbiAgcHJpdmF0ZSBfdGVybWluYWw6IHN0cmluZyA9IG51bGw7XG4gIGdldCB0ZXJtaW5hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGVybWluYWw7XG4gIH1cbiAgc2V0IHRlcm1pbmFsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZXJtaW5hbCA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGltZTogc3RyaW5nID0gbnVsbDtcbiAgZ2V0IHRpbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGltZTtcbiAgfVxuXG4gIHNldCB0aW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90aW1lID0gdmFsdWU7XG4gICAgdGhpcy5fdXBkYXRlRGF0ZVRpbWUoKTtcbiAgfVxuXG4gIGdldCBkZXBhcnRzKCk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0cztcbiAgfVxuXG4gIHNldCBkZXBhcnRzKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmRlcGFydHMgPSB2YWx1ZS5pc1ZhbGlkID8gdmFsdWUgOiBudWxsO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xuICAgICAgdGhpcy5fdGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRUaW1lQ29sb24odmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLm1pblJldHVyblNlbGVjdERhdGUgPSB7XG4gICAgICBkYXk6IG1vbWVudCh2YWx1ZSkuZGF0ZSgpLFxuICAgICAgbW9udGg6IG1vbWVudCh2YWx1ZSkubW9udGgoKSArIDEsXG4gICAgICB5ZWFyOiBtb21lbnQodmFsdWUpLnllYXIoKVxuICAgIH07XG5cbiAgICBpZiAodmFsdWUuaXNBZnRlcih0aGlzLnJldHVybkRhdGVUaW1lKSkge1xuICAgICAgdGhpcy5yZXR1cm5EYXRlVGltZS5zZXQoJ2RhdGUnLCB2YWx1ZS5kYXRlKCkpO1xuICAgIH1cblxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIC8vIGdldCBmcm9tTG9jYXRpb24oKTogQ2FiSGlyZUxvY2F0aW9uIHtcbiAgLy8gICByZXR1cm4gdGhpcy5fZnJvbUxvY2F0aW9uO1xuICAvLyB9XG5cbiAgLy8gc2V0IGZyb21Mb2NhdGlvbih2YWx1ZTogQ2FiSGlyZUxvY2F0aW9uKSB7XG4gIC8vICAgdGhpcy5fZnJvbUxvY2F0aW9uID0gdmFsdWU7XG4gIC8vICAgdGhpcy5faXNWYWxpZCgpO1xuICAvLyB9XG5cbiAgLy8gZ2V0IHRvTG9jYXRpb24oKTogQ2FiSGlyZUxvY2F0aW9uIHtcbiAgLy8gICByZXR1cm4gdGhpcy5fdG9Mb2NhdGlvbjtcbiAgLy8gfVxuXG4gIC8vIHNldCB0b0xvY2F0aW9uKHZhbHVlOiBDYWJIaXJlTG9jYXRpb24pIHtcbiAgLy8gICB0aGlzLl90b0xvY2F0aW9uID0gdmFsdWU7XG4gIC8vICAgdGhpcy5faXNWYWxpZCgpO1xuICAvLyB9XG5cbiAgZ2V0IGFkdWx0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xuICB9XG5cbiAgc2V0IGFkdWx0cyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaGlsZHJlbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XG4gIH1cblxuICBzZXQgY2hpbGRyZW4odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBpbmZhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzO1xuICB9XG5cbiAgc2V0IGluZmFudHModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNvdW50cnlDb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jb3VudHJ5Q29kZTtcbiAgfVxuXG4gIHNldCBjb3VudHJ5Q29kZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNvdW50cnlDb2RlID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHZpYXMoKTogQ2FiSGlyZUxvY2F0aW9uSW5wdXRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpYXM7XG4gIH1cblxuICBzZXQgdmlhcyh2YWx1ZTogQ2FiSGlyZUxvY2F0aW9uSW5wdXRbXSkge1xuICAgIHRoaXMuX3ZpYXMgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgdmlhc0Zyb20oKTogQWRkcmVzc0Zvcm0ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudmlhc0Zyb207XG4gIH1cblxuICBzZXQgdmlhc0Zyb20odmFsdWU6IEFkZHJlc3NGb3JtKSB7XG4gICAgY29uc3QgaXNDbGVhck9yRGVmYXVsdCA9IHZhbHVlICYmIE9iamVjdC52YWx1ZXModmFsdWUpLmZpbHRlcih4PT54KS5sZW5ndGggPT09IDEgPyBPYmplY3QudmFsdWVzKHZhbHVlKS5maWx0ZXIoeD0+eClbMF0gPT09ICdHQic6ZmFsc2U7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnZpYXNGcm9tID0gaXNDbGVhck9yRGVmYXVsdCA/IG51bGwgOiB2YWx1ZTtcbiAgICB0aGlzLl92aWFzWzBdID0gdmFsdWUgJiYgIWlzQ2xlYXJPckRlZmF1bHQgPyB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih2YWx1ZSkgOiBudWxsO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCB2aWFzVG8oKTogQWRkcmVzc0Zvcm0ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudmlhc1RvO1xuICB9XG5cbiAgc2V0IHZpYXNUbyh2YWx1ZTogQWRkcmVzc0Zvcm0pIHtcbiAgICBjb25zdCBpc0NsZWFyT3JEZWZhdWx0ID0gdmFsdWUgJiYgT2JqZWN0LnZhbHVlcyh2YWx1ZSkuZmlsdGVyKHg9PngpLmxlbmd0aCA9PT0gMSA/IE9iamVjdC52YWx1ZXModmFsdWUpLmZpbHRlcih4PT54KVswXSA9PT0gJ0dCJzpmYWxzZTtcbiAgICB0aGlzLnRlbXBQYXJhbXMudmlhc1RvID0gaXNDbGVhck9yRGVmYXVsdCA/IG51bGwgOiB2YWx1ZTtcbiAgICB0aGlzLl92aWFzWzFdID0gdmFsdWUgICYmICFpc0NsZWFyT3JEZWZhdWx0PyB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih2YWx1ZSkgOiBudWxsO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCB2ZWhpY2xlVHlwZSgpOiBDYWJIaXJlVmVoaWNsZVR5cGUge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudmVoaWNsZVR5cGU7XG4gIH1cblxuICBzZXQgdmVoaWNsZVR5cGUodmFsdWU6IENhYkhpcmVWZWhpY2xlVHlwZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gQ2FiSGlyZVZlaGljbGVUeXBlLkxpbW8pIHtcbiAgICAgIHRoaXMubGltb1R5cGUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpbW9UeXBlID0gQ2FiSGlyZVZlaGljbGVUeXBlLkFueTtcbiAgICB9XG4gICAgdGhpcy50ZW1wUGFyYW1zLnZlaGljbGVUeXBlID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGxpbW9UeXBlKCk6IENhYkhpcmVWZWhpY2xlVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5saW1vVHlwZTtcbiAgfVxuXG4gIHNldCBsaW1vVHlwZSh2YWx1ZTogQ2FiSGlyZVZlaGljbGVUeXBlKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmxpbW9UeXBlID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGxpbW9Bc0RpcmVjdGVkRHVyYXRpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmxpbW9Bc0RpcmVjdGVkRHVyYXRpb247XG4gIH1cblxuICBzZXQgbGltb0FzRGlyZWN0ZWREdXJhdGlvbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmxpbW9Bc0RpcmVjdGVkRHVyYXRpb24gPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgdHJhbnNwb3J0VHlwZSgpOiBUcmFuc3BvcnRUeXBlIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRyYW5zcG9ydFR5cGU7XG4gIH1cblxuICBzZXQgdHJhbnNwb3J0VHlwZSh2YWx1ZTogVHJhbnNwb3J0VHlwZSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy50cmFuc3BvcnRUeXBlID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGZyb21BZGRyZXNzKCk6IEFkZHJlc3NGb3JtIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzO1xuICB9XG5cbiAgc2V0IGZyb21BZGRyZXNzKHZhbHVlOiBBZGRyZXNzRm9ybSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyA9IHZhbHVlO1xuICAgIHRoaXMuX2Zyb21Mb2NhdGlvbiA9IHZhbHVlID8gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odmFsdWUpIDogbnVsbDtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgZnJvbVN0YXRpb24oKTogUmFpbEFpcnBvcnQge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZnJvbVN0YXRpb247XG4gIH1cblxuICBzZXQgZnJvbVN0YXRpb24odmFsdWU6IFJhaWxBaXJwb3J0KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmZyb21TdGF0aW9uID0gdmFsdWU7XG4gICAgdGhpcy5fZnJvbUxvY2F0aW9uID0gdmFsdWVcbiAgICAgID8ge1xuICAgICAgICBidWlsZGluZ05hbWU6IHZhbHVlLm5hbWUsXG4gICAgICAgIHN0cmVldEFuZE51bWJlcjogdmFsdWUuZGVzdGluYXRpb24sXG4gICAgICAgIHRvd246ICcnLFxuICAgICAgICBjb3VudHk6ICcnLFxuICAgICAgICBjb3VudHJ5Q29kZTogdmFsdWUuZGVzdGluYXRpb24sXG4gICAgICAgIHBvc3Rjb2RlOiB2YWx1ZS5wb3N0Y29kZVxuICAgICAgICB9XG4gICAgICA6IG51bGw7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHRvQWRkcmVzcygpOiBBZGRyZXNzRm9ybSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3M7XG4gIH1cblxuICBzZXQgdG9BZGRyZXNzKHZhbHVlOiBBZGRyZXNzRm9ybSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3MgPSB2YWx1ZTtcbiAgICB0aGlzLl90b0xvY2F0aW9uID0gdmFsdWUgPyB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih2YWx1ZSkgOiBudWxsO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCB0b1N0YXRpb24oKTogUmFpbEFpcnBvcnQge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudG9TdGF0aW9uO1xuICB9XG5cbiAgc2V0IHRvU3RhdGlvbih2YWx1ZTogUmFpbEFpcnBvcnQpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMudG9TdGF0aW9uID0gdmFsdWU7XG4gICAgdGhpcy5fdG9Mb2NhdGlvbiA9IHZhbHVlXG4gICAgICA/IHtcbiAgICAgICAgYnVpbGRpbmdOYW1lOiB2YWx1ZS5haXJwb3J0Py5uYW1lID8gdmFsdWUuYWlycG9ydC5uYW1lIDogdmFsdWUubmFtZSxcbiAgICAgICAgc3RyZWV0QW5kTnVtYmVyOiB2YWx1ZS5haXJwb3J0Py5kZXN0aW5hdGlvbiA/IHZhbHVlLmFpcnBvcnQuZGVzdGluYXRpb24gOiB2YWx1ZS5kZXN0aW5hdGlvbixcbiAgICAgICAgdG93bjogJycsXG4gICAgICAgIGNvdW50eTogJycsXG4gICAgICAgIGNvdW50cnlDb2RlOiB2YWx1ZS5haXJwb3J0Py5jb3VudHJ5Q29kZSA/IHZhbHVlLmFpcnBvcnQuY291bnRyeUNvZGUgOiB2YWx1ZS5kZXN0aW5hdGlvbixcbiAgICAgICAgcG9zdGNvZGU6IHZhbHVlLmFpcnBvcnQ/LnBvc3Rjb2RlID8gdmFsdWUuYWlycG9ydC5wb3N0Y29kZSA6IHZhbHVlLnBvc3Rjb2RlXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNhYmZldGNoZXI6IEJhc2VDYWJoaXJlUXVvdGVGZXRjaGVyPENIX1E+LFxuICAgIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxuICAgIHNlYXJjaFNlcnZpY2U6IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlXG4gICkge1xuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzLCBzZWFyY2hTZXJ2aWNlLCB1c2VyU2VydmljZSk7XG4gICAgY29uc3QgZGF0YToge1xuICAgICAgdGVtcFBhcmFtczogQ2FiSGlyZVRlbXBQYXJhbXM7XG4gICAgfSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMpIHx8IHtcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIENhYkhpcmVUZW1wUGFyYW1zXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhzZWFyY2hTZXJ2aWNlLm1ha2VDYWJIaXJlUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0dXJuRGF0YTogYW55ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oXG4gICAgICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNFQ09OREFSWV9TVE9SQUdFX1NFU1NJT05fUEFSQU1TXG4gICAgICApO1xuICAgICAgaWYgKHJldHVybkRhdGEpIHtcbiAgICAgICAgdGhpcy5yZXR1cm5EYXRlVGltZSA9IG1vbWVudChyZXR1cm5EYXRhLnRlbXBQYXJhbXMuZGVwYXJ0cyk7XG4gICAgICAgIHRoaXMuc2VhcmNoVHlwZSA9IHRoaXMuc2VhcmNoVHlwZXNbMV07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJysrKyBFcnJvciByZWNvdmVyaW5nIHJldHVybiBkYXRhOiAnLCBlcnJvciwgJyArKysnKTtcbiAgICB9XG4gICAgaWYgKGRhdGEudGVtcFBhcmFtcy5mcm9tQWRkcmVzcykge1xuICAgICAgdGhpcy5mcm9tQWRkcmVzcyA9IGRhdGEudGVtcFBhcmFtcy5mcm9tQWRkcmVzcztcbiAgICB9XG5cbiAgICBpZiAoZGF0YS50ZW1wUGFyYW1zLnRvQWRkcmVzcykge1xuICAgICAgdGhpcy50b0FkZHJlc3MgPSBkYXRhLnRlbXBQYXJhbXMudG9BZGRyZXNzO1xuICAgIH1cblxuICAgIGlmIChzZWFyY2hTZXJ2aWNlLnNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpKSB7XG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZSgodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcbiAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyh0cmF2ZWxsZXJzLCBTZXJ2aWNlVHlwZS5DYWIpO1xuICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdHMgPVxuICAgICAgc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3Q8Q2FiaGlyZVF1b3RlUmVzdWx0QXJyYXk+KHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lKSB8fCBbXTtcbiAgICB0aGlzLmZ1bGxSZXN1bHRzID0gcmVzdWx0cztcbiAgICB0aGlzLl9jaGVhcGVzdFJlc3VsdFByaWNlID0gdGhpcy51cGRhdGVMb3dlc3RQcmljZShyZXN1bHRzKTtcbiAgICB0aGlzLmF2ZXJhZ2VDbzJQZXJJdGVtID0gdGhpcy5oZWxwZXJzLmNhbGN1bGF0ZUF2ZXJhZ2VDbzJQZXJJdGVtKHJlc3VsdHMpO1xuXG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyB8fCBbXSk7XG5cbiAgICBjb25zdCBzZWNvbmRhcnlSZXN1bHRzID1cbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0KHRoaXMubXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUpIHx8IFtdO1xuXG4gICAgdGhpcy5mdWxsTXVsdGlSZXN1bHRzID0gc2Vjb25kYXJ5UmVzdWx0cztcbiAgICB0aGlzLm11bHRpUmVzdWx0cy5uZXh0KHNlY29uZGFyeVJlc3VsdHMpO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgICB0aGlzLm91dGJvdW5kVmlzaWJpbGl0eSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuaW5ib3VuZFZpc2liaWxpdHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPSBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcblxuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPSBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5NVUxUSV9TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcblxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeSgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VDYWJIaXJlUXVlcnkoKSk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UucmVtb3ZlU2Vzc2lvbkl0ZW0oXG4gICAgICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNFQ09OREFSWV9TVE9SQUdFX1NFU1NJT05fUEFSQU1TXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIHRoaXMuX3NlYXJjaFR5cGUgPSB0aGlzLnNlYXJjaFR5cGVzWzBdOyAvLyByZXNldCB0byBvbmUtd2F5XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0UGFyYW1zKCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgICB0aGlzLnJlc2V0UXVlcnkoKTtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XG4gICAgdGhpcy5tdWx0aVJlc3VsdHMubmV4dChbXSk7XG4gIH1cblxuICBwcml2YXRlIF9pc1ZhbGlkKCkge1xuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsIHtcbiAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtc1xuICAgIH0pO1xuXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcbiAgICBpZiAoIXRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcykge1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnRnJvbSAtIEVudGVyIGEgbG9jYXRpb24gb3IgcG9zdGNvZGUnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3MpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RvIC0gRW50ZXIgYSBsb2NhdGlvbiBvciBwb3N0Y29kZScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0cy51bml4KCkgPCBtb21lbnQoKS51bml4KCkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RheGkgam91cm5leSBjYW5ub3QgYmUgaW4gdGhlIHBhc3QnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmFkdWx0cyArIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA8IDEpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1RoZXJlIG11c3QgYmUgYXQgbGVhc3QgMSB0cmF2ZWxsZXInKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnNlYXJjaFR5cGUgPT09IHRoaXMuc2VhcmNoVHlwZXNbMV0gJiZcbiAgICAgIHRoaXMucmV0dXJuRGF0ZVRpbWUuaXNTYW1lT3JCZWZvcmUodGhpcy5kZXBhcnRzKVxuICAgICkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUmV0dXJuIERhdGUvVGltZSBtdXN0IGJlIGFmdGVyIG91dGJvdW5kIGRhdGUvdGltZScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYXZlbGxlcnMubGVuZ3RoID4gNCkge1xuICAgICAgLy8gdXNlIGlkIGZyb20gdHJhdmVsIHR5cGUgdG8gc2VlIGlmXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudHJhbnNUeXBlcy5maW5kKHR5cGUgPT4gdHlwZS5rZXkgPT09IHRoaXMudGVtcFBhcmFtcy52ZWhpY2xlVHlwZSkuaWQgPFxuICAgICAgICB0aGlzLnRyYXZlbGxlcnMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcbiAgICAgICAgICBgVGhlIG51bWJlciBvZiBwYXNzZW5nZXJzIGV4Y2VlZHMgdGhlIGF2YWlsYWJsZSB2ZWhpY2xlIGNhcGFjaXR5IGZvciB0aGUgJHt0aGlzLnRlbXBQYXJhbXMudmVoaWNsZVR5cGV9IHRheGlgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlhc0Zyb20pIHtcbiAgICAgIC8vIHVzZSBpZCBmcm9tIHRyYXZlbCB0eXBlIHRvIHNlZSBpZlxuICAgICAgICBjb25zdCBlcnJvckZyb20gPSAhdGhpcy52aWFzRnJvbS5Qb3N0Q29kZSB8fCAhdGhpcy52aWFzRnJvbS5Ib3VzZTsgXG4gICAgICAgIGlmIChlcnJvckZyb20pIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxuICAgICAgICAgICAgJ1ZpYSBGcm9tIC0gRW50ZXIgYSBsb2NhdGlvbiBvciBwb3N0Y29kZSdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgaWYgKHRoaXMudmlhc1RvKSB7XG5cbiAgICAgICAgY29uc3QgZXJyb3JUbyA9ICF0aGlzLnZpYXNUby5Qb3N0Q29kZSB8fCAhdGhpcy52aWFzVG8uSG91c2U7IFxuICAgICAgICBpZiAoZXJyb3JUbykge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXG4gICAgICAgICAgICAnVmlhIFRvIC0gRW50ZXIgYSBsb2NhdGlvbiBvciBwb3N0Y29kZSdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWRkZWQgdmFsaWRhdGlvbnMgZm9yIExJTU8gdG8gYXZvaWQgc2VhcmNoIHdpdGhvdXQgdmFsdWVzXG4gICAgaWYgKHRoaXMudmVoaWNsZVR5cGUgPT09IENhYkhpcmVWZWhpY2xlVHlwZS5MaW1vKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh0aGlzLmZyb21BZGRyZXNzLCAnRnJvbScpO1xuICAgICAgdGhpcy52YWxpZGF0ZUFkZHJlc3ModGhpcy50b0FkZHJlc3MsICdUbycpO1xuICAgIFxuICAgICAgaWYgKHRoaXMudmlhc0Zyb20/LlBvc3RDb2RlKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHRoaXMudmlhc0Zyb20sICdWaWEgRnJvbScpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmlhc1RvPy5Qb3N0Q29kZSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh0aGlzLnZpYXNUbywgJ1ZpYSBUbycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcbiAgfVxuXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBBZGRyZXNzRm9ybSwgdHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCFhZGRyZXNzPy5Db3VudHkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goYCR7dHlwZX0gLSBFbnRlciBzdGF0ZS9wcm92aW5jZS9jb3VudHlgKTtcbiAgICB9XG4gIFxuICAgIGlmIChhZGRyZXNzPy5Ib3VzZSA9PT0gTG9jYXRpb25UeXBlcy5UcmFpblN0YXRpb24pIHtcbiAgICAgIGlmICghYWRkcmVzcz8uQ2Fycmllcil7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goYCR7dHlwZX0gLSBFbnRlciB0cmFpbiBvcGVyYXRvcmApO1xuICAgICAgfVxuICAgICAgaWYgKCFhZGRyZXNzPy5GbGlnaHRUcmFpbkRhdGVUaW1lKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goYCR7dHlwZX0gLSBFbnRlciB0cmFpbiAke3R5cGUgPT09ICdGcm9tJyA/ICdhcnJpdmFsJyA6ICdkZXBhcnR1cmUnfSB0aW1lYCk7XG4gICAgICB9XG4gICAgfVxuICBcbiAgICBpZiAoYWRkcmVzcz8uSG91c2UgPT09IExvY2F0aW9uVHlwZXMuQWlycG9ydCkge1xuICAgICAgaWYgKCFhZGRyZXNzPy5DYXJyaWVyKXtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChgJHt0eXBlfSAtIFNlbGVjdCBhaXJsaW5lYCk7XG4gICAgICB9XG4gICAgICBpZiAoIWFkZHJlc3M/LkZsaWdodE51bWJlcikge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKGAke3R5cGV9IC0gRW50ZXIgZmxpZ2h0IG51bWJlcmApO1xuICAgICAgfVxuICAgICAgaWYgKCFhZGRyZXNzPy5GbGlnaHRUcmFpbkRhdGVUaW1lKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goYCR7dHlwZX0gLSBFbnRlciBmbGlnaHQgJHt0eXBlID09PSAnRnJvbScgPyAnYXJyaXZhbCcgOiAnZGVwYXJ0dXJlJ30gdGltZWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZURhdGVUaW1lKCkge1xuICAgIGlmICh0aGlzLl9kYXRlICYmIHRoaXMuX3RpbWUpIHtcbiAgICAgIHRoaXMuZGVwYXJ0cyA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9kYXRlLCB0aGlzLl90aW1lKTtcbiAgICB9XG4gIH1cblxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XG4gICAgdGhpcy5tdWx0aVJlc3VsdHMubmV4dChbXSk7XG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoVHlwZSA9PT0gdGhpcy5zZWFyY2hUeXBlc1sxXSkge1xuICAgICAgICAvLyByZXR1cm4gLSBraWNrIG9mZiB0d28gc2VhcmNoZXNcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XG4gICAgICAgIGNvbnN0IHJldHVyblF1ZXJ5ID0gdGhpcy5nZXRSZXR1cm5TZWFyY2hRdWVyeSgpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcrKysgU2VhcmNoIFF1ZXJ5OiAnLCBxdWVyeSwgJyArKysnKTtcbiAgICAgICAgY29uc29sZS5sb2coJysrKyBTZWFyY2ggUmV0dXJuIFF1ZXJ5OiAnLCByZXR1cm5RdWVyeSwgJyArKysnKTtcblxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKFxuICAgICAgICAgIENhYkhpcmVFbnRlcnByaXNlU2VhcmNoLlNFQ09OREFSWV9TVE9SQUdFX1NFU1NJT05fUEFSQU1TLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBQYXJhbXM6IHJldHVyblF1ZXJ5XG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydE11bHRpU2VhcmNoKFtcbiAgICAgICAgICB0aGlzLmNhYmZldGNoZXIuZmV0Y2hMaXN0KHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxRdWVyeVNlYXJjaENhYkhpcmVBcmdzPihxdWVyeSkpLFxuICAgICAgICAgIHRoaXMuY2FiZmV0Y2hlci5mZXRjaExpc3QodGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3M+KHJldHVyblF1ZXJ5KSlcbiAgICAgICAgXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVSZWNlbnRTZWFyY2godGhpcy5nZXRSZWNlbnRTZWFyY2hRdWVyeSh0aGlzLmdldFNlYXJjaFF1ZXJ5KCkpKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2goXG4gICAgICAgICAgdGhpcy5jYWJmZXRjaGVyLmZldGNoTGlzdCh0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYWJIaXJlQXJncz4ocXVlcnkpKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBnbXRTZWFyY2gocXVlcnk6IFNlYXJjaENhYkhpcmVRdWVyeVZhcmlhYmxlcyk6IE9ic2VydmFibGU8Q2FiaGlyZVF1b3RlUmVzdWx0QXJyYXk+IHtcbiAgICB0aGlzLmJvbHRTZWFyY2hRdWVyeS5wdXNoKHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5jYWJmZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XG4gIH1cblxuICBnbXRHZXRDYWJTZWFyY2hRdWVyeShmcm9tTG9jYXRpb246IExvY2F0aW9uRGV0YWlsLCB0b0xvY2F0aW9uOiBMb2NhdGlvbkRldGFpbCwgZGF0ZVRtZTogc3RyaW5nKTpTZWFyY2hDYWJIaXJlUXVlcnlWYXJpYWJsZXMge1xuICAgIGNvbnN0IGNyZWF0ZUxvY2F0aW9uID0gKGxvY2F0aW9uOiBhbnkgKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBidWlsZGluZ05hbWU6IGxvY2F0aW9uPy5udW1iZXJPck5hbWUgfHwgbG9jYXRpb24/LmNvdW50cnlDb2RlLFxuICAgICAgICBjb3VudHJ5Q29kZTogbG9jYXRpb24/LmNvdW50cnlDb2RlIHx8ICdHQicsXG4gICAgICAgIHBvc3Rjb2RlOiBsb2NhdGlvbj8ucG9zdGNvZGU/LnJlcGxhY2UoL1xccysvZywgJycpID8/ICcnLFxuICAgICAgICBzdHJlZXRBbmROdW1iZXI6IGxvY2F0aW9uPy5zdHJlZXQgfHwgbG9jYXRpb24/LnJvYWQgfHwgbG9jYXRpb24/LmNvdW50cnlDb2RlLCBcbiAgICAgICAgdG93bjogbG9jYXRpb24/LnRvd24gfHwgbG9jYXRpb24/LmNpdHksXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBmcm9tID0gY3JlYXRlTG9jYXRpb24oZnJvbUxvY2F0aW9uKTtcbiAgICBjb25zdCB0byA9IGNyZWF0ZUxvY2F0aW9uKHRvTG9jYXRpb24pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFkdWx0czogdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4sXG4gICAgICBpbmZhbnRzOiAwLFxuICAgICAgZGVwYXJ0czogZGF0ZVRtZSwgXG4gICAgICB2ZWhpY2xlVHlwZTogQ2FiSGlyZVZlaGljbGVUeXBlLkFueSxcbiAgICAgIG1lc3NhZ2VUeXBlOiBNZXNzYWdlVHlwZS5UYXhpLFxuICAgICAgZnJvbUxvY2F0aW9uOiB7XG4gICAgICAgIGJ1aWxkaW5nTmFtZTogZnJvbS5idWlsZGluZ05hbWUsXG4gICAgICAgIGNvdW50cnlDb2RlOiBmcm9tLmNvdW50cnlDb2RlLFxuICAgICAgICBwb3N0Y29kZTogZnJvbS5wb3N0Y29kZSxcbiAgICAgICAgc3RyZWV0QW5kTnVtYmVyOiBmcm9tLnN0cmVldEFuZE51bWJlcixcbiAgICAgICAgdG93bjogZnJvbS50b3duLFxuICAgICAgfSxcbiAgICAgIHRvTG9jYXRpb246IHtcbiAgICAgICAgYnVpbGRpbmdOYW1lOiB0by5idWlsZGluZ05hbWUsXG4gICAgICAgIGNvdW50cnlDb2RlOiB0by5jb3VudHJ5Q29kZSxcbiAgICAgICAgcG9zdGNvZGU6IHRvLnBvc3Rjb2RlLFxuICAgICAgICBzdHJlZXRBbmROdW1iZXI6IHRvLnN0cmVldEFuZE51bWJlcixcbiAgICAgICAgdG93bjogdG8udG93bixcbiAgICAgIH0sXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLnRyYXZlbGxlcnMubWFwKHRyYXZlbGxlciA9PiB7cmV0dXJuIHtpZDogdHJhdmVsbGVyLmlkfX0pXG4gICAgfVxuICB9XG5cbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MpOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xuICAgIGNvbnN0IHJlY2VudFNlYXJjaFF1ZXJ5OiBJQ2FiSGlyZVNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5DYWIsXG4gICAgICBzZWFyY2hBcmdzOiByZWNlbnRTZWFyY2hRdWVyeSxcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMuZGVwYXJ0cy5mb3JtYXQoKSxcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzLCB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8/LmlkKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlcmNoUXVlcnkocXVlcnk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MpOiBJQ2FiSGlyZVNlYXJjaEFyZ3Mge1xuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBJQ2FiSGlyZVNlYXJjaEFyZ3MgPSBxdWVyeTtcbiAgICBzZWFyY2hRdWVyeS5mcm9tQWRkcmVzcyA9IHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcztcbiAgICBzZWFyY2hRdWVyeS50b0FkZHJlc3MgPSB0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzO1xuXG4gICAgc2VhcmNoUXVlcnkuZnJvbVN0YXRpb24gPSB0aGlzLnRlbXBQYXJhbXMuZnJvbVN0YXRpb247XG4gICAgc2VhcmNoUXVlcnkudG9TdGF0aW9uID0gdGhpcy50ZW1wUGFyYW1zLnRvU3RhdGlvbjtcblxuICAgIHNlYXJjaFF1ZXJ5LnZpYXNGcm9tID0gdGhpcy52aWFzRnJvbTtcbiAgICBzZWFyY2hRdWVyeS52aWFzVG8gPSB0aGlzLnZpYXNUbztcbiAgICBzZWFyY2hRdWVyeS5zcGVjaWFsUmVxdWlyZW1lbnRzID0gdGhpcy50ZW1wUGFyYW1zLnNwZWNpYWxSZXF1aXJlbWVudHM7XG4gICAgcmV0dXJuIHNlYXJjaFF1ZXJ5O1xuICB9XG5cbiAgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MubWVzc2FnZVR5cGUgPT09IE1lc3NhZ2VUeXBlLlRheGkpIHtcbiAgICAgIHRoaXMudmVoaWNsZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52ZWhpY2xlVHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52ZWhpY2xlVHlwZSA9IENhYkhpcmVWZWhpY2xlVHlwZS5MaW1vO1xuICAgICAgdGhpcy5saW1vVHlwZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZlaGljbGVUeXBlO1xuICAgIH1cblxuICAgIHRoaXMuZGVwYXJ0cyA9IG1vbWVudChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBhcnRzKTtcblxuICAgIHRoaXMuZnJvbUFkZHJlc3MgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mcm9tQWRkcmVzcztcbiAgICB0aGlzLnRvQWRkcmVzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRvQWRkcmVzcztcblxuICAgIHRoaXMuZnJvbVN0YXRpb24gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mcm9tU3RhdGlvbjtcbiAgICB0aGlzLnRvU3RhdGlvbiA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRvU3RhdGlvbjtcblxuICAgIHRoaXMuX2Zyb21Mb2NhdGlvbiA9IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMuZnJvbUFkZHJlc3MpO1xuICAgIHRoaXMuX3RvTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRvQWRkcmVzcyk7XG5cbiAgICB0aGlzLnZpYXNGcm9tID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mudmlhc0Zyb207XG4gICAgdGhpcy52aWFzVG8gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52aWFzVG87XG4gICAgdGhpcy5zcGVjaWFsUmVxdWlyZW1lbnRzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Muc3BlY2lhbFJlcXVpcmVtZW50cztcblxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gIH1cblxuICBnZXRTZWFyY2hRdWVyeShzaW1wbGlmaWVkTG9jYXRpb246IGJvb2xlYW4gPSB0cnVlKTogUXVlcnlTZWFyY2hDYWJIaXJlQXJncyB7XG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcz8udmlhc0Zyb20pIHtcbiAgICAgIHRoaXMuX3ZpYXNbMF0gPSA8Q2FiSGlyZUxvY2F0aW9uSW5wdXQ+dGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy50ZW1wUGFyYW1zPy52aWFzRnJvbSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXM/LnZpYXNUbykge1xuICAgICAgdGhpcy5fdmlhc1sxXSA9IDxDYWJIaXJlTG9jYXRpb25JbnB1dD50aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXM/LnZpYXNUbyk7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5OiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzID0ge1xuICAgICAgYWR1bHRzOiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzLFxuICAgICAgY2hpbGRyZW46IHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbixcbiAgICAgIGRlcGFydHM6IHRoaXMuaGVscGVycy5mb3JtYXRHcm91bmRzcGFuRGF0ZVRpbWUodGhpcy50ZW1wUGFyYW1zLmRlcGFydHMpLFxuICAgICAgZnJvbUxvY2F0aW9uOiBzaW1wbGlmaWVkTG9jYXRpb25cbiAgICAgICAgPyB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3MpXG4gICAgICAgIDogKHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyBhcyBhbnkpLFxuICAgICAgdG9Mb2NhdGlvbjogc2ltcGxpZmllZExvY2F0aW9uXG4gICAgICAgID8gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcylcbiAgICAgICAgOiAodGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcyBhcyBhbnkpLFxuICAgICAgaW5mYW50czogMCxcbiAgICAgIHZlaGljbGVUeXBlOiB0aGlzLmxpbW9UeXBlID8gdGhpcy5saW1vVHlwZSA6IHRoaXMudmVoaWNsZVR5cGUsXG4gICAgICBtZXNzYWdlVHlwZTogdGhpcy5saW1vVHlwZSA/IE1lc3NhZ2VUeXBlLkxpbW8gOiBNZXNzYWdlVHlwZS5UYXhpLFxuICAgICAgdmlhczogPENhYkhpcmVMb2NhdGlvbklucHV0W10+dGhpcy5fdmlhcyxcbiAgICAgIGxpbW9Bc0RpcmVjdGVkRHVyYXRpb246IHRoaXMudGVtcFBhcmFtcy50cmFuc3BvcnRUeXBlID09PSBUcmFuc3BvcnRUeXBlLkhvdXJseSA/ICt0aGlzLnRlbXBQYXJhbXMubGltb0FzRGlyZWN0ZWREdXJhdGlvbiA6IG51bGwsXG4gICAgICB0cmFuc3BvcnRUeXBlOiB0aGlzLmxpbW9UeXBlID8gdGhpcy50ZW1wUGFyYW1zLnRyYW5zcG9ydFR5cGUgOiBudWxsLFxuICAgICAgdHJhdmVsbGVyczogdGhpcy50cmF2ZWxsZXJzLm1hcCh0cmF2ZWxsZXIgPT4ge3JldHVybiB7aWQ6IHRyYXZlbGxlci5pZH19KSxcbiAgICAgIHNwZWNpYWxSZXF1aXJlbWVudHM6IHRoaXMuc3BlY2lhbFJlcXVpcmVtZW50c1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5mcm9tU3RhdGlvbiAmJiB0aGlzLmZyb21TdGF0aW9uLmFpcnBvcnQgJiYgIXF1ZXJ5LmZyb21Mb2NhdGlvbi5mbGlnaHRUcmFpbkRhdGVUaW1lKSB7XG4gICAgICBxdWVyeS5mcm9tTG9jYXRpb24gPSB7XG4gICAgICAgIHBvc3Rjb2RlOiB0aGlzLmZyb21TdGF0aW9uLmFpcnBvcnQucG9zdGNvZGUgLFxuICAgICAgICBjb3VudHJ5Q29kZTogdGhpcy5mcm9tU3RhdGlvbi5haXJwb3J0LmNvdW50cnlDb2RlLFxuICAgICAgICBzdHJlZXRBbmROdW1iZXI6IHRoaXMuZnJvbVN0YXRpb24uYWlycG9ydC5kZXN0aW5hdGlvbixcbiAgICAgICAgYnVpbGRpbmdOYW1lOiAgdGhpcy5mcm9tU3RhdGlvbi5haXJwb3J0LmRlc3RpbmF0aW9uLFxuICAgICAgICB0b3duOiB0aGlzLmZyb21TdGF0aW9uLmFpcnBvcnQuZGVzdGluYXRpb24gLFxuICAgICAgICB0ZXJtaW5hbDogdGhpcy5mcm9tTG9jYXRpb24udGVybWluYWwsXG4gICAgICAgIGZsaWdodE51bWJlcjogdGhpcy5mcm9tTG9jYXRpb24uZmxpZ2h0TnVtYmVyLFxuICAgICAgICBjb3VudHk6IHF1ZXJ5LmZyb21Mb2NhdGlvbi5jb3VudHlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5mcm9tU3RhdGlvbiAmJiB0aGlzLmZyb21TdGF0aW9uLnJhaWxzdGF0aW9uICAmJiAhcXVlcnkuZnJvbUxvY2F0aW9uLmZsaWdodFRyYWluRGF0ZVRpbWUpIHtcbiAgICAgIHF1ZXJ5LmZyb21Mb2NhdGlvbiA9IHtcbiAgICAgICAgcG9zdGNvZGU6IHRoaXMuZnJvbVN0YXRpb24ucmFpbHN0YXRpb24ubG9jYXRpb25EZXRhaWxzLnBvc3Rjb2RlICxcbiAgICAgICAgY291bnRyeUNvZGU6IHRoaXMuZnJvbVN0YXRpb24ucmFpbHN0YXRpb24ubG9jYXRpb25EZXRhaWxzLmNvdW50cnlDb2RlLFxuICAgICAgICBzdHJlZXRBbmROdW1iZXI6IHRoaXMuZnJvbVN0YXRpb24ucmFpbHN0YXRpb24ubmFtZSxcbiAgICAgICAgYnVpbGRpbmdOYW1lOiB0aGlzLmZyb21TdGF0aW9uLnJhaWxzdGF0aW9uLm5hbWUsXG4gICAgICAgIHRvd246IHRoaXMuZnJvbVN0YXRpb24ucmFpbHN0YXRpb24ubG9jYXRpb25EZXRhaWxzLmNpdHksXG4gICAgICAgIGNvdW50eTogdGhpcy5mcm9tTG9jYXRpb24uY291bnR5XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9TdGF0aW9uICYmIHRoaXMudG9TdGF0aW9uLmFpcnBvcnQgJiYgIXF1ZXJ5LnRvTG9jYXRpb24uZmxpZ2h0VHJhaW5EYXRlVGltZSkge1xuICAgICAgcXVlcnkudG9Mb2NhdGlvbiA9IHtcbiAgICAgICAgcG9zdGNvZGU6IHRoaXMudG9TdGF0aW9uLmFpcnBvcnQucG9zdGNvZGUgLFxuICAgICAgICBjb3VudHJ5Q29kZTogdGhpcy50b1N0YXRpb24uYWlycG9ydC5jb3VudHJ5Q29kZSAsXG4gICAgICAgIHN0cmVldEFuZE51bWJlcjogdGhpcy50b1N0YXRpb24uYWlycG9ydC5kZXN0aW5hdGlvbixcbiAgICAgICAgYnVpbGRpbmdOYW1lOiB0aGlzLnRvU3RhdGlvbi5haXJwb3J0LmRlc3RpbmF0aW9uICxcbiAgICAgICAgdG93bjogdGhpcy50b1N0YXRpb24uYWlycG9ydC5kZXN0aW5hdGlvbixcbiAgICAgICAgdGVybWluYWw6IHRoaXMudG9Mb2NhdGlvbi50ZXJtaW5hbCxcbiAgICAgICAgZmxpZ2h0TnVtYmVyOiB0aGlzLnRvTG9jYXRpb24uZmxpZ2h0TnVtYmVyLFxuICAgICAgICBjb3VudHk6IHRoaXMudG9Mb2NhdGlvbi5jb3VudHlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50b1N0YXRpb24gJiYgdGhpcy50b1N0YXRpb24ucmFpbHN0YXRpb24gJiYgIXF1ZXJ5LnRvTG9jYXRpb24uZmxpZ2h0VHJhaW5EYXRlVGltZSkge1xuICAgICAgcXVlcnkudG9Mb2NhdGlvbiA9IHtcbiAgICAgICAgcG9zdGNvZGU6IHRoaXMudG9TdGF0aW9uLnJhaWxzdGF0aW9uLmxvY2F0aW9uRGV0YWlscy5wb3N0Y29kZSAsXG4gICAgICAgIGNvdW50cnlDb2RlOiB0aGlzLnRvU3RhdGlvbi5yYWlsc3RhdGlvbi5sb2NhdGlvbkRldGFpbHMuY291bnRyeUNvZGUsXG4gICAgICAgIHN0cmVldEFuZE51bWJlcjogdGhpcy50b1N0YXRpb24ucmFpbHN0YXRpb24ubmFtZSxcbiAgICAgICAgYnVpbGRpbmdOYW1lOiB0aGlzLnRvU3RhdGlvbi5yYWlsc3RhdGlvbi5uYW1lLFxuICAgICAgICB0b3duOiB0aGlzLnRvU3RhdGlvbi5yYWlsc3RhdGlvbi5sb2NhdGlvbkRldGFpbHMuY2l0eSxcbiAgICAgICAgY291bnR5OiB0aGlzLnRvTG9jYXRpb24uY291bnR5XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2cocXVlcnkpO1xuXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxRdWVyeVNlYXJjaENhYkhpcmVBcmdzPihxdWVyeSk7XG4gIH1cblxuICBnZXRSZXR1cm5TZWFyY2hRdWVyeSgpOiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzIHtcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zPy52aWFzRnJvbSkge1xuICAgICAgdGhpcy5fdmlhc1swXSA9IDxDYWJIaXJlTG9jYXRpb25JbnB1dD50aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXM/LnZpYXNGcm9tKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcz8udmlhc1RvKSB7XG4gICAgICB0aGlzLl92aWFzWzFdID0gPENhYkhpcmVMb2NhdGlvbklucHV0PnRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcz8udmlhc1RvKTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MgPSB7XG4gICAgICBhZHVsdHM6IHRoaXMudGVtcFBhcmFtcy5hZHVsdHMsXG4gICAgICBjaGlsZHJlbjogdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuLFxuICAgICAgZGVwYXJ0czogdGhpcy5oZWxwZXJzLmZvcm1hdEdyb3VuZHNwYW5EYXRlVGltZSh0aGlzLl9yZXR1cm5EYXRlVGltZSksXG4gICAgICBmcm9tTG9jYXRpb246IDxDYWJIaXJlTG9jYXRpb25JbnB1dD50aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzKSwgLy8gc3dhcCB0aGUgbG9jYXRpb25zIGFyb3VuZFxuICAgICAgdG9Mb2NhdGlvbjogPENhYkhpcmVMb2NhdGlvbklucHV0PnRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyksXG4gICAgICBpbmZhbnRzOiAwLFxuICAgICAgdmVoaWNsZVR5cGU6IHRoaXMudmVoaWNsZVR5cGUsXG4gICAgICB2aWFzOiA8Q2FiSGlyZUxvY2F0aW9uSW5wdXRbXT50aGlzLl92aWFzLFxuICAgICAgdHJhdmVsbGVyczogdGhpcy50cmF2ZWxsZXJzLm1hcCh0cmF2ZWxsZXIgPT4ge3JldHVybiB7aWQ6IHRyYXZlbGxlci5pZH19KSxcbiAgICAgIHNwZWNpYWxSZXF1aXJlbWVudHM6IHRoaXMudGVtcFBhcmFtcy5zcGVjaWFsUmVxdWlyZW1lbnRzXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3M+KHF1ZXJ5KTtcbiAgfVxuXG4gIHVwZGF0ZU91dGJvdW5kQWRkcmVzcyhsb2NhdGlvbjogYW55LCBwbGFjZURlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzID0gdGhpcy5nZXRBZGRyZXNzRm9ybWF0KGxvY2F0aW9uLCBwbGFjZURlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIHVwZGF0ZVZpYUFkZHJlc3MobG9jYXRpb246IGFueSwgcGxhY2VEZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmlhc0Zyb20gPSB0aGlzLmdldEFkZHJlc3NGb3JtYXQobG9jYXRpb24sIHBsYWNlRGVzY3JpcHRpb24pO1xuICB9XG5cbiAgdXBkYXRlSW5ib3VuZEFkZHJlc3MobG9jYXRpb246IGFueSwgcGxhY2VEZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3MgPSB0aGlzLmdldEFkZHJlc3NGb3JtYXQobG9jYXRpb24sIHBsYWNlRGVzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDYWJIaXJlTG9jYXRpb24obG9jYXRpb246IEFkZHJlc3NGb3JtKTogQ2FiSGlyZUxvY2F0aW9uSW5wdXQge1xuICAgIGNvbnN0IHR5cGUgPSBsb2NhdGlvbj8uSG91c2U/LnJlcGxhY2UoJyAnLCAnJyk7XG4gICAgY29uc3QgYWRkcmVzc1R5cGU6IEFkZHJlc3NUeXBlID0gdHlwZT8uaW5jbHVkZXMoQWRkcmVzc1R5cGUuQWlycG9ydClcbiAgICAgID8gQWRkcmVzc1R5cGUuQWlycG9ydFxuICAgICAgOiBBZGRyZXNzVHlwZS5BZGRyZXNzO1xuICAgIGNvbnN0IGNvbW1vblByb3BlcnRpZXM6IFBhcnRpYWw8Q2FiSGlyZUxvY2F0aW9uSW5wdXQ+ID0ge1xuICAgICAgYnVpbGRpbmdOYW1lOiB0eXBlPy5pbmNsdWRlcyhBZGRyZXNzVHlwZS5UcmFpblN0YXRpb24pID8gbG9jYXRpb24/LlN0cmVldCArICcgVHJhaW4gU3RhdGlvbicgOiB0eXBlPy5pbmNsdWRlcyhBZGRyZXNzVHlwZS5BaXJwb3J0KSA/IGxvY2F0aW9uPy5TdHJlZXQgOiBsb2NhdGlvbj8uSG91c2UsXG4gICAgICBzdHJlZXRBbmROdW1iZXI6IGxvY2F0aW9uPy5TdHJlZXQsXG4gICAgICB0b3duOiBsb2NhdGlvbj8uVG93bixcbiAgICAgIGNvdW50eTogbG9jYXRpb24/LkNvdW50eSxcbiAgICAgIHBvc3Rjb2RlOiBsb2NhdGlvbj8uUG9zdENvZGU/LnJlcGxhY2UoL1xccysvZywgJycpID8/ICcnLFxuICAgICAgY291bnRyeUNvZGU6IGxvY2F0aW9uLkNvdW50cnlDb2RlIHx8IGxvY2F0aW9uLkNvdW50cnksXG4gICAgICBmbGlnaHROdW1iZXI6IGxvY2F0aW9uPy5GbGlnaHROdW1iZXIgPyBsb2NhdGlvbj8uRmxpZ2h0TnVtYmVyIDogbnVsbCxcbiAgICAgIHRlcm1pbmFsOiBsb2NhdGlvbi5UZXJtaW5hbCB8fCAgbnVsbFxuICAgIH07XG5cbiAgICBpZiAodGhpcy52ZWhpY2xlVHlwZSA9PT0gQ2FiSGlyZVZlaGljbGVUeXBlLkxpbW8pIHtcbiAgICAgIGNvbnN0IGZsaWdodFRyYWluRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSB0eXBlPy5pbmNsdWRlcyhBZGRyZXNzVHlwZS5UcmFpblN0YXRpb24pIHx8IHR5cGU/LmluY2x1ZGVzKEFkZHJlc3NUeXBlLkFpcnBvcnQpID8gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2RhdGUsIGxvY2F0aW9uPy5GbGlnaHRUcmFpbkRhdGVUaW1lKSA6IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jb21tb25Qcm9wZXJ0aWVzIGFzIENhYkhpcmVMb2NhdGlvbklucHV0LFxuICAgICAgICBhZGRyZXNzVHlwZTogYWRkcmVzc1R5cGUsXG4gICAgICAgIGNhcnJpZXI6ICBsb2NhdGlvbj8uQ2FycmllcixcbiAgICAgICAgYWlycG9ydFN0YXRpb25OYW1lOiBsb2NhdGlvbj8uQWlycG9ydFN0YXRpb25OYW1lLFxuICAgICAgICBmbGlnaHRUcmFpbkRhdGVUaW1lOiBmbGlnaHRUcmFpbkRhdGVUaW1lID8gdGhpcy5oZWxwZXJzLmZvcm1hdEdyb3VuZHNwYW5EYXRlVGltZShmbGlnaHRUcmFpbkRhdGVUaW1lKSA6IG51bGxcbiAgICAgIH07XG4gICAgfSByZXR1cm4gY29tbW9uUHJvcGVydGllcyBhcyBDYWJIaXJlTG9jYXRpb25JbnB1dDtcbiAgfVxuXG4gIG1hdGNoQWRkcmVzc2VzKCkge1xuICAgIHRoaXMuX3RvTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzKTtcbiAgICB0aGlzLl9mcm9tTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3MpO1xuICAgIHRoaXMuX3ZpYXNbMF0ucG9zdGNvZGUgPSB0aGlzLnRlbXBQYXJhbXM/LnZpYXNGcm9tPy5Qb3N0Q29kZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBzb3J0QnkoYXNjPzogYm9vbGVhbiwgcmV0dXJuSW5kZXg/OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hTZXJ2aWNlLmlzQ2xvbmluZy52YWx1ZSkge1xuICAgICAgcmV0dXJuOyAvLyBEb24ndCBwZXJmb3JtIHNvcnRpbmcgaWYgaXNDbG9uaW5nIGlzIHRydWVcbiAgICB9XG4gICAgXG4gICAgaWYgKHJldHVybkluZGV4ID49IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKCdoZXJlJyk7XG4gICAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmZ1bGxNdWx0aVJlc3VsdHNbcmV0dXJuSW5kZXhdKTtcbiAgICAgIGlmIChhc2MpIHtcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGIucHJpY2UgLSBhLnByaWNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBhLnByaWNlIC0gYi5wcmljZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZ1bGxNdWx0aVJlc3VsdHNbcmV0dXJuSW5kZXhdID0gcmVzdWx0cztcbiAgICAgIHRoaXMubXVsdGlSZXN1bHRzLm5leHQodGhpcy5mdWxsTXVsdGlSZXN1bHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cyk7XG4gICAgICBpZiAoYXNjKSB7XG4gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKGE6IENhYkhpcmVRdW90ZSwgYjogQ2FiSGlyZVF1b3RlKSA9PiBiLnByaWNlIC0gYS5wcmljZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRzID0gcmVzdWx0cz8uc29ydCgoYTogQ2FiSGlyZVF1b3RlLCBiOiBDYWJIaXJlUXVvdGUpID0+IGEucHJpY2UgLSBiLnByaWNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vICEgc3R1ZmYgdG8gZ28gaW4gYSBwb3N0Y29kZSBzZXJ2aWVcblxuICBnZXRBZGRyZXNzRm9ybWF0KGxvY2F0aW9uOiBhbnksIHBsYWNlRGVzY3JpcHRpb24/OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBIb3VzZTogdGhpcy5nZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlscyhsb2NhdGlvbiwgWydmbG9vcicsICdzdHJlZXRfbnVtYmVyJywgJ3ByZW1pc2UnXSksXG4gICAgICBTdHJlZXQ6IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFsncm91dGUnLCAnc3RyZWV0X25hbWUnLCAnZXN0YWJsaXNobWVudCddKSxcbiAgICAgIFRvd246IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFtcbiAgICAgICAgJ3Bvc3RhbF90b3duJyxcbiAgICAgICAgJ2FkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMicsXG4gICAgICAgICdsb2NhbGl0eSdcbiAgICAgIF0pLFxuICAgICAgUG9zdENvZGU6IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFsncG9zdGNvZGUnLCAncG9zdGFsX2NvZGUnXSksXG4gICAgICBDb3VudHJ5OiB0aGlzLmdldEFkZHJlc3NGcm9tUGxhY2VEZXRhaWxzKGxvY2F0aW9uLCBbJ2NvdW50cnknXSksXG4gICAgICBDb3VudHJ5Q29kZTogdGhpcy5nZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlsc1Nob3J0KGxvY2F0aW9uLCBbJ2NvdW50cnknXSksXG4gICAgICBwbGFjZURlc2NyaXB0aW9uXG4gICAgfTtcbiAgfVxuXG4gIGdldEFkZHJlc3NGcm9tUGxhY2VEZXRhaWxzKHBsYWNlRGV0YWlsczogYW55LCB0eXBlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGxldCBhZGRyZXNzUHJvcCA9IG51bGw7XG4gICAgaWYgKHBsYWNlRGV0YWlscyAmJiBBcnJheS5pc0FycmF5KHBsYWNlRGV0YWlscykpIHtcbiAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICBjb25zdCBwcm9wID0gcGxhY2VEZXRhaWxzLmZpbHRlcihwZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGQudHlwZXMpICYmIHBkLnR5cGVzLmluY2x1ZGVzKHR5cGUpO1xuICAgICAgICB9KVswXTtcblxuICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgIGFkZHJlc3NQcm9wID0gIHByb3AubG9uZ19uYW1lO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhZGRyZXNzUHJvcDtcbiAgfVxuXG5cbiAgZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHNTaG9ydChwbGFjZURldGFpbHM6IGFueSwgdHlwZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBsZXQgYWRkcmVzc1Byb3AgPSBudWxsO1xuICAgIGlmIChwbGFjZURldGFpbHMgJiYgQXJyYXkuaXNBcnJheShwbGFjZURldGFpbHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgICAgY29uc3QgcHJvcCA9IHBsYWNlRGV0YWlscy5maWx0ZXIocGQgPT4ge1xuICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBkLnR5cGVzKSAmJiBwZC50eXBlcy5pbmNsdWRlcyh0eXBlKTtcbiAgICAgICAgfSlbMF07XG5cbiAgICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgICBhZGRyZXNzUHJvcCA9IHByb3Auc2hvcnRfbmFtZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWRkcmVzc1Byb3A7XG4gIH1cblxuICBnZXRBZGRyZXNzRnJvbUFpcnBvcnREZXRhaWxzKGFpcnBvcnREZXRhaWxzOiBMb2NhdGlvbkRldGFpbCwgYWlycG9ydE5hbWU6IHN0cmluZykge1xuICAgIGNvbnNvbGUubG9nKGFpcnBvcnREZXRhaWxzKTtcbiAgICBsZXQgYWRkcmVzczogQWRkcmVzc0Zvcm0gPSBudWxsO1xuICAgIGlmIChhaXJwb3J0RGV0YWlscykge1xuICAgICAgYWRkcmVzcyA9IHtcbiAgICAgICAgQ291bnRyeTogYWlycG9ydERldGFpbHMuY291bnRyeSxcbiAgICAgICAgU3RyZWV0OiBhaXJwb3J0RGV0YWlscy5yb2FkLFxuICAgICAgICBQb3N0Q29kZTogYWlycG9ydERldGFpbHMucG9zdGNvZGUsXG4gICAgICAgIFRvd246IGFpcnBvcnREZXRhaWxzLmNpdHksXG4gICAgICAgIHBsYWNlRGVzY3JpcHRpb246IGFpcnBvcnROYW1lLFxuICAgICAgICBIb3VzZTogYWlycG9ydE5hbWVcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBhZGRyZXNzO1xuICB9XG5cbiAgc2V0TG9jYXRpb25Gcm9tQWlycG9ydChhaXJwb3J0RGV0YWlsczogTG9jYXRpb25EZXRhaWwsIGFpcnBvcnROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5nZXRBZGRyZXNzRnJvbUFpcnBvcnREZXRhaWxzKGFpcnBvcnREZXRhaWxzLCBhaXJwb3J0TmFtZSk7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gVGF4aUZvcm1Nb2RlLlNUQVRJT04pIHtcbiAgICAgIGlmICh0aGlzLmFpcnBvcnRTZWFyY2hUeXBlID09PSBBaXJwb3J0U2VhcmNoTW9kZS5QSUNLVVApIHtcbiAgICAgICAgdGhpcy5mcm9tQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRvQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkVG9TZWxlY3RlZFBsYWNlcyhhZGRyZXNzOiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkUGxhY2VzLnB1c2goYWRkcmVzcyk7XG4gIH1cblxuICBzZXRPdXRib3VuZEZvcm1WaXNpYmlsaXR5KHNob3dGb3JtOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5vdXRib3VuZFZpc2liaWxpdHkubmV4dChzaG93Rm9ybSk7XG4gIH1cblxuICBzZXRJbmJvdW5kRm9ybVZpc2liaWxpdHkoc2hvd0Zvcm06IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmluYm91bmRWaXNpYmlsaXR5Lm5leHQoc2hvd0Zvcm0pO1xuICB9XG5cbiAgZ2V0T3V0Ym91bmRGb3JtVmlzaWJpbGl0eSgpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLm91dGJvdW5kVmlzaWJpbGl0eTtcbiAgfVxuXG4gIGdldEluYm91bmRGb3JtVmlzaWJpbGl0eSgpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmluYm91bmRWaXNpYmlsaXR5O1xuICB9XG5cbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMocHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPik6IHZvaWQge1xuICAgIGNvbnN0IGZsaWdodEl0ZW06IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgcmFpbEl0ZW06IFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyA9IHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuUmFpbF0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IGlybEl0ZW06IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzID1cbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCBob3RlbEl0ZW06IFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzID0gcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5SYWlsXT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgY2FySXRlbTogU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzID0gcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5DYXJdPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCBsb3VuZ2VJdGVtOiBTZWFyY2hMb3VuZ2VzUXVlcnlWYXJpYWJsZXMgPSBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkxvdW5nZV0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IHBhcmtpbmdJdGVtOiBTZWFyY2hQYXJraW5nUXVlcnlWYXJpYWJsZXMgPVxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5QYXJraW5nXT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgZXVyb3N0YXJJdGVtOiBTZWFyY2hFdXJvc3RhclF1ZXJ5VmFyaWFibGVzID1cbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRXVyb3N0YXJdPy5zZWFyY2hRdWVyeTtcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuRkxJR0hULmluYm91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuRkxJR0hULmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5GTElHSFQub3V0Ym91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuRkxJR0hULm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKFxuICAgICAgICAgICAgYCR7ZGF0ZUFycmF5WzBdfSR7ZGF0ZUFycmF5WzFdfSR7ZGF0ZUFycmF5WzJdLnN1YnN0cmluZygwLCAyKX1gLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhYmhpcmUgZnJvbSBmbGlnaHQgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmFpbEl0ZW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLlJBSUwuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5SQUlMLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5SQUlMLm91dGJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLlJBSUwub3V0Ym91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FiaGlyZSBmcm9tIHJhaWwgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXJsSXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuSU5URVJOQVRJT05BTF9SQUlMLmluYm91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuSU5URVJOQVRJT05BTF9SQUlMLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5JTlRFUk5BVElPTkFMX1JBSUwub3V0Ym91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuSU5URVJOQVRJT05BTF9SQUlMLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKFxuICAgICAgICAgICAgYCR7ZGF0ZUFycmF5WzBdfSR7ZGF0ZUFycmF5WzFdfSR7ZGF0ZUFycmF5WzJdLnN1YnN0cmluZygwLCAyKX1gLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhYmhpcmUgZnJvbSBpbnRlcm5hdGlvbmFsIHJhaWwgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaG90ZWxJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5IT1RFTC5pbmJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLkhPVEVMLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5IT1RFTC5vdXRib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5IT1RFTC5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShcbiAgICAgICAgICAgIGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBjYWJoaXJlIGZyb20gaG90ZWwgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FySXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuQ0FSLmluYm91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuQ0FSLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5DQVIub3V0Ym91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuQ0FSLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKFxuICAgICAgICAgICAgYCR7ZGF0ZUFycmF5WzBdfSR7ZGF0ZUFycmF5WzFdfSR7ZGF0ZUFycmF5WzJdLnN1YnN0cmluZygwLCAyKX1gLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhYmhpcmUgZnJvbSBjYXIgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobG91bmdlSXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuTE9VTkdFLmluYm91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuTE9VTkdFLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5MT1VOR0Uub3V0Ym91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuTE9VTkdFLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKFxuICAgICAgICAgICAgYCR7ZGF0ZUFycmF5WzBdfSR7ZGF0ZUFycmF5WzFdfSR7ZGF0ZUFycmF5WzJdLnN1YnN0cmluZygwLCAyKX1gLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhYmhpcmUgZnJvbSBsb3VuZ2UgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocGFya2luZ0l0ZW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLlBBUktJTkcuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5QQVJLSU5HLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5QQVJLSU5HLm91dGJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLlBBUktJTkcub3V0Ym91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FiaGlyZSBmcm9tIHBhcmtpbmcgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXVyb3N0YXJJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5FVVJPU1RBUi5pbmJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLkVVUk9TVEFSLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5FVVJPU1RBUi5vdXRib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5FVVJPU1RBUi5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShcbiAgICAgICAgICAgIGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBjYWJoaXJlIGZyb20gZXVyb3N0YXIgaXRlbScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVNlYXJjaEZyb21FeHBpcmVkQmFza2V0SXRlbShiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLCBzZXREYXRlVGltZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hDYWJIaXJlUXVlcnk6IFNlYXJjaENhYkhpcmVRdWVyeVZhcmlhYmxlcyA9IGJhc2tldEl0ZW0uc2VhcmNoUXVlcnk7XG5cbiAgICBpZiAoc2VhcmNoQ2FiSGlyZVF1ZXJ5KSB7XG4gICAgICBpZiAoc2V0RGF0ZVRpbWUpIHtcbiAgICAgICAgdGhpcy5kZXBhcnRzID0gbW9tZW50KHNlYXJjaENhYkhpcmVRdWVyeS5kZXBhcnRzKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy5zZXRRdWVyeUZyb21CYXNrZXRJdGVtKGJhc2tldEl0ZW0pO1xuICAgIH1cblxuICAgIHRoaXMuYWR1bHRzID0gc2VhcmNoQ2FiSGlyZVF1ZXJ5LmFkdWx0cztcbiAgICB0aGlzLmNoaWxkcmVuID0gc2VhcmNoQ2FiSGlyZVF1ZXJ5LmNoaWxkcmVuO1xuICAgIHRoaXMuaW5mYW50cyA9IHNlYXJjaENhYkhpcmVRdWVyeS5pbmZhbnRzO1xuICAgIHRoaXMuYWRkVHJhdmVsbGVyc0Zyb21CYXNrZXRJdGVtKGJhc2tldEl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0QWRkcmVzc0xvY2F0aW9uKGFkZHJlc3M6IENhYkhpcmVMb2NhdGlvbklucHV0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIENvdW50cnlDb2RlOiBhZGRyZXNzLmNvdW50cnlDb2RlLFxuICAgICAgSG91c2U6IGFkZHJlc3MuYnVpbGRpbmdOYW1lLFxuICAgICAgU3RyZWV0OiBhZGRyZXNzLnN0cmVldEFuZE51bWJlcixcbiAgICAgIFRvd246IGFkZHJlc3MudG93bixcbiAgICAgIFBvc3RDb2RlOiBhZGRyZXNzLnBvc3Rjb2RlLFxuICAgICAgQ291bnRyeTogYWRkcmVzcy5jb3VudHJ5Q29kZSxcbiAgICAgIFRlcm1pbmFsOiBhZGRyZXNzLnRlcm1pbmFsLFxuICAgICAgQ291bnR5OiAgYWRkcmVzcy5jb3VudHksXG4gICAgICBGbGlnaHROdW1iZXI6IGFkZHJlc3MuZmxpZ2h0TnVtYmVyLFxuICAgICAgRmxpZ2h0VHJhaW5EYXRlVGltZTogYWRkcmVzcy5mbGlnaHRUcmFpbkRhdGVUaW1lLFxuICAgICAgQ2FycmllcjogYWRkcmVzcy5jYXJyaWVyXG4gICAgfTtcbiAgfVxuXG4gIGdldFRyYW5zVHlwZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRyYW5zVHlwZUluZGV4ID0gdGhpcy50ZW1wUGFyYW1zLnZlaGljbGVUeXBlO1xuICAgIHJldHVybiB0aGlzLnRyYW5zVHlwZXMuZmluZCh4ID0+IHgua2V5ID09PSB0cmFuc1R5cGVJbmRleCk/LnZhbHVlIHx8ICcnO1xuICB9XG5cbiAgZ2V0UGFzc2VuZ2VycyA9ICgpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGFkdWx0cyA9IHRoaXMuYWR1bHRzO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICBsZXQgcGFzc2VuZ2VycyA9IGAke2FkdWx0c30gQWR1bHRgO1xuXG4gICAgaWYgKE51bWJlcihhZHVsdHMpICE9PSAxKSB7XG4gICAgICBwYXNzZW5nZXJzICs9ICdzJztcbiAgICB9XG4gICAgaWYgKE51bWJlcihjaGlsZHJlbikgPT09IDEpIHtcbiAgICAgIHBhc3NlbmdlcnMgKz0gYCwgJHtjaGlsZHJlbn0gQ2hpbGRgO1xuICAgIH1cblxuICAgIGlmIChOdW1iZXIoY2hpbGRyZW4pID4gMSkge1xuICAgICAgcGFzc2VuZ2VycyArPSBgLCAke2NoaWxkcmVufSBDaGlsZHJlbmA7XG4gICAgfVxuICAgIHJldHVybiBwYXNzZW5nZXJzO1xuICAgIHJldHVybiAnJztcbiAgfTtcblxuICBhc3luYyBhZGRDYWJIaXJlVG9CYXNrZXQoXG4gICAgY2FiSGlyZVF1b3RlOiBDYWJIaXJlUXVvdGUsXG4gICAgY2FiSGlyZVF1ZXJ5OiBTZWFyY2hDYWJIaXJlUXVlcnlWYXJpYWJsZXMsXG4gICAgaWdub3JlSW52b2tlZDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIGlmIChjYWJIaXJlUXVvdGUudW5hdmFpbGFibGUgJiYgIXRoaXMudXNlclNlcnZpY2UuY2FuT3ZlcnJpZGUoKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKGNhYkhpcmVRdW90ZSk7XG4gICAgaWYgKGJhc2tldCkge1xuICAgICAgY29uc3Qgd2hhdEhhcHBlbmVkID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxuICAgICAgICB7XG4gICAgICAgICAgYWR1bHRzOiBjYWJIaXJlUXVlcnkuYWR1bHRzLFxuICAgICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxuICAgICAgICAgIHNlcnZpY2U6IGNhYkhpcmVRdW90ZS5zb3VyY2VJZC50b1N0cmluZygpLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgYWRkaXRpb25hbDogY2FiSGlyZVF1b3RlLmFkZGl0aW9uYWwsXG4gICAgICAgICAgICBpZDogY2FiSGlyZVF1b3RlLmlkLFxuICAgICAgICAgICAgZGVwYXJ0czogY2FiSGlyZVF1ZXJ5LmRlcGFydHMsXG4gICAgICAgICAgICBzdXBwbGllck5hbWU6IGNhYkhpcmVRdW90ZS5zdXBwbGllck5hbWUsXG4gICAgICAgICAgICBlc3RpbWF0ZWRDTzI6IGNhYkhpcmVRdW90ZS5lc3RpbWF0ZWRDTzIsXG4gICAgICAgICAgICBmcm9tTG9jYXRpb246IHtcbiAgICAgICAgICAgICAgYWRkcmVzc1R5cGU6IGNhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24uYWRkcmVzc1R5cGUsXG4gICAgICAgICAgICAgIGJ1aWxkaW5nTmFtZTogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbi5idWlsZGluZ05hbWUsXG4gICAgICAgICAgICAgIHN0cmVldEFuZE51bWJlcjogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbi5zdHJlZXRBbmROdW1iZXIsXG4gICAgICAgICAgICAgIHRvd246IGNhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24udG93bixcbiAgICAgICAgICAgICAgcG9zdGNvZGU6IGNhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24ucG9zdGNvZGUsXG4gICAgICAgICAgICAgIGNvdW50eTogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbi5jb3VudHksXG4gICAgICAgICAgICAgIGNvdW50cnlDb2RlOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uLmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgICBsYXRpdHVkZTogY2FiSGlyZVF1b3RlLmZyb21Mb2NhdGlvbi5sYXRpdHVkZSxcbiAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBjYWJIaXJlUXVvdGUuZnJvbUxvY2F0aW9uLmxvbmdpdHVkZSxcbiAgICAgICAgICAgICAgZmxpZ2h0VHJhaW5EYXRlVGltZTogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbj8uZmxpZ2h0VHJhaW5EYXRlVGltZSxcbiAgICAgICAgICAgICAgZmxpZ2h0TnVtYmVyOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uPy5mbGlnaHROdW1iZXIsXG4gICAgICAgICAgICAgIHRlcm1pbmFsOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uPy50ZXJtaW5hbCxcbiAgICAgICAgICAgICAgY2FycmllcjogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbj8uY2FycmllcixcbiAgICAgICAgICAgICAgYWlycG9ydFN0YXRpb25OYW1lOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uPy5haXJwb3J0U3RhdGlvbk5hbWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b0xvY2F0aW9uOiB7XG4gICAgICAgICAgICAgIGFkZHJlc3NUeXBlOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi5hZGRyZXNzVHlwZSxcbiAgICAgICAgICAgICAgYnVpbGRpbmdOYW1lOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi5idWlsZGluZ05hbWUsXG4gICAgICAgICAgICAgIHN0cmVldEFuZE51bWJlcjogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24uc3RyZWV0QW5kTnVtYmVyLFxuICAgICAgICAgICAgICB0b3duOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi50b3duLFxuICAgICAgICAgICAgICBwb3N0Y29kZTogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24ucG9zdGNvZGUsXG4gICAgICAgICAgICAgIGNvdW50eTogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24uY291bnR5LFxuICAgICAgICAgICAgICBjb3VudHJ5Q29kZTogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24uY291bnRyeUNvZGUsXG4gICAgICAgICAgICAgIGxhdGl0dWRlOiBjYWJIaXJlUXVvdGUudG9Mb2NhdGlvbi5sYXRpdHVkZSxcbiAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBjYWJIaXJlUXVvdGUudG9Mb2NhdGlvbi5sb25naXR1ZGUsXG4gICAgICAgICAgICAgIGZsaWdodFRyYWluRGF0ZVRpbWU6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uPy5mbGlnaHRUcmFpbkRhdGVUaW1lLFxuICAgICAgICAgICAgICBmbGlnaHROdW1iZXI6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uPy5mbGlnaHROdW1iZXIsXG4gICAgICAgICAgICAgIHRlcm1pbmFsOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbj8udGVybWluYWwsXG4gICAgICAgICAgICAgIGNhcnJpZXI6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uPy5jYXJyaWVyLFxuICAgICAgICAgICAgICBhaXJwb3J0U3RhdGlvbk5hbWU6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uPy5haXJwb3J0U3RhdGlvbk5hbWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2aWFzOiBjYWJIaXJlUXVlcnkudmlhcyxcbiAgICAgICAgICAgIHZlaGljbGVUeXBlOiBjYWJIaXJlUXVvdGUudmVoaWNsZVR5cGUsXG4gICAgICAgICAgICB0cmlwRGlzdGFuY2VNZXRyZXM6IGNhYkhpcmVRdW90ZS50cmlwRGlzdGFuY2VNZXRyZXMsXG4gICAgICAgICAgICB0cmlwRHVyYXRpb25TZWNvbmRzOiBjYWJIaXJlUXVvdGUudHJpcER1cmF0aW9uU2Vjb25kcyxcbiAgICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmljZTogY2FiSGlyZVF1b3RlLnByaWNlLFxuICAgICAgICAgIGN1cnJlbmN5OiBjYWJIaXJlUXVvdGUuY3VycmVuY3ksXG4gICAgICAgICAgc2VhcmNoUXVlcnk6IGNhYkhpcmVRdWVyeSxcbiAgICAgICAgICBjbzJQZXJJdGVtOiBjYWJIaXJlUXVvdGUuY28yUGVySXRlbSxcbiAgICAgICAgICBjbzJQZXJQYXNzZW5nZXI6IGNhYkhpcmVRdW90ZS5jbzJQZXJQYXNzZW5nZXIsXG4gICAgICAgICAgb3V0Ym91bmREYXRlOiBjYWJIaXJlUXVlcnkuZGVwYXJ0cyxcbiAgICAgICAgICBsb3dlc3RQcmljZTpcbiAgICAgICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZT8uYW1vdW50IHx8IHRoaXMuY2hlYXBlc3RQcmljZT8uY3VycmVuY3lDb2RlICE9PSBjYWJIaXJlUXVvdGUuY3VycmVuY3lcbiAgICAgICAgICAgICAgPyB0aGlzLmNoZWFwZXN0UHJpY2U/LmFtb3VudFxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTpcbiAgICAgICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZT8uYW1vdW50IHx8IHRoaXMuY2hlYXBlc3RQcmljZT8uY3VycmVuY3lDb2RlICE9PSBjYWJIaXJlUXVvdGUuY3VycmVuY3lcbiAgICAgICAgICAgICAgPyA8Q3VycmVuY3lDb2RlPnRoaXMuY2hlYXBlc3RQcmljZT8uY3VycmVuY3lDb2RlXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIHJlYXNvbktleXM6IGNhYkhpcmVRdW90ZS5yZXF1aXJlc1JlYXNvbktleXMsXG4gICAgICAgICAgICBhZ2VudE92ZXJyb2RlVW5hdmFpbGFibGU6Y2FiSGlyZVF1b3RlLnVuYXZhaWxhYmxlXG5cbiAgICAgICAgfSxcbiAgICAgICAgaW50QmFza2V0LFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcbiAgICAgICAgY2FiSGlyZVF1b3RlLnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGlnbm9yZUludm9rZWRcbiAgICAgICk7XG4gICAgICBpZiAod2hhdEhhcHBlbmVkID09PSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoKSB7XG4gICAgICAgICAgdGhpcy5yZXNlYXJjaFdpdGhOZXdVc2VyKCk7XG4gICAgICAgIH1cbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XG4gICAgfVxuICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbDtcbiAgfVxuXG4gIHN3aXRjaEZyb21BbmRUb0xvY2F0aW9uKCkge1xuICAgIGNvbnN0IG5ld0Zyb21BZGRyZXNzID0geyAuLi50aGlzLnRvQWRkcmVzcyB9O1xuICAgIGNvbnN0IG5ld1RvQWRkcmVzcyA9IHsgLi4udGhpcy5mcm9tQWRkcmVzcyB9O1xuICAgIHRoaXMuZnJvbUFkZHJlc3MgPSBuZXdGcm9tQWRkcmVzcztcbiAgICB0aGlzLnRvQWRkcmVzcyA9IG5ld1RvQWRkcmVzcztcbiAgfVxuXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IENhYkhpcmVRdW90ZVtdKTogSUNoZWFwZXN0UHJpY2Uge1xuICAgIGlmICghcmVzdWx0cz8ubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBjdXJyZW5jeSA9IHJlc3VsdHNbMF0uY3VycmVuY3k7XG4gICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKFxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IENhYkhpcmVRdW90ZSkgPT4ge1xuICAgICAgICBjb25zdCBwcmljZSA9IHJlc3VsdC5wcmljZTtcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xuICAgICAgfSxcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XG4gICAgKTtcbiAgfVxuXG4gIGdldFRlcm1zQW5kQ29uZChjYWJIaXJlUXVvdGU6IENhYkhpcmVRdW90ZSkge1xuICAgIGNvbnN0IGRlcGFydHMgPSBtb21lbnQoY2FiSGlyZVF1b3RlLmRlcGFydHMpLnV0YygpLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUX1RJTUUpO1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdMb3dlc3QgUHJpY2UnLFxuICAgICAgICB2YWx1ZTogY2FiSGlyZVF1b3RlLnByaWNlLnRvU3RyaW5nKCkgKyAnICcgKyBjYWJIaXJlUXVvdGUuY3VycmVuY3lcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdQaWNrdXAgVGltZScsXG4gICAgICAgIHZhbHVlOiBkZXBhcnRzXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVGVybXMgYW5kIENvbmRpdGlvbnMnLFxuICAgICAgICB2YWx1ZTpcbiAgICAgICAgICBjYWJIaXJlUXVvdGUuc291cmNlID09PSBTZXJ2aWNlUHJvdmlkZXIuQ01BQ1xuICAgICAgICAgICAgPyAnPGEgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cImh0dHBzOi8vd3d3LmNtYWNncm91cC5jb20vXCI+d3d3LmNtYWNncm91cC5jb208L2E+J1xuICAgICAgICAgICAgOiBjYWJIaXJlUXVvdGUuYWRkaXRpb25hbD8ucHJvdmlkZXJzUHJpY2luZz8ubm90ZXNcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XG4gICAgICBjb25zdCBxdWVyeTogUXVlcnlTZWFyY2hDYWJIaXJlQXJncyA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5OiBJQ2FiSGlyZVNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkNhYixcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XG4gICAgfVxuICB9XG4gIGFzeW5jIGFwcGx5RmF2b3VyaXRlKGZhdjogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGZhdi5mcm9tTG9jYXRpb24uU3RyZWV0ICYmIGZhdi50b0xvY2F0aW9uLlN0cmVldCkge1xuICAgICAgdGhpcy5tb2RlID0gVGF4aUZvcm1Nb2RlLkFERFJFU1M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kZSA9IFRheGlGb3JtTW9kZS5TVEFUSU9OO1xuICAgICAgdGhpcy5haXJwb3J0U2VhcmNoVHlwZSA9IGZhdi5mcm9tTG9jYXRpb24uU3RyZWV0XG4gICAgICAgID8gQWlycG9ydFNlYXJjaE1vZGUuRFJPUE9GRlxuICAgICAgICA6IEFpcnBvcnRTZWFyY2hNb2RlLlBJQ0tVUDtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KCFmYXYuZnJvbUxvY2F0aW9uLlN0cmVldCA/IGZhdi5mcm9tTG9jYXRpb24uSG91c2UgOiBmYXYudG9Mb2NhdGlvbi5Ib3VzZSlcbiAgICAgICAgLnN1YnNjcmliZShhaXJwb3J0ID0+IHtcbiAgICAgICAgICB0aGlzLmFpcnBvcnQgPSAoYWlycG9ydCBhcyBhbnlbXSlbMF07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmFkdWx0cyA9IGZhdi5hZHVsdHM7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGZhdi5jaGlsZHJlbjtcbiAgICB0aGlzLmluZmFudHMgPSBmYXYuaW5mYW50cztcbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLkhvdXNlID0gZmF2LmZyb21Mb2NhdGlvbi5Ib3VzZVxuICAgIC8vIHRoaXMuZnJvbUFkZHJlc3MuU3RyZWV0ID0gZmF2LmZyb21Mb2NhdGlvbi5TdHJlZXRcbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLlRvd24gPSBmYXYuZnJvbUxvY2F0aW9uLlRvd25cbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLkNvdW50cnkgPSBmYXYuZnJvbUxvY2F0aW9uLkNvdW50cnlcbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLlBvc3RDb2RlID0gZmF2LmZyb21Mb2NhdGlvbi5Qb3N0Q29kZVxuICAgIC8vIHRoaXMuZnJvbUFkZHJlc3MucGxhY2VEZXNjcmlwdGlvbiA9IGZhdi5mcm9tTG9jYXRpb24ucGxhY2VEZXNjcmlwdGlvblxuICAgIC8vIHRoaXMudG9BZGRyZXNzLkhvdXNlID0gZmF2LnRvTG9jYXRpb24uSG91c2VcbiAgICAvLyB0aGlzLnRvQWRkcmVzcy5TdHJlZXQgPSBmYXYudG9Mb2NhdGlvbi5TdHJlZXRcbiAgICAvLyB0aGlzLnRvQWRkcmVzcy5Ub3duID0gZmF2LnRvTG9jYXRpb24uVG93blxuICAgIC8vIHRoaXMudG9BZGRyZXNzLkNvdW50cnkgPSBmYXYudG9Mb2NhdGlvbi5Db3VudHJ5XG4gICAgLy8gdGhpcy50b0FkZHJlc3MuUG9zdENvZGUgPSBmYXYudG9Mb2NhdGlvbi5Qb3N0Q29kZVxuICAgIC8vIHRoaXMudG9BZGRyZXNzLnBsYWNlRGVzY3JpcHRpb24gPSBmYXYudG9Mb2NhdGlvbi5wbGFjZURlc2NyaXB0aW9uXG4gICAgdGhpcy5mcm9tQWRkcmVzcyA9IGZhdi5mcm9tTG9jYXRpb247XG4gICAgdGhpcy50b0FkZHJlc3MgPSBmYXYudG9Mb2NhdGlvbjtcbiAgICB0aGlzLnZlaGljbGVUeXBlID0gZmF2LnZlaGljbGVUeXBlO1xuICB9XG5cbiAgbWVzc2FnZUNvbmZpZ0NoZWNrKGNvbmZpZzogYW55LCBpc0NoZWNrUGFzczogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGlmIChjb25maWcuYWlycG9ydCAmJiBpc0NoZWNrUGFzcykge1xuICAgICAgY29uc3QgZnJvbUFpcnBvcnQgPSB0aGlzLmZyb21BZGRyZXNzPy5BaXJwb3J0U3RhdGlvbk5hbWUgPT09IGNvbmZpZy5haXJwb3J0O1xuICAgICAgY29uc3QgdG9BaXJwb3J0ID0gdGhpcy50b0FkZHJlc3M/LkFpcnBvcnRTdGF0aW9uTmFtZSA9PT0gY29uZmlnLmFpcnBvcnQ7XG4gICAgICBpc0NoZWNrUGFzcyA9IGZyb21BaXJwb3J0IHx8IHRvQWlycG9ydDtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5jaXR5ICYmIGlzQ2hlY2tQYXNzKSB7XG4gICAgICBjb25zdCBjaXR5ID0gY29uZmlnLmNpdHkudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgIGxldCBmcm9tQ2l0eSA9IHRoaXMuZnJvbUxvY2F0aW9uPy50b3duPy50b0xvd2VyQ2FzZSgpLnRyaW0oKSA9PT0gIGNpdHk7XG4gICAgICBpZih0aGlzLmZyb21Mb2NhdGlvbj8uYnVpbGRpbmdOYW1lICYmICFmcm9tQ2l0eSl7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmZyb21Mb2NhdGlvbj8uYnVpbGRpbmdOYW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgZnJvbUNpdHkgPSBuYW1lLmluY2x1ZGVzKGNpdHkpO1xuICAgICAgfVxuICAgICAgbGV0IHRvQ2l0eSA9IHRoaXMudG9Mb2NhdGlvbj8udG93bj8udG9Mb3dlckNhc2UoKS50cmltKCkgPT09ICBjaXR5O1xuICAgICAgaWYodGhpcy50b0xvY2F0aW9uPy5idWlsZGluZ05hbWUgJiYgIXRvQ2l0eSl7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnRvTG9jYXRpb24/LmJ1aWxkaW5nTmFtZT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgIHRvQ2l0eSA9IG5hbWUuaW5jbHVkZXMoY2l0eSk7XG4gICAgICB9XG5cbiAgICAgIGlzQ2hlY2tQYXNzID0gZnJvbUNpdHkgfHwgdG9DaXR5O1xuICAgIH1cbiAgICByZXR1cm4gaXNDaGVja1Bhc3M7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUxvY2F0aW9uKFxuICAgIG1vZGU6IFRheGlGb3JtTW9kZSxcbiAgICBsb2NhdGlvbjogQ2FiSGlyZUxvY2F0aW9uSW5wdXRcbiAgKTogUHJvbWlzZTxSYWlsQWlycG9ydCB8IG51bGw+IHtcbiAgICBpZiAobW9kZSAhPT0gVGF4aUZvcm1Nb2RlLlNUQVRJT04pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgXG4gICAgY29uc3QgdGVybSA9IGxvY2F0aW9uLmJ1aWxkaW5nTmFtZS5yZXBsYWNlKC9eW14sXSssXFxzKi8sIFwiXCIpO1xuICAgIGNvbnN0IGlzVHJ1ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBcbiAgICBpZiAobG9jYXRpb24udGVybWluYWwpIHsgLy8gYWlycG9ydCB0eXBlXG4gICAgICBjb25zdCBsb2NhdGlvbnMgID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRMb2NhdGlvbnModGVybSwgbG9jYXRpb24uY291bnRyeUNvZGUsIGlzVHJ1ZVN1YmplY3QpLnRvUHJvbWlzZSgpO1xuICAgICAgaWYgKGxvY2F0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHsgYWlycG9ydCwgbmFtZSwgdHlwZSB9ID0gbG9jYXRpb25zWzBdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgYWlycG9ydCxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHN1cHBsaWVyX2NvZGU6IG51bGwsXG4gICAgICAgICAgaXNhaXJwb3J0OiBudWxsLFxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBhaXJwb3J0LmRlc3RpbmF0aW9uLFxuICAgICAgICAgIHRlcm1pbmFsOiBsb2NhdGlvbi50ZXJtaW5hbCxcbiAgICAgICAgfSBhcyBSYWlsQWlycG9ydDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxvY2F0aW9uLmJ1aWxkaW5nTmFtZSA9PT0gbG9jYXRpb24uc3RyZWV0QW5kTnVtYmVyKSB7IC8vIFRyYWluIFN0LiB0eXBlXG4gICAgICBjb25zdCBsb2NhdGlvbnMgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0U3RhdGlvbkxvY2F0aW9ucyh0ZXJtLCBpc1RydWVTdWJqZWN0KS50b1Byb21pc2UoKTtcbiAgICAgIGlmIChsb2NhdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIHJhaWxzdGF0aW9uLCB0eXBlIH0gPSBsb2NhdGlvbnNbMF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHJhaWxzdGF0aW9uLFxuICAgICAgICAgIHN1cHBsaWVyX2NvZGU6IG51bGwsXG4gICAgICAgICAgaXNhaXJwb3J0OiBudWxsLFxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBudWxsLFxuICAgICAgICB9IGFzIFJhaWxBaXJwb3J0O1xuICAgICAgfVxuICAgIH1cbiAgXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRBZGRyZXNzKGV2ZW50OiBhbnkpOiBBZGRyZXNzRm9ybSB7XG4gICAgbGV0IGFkZHJlc3M6IEFkZHJlc3NGb3JtID0gbnVsbDtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGxldCBhZGRyZXNzVHlwZTogc3RyaW5nID0gZXZlbnQ/LnR5cGU7XG4gICAgICBpZiAoYWRkcmVzc1R5cGU/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKCdhaXJwb3J0JykpIHtcbiAgICAgICAgYWRkcmVzcyA9IHtcbiAgICAgICAgICBIb3VzZTogZXZlbnQ/LnR5cGUsXG4gICAgICAgICAgU3RyZWV0OiBldmVudD8ubmFtZSxcbiAgICAgICAgICBQb3N0Q29kZTogZXZlbnQ/LmFpcnBvcnQ/LnBvc3Rjb2RlLFxuICAgICAgICAgIFRlcm1pbmFsOiBldmVudD8udGVybWluYWwgfHwgbnVsbCxcbiAgICAgICAgICBDb3VudHJ5OiBldmVudD8uYWlycG9ydD8uY291bnRyeUNvZGUsXG4gICAgICAgICAgRmxpZ2h0TnVtYmVyOiAgZXZlbnQ/LmZsaWdodE51bWJlciB8fCAnJyxcbiAgICAgICAgICBDYXJyaWVyOiAgZXZlbnQ/LmNhcnJpZXIgfHwgJycsXG4gICAgICAgICAgQWlycG9ydFN0YXRpb25OYW1lOiBldmVudD8uYWlycG9ydD8uZ2F0ZXdheSB8fCAnJ1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGRyZXNzID0ge1xuICAgICAgICAgIEhvdXNlOiBldmVudD8udHlwZSxcbiAgICAgICAgICBTdHJlZXQ6IGV2ZW50Py5uYW1lLFxuICAgICAgICAgIFBvc3RDb2RlOiBldmVudD8ucmFpbHN0YXRpb24/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXG4gICAgICAgICAgQ291bnRyeTogZXZlbnQ/LnJhaWxzdGF0aW9uPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlLFxuICAgICAgICAgIEZsaWdodE51bWJlcjogIGV2ZW50Py5mbGlnaHROdW1iZXIgfHwgJycsXG4gICAgICAgICAgQ2FycmllcjogIGV2ZW50Py5jYXJyaWVyIHx8ICcnLFxuICAgICAgICAgIEFpcnBvcnRTdGF0aW9uTmFtZTogZXZlbnQ/LnJhaWxzdGF0aW9uPy5zdGF0aW9uQ29kZSB8fCAnJyxcbiAgICAgICAgICBGbGlnaHRUcmFpbkRhdGVUaW1lOiBldmVudD8uZmxpZ2h0VHJhaW5EYXRlVGltZSB8fCAnMDk6MDAnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFkZHJlc3M7XG4gIH1cblxuICBfYXBwbHlGaWx0ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VhcmNoU2VydmljZS5pc0Nsb25pbmcuZ2V0VmFsdWUoKSkge1xuICAgICAgY29uc3QgZmlsdGVyZWRSZXN1bHRzID0gdGhpcy5mdWxsUmVzdWx0cy5maWx0ZXIoKHJlc3VsdDogQ2FiSGlyZVF1b3RlKSA9PiBcbiAgICAgICAgcmVzdWx0LnN1cHBsaWVyTmFtZSA9PT0gdGhpcy5jbG9uZWRCYXNrZXRJdGVtRGV0YWlscy5zdXBwbGllck5hbWVcbiAgICAgICk7XG4gICAgICB0aGlzLnJlc3VsdHMubmV4dCh0aGlzLmhlbHBlcnMuY2xvbmUoZmlsdGVyZWRSZXN1bHRzKSk7XG4gICAgfSBcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMgPSB7fTtcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2UgdXNlIHRoaXMgbWV0aG9kIGZvciBmZWF0dXJlczogRXhwaXJlZEJhc2tldCwgQ29weUJhc2tldCwgQ2xvbmVCYXNrZXRcbiAgLy8gTm90ZTogRG8gbm90IGluY2x1ZGUgZGF0ZXMgYW5kIHRhdmVsbGVycyBpbiB0aGlzIG1ldGhvZFxuICBhc3luYyBhcHBseVNlYXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hDYWJIaXJlUXVlcnlWYXJpYWJsZXMsIHN0YXJ0U2VhcmNoOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIHRoaXMuZnJvbUFkZHJlc3MgPSB0aGlzLmNvbnZlcnRBZGRyZXNzTG9jYXRpb24oXG4gICAgICBxdWVyeS5mcm9tTG9jYXRpb25cbiAgICApO1xuXG4gICAgdGhpcy50b0FkZHJlc3MgPSB0aGlzLmNvbnZlcnRBZGRyZXNzTG9jYXRpb24oXG4gICAgICBxdWVyeS50b0xvY2F0aW9uXG4gICAgKTtcblxuICAgIGNvbnN0IGlzTGltbzogYm9vbGVhbiA9IHF1ZXJ5Lm1lc3NhZ2VUeXBlID09PSBNZXNzYWdlVHlwZS5MaW1vID8gdHJ1ZSA6IGZhbHNlO1xuICBcbiAgICB0aGlzLnZlaGljbGVUeXBlID0gaXNMaW1vID8gQ2FiSGlyZVZlaGljbGVUeXBlLkxpbW8gOiBxdWVyeS52ZWhpY2xlVHlwZTtcbiAgICB0aGlzLmxpbW9UeXBlID0gaXNMaW1vID8gcXVlcnkudmVoaWNsZVR5cGUgOiBudWxsO1xuICAgIHRoaXMudHJhbnNwb3J0VHlwZSA9IGlzTGltbyA/IHRoaXMudGVtcFBhcmFtcy50cmFuc3BvcnRUeXBlIDogbnVsbDtcbiAgICB0aGlzLmxpbW9Bc0RpcmVjdGVkRHVyYXRpb24gPSBxdWVyeS50cmFuc3BvcnRUeXBlID09PSBUcmFuc3BvcnRUeXBlLkhvdXJseSA/ICtxdWVyeS5saW1vQXNEaXJlY3RlZER1cmF0aW9uIDogbnVsbDtcblxuICAgIHRoaXMubW9kZSA9IHF1ZXJ5LmZyb21Mb2NhdGlvbi5idWlsZGluZ05hbWUgPT09IHF1ZXJ5LmZyb21Mb2NhdGlvbi5zdHJlZXRBbmROdW1iZXIgfHwgcXVlcnkuZnJvbUxvY2F0aW9uLnRlcm1pbmFsID8gVGF4aUZvcm1Nb2RlLlNUQVRJT04gOiBUYXhpRm9ybU1vZGUuQUREUkVTUztcbiAgICB0aGlzLm1vZGVUbyA9IHF1ZXJ5LnRvTG9jYXRpb24uYnVpbGRpbmdOYW1lID09PSBxdWVyeS50b0xvY2F0aW9uLnN0cmVldEFuZE51bWJlciB8fCBxdWVyeS50b0xvY2F0aW9uLnRlcm1pbmFsID8gVGF4aUZvcm1Nb2RlLlNUQVRJT04gOiBUYXhpRm9ybU1vZGUuQUREUkVTUztcblxuICAgIHRoaXMuZnJvbVN0YXRpb24gPSBhd2FpdCB0aGlzLmhhbmRsZUxvY2F0aW9uKHRoaXMubW9kZSwgcXVlcnkuZnJvbUxvY2F0aW9uKTtcbiAgICB0aGlzLnRvU3RhdGlvbiA9IGF3YWl0IHRoaXMuaGFuZGxlTG9jYXRpb24odGhpcy5tb2RlVG8sIHF1ZXJ5LnRvTG9jYXRpb24pO1xuXG4gICAgdGhpcy52aWFzID0gcXVlcnkudmlhcyBhcyBDYWJIaXJlTG9jYXRpb25JbnB1dFtdIHx8IFtdO1xuICAgIGlmICh0aGlzLnZpYXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52aWFzRnJvbSA9IHRoaXMuY29udmVydEFkZHJlc3NMb2NhdGlvbih0aGlzLnZpYXNbMF0pO1xuICAgIH1cbiAgICBpZiAodGhpcy52aWFzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMudmlhc1RvID0gdGhpcy5jb252ZXJ0QWRkcmVzc0xvY2F0aW9uKHRoaXMudmlhc1sxXSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0U2VhcmNoKSB7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgIH1cbiAgfVxufVxuIl19
1399
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FiaGlyZS1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9jYWJoaXJlLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVELE9BQU8sRUFPTCw0QkFBNEIsRUFDNUIsZUFBZSxFQUVmLGFBQWEsRUFDZCxNQUFNLGdCQUFnQixDQUFDO0FBTXhCLE9BQU8sRUFDTCxXQUFXLEVBSVgsa0JBQWtCLEVBR2xCLFdBQVcsRUFZWCxXQUFXLEVBQ1gsYUFBYSxFQUNkLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLGlCQUFpQixFQUtqQixZQUFZLEVBRWIsTUFBTSwwQ0FBMEMsQ0FBQztBQVNsRCxNQUFNLE9BQU8sdUJBQ1gsU0FBUSxvQkFBeUY7SUErZGpHLFlBQ1UsVUFBeUMsRUFDakQsT0FBMkIsRUFDM0IsY0FBa0MsRUFDbEMsYUFBK0MsRUFDdkMsYUFBK0MsRUFDdkQsV0FBaUM7UUFFakMsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBUG5ELGVBQVUsR0FBVixVQUFVLENBQStCO1FBSXpDLGtCQUFhLEdBQWIsYUFBYSxDQUFrQztRQTNkbEQsU0FBSSxHQUFnQixXQUFXLENBQUMsR0FBRyxDQUFDO1FBQ25DLGVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBQ3JDLGtCQUFhLEdBQXlCLElBQUksT0FB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YUFBYSxDQUFDO0FBQ3hDLHFEQUE2QixHQUFHLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJhdmVsbGVyIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xuaW1wb3J0IHtcbiAgQWRkcmVzc0Zvcm0sXG4gIENhYmhpcmVRdW90ZVJlc3VsdEFycmF5LFxuICBOZ2JEYXRlU3RydWN0LFxuICBSYWlsQWlycG9ydCxcbiAgUmVjZW50U2VhcmNoLFxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxuICBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLFxuICBTZXJ2aWNlUHJvdmlkZXIsXG4gIEtleVZhbHVlLFxuICBMb2NhdGlvblR5cGVzXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQmFzZUNhYmhpcmVRdW90ZUZldGNoZXIsXG4gIENhYmhpcmVRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2NhYmhpcmUtcXVvdGUtZmV0Y2hlcic7XG5pbXBvcnQge1xuICBBZGRyZXNzVHlwZSxcbiAgQmFza2V0SXRlbSxcbiAgQ2FiSGlyZUxvY2F0aW9uSW5wdXQsXG4gIENhYkhpcmVRdW90ZSxcbiAgQ2FiSGlyZVZlaGljbGVUeXBlLFxuICBDdXJyZW5jeUNvZGUsXG4gIExvY2F0aW9uRGV0YWlsLFxuICBNZXNzYWdlVHlwZSxcbiAgUXVlcnlTZWFyY2hDYWJIaXJlQXJncyxcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxuICBTZWFyY2hDYWJIaXJlUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaENhckhpcmVRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoRXVyb3N0YXJRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hJcmxRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoTG91bmdlc1F1ZXJ5VmFyaWFibGVzLFxuICBTZWFyY2hQYXJraW5nUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyxcbiAgU2VydmljZVR5cGUsXG4gIFRyYW5zcG9ydFR5cGVcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XG5pbXBvcnQge1xuICBBaXJwb3J0U2VhcmNoTW9kZSxcbiAgQ2FiSGlyZUVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXG4gIENhYkhpcmVUZW1wUGFyYW1zLFxuICBUYXhpQWlycG9ydCxcbiAgVGF4aUF0dHJpYnV0ZSxcbiAgVGF4aUZvcm1Nb2RlLFxuICBUcmFuc1R5cGVcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JY2FiaGlyZS1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQge1xuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcbiAgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xuaW1wb3J0IHsgSUNhYkhpcmVTZWFyY2hBcmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYWItaGlyZS1zZWFyY2gtYXJnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBVc2VyU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XG5cbmV4cG9ydCBjbGFzcyBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaDxDSF9RIGV4dGVuZHMgQ2FiaGlyZVF1b3RlRmV0Y2hlclR5cGU+XG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8Q2FiSGlyZVRlbXBQYXJhbXMsIENhYmhpcmVRdW90ZVJlc3VsdEFycmF5LCBDYWJoaXJlUXVvdGVSZXN1bHRBcnJheT5cbiAgaW1wbGVtZW50cyBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZVxue1xuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfY2FiJztcbiAgc3RhdGljIHJlYWRvbmx5IFNFQ09OREFSWV9TVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ3NlY29uZGFyeV9zZWFyY2hfY2FiJztcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3Jlc3VsdHNfY2FiJztcbiAgc3RhdGljIHJlYWRvbmx5IE1VTFRJX1NUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ211bHRpX3Jlc3VsdHNfY2FiJztcbiAgcHJpdmF0ZSBvdXRib3VuZFZpc2liaWxpdHk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSBpbmJvdW5kVmlzaWJpbGl0eTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICBwdWJsaWMgdHlwZTogU2VydmljZVR5cGUgPSBTZXJ2aWNlVHlwZS5DYWI7XG4gIHByaXZhdGUgdHJhdmVsbGVyczogVHJhdmVsbGVyW10gPSBbXTtcbiAgYWlycG9ydENoYW5nZTogU3ViamVjdDxUYXhpQWlycG9ydD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHJlYWRvbmx5IHRyYW5zVHlwZXM6IFRyYW5zVHlwZVtdID0gW1xuICAgIHsga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuQW55LCB2YWx1ZTogJ0FueSAoMS04IFBhc3NlbmdlcnMpJywgaWQ6IDggfSxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5TdGFuZGFyZENhcixcbiAgICAgIHZhbHVlOiAnU2Fsb29uIENhciAoMS00IFBhc3NlbmdlcnMpJyxcbiAgICAgIGlkOiA0XG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5CbGFja0NhYixcbiAgICAgIHZhbHVlOiAnSGFja25leSBDYXJyaWFnZSAoMS00IFBhc3NlbmdlcnMpJyxcbiAgICAgIGlkOiA0XG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5EZGFDYXIsXG4gICAgICB2YWx1ZTogJ0RkYSAtIHdoZWVsY2hhaXIgYWNjZXNzaWJsZSAoMS00IFBhc3NlbmdlcnMpJyxcbiAgICAgIGlkOiA0XG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5NZWRpdW1NcHYsXG4gICAgICB2YWx1ZTogJ1Blb3BsZSBDYXJyaWVyICgxLTcgUGFzc2VuZ2VycyknLFxuICAgICAgaWQ6IDdcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkV4ZWN1dGl2ZUNhcixcbiAgICAgIHZhbHVlOiAnRXhlY3V0aXZlICgxLTQgUGFzc2VuZ2VycyknLFxuICAgICAgaWQ6IDRcbiAgICB9XG4gIF07XG5cbiAgcmVhZG9ubHkgZ3JvdW5kc3BhblRyYW5zVHlwZXM6IFRyYW5zVHlwZVtdID0gW1xuICAgIC4uLnRoaXMudHJhbnNUeXBlcyxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5MaW1vLFxuICAgICAgdmFsdWU6ICdDaGF1ZmZldXIgQ2FyJyxcbiAgICAgIGlkOiA3XG4gICAgfVxuICBdO1xuXG4gIHJlYWRvbmx5IGNtYWNUcmFuc1R5cGVzOiBUcmFuc1R5cGVbXSA9IFtcbiAgICAuLi50aGlzLnRyYW5zVHlwZXMsXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuRGRhQ29hY2gsXG4gICAgICB2YWx1ZTogJ0RkYSBDb2FjaCAtIHdoZWVsY2hhaXIgYWNjZXNzaWJsZSAoMzAgLSAxMDAgcGFzc2VuZ2VycyknLFxuICAgICAgaWQ6IDEyXG4gICAgfVxuICBdLnNvcnQoKGEsYikgPT4ge1xuICAgIGlmIChhLnZhbHVlID4gYi52YWx1ZSkgcmV0dXJuIDE7XG4gICAgaWYgKGEudmFsdWUgPCBiLnZhbHVlKSByZXR1cm4gLTE7XG4gICAgcmV0dXJuIDA7XG4gIH0pXG5cbiAgcmVhZG9ubHkgbGltb1R5cGVzOiBLZXlWYWx1ZTxDYWJIaXJlVmVoaWNsZVR5cGUsIHN0cmluZz5bXSA9IFtcbiAgICB7IGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkFueSxcbiAgICAgIHZhbHVlOiAnQWxsJ1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuTGltbyxcbiAgICAgIHZhbHVlOiAnTGltbydcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLkxpbW9CdXMsXG4gICAgICB2YWx1ZTogJ0xpbW8gQnVzJ1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiBDYWJIaXJlVmVoaWNsZVR5cGUuTWluaUJ1cyxcbiAgICAgIHZhbHVlOiAnTWluaSBCdXMnXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5NaW5pQ29hY2gsXG4gICAgICB2YWx1ZTogJ01pbmkgQ29hY2gnXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5TZWRhbixcbiAgICAgIHZhbHVlOiAnU2VkYW4nXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6IENhYkhpcmVWZWhpY2xlVHlwZS5TdXYsXG4gICAgICB2YWx1ZTogJ1N1didcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogQ2FiSGlyZVZlaGljbGVUeXBlLlZhbixcbiAgICAgIHZhbHVlOiAnVmFuJ1xuICAgIH1cbiAgXTtcblxuICByZWFkb25seSBhdHRyaWJ1dGVzOiBUYXhpQXR0cmlidXRlW10gPSBbXG4gICAgeyBlbmFibGVkOiBmYWxzZSwga2V5OiAnd2hlZWxjaGFpcicsIHZhbHVlOiAnV2hlZWxjaGFpciAoT24gUmVxdWVzdCknIH0sXG4gICAgeyBlbmFibGVkOiBmYWxzZSwga2V5OiAnY2FsbF9vbl9hcnJpdmFsJywgdmFsdWU6ICdDYWxsIE9uIEFycml2YWwnIH0sXG4gICAge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBrZXk6ICdtZWV0X2FuZF9ncmVldCcsXG4gICAgICB2YWx1ZTogJ01lZXQgQW5kIEdyZWV0IChDaGFyZ2UgQXBwbGllcyknXG4gICAgfSxcbiAgICB7IGVuYWJsZWQ6IGZhbHNlLCBrZXk6ICd3YWl0X2FuZF9yZXR1cm4nLCB2YWx1ZTogJ1dhaXQgQW5kIFJldHVybicgfVxuICBdO1xuICByZWFkb25seSBzZWFyY2hUeXBlcyA9IFsnT25lLXdheScsICdSZXR1cm4nXTtcblxuICByZWFkb25seSBhaXJwb3J0U2VhcmNoVHlwZXMgPSBbJ0FpcnBvcnQgZHJvcCBvZmYnLCAnQWlycG9ydCBQaWNrIFVwJ107XG4gIHJlYWRvbmx5IGNyaXRlcmlhID0gWydQaWNrIFVwIFRpbWUnXTtcblxuICBtb2RlOiBUYXhpRm9ybU1vZGUgPSBUYXhpRm9ybU1vZGUuQUREUkVTUztcbiAgbW9kZVRvOiBUYXhpRm9ybU1vZGUgPSBUYXhpRm9ybU1vZGUuQUREUkVTUztcbiAgbWluU2VsZWN0RGF0ZTogbW9tZW50Lk1vbWVudCA9IG1vbWVudCgpO1xuICBtaW5SZXR1cm5TZWxlY3REYXRlOiBOZ2JEYXRlU3RydWN0ID0ge1xuICAgIGRheTogbW9tZW50KCkuZGF0ZSgpLFxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcbiAgICB5ZWFyOiBtb21lbnQoKS55ZWFyKClcbiAgfTtcblxuICAvLyBnZXR0ZXJzIGFuZCBzZXR0ZXJzXG4gIHByaXZhdGUgX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xuICBzZWxlY3RlZFBsYWNlczogYW55ID0gW107XG4gIHByaXZhdGUgX2Zyb21Mb2NhdGlvbjogQ2FiSGlyZUxvY2F0aW9uSW5wdXQ7XG4gIHByaXZhdGUgX3RvTG9jYXRpb246IENhYkhpcmVMb2NhdGlvbklucHV0O1xuICBwcml2YXRlIF92aWFzOiBDYWJIaXJlTG9jYXRpb25JbnB1dFtdID0gW251bGwsIG51bGwsIG51bGwsIG51bGxdO1xuXG4gIGdldCBmcm9tTG9jYXRpb24oKTogQ2FiSGlyZUxvY2F0aW9uSW5wdXQge1xuICAgIHJldHVybiB0aGlzLl9mcm9tTG9jYXRpb247XG4gIH1cblxuICBnZXQgdG9Mb2NhdGlvbigpOiBDYWJIaXJlTG9jYXRpb25JbnB1dCB7XG4gICAgcmV0dXJuIHRoaXMuX3RvTG9jYXRpb247XG4gIH1cblxuICBnZXQgZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZTtcbiAgfVxuXG4gIHNldCBkYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XG4gICAgdGhpcy5fZGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZURhdGVUaW1lKCk7XG4gIH1cblxuICAvKlxuICAgKiBzZWFyY2hUeXBlXG4gICAqL1xuICBwcml2YXRlIF9zZWFyY2hUeXBlID0gdGhpcy5zZWFyY2hUeXBlc1swXTtcbiAgZ2V0IHNlYXJjaFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFR5cGU7XG4gIH1cblxuICBzZXQgc2VhcmNoVHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2VhcmNoVHlwZSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIC8qXG4gICAqIGFpcnBvaXJ0IHNlYXJjaFR5cGVcbiAgICovXG5cbiAgX2FpcnBvcnRTZWFyY2hUeXBlOiBBaXJwb3J0U2VhcmNoTW9kZSA9IEFpcnBvcnRTZWFyY2hNb2RlLkRST1BPRkY7XG4gIGdldCBhaXJwb3J0U2VhcmNoVHlwZSgpOiBBaXJwb3J0U2VhcmNoTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuX2FpcnBvcnRTZWFyY2hUeXBlO1xuICB9XG4gIHNldCBhaXJwb3J0U2VhcmNoVHlwZShtb2RlOiBBaXJwb3J0U2VhcmNoTW9kZSkge1xuICAgIHRoaXMuX2FpcnBvcnRTZWFyY2hUeXBlID0gbW9kZTtcbiAgICBpZiAodGhpcy5mcm9tQWRkcmVzcyB8fCB0aGlzLnRvQWRkcmVzcykge1xuICAgICAgdGhpcy5zd2l0Y2hGcm9tQW5kVG9Mb2NhdGlvbigpO1xuICAgIH1cbiAgfVxuICAvKlxuICAgKiBhaXJwb2lydCBhbmQgdHJhaW4gc3RhdGlvbiBzZWFyY2hUeXBlXG4gICAqL1xuXG4gIGdldCBmcm9tTG9jYXRpb25UeXBlKCk6IFRheGlGb3JtTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5mcm9tTG9jYXRpb25UeXBlO1xuICB9XG4gIHNldCBmcm9tTG9jYXRpb25UeXBlKG1vZGU6IFRheGlGb3JtTW9kZSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5mcm9tTG9jYXRpb25UeXBlID0gbW9kZTtcbiAgfVxuICBnZXQgdG9Mb2NhdGlvblR5cGUoKTogVGF4aUZvcm1Nb2RlIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRvTG9jYXRpb25UeXBlO1xuICB9XG4gIHNldCB0b0xvY2F0aW9uVHlwZShtb2RlOiBUYXhpRm9ybU1vZGUpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMudG9Mb2NhdGlvblR5cGUgPSBtb2RlO1xuICB9XG5cbiAgZ2V0IHNwZWNpYWxSZXF1aXJlbWVudHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnNwZWNpYWxSZXF1aXJlbWVudHM7XG4gIH1cblxuICBzZXQgc3BlY2lhbFJlcXVpcmVtZW50cyhuZXdSZXE6IHN0cmluZykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5zcGVjaWFsUmVxdWlyZW1lbnRzID0gbmV3UmVxO1xuICB9XG4gIC8qXG4gICAqIHNlYXJjaENyaXRlcmlhXG4gICAqL1xuICBwcml2YXRlIF9zZWFyY2hDcml0ZXJpYSA9IHRoaXMuY3JpdGVyaWFbMF07XG4gIGdldCBzZWFyY2hDcml0ZXJpYSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoQ3JpdGVyaWE7XG4gIH1cblxuICBzZXQgc2VhcmNoQ3JpdGVyaWEodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3NlYXJjaENyaXRlcmlhID0gdmFsdWU7XG4gIH1cblxuICAvKlxuICAgKiBvdXRib3VuZERhdGVUaW1lXG4gICAqL1xuICBwcml2YXRlIF9vdXRib3VuZERhdGVUaW1lOiBtb21lbnQuTW9tZW50ID0gdGhpcy5oZWxwZXJzLnJvdW5kKFxuICAgIG1vbWVudCgpLFxuICAgIG1vbWVudC5kdXJhdGlvbigxNSwgJ21pbnV0ZXMnKVxuICApO1xuICBnZXQgb3V0Ym91bmREYXRlVGltZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fb3V0Ym91bmREYXRlVGltZTtcbiAgfVxuXG4gIHNldCBvdXRib3VuZERhdGVUaW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgdGhpcy5fb3V0Ym91bmREYXRlVGltZSA9IHZhbHVlO1xuICB9XG5cbiAgLypcbiAgICogcmV0dXJuRGF0ZVRpbWVcbiAgICovXG4gIHByaXZhdGUgX3JldHVybkRhdGVUaW1lOiBtb21lbnQuTW9tZW50ID0gdGhpcy5oZWxwZXJzLnJvdW5kKFxuICAgIG1vbWVudCgpLFxuICAgIG1vbWVudC5kdXJhdGlvbigxNSwgJ21pbnV0ZXMnKVxuICApO1xuICBnZXQgcmV0dXJuRGF0ZVRpbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JldHVybkRhdGVUaW1lO1xuICB9XG5cbiAgc2V0IHJldHVybkRhdGVUaW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgdGhpcy5fcmV0dXJuRGF0ZVRpbWUgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICAvKlxuICAgKiBhaXJwb3J0XG4gICAqL1xuXG4gIGdldCBhaXJwb3J0KCkge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWlycG9ydDtcbiAgfVxuICBzZXQgYWlycG9ydCh2YWx1ZTogVGF4aUFpcnBvcnQpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWlycG9ydCA9IHZhbHVlO1xuICB9XG5cbiAgLypcbiAgICogdGVybWluYWxcbiAgICovXG4gIHByaXZhdGUgX3Rlcm1pbmFsOiBzdHJpbmcgPSBudWxsO1xuICBnZXQgdGVybWluYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rlcm1pbmFsO1xuICB9XG4gIHNldCB0ZXJtaW5hbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVybWluYWwgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3RpbWU6IHN0cmluZyA9IG51bGw7XG4gIGdldCB0aW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RpbWU7XG4gIH1cblxuICBzZXQgdGltZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGltZSA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZURhdGVUaW1lKCk7XG4gIH1cblxuICBnZXQgZGVwYXJ0cygpOiBtb21lbnQuTW9tZW50IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRlcGFydHM7XG4gIH1cblxuICBzZXQgZGVwYXJ0cyh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRzID0gdmFsdWUuaXNWYWxpZCA/IHZhbHVlIDogbnVsbDtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLl9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKHZhbHVlKTtcbiAgICAgIHRoaXMuX3RpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5taW5SZXR1cm5TZWxlY3REYXRlID0ge1xuICAgICAgZGF5OiBtb21lbnQodmFsdWUpLmRhdGUoKSxcbiAgICAgIG1vbnRoOiBtb21lbnQodmFsdWUpLm1vbnRoKCkgKyAxLFxuICAgICAgeWVhcjogbW9tZW50KHZhbHVlKS55ZWFyKClcbiAgICB9O1xuXG4gICAgaWYgKHZhbHVlLmlzQWZ0ZXIodGhpcy5yZXR1cm5EYXRlVGltZSkpIHtcbiAgICAgIHRoaXMucmV0dXJuRGF0ZVRpbWUuc2V0KCdkYXRlJywgdmFsdWUuZGF0ZSgpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICAvLyBnZXQgZnJvbUxvY2F0aW9uKCk6IENhYkhpcmVMb2NhdGlvbiB7XG4gIC8vICAgcmV0dXJuIHRoaXMuX2Zyb21Mb2NhdGlvbjtcbiAgLy8gfVxuXG4gIC8vIHNldCBmcm9tTG9jYXRpb24odmFsdWU6IENhYkhpcmVMb2NhdGlvbikge1xuICAvLyAgIHRoaXMuX2Zyb21Mb2NhdGlvbiA9IHZhbHVlO1xuICAvLyAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgLy8gfVxuXG4gIC8vIGdldCB0b0xvY2F0aW9uKCk6IENhYkhpcmVMb2NhdGlvbiB7XG4gIC8vICAgcmV0dXJuIHRoaXMuX3RvTG9jYXRpb247XG4gIC8vIH1cblxuICAvLyBzZXQgdG9Mb2NhdGlvbih2YWx1ZTogQ2FiSGlyZUxvY2F0aW9uKSB7XG4gIC8vICAgdGhpcy5fdG9Mb2NhdGlvbiA9IHZhbHVlO1xuICAvLyAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgLy8gfVxuXG4gIGdldCBhZHVsdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcbiAgfVxuXG4gIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgY2hpbGRyZW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xuICB9XG5cbiAgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgaW5mYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5mYW50cztcbiAgfVxuXG4gIHNldCBpbmZhbnRzKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuaW5mYW50cyA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjb3VudHJ5Q29kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY291bnRyeUNvZGU7XG4gIH1cblxuICBzZXQgY291bnRyeUNvZGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jb3VudHJ5Q29kZSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCB2aWFzKCk6IENhYkhpcmVMb2NhdGlvbklucHV0W10ge1xuICAgIHJldHVybiB0aGlzLl92aWFzO1xuICB9XG5cbiAgc2V0IHZpYXModmFsdWU6IENhYkhpcmVMb2NhdGlvbklucHV0W10pIHtcbiAgICB0aGlzLl92aWFzID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHZpYXNGcm9tKCk6IEFkZHJlc3NGb3JtIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnZpYXNGcm9tO1xuICB9XG5cbiAgc2V0IHZpYXNGcm9tKHZhbHVlOiBBZGRyZXNzRm9ybSkge1xuICAgIGNvbnN0IGlzQ2xlYXJPckRlZmF1bHQgPSB2YWx1ZSAmJiBPYmplY3QudmFsdWVzKHZhbHVlKS5maWx0ZXIoeD0+eCkubGVuZ3RoID09PSAxID8gT2JqZWN0LnZhbHVlcyh2YWx1ZSkuZmlsdGVyKHg9PngpWzBdID09PSAnR0InOmZhbHNlO1xuICAgIHRoaXMudGVtcFBhcmFtcy52aWFzRnJvbSA9IGlzQ2xlYXJPckRlZmF1bHQgPyBudWxsIDogdmFsdWU7XG4gICAgdGhpcy5fdmlhc1swXSA9IHZhbHVlICYmICFpc0NsZWFyT3JEZWZhdWx0ID8gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odmFsdWUpIDogbnVsbDtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgdmlhc1RvKCk6IEFkZHJlc3NGb3JtIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnZpYXNUbztcbiAgfVxuXG4gIHNldCB2aWFzVG8odmFsdWU6IEFkZHJlc3NGb3JtKSB7XG4gICAgY29uc3QgaXNDbGVhck9yRGVmYXVsdCA9IHZhbHVlICYmIE9iamVjdC52YWx1ZXModmFsdWUpLmZpbHRlcih4PT54KS5sZW5ndGggPT09IDEgPyBPYmplY3QudmFsdWVzKHZhbHVlKS5maWx0ZXIoeD0+eClbMF0gPT09ICdHQic6ZmFsc2U7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnZpYXNUbyA9IGlzQ2xlYXJPckRlZmF1bHQgPyBudWxsIDogdmFsdWU7XG4gICAgdGhpcy5fdmlhc1sxXSA9IHZhbHVlICAmJiAhaXNDbGVhck9yRGVmYXVsdD8gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odmFsdWUpIDogbnVsbDtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgdmVoaWNsZVR5cGUoKTogQ2FiSGlyZVZlaGljbGVUeXBlIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnZlaGljbGVUeXBlO1xuICB9XG5cbiAgc2V0IHZlaGljbGVUeXBlKHZhbHVlOiBDYWJIaXJlVmVoaWNsZVR5cGUpIHtcbiAgICBpZiAodmFsdWUgIT09IENhYkhpcmVWZWhpY2xlVHlwZS5MaW1vKSB7XG4gICAgICB0aGlzLmxpbW9UeXBlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saW1vVHlwZSA9IENhYkhpcmVWZWhpY2xlVHlwZS5Bbnk7XG4gICAgfVxuICAgIHRoaXMudGVtcFBhcmFtcy52ZWhpY2xlVHlwZSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBsaW1vVHlwZSgpOiBDYWJIaXJlVmVoaWNsZVR5cGUge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubGltb1R5cGU7XG4gIH1cblxuICBzZXQgbGltb1R5cGUodmFsdWU6IENhYkhpcmVWZWhpY2xlVHlwZSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5saW1vVHlwZSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBsaW1vQXNEaXJlY3RlZER1cmF0aW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5saW1vQXNEaXJlY3RlZER1cmF0aW9uO1xuICB9XG5cbiAgc2V0IGxpbW9Bc0RpcmVjdGVkRHVyYXRpb24odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5saW1vQXNEaXJlY3RlZER1cmF0aW9uID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHRyYW5zcG9ydFR5cGUoKTogVHJhbnNwb3J0VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy50cmFuc3BvcnRUeXBlO1xuICB9XG5cbiAgc2V0IHRyYW5zcG9ydFR5cGUodmFsdWU6IFRyYW5zcG9ydFR5cGUpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMudHJhbnNwb3J0VHlwZSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBmcm9tQWRkcmVzcygpOiBBZGRyZXNzRm9ybSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcztcbiAgfVxuXG4gIHNldCBmcm9tQWRkcmVzcyh2YWx1ZTogQWRkcmVzc0Zvcm0pIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3MgPSB2YWx1ZTtcbiAgICB0aGlzLl9mcm9tTG9jYXRpb24gPSB2YWx1ZSA/IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHZhbHVlKSA6IG51bGw7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGZyb21TdGF0aW9uKCk6IFJhaWxBaXJwb3J0IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZyb21TdGF0aW9uO1xuICB9XG5cbiAgc2V0IGZyb21TdGF0aW9uKHZhbHVlOiBSYWlsQWlycG9ydCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5mcm9tU3RhdGlvbiA9IHZhbHVlO1xuICAgIHRoaXMuX2Zyb21Mb2NhdGlvbiA9IHZhbHVlXG4gICAgICA/IHtcbiAgICAgICAgYnVpbGRpbmdOYW1lOiB2YWx1ZS5uYW1lLFxuICAgICAgICBzdHJlZXRBbmROdW1iZXI6IHZhbHVlLmRlc3RpbmF0aW9uLFxuICAgICAgICB0b3duOiAnJyxcbiAgICAgICAgY291bnR5OiAnJyxcbiAgICAgICAgY291bnRyeUNvZGU6IHZhbHVlLmRlc3RpbmF0aW9uLFxuICAgICAgICBwb3N0Y29kZTogdmFsdWUucG9zdGNvZGVcbiAgICAgICAgfVxuICAgICAgOiBudWxsO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCB0b0FkZHJlc3MoKTogQWRkcmVzc0Zvcm0ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzO1xuICB9XG5cbiAgc2V0IHRvQWRkcmVzcyh2YWx1ZTogQWRkcmVzc0Zvcm0pIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzID0gdmFsdWU7XG4gICAgdGhpcy5fdG9Mb2NhdGlvbiA9IHZhbHVlID8gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odmFsdWUpIDogbnVsbDtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgdG9TdGF0aW9uKCk6IFJhaWxBaXJwb3J0IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRvU3RhdGlvbjtcbiAgfVxuXG4gIHNldCB0b1N0YXRpb24odmFsdWU6IFJhaWxBaXJwb3J0KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnRvU3RhdGlvbiA9IHZhbHVlO1xuICAgIHRoaXMuX3RvTG9jYXRpb24gPSB2YWx1ZVxuICAgICAgPyB7XG4gICAgICAgIGJ1aWxkaW5nTmFtZTogdmFsdWUuYWlycG9ydD8ubmFtZSA/IHZhbHVlLmFpcnBvcnQubmFtZSA6IHZhbHVlLm5hbWUsXG4gICAgICAgIHN0cmVldEFuZE51bWJlcjogdmFsdWUuYWlycG9ydD8uZGVzdGluYXRpb24gPyB2YWx1ZS5haXJwb3J0LmRlc3RpbmF0aW9uIDogdmFsdWUuZGVzdGluYXRpb24sXG4gICAgICAgIHRvd246ICcnLFxuICAgICAgICBjb3VudHk6ICcnLFxuICAgICAgICBjb3VudHJ5Q29kZTogdmFsdWUuYWlycG9ydD8uY291bnRyeUNvZGUgPyB2YWx1ZS5haXJwb3J0LmNvdW50cnlDb2RlIDogdmFsdWUuZGVzdGluYXRpb24sXG4gICAgICAgIHBvc3Rjb2RlOiB2YWx1ZS5haXJwb3J0Py5wb3N0Y29kZSA/IHZhbHVlLmFpcnBvcnQucG9zdGNvZGUgOiB2YWx1ZS5wb3N0Y29kZVxuICAgICAgICB9XG4gICAgICA6IG51bGw7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjYWJmZXRjaGVyOiBCYXNlQ2FiaGlyZVF1b3RlRmV0Y2hlcjxDSF9RPixcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZVxuICApIHtcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycywgc2VhcmNoU2VydmljZSwgdXNlclNlcnZpY2UpO1xuICAgIGNvbnN0IGRhdGE6IHtcbiAgICAgIHRlbXBQYXJhbXM6IENhYkhpcmVUZW1wUGFyYW1zO1xuICAgIH0gPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TKSB8fCB7XG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBDYWJIaXJlVGVtcFBhcmFtc1xuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMoc2VhcmNoU2VydmljZS5tYWtlQ2FiSGlyZVF1ZXJ5KGRhdGEudGVtcFBhcmFtcykpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJldHVybkRhdGE6IGFueSA9IHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKFxuICAgICAgICBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5TRUNPTkRBUllfU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xuICAgICAgKTtcbiAgICAgIGlmIChyZXR1cm5EYXRhKSB7XG4gICAgICAgIHRoaXMucmV0dXJuRGF0ZVRpbWUgPSBtb21lbnQocmV0dXJuRGF0YS50ZW1wUGFyYW1zLmRlcGFydHMpO1xuICAgICAgICB0aGlzLnNlYXJjaFR5cGUgPSB0aGlzLnNlYXJjaFR5cGVzWzFdO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCcrKysgRXJyb3IgcmVjb3ZlcmluZyByZXR1cm4gZGF0YTogJywgZXJyb3IsICcgKysrJyk7XG4gICAgfVxuICAgIGlmIChkYXRhLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3MpIHtcbiAgICAgIHRoaXMuZnJvbUFkZHJlc3MgPSBkYXRhLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3M7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEudGVtcFBhcmFtcy50b0FkZHJlc3MpIHtcbiAgICAgIHRoaXMudG9BZGRyZXNzID0gZGF0YS50ZW1wUGFyYW1zLnRvQWRkcmVzcztcbiAgICB9XG5cbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XG4gICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XG4gICAgICAgIGNvbnN0IHNwbGl0VHJhdmVsbGVycyA9IHRoaXMuaGVscGVycy5zZWxlY3RlZFRyYXZlbGxlcnModHJhdmVsbGVycywgU2VydmljZVR5cGUuQ2FiKTtcbiAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHNwbGl0VHJhdmVsbGVycy5hZHVsdHMubGVuZ3RoO1xuICAgICAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSBzcGxpdFRyYXZlbGxlcnMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRzID1cbiAgICAgIHN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtQXNMaXN0PENhYmhpcmVRdW90ZVJlc3VsdEFycmF5Pih0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZSkgfHwgW107XG4gICAgdGhpcy5mdWxsUmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IHRoaXMudXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0cyk7XG4gICAgdGhpcy5hdmVyYWdlQ28yUGVySXRlbSA9IHRoaXMuaGVscGVycy5jYWxjdWxhdGVBdmVyYWdlQ28yUGVySXRlbShyZXN1bHRzKTtcblxuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMgfHwgW10pO1xuXG4gICAgY29uc3Qgc2Vjb25kYXJ5UmVzdWx0cyA9XG4gICAgICBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbUFzTGlzdCh0aGlzLm11bHRpUmVzdWx0c1Nlc3Npb25OYW1lKSB8fCBbXTtcblxuICAgIHRoaXMuZnVsbE11bHRpUmVzdWx0cyA9IHNlY29uZGFyeVJlc3VsdHM7XG4gICAgdGhpcy5tdWx0aVJlc3VsdHMubmV4dChzZWNvbmRhcnlSZXN1bHRzKTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgdGhpcy5vdXRib3VuZFZpc2liaWxpdHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmluYm91bmRWaXNpYmlsaXR5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID0gQ2FiSGlyZUVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XG5cbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID0gQ2FiSGlyZUVudGVycHJpc2VTZWFyY2guTVVMVElfU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XG5cbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlQ2FiSGlyZVF1ZXJ5KCkpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnJlbW92ZVNlc3Npb25JdGVtKFxuICAgICAgICBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5TRUNPTkRBUllfU1RPUkFHRV9TRVNTSU9OX1BBUkFNU1xuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICB0aGlzLl9zZWFyY2hUeXBlID0gdGhpcy5zZWFyY2hUeXBlc1swXTsgLy8gcmVzZXQgdG8gb25lLXdheVxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldFBhcmFtcygpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0KCk7XG4gICAgdGhpcy5yZXNldFF1ZXJ5KCk7XG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xuICAgIHRoaXMubXVsdGlSZXN1bHRzLm5leHQoW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TLCB7XG4gICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXNcbiAgICB9KTtcblxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XG4gICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3MpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ0Zyb20gLSBFbnRlciBhIGxvY2F0aW9uIG9yIHBvc3Rjb2RlJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdUbyAtIEVudGVyIGEgbG9jYXRpb24gb3IgcG9zdGNvZGUnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmRlcGFydHMudW5peCgpIDwgbW9tZW50KCkudW5peCgpKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdUYXhpIGpvdXJuZXkgY2Fubm90IGJlIGluIHRoZSBwYXN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgKyB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPCAxKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IDEgdHJhdmVsbGVyJyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zZWFyY2hUeXBlID09PSB0aGlzLnNlYXJjaFR5cGVzWzFdICYmXG4gICAgICB0aGlzLnJldHVybkRhdGVUaW1lLmlzU2FtZU9yQmVmb3JlKHRoaXMuZGVwYXJ0cylcbiAgICApIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1JldHVybiBEYXRlL1RpbWUgbXVzdCBiZSBhZnRlciBvdXRib3VuZCBkYXRlL3RpbWUnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmF2ZWxsZXJzLmxlbmd0aCA+IDQpIHtcbiAgICAgIC8vIHVzZSBpZCBmcm9tIHRyYXZlbCB0eXBlIHRvIHNlZSBpZlxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRyYW5zVHlwZXMuZmluZCh0eXBlID0+IHR5cGUua2V5ID09PSB0aGlzLnRlbXBQYXJhbXMudmVoaWNsZVR5cGUpLmlkIDxcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goXG4gICAgICAgICAgYFRoZSBudW1iZXIgb2YgcGFzc2VuZ2VycyBleGNlZWRzIHRoZSBhdmFpbGFibGUgdmVoaWNsZSBjYXBhY2l0eSBmb3IgdGhlICR7dGhpcy50ZW1wUGFyYW1zLnZlaGljbGVUeXBlfSB0YXhpYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnZpYXNGcm9tKSB7XG4gICAgICAvLyB1c2UgaWQgZnJvbSB0cmF2ZWwgdHlwZSB0byBzZWUgaWZcbiAgICAgICAgY29uc3QgZXJyb3JGcm9tID0gIXRoaXMudmlhc0Zyb20uUG9zdENvZGUgfHwgIXRoaXMudmlhc0Zyb20uSG91c2U7IFxuICAgICAgICBpZiAoZXJyb3JGcm9tKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChcbiAgICAgICAgICAgICdWaWEgRnJvbSAtIEVudGVyIGEgbG9jYXRpb24gb3IgcG9zdGNvZGUnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGlmICh0aGlzLnZpYXNUbykge1xuXG4gICAgICAgIGNvbnN0IGVycm9yVG8gPSAhdGhpcy52aWFzVG8uUG9zdENvZGUgfHwgIXRoaXMudmlhc1RvLkhvdXNlOyBcbiAgICAgICAgaWYgKGVycm9yVG8pIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKFxuICAgICAgICAgICAgJ1ZpYSBUbyAtIEVudGVyIGEgbG9jYXRpb24gb3IgcG9zdGNvZGUnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkZGVkIHZhbGlkYXRpb25zIGZvciBMSU1PIHRvIGF2b2lkIHNlYXJjaCB3aXRob3V0IHZhbHVlc1xuICAgIGlmICh0aGlzLnZlaGljbGVUeXBlID09PSBDYWJIaXJlVmVoaWNsZVR5cGUuTGltbykge1xuICAgICAgdGhpcy52YWxpZGF0ZUFkZHJlc3ModGhpcy5mcm9tQWRkcmVzcywgJ0Zyb20nKTtcbiAgICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHRoaXMudG9BZGRyZXNzLCAnVG8nKTtcbiAgICBcbiAgICAgIGlmICh0aGlzLnZpYXNGcm9tPy5Qb3N0Q29kZSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh0aGlzLnZpYXNGcm9tLCAnVmlhIEZyb20nKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnZpYXNUbz8uUG9zdENvZGUpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUFkZHJlc3ModGhpcy52aWFzVG8sICdWaWEgVG8nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xuICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XG4gIH1cblxuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQWRkcmVzc0Zvcm0sIHR5cGU6IHN0cmluZykge1xuICAgIGlmICghYWRkcmVzcz8uQ291bnR5KSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKGAke3R5cGV9IC0gRW50ZXIgc3RhdGUvcHJvdmluY2UvY291bnR5YCk7XG4gICAgfVxuICBcbiAgICBpZiAoYWRkcmVzcz8uSG91c2UgPT09IExvY2F0aW9uVHlwZXMuVHJhaW5TdGF0aW9uKSB7XG4gICAgICBpZiAoIWFkZHJlc3M/LkNhcnJpZXIpe1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKGAke3R5cGV9IC0gRW50ZXIgdHJhaW4gb3BlcmF0b3JgKTtcbiAgICAgIH1cbiAgICAgIGlmICghYWRkcmVzcz8uRmxpZ2h0VHJhaW5EYXRlVGltZSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKGAke3R5cGV9IC0gRW50ZXIgdHJhaW4gJHt0eXBlID09PSAnRnJvbScgPyAnYXJyaXZhbCcgOiAnZGVwYXJ0dXJlJ30gdGltZWApO1xuICAgICAgfVxuICAgIH1cbiAgXG4gICAgaWYgKGFkZHJlc3M/LkhvdXNlID09PSBMb2NhdGlvblR5cGVzLkFpcnBvcnQpIHtcbiAgICAgIGlmICghYWRkcmVzcz8uQ2Fycmllcil7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goYCR7dHlwZX0gLSBTZWxlY3QgYWlybGluZWApO1xuICAgICAgfVxuICAgICAgaWYgKCFhZGRyZXNzPy5GbGlnaHROdW1iZXIpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaChgJHt0eXBlfSAtIEVudGVyIGZsaWdodCBudW1iZXJgKTtcbiAgICAgIH1cbiAgICAgIGlmICghYWRkcmVzcz8uRmxpZ2h0VHJhaW5EYXRlVGltZSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKGAke3R5cGV9IC0gRW50ZXIgZmxpZ2h0ICR7dHlwZSA9PT0gJ0Zyb20nID8gJ2Fycml2YWwnIDogJ2RlcGFydHVyZSd9IHRpbWVgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVEYXRlVGltZSgpIHtcbiAgICBpZiAodGhpcy5fZGF0ZSAmJiB0aGlzLl90aW1lKSB7XG4gICAgICB0aGlzLmRlcGFydHMgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5fZGF0ZSwgdGhpcy5fdGltZSk7XG4gICAgfVxuICB9XG5cbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xuICAgIHRoaXMubXVsdGlSZXN1bHRzLm5leHQoW10pO1xuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaFR5cGUgPT09IHRoaXMuc2VhcmNoVHlwZXNbMV0pIHtcbiAgICAgICAgLy8gcmV0dXJuIC0ga2ljayBvZmYgdHdvIHNlYXJjaGVzXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xuICAgICAgICBjb25zdCByZXR1cm5RdWVyeSA9IHRoaXMuZ2V0UmV0dXJuU2VhcmNoUXVlcnkoKTtcblxuICAgICAgICBjb25zb2xlLmxvZygnKysrIFNlYXJjaCBRdWVyeTogJywgcXVlcnksICcgKysrJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcrKysgU2VhcmNoIFJldHVybiBRdWVyeTogJywgcmV0dXJuUXVlcnksICcgKysrJyk7XG5cbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShcbiAgICAgICAgICBDYWJIaXJlRW50ZXJwcmlzZVNlYXJjaC5TRUNPTkRBUllfU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wUGFyYW1zOiByZXR1cm5RdWVyeVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRNdWx0aVNlYXJjaChbXG4gICAgICAgICAgdGhpcy5jYWJmZXRjaGVyLmZldGNoTGlzdCh0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8UXVlcnlTZWFyY2hDYWJIaXJlQXJncz4ocXVlcnkpKSxcbiAgICAgICAgICB0aGlzLmNhYmZldGNoZXIuZmV0Y2hMaXN0KHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxRdWVyeVNlYXJjaENhYkhpcmVBcmdzPihyZXR1cm5RdWVyeSkpXG4gICAgICAgIF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkodGhpcy5nZXRTZWFyY2hRdWVyeSgpKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U2VhcmNoKFxuICAgICAgICAgIHRoaXMuY2FiZmV0Y2hlci5mZXRjaExpc3QodGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3M+KHF1ZXJ5KSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZ210U2VhcmNoKHF1ZXJ5OiBTZWFyY2hDYWJIaXJlUXVlcnlWYXJpYWJsZXMpOiBPYnNlcnZhYmxlPENhYmhpcmVRdW90ZVJlc3VsdEFycmF5PiB7XG4gICAgdGhpcy5ib2x0U2VhcmNoUXVlcnkucHVzaChxdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMuY2FiZmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xuICB9XG5cbiAgZ210R2V0Q2FiU2VhcmNoUXVlcnkoZnJvbUxvY2F0aW9uOiBMb2NhdGlvbkRldGFpbCwgdG9Mb2NhdGlvbjogTG9jYXRpb25EZXRhaWwsIGRhdGVUbWU6IHN0cmluZyk6U2VhcmNoQ2FiSGlyZVF1ZXJ5VmFyaWFibGVzIHtcbiAgICBjb25zdCBjcmVhdGVMb2NhdGlvbiA9IChsb2NhdGlvbjogYW55ICkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYnVpbGRpbmdOYW1lOiBsb2NhdGlvbj8ubnVtYmVyT3JOYW1lIHx8IGxvY2F0aW9uPy5jb3VudHJ5Q29kZSxcbiAgICAgICAgY291bnRyeUNvZGU6IGxvY2F0aW9uPy5jb3VudHJ5Q29kZSB8fCAnR0InLFxuICAgICAgICBwb3N0Y29kZTogbG9jYXRpb24/LnBvc3Rjb2RlPy5yZXBsYWNlKC9cXHMrL2csICcnKSA/PyAnJyxcbiAgICAgICAgc3RyZWV0QW5kTnVtYmVyOiBsb2NhdGlvbj8uc3RyZWV0IHx8IGxvY2F0aW9uPy5yb2FkIHx8IGxvY2F0aW9uPy5jb3VudHJ5Q29kZSwgXG4gICAgICAgIHRvd246IGxvY2F0aW9uPy50b3duIHx8IGxvY2F0aW9uPy5jaXR5LFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZnJvbSA9IGNyZWF0ZUxvY2F0aW9uKGZyb21Mb2NhdGlvbik7XG4gICAgY29uc3QgdG8gPSBjcmVhdGVMb2NhdGlvbih0b0xvY2F0aW9uKTtcblxuICAgIHJldHVybiB7XG4gICAgICBhZHVsdHM6IHRoaXMudGVtcFBhcmFtcy5hZHVsdHMsXG4gICAgICBjaGlsZHJlbjogdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuLFxuICAgICAgaW5mYW50czogMCxcbiAgICAgIGRlcGFydHM6IGRhdGVUbWUsIFxuICAgICAgdmVoaWNsZVR5cGU6IENhYkhpcmVWZWhpY2xlVHlwZS5BbnksXG4gICAgICBtZXNzYWdlVHlwZTogTWVzc2FnZVR5cGUuVGF4aSxcbiAgICAgIGZyb21Mb2NhdGlvbjoge1xuICAgICAgICBidWlsZGluZ05hbWU6IGZyb20uYnVpbGRpbmdOYW1lLFxuICAgICAgICBjb3VudHJ5Q29kZTogZnJvbS5jb3VudHJ5Q29kZSxcbiAgICAgICAgcG9zdGNvZGU6IGZyb20ucG9zdGNvZGUsXG4gICAgICAgIHN0cmVldEFuZE51bWJlcjogZnJvbS5zdHJlZXRBbmROdW1iZXIsXG4gICAgICAgIHRvd246IGZyb20udG93biA/PyB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgdG9Mb2NhdGlvbjoge1xuICAgICAgICBidWlsZGluZ05hbWU6IHRvLmJ1aWxkaW5nTmFtZSxcbiAgICAgICAgY291bnRyeUNvZGU6IHRvLmNvdW50cnlDb2RlLFxuICAgICAgICBwb3N0Y29kZTogdG8ucG9zdGNvZGUsXG4gICAgICAgIHN0cmVldEFuZE51bWJlcjogdG8uc3RyZWV0QW5kTnVtYmVyLFxuICAgICAgICB0b3duOiB0by50b3duID8/IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLnRyYXZlbGxlcnMubWFwKHRyYXZlbGxlciA9PiB7cmV0dXJuIHtpZDogdHJhdmVsbGVyLmlkfX0pXG4gICAgfVxuICB9XG5cbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MpOiBTYXZlUmVjZW50U2VhcmNoTXV0YXRpb25WYXJpYWJsZXMge1xuICAgIGNvbnN0IHJlY2VudFNlYXJjaFF1ZXJ5OiBJQ2FiSGlyZVNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5DYWIsXG4gICAgICBzZWFyY2hBcmdzOiByZWNlbnRTZWFyY2hRdWVyeSxcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMuZGVwYXJ0cy5mb3JtYXQoKSxcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMuaGVscGVycy5nZXRUcmF2ZWxsZXJzSWQodGhpcy50cmF2ZWxsZXJzLCB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8/LmlkKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlcmNoUXVlcnkocXVlcnk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MpOiBJQ2FiSGlyZVNlYXJjaEFyZ3Mge1xuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBJQ2FiSGlyZVNlYXJjaEFyZ3MgPSBxdWVyeTtcbiAgICBzZWFyY2hRdWVyeS5mcm9tQWRkcmVzcyA9IHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcztcbiAgICBzZWFyY2hRdWVyeS50b0FkZHJlc3MgPSB0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzO1xuXG4gICAgc2VhcmNoUXVlcnkuZnJvbVN0YXRpb24gPSB0aGlzLnRlbXBQYXJhbXMuZnJvbVN0YXRpb247XG4gICAgc2VhcmNoUXVlcnkudG9TdGF0aW9uID0gdGhpcy50ZW1wUGFyYW1zLnRvU3RhdGlvbjtcblxuICAgIHNlYXJjaFF1ZXJ5LnZpYXNGcm9tID0gdGhpcy52aWFzRnJvbTtcbiAgICBzZWFyY2hRdWVyeS52aWFzVG8gPSB0aGlzLnZpYXNUbztcbiAgICBzZWFyY2hRdWVyeS5zcGVjaWFsUmVxdWlyZW1lbnRzID0gdGhpcy50ZW1wUGFyYW1zLnNwZWNpYWxSZXF1aXJlbWVudHM7XG4gICAgcmV0dXJuIHNlYXJjaFF1ZXJ5O1xuICB9XG5cbiAgc3RhcnRSZWNlbnRTZWFyY2gocmVjZW50U2VhcmNoOiBSZWNlbnRTZWFyY2gpOiB2b2lkIHtcbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MubWVzc2FnZVR5cGUgPT09IE1lc3NhZ2VUeXBlLlRheGkpIHtcbiAgICAgIHRoaXMudmVoaWNsZVR5cGUgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52ZWhpY2xlVHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52ZWhpY2xlVHlwZSA9IENhYkhpcmVWZWhpY2xlVHlwZS5MaW1vO1xuICAgICAgdGhpcy5saW1vVHlwZSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZlaGljbGVUeXBlO1xuICAgIH1cblxuICAgIHRoaXMuZGVwYXJ0cyA9IG1vbWVudChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXBhcnRzKTtcblxuICAgIHRoaXMuZnJvbUFkZHJlc3MgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mcm9tQWRkcmVzcztcbiAgICB0aGlzLnRvQWRkcmVzcyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRvQWRkcmVzcztcblxuICAgIHRoaXMuZnJvbVN0YXRpb24gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5mcm9tU3RhdGlvbjtcbiAgICB0aGlzLnRvU3RhdGlvbiA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnRvU3RhdGlvbjtcblxuICAgIHRoaXMuX2Zyb21Mb2NhdGlvbiA9IHRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMuZnJvbUFkZHJlc3MpO1xuICAgIHRoaXMuX3RvTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRvQWRkcmVzcyk7XG5cbiAgICB0aGlzLnZpYXNGcm9tID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mudmlhc0Zyb207XG4gICAgdGhpcy52aWFzVG8gPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52aWFzVG87XG4gICAgdGhpcy5zcGVjaWFsUmVxdWlyZW1lbnRzID0gcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Muc3BlY2lhbFJlcXVpcmVtZW50cztcblxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gIH1cblxuICBnZXRTZWFyY2hRdWVyeShzaW1wbGlmaWVkTG9jYXRpb246IGJvb2xlYW4gPSB0cnVlKTogUXVlcnlTZWFyY2hDYWJIaXJlQXJncyB7XG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcz8udmlhc0Zyb20pIHtcbiAgICAgIHRoaXMuX3ZpYXNbMF0gPSA8Q2FiSGlyZUxvY2F0aW9uSW5wdXQ+dGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy50ZW1wUGFyYW1zPy52aWFzRnJvbSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlbXBQYXJhbXM/LnZpYXNUbykge1xuICAgICAgdGhpcy5fdmlhc1sxXSA9IDxDYWJIaXJlTG9jYXRpb25JbnB1dD50aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXM/LnZpYXNUbyk7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5OiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzID0ge1xuICAgICAgYWR1bHRzOiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzLFxuICAgICAgY2hpbGRyZW46IHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbixcbiAgICAgIGRlcGFydHM6IHRoaXMuaGVscGVycy5mb3JtYXRHcm91bmRzcGFuRGF0ZVRpbWUodGhpcy50ZW1wUGFyYW1zLmRlcGFydHMpLFxuICAgICAgZnJvbUxvY2F0aW9uOiBzaW1wbGlmaWVkTG9jYXRpb25cbiAgICAgICAgPyB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3MpXG4gICAgICAgIDogKHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyBhcyBhbnkpLFxuICAgICAgdG9Mb2NhdGlvbjogc2ltcGxpZmllZExvY2F0aW9uXG4gICAgICAgID8gdGhpcy5jcmVhdGVDYWJIaXJlTG9jYXRpb24odGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcylcbiAgICAgICAgOiAodGhpcy50ZW1wUGFyYW1zLnRvQWRkcmVzcyBhcyBhbnkpLFxuICAgICAgaW5mYW50czogMCxcbiAgICAgIHZlaGljbGVUeXBlOiB0aGlzLmxpbW9UeXBlID8gdGhpcy5saW1vVHlwZSA6IHRoaXMudmVoaWNsZVR5cGUsXG4gICAgICBtZXNzYWdlVHlwZTogdGhpcy5saW1vVHlwZSA/IE1lc3NhZ2VUeXBlLkxpbW8gOiBNZXNzYWdlVHlwZS5UYXhpLFxuICAgICAgdmlhczogPENhYkhpcmVMb2NhdGlvbklucHV0W10+dGhpcy5fdmlhcyxcbiAgICAgIGxpbW9Bc0RpcmVjdGVkRHVyYXRpb246IHRoaXMudGVtcFBhcmFtcy50cmFuc3BvcnRUeXBlID09PSBUcmFuc3BvcnRUeXBlLkhvdXJseSA/ICt0aGlzLnRlbXBQYXJhbXMubGltb0FzRGlyZWN0ZWREdXJhdGlvbiA6IG51bGwsXG4gICAgICB0cmFuc3BvcnRUeXBlOiB0aGlzLmxpbW9UeXBlID8gdGhpcy50ZW1wUGFyYW1zLnRyYW5zcG9ydFR5cGUgOiBudWxsLFxuICAgICAgdHJhdmVsbGVyczogdGhpcy50cmF2ZWxsZXJzLm1hcCh0cmF2ZWxsZXIgPT4ge3JldHVybiB7aWQ6IHRyYXZlbGxlci5pZH19KSxcbiAgICAgIHNwZWNpYWxSZXF1aXJlbWVudHM6IHRoaXMuc3BlY2lhbFJlcXVpcmVtZW50c1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5mcm9tU3RhdGlvbiAmJiB0aGlzLmZyb21TdGF0aW9uLmFpcnBvcnQgJiYgIXF1ZXJ5LmZyb21Mb2NhdGlvbi5mbGlnaHRUcmFpbkRhdGVUaW1lKSB7XG4gICAgICBxdWVyeS5mcm9tTG9jYXRpb24gPSB7XG4gICAgICAgIHBvc3Rjb2RlOiB0aGlzLmZyb21TdGF0aW9uLmFpcnBvcnQucG9zdGNvZGUgLFxuICAgICAgICBjb3VudHJ5Q29kZTogdGhpcy5mcm9tU3RhdGlvbi5haXJwb3J0LmNvdW50cnlDb2RlLFxuICAgICAgICBzdHJlZXRBbmROdW1iZXI6IHRoaXMuZnJvbVN0YXRpb24uYWlycG9ydC5kZXN0aW5hdGlvbixcbiAgICAgICAgYnVpbGRpbmdOYW1lOiAgdGhpcy5mcm9tU3RhdGlvbi5haXJwb3J0LmRlc3RpbmF0aW9uLFxuICAgICAgICB0b3duOiB0aGlzLmZyb21TdGF0aW9uLmFpcnBvcnQuZGVzdGluYXRpb24gLFxuICAgICAgICB0ZXJtaW5hbDogdGhpcy5mcm9tTG9jYXRpb24udGVybWluYWwsXG4gICAgICAgIGZsaWdodE51bWJlcjogdGhpcy5mcm9tTG9jYXRpb24uZmxpZ2h0TnVtYmVyLFxuICAgICAgICBjb3VudHk6IHF1ZXJ5LmZyb21Mb2NhdGlvbi5jb3VudHlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5mcm9tU3RhdGlvbiAmJiB0aGlzLmZyb21TdGF0aW9uLnJhaWxzdGF0aW9uICAmJiAhcXVlcnkuZnJvbUxvY2F0aW9uLmZsaWdodFRyYWluRGF0ZVRpbWUpIHtcbiAgICAgIHF1ZXJ5LmZyb21Mb2NhdGlvbiA9IHtcbiAgICAgICAgcG9zdGNvZGU6IHRoaXMuZnJvbVN0YXRpb24ucmFpbHN0YXRpb24ubG9jYXRpb25EZXRhaWxzLnBvc3Rjb2RlICxcbiAgICAgICAgY291bnRyeUNvZGU6IHRoaXMuZnJvbVN0YXRpb24ucmFpbHN0YXRpb24ubG9jYXRpb25EZXRhaWxzLmNvdW50cnlDb2RlLFxuICAgICAgICBzdHJlZXRBbmROdW1iZXI6IHRoaXMuZnJvbVN0YXRpb24ucmFpbHN0YXRpb24ubmFtZSxcbiAgICAgICAgYnVpbGRpbmdOYW1lOiB0aGlzLmZyb21TdGF0aW9uLnJhaWxzdGF0aW9uLm5hbWUsXG4gICAgICAgIHRvd246IHRoaXMuZnJvbVN0YXRpb24ucmFpbHN0YXRpb24ubG9jYXRpb25EZXRhaWxzLmNpdHksXG4gICAgICAgIGNvdW50eTogdGhpcy5mcm9tTG9jYXRpb24uY291bnR5XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9TdGF0aW9uICYmIHRoaXMudG9TdGF0aW9uLmFpcnBvcnQgJiYgIXF1ZXJ5LnRvTG9jYXRpb24uZmxpZ2h0VHJhaW5EYXRlVGltZSkge1xuICAgICAgcXVlcnkudG9Mb2NhdGlvbiA9IHtcbiAgICAgICAgcG9zdGNvZGU6IHRoaXMudG9TdGF0aW9uLmFpcnBvcnQucG9zdGNvZGUgLFxuICAgICAgICBjb3VudHJ5Q29kZTogdGhpcy50b1N0YXRpb24uYWlycG9ydC5jb3VudHJ5Q29kZSAsXG4gICAgICAgIHN0cmVldEFuZE51bWJlcjogdGhpcy50b1N0YXRpb24uYWlycG9ydC5kZXN0aW5hdGlvbixcbiAgICAgICAgYnVpbGRpbmdOYW1lOiB0aGlzLnRvU3RhdGlvbi5haXJwb3J0LmRlc3RpbmF0aW9uICxcbiAgICAgICAgdG93bjogdGhpcy50b1N0YXRpb24uYWlycG9ydC5kZXN0aW5hdGlvbixcbiAgICAgICAgdGVybWluYWw6IHRoaXMudG9Mb2NhdGlvbi50ZXJtaW5hbCxcbiAgICAgICAgZmxpZ2h0TnVtYmVyOiB0aGlzLnRvTG9jYXRpb24uZmxpZ2h0TnVtYmVyLFxuICAgICAgICBjb3VudHk6IHRoaXMudG9Mb2NhdGlvbi5jb3VudHlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50b1N0YXRpb24gJiYgdGhpcy50b1N0YXRpb24ucmFpbHN0YXRpb24gJiYgIXF1ZXJ5LnRvTG9jYXRpb24uZmxpZ2h0VHJhaW5EYXRlVGltZSkge1xuICAgICAgcXVlcnkudG9Mb2NhdGlvbiA9IHtcbiAgICAgICAgcG9zdGNvZGU6IHRoaXMudG9TdGF0aW9uLnJhaWxzdGF0aW9uLmxvY2F0aW9uRGV0YWlscy5wb3N0Y29kZSAsXG4gICAgICAgIGNvdW50cnlDb2RlOiB0aGlzLnRvU3RhdGlvbi5yYWlsc3RhdGlvbi5sb2NhdGlvbkRldGFpbHMuY291bnRyeUNvZGUsXG4gICAgICAgIHN0cmVldEFuZE51bWJlcjogdGhpcy50b1N0YXRpb24ucmFpbHN0YXRpb24ubmFtZSxcbiAgICAgICAgYnVpbGRpbmdOYW1lOiB0aGlzLnRvU3RhdGlvbi5yYWlsc3RhdGlvbi5uYW1lLFxuICAgICAgICB0b3duOiB0aGlzLnRvU3RhdGlvbi5yYWlsc3RhdGlvbi5sb2NhdGlvbkRldGFpbHMuY2l0eSxcbiAgICAgICAgY291bnR5OiB0aGlzLnRvTG9jYXRpb24uY291bnR5XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2cocXVlcnkpO1xuXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxRdWVyeVNlYXJjaENhYkhpcmVBcmdzPihxdWVyeSk7XG4gIH1cblxuICBnZXRSZXR1cm5TZWFyY2hRdWVyeSgpOiBRdWVyeVNlYXJjaENhYkhpcmVBcmdzIHtcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zPy52aWFzRnJvbSkge1xuICAgICAgdGhpcy5fdmlhc1swXSA9IDxDYWJIaXJlTG9jYXRpb25JbnB1dD50aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXM/LnZpYXNGcm9tKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVtcFBhcmFtcz8udmlhc1RvKSB7XG4gICAgICB0aGlzLl92aWFzWzFdID0gPENhYkhpcmVMb2NhdGlvbklucHV0PnRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcz8udmlhc1RvKTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnk6IFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3MgPSB7XG4gICAgICBhZHVsdHM6IHRoaXMudGVtcFBhcmFtcy5hZHVsdHMsXG4gICAgICBjaGlsZHJlbjogdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuLFxuICAgICAgZGVwYXJ0czogdGhpcy5oZWxwZXJzLmZvcm1hdEdyb3VuZHNwYW5EYXRlVGltZSh0aGlzLl9yZXR1cm5EYXRlVGltZSksXG4gICAgICBmcm9tTG9jYXRpb246IDxDYWJIaXJlTG9jYXRpb25JbnB1dD50aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzKSwgLy8gc3dhcCB0aGUgbG9jYXRpb25zIGFyb3VuZFxuICAgICAgdG9Mb2NhdGlvbjogPENhYkhpcmVMb2NhdGlvbklucHV0PnRoaXMuY3JlYXRlQ2FiSGlyZUxvY2F0aW9uKHRoaXMudGVtcFBhcmFtcy5mcm9tQWRkcmVzcyksXG4gICAgICBpbmZhbnRzOiAwLFxuICAgICAgdmVoaWNsZVR5cGU6IHRoaXMudmVoaWNsZVR5cGUsXG4gICAgICB2aWFzOiA8Q2FiSGlyZUxvY2F0aW9uSW5wdXRbXT50aGlzLl92aWFzLFxuICAgICAgdHJhdmVsbGVyczogdGhpcy50cmF2ZWxsZXJzLm1hcCh0cmF2ZWxsZXIgPT4ge3JldHVybiB7aWQ6IHRyYXZlbGxlci5pZH19KSxcbiAgICAgIHNwZWNpYWxSZXF1aXJlbWVudHM6IHRoaXMudGVtcFBhcmFtcy5zcGVjaWFsUmVxdWlyZW1lbnRzXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzPFF1ZXJ5U2VhcmNoQ2FiSGlyZUFyZ3M+KHF1ZXJ5KTtcbiAgfVxuXG4gIHVwZGF0ZU91dGJvdW5kQWRkcmVzcyhsb2NhdGlvbjogYW55LCBwbGFjZURlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmZyb21BZGRyZXNzID0gdGhpcy5nZXRBZGRyZXNzRm9ybWF0KGxvY2F0aW9uLCBwbGFjZURlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIHVwZGF0ZVZpYUFkZHJlc3MobG9jYXRpb246IGFueSwgcGxhY2VEZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmlhc0Zyb20gPSB0aGlzLmdldEFkZHJlc3NGb3JtYXQobG9jYXRpb24sIHBsYWNlRGVzY3JpcHRpb24pO1xuICB9XG5cbiAgdXBkYXRlSW5ib3VuZEFkZHJlc3MobG9jYXRpb246IGFueSwgcGxhY2VEZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudGVtcFBhcmFtcy50b0FkZHJlc3MgPSB0aGlzLmdldEFkZHJlc3NGb3JtYXQobG9jYXRpb24sIHBsYWNlRGVzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDYWJIaXJlTG9jYXRpb24obG9jYXRpb246IEFkZHJlc3NGb3JtKTogQ2FiSGlyZUxvY2F0aW9uSW5wdXQge1xuICAgIGNvbnN0IHR5cGUgPSBsb2NhdGlvbj8uSG91c2U/LnJlcGxhY2UoJyAnLCAnJyk7XG4gICAgY29uc3QgYWRkcmVzc1R5cGU6IEFkZHJlc3NUeXBlID0gdHlwZT8uaW5jbHVkZXMoQWRkcmVzc1R5cGUuQWlycG9ydClcbiAgICAgID8gQWRkcmVzc1R5cGUuQWlycG9ydFxuICAgICAgOiBBZGRyZXNzVHlwZS5BZGRyZXNzO1xuICAgIGNvbnN0IGNvbW1vblByb3BlcnRpZXM6IFBhcnRpYWw8Q2FiSGlyZUxvY2F0aW9uSW5wdXQ+ID0ge1xuICAgICAgYnVpbGRpbmdOYW1lOiB0eXBlPy5pbmNsdWRlcyhBZGRyZXNzVHlwZS5UcmFpblN0YXRpb24pID8gbG9jYXRpb24/LlN0cmVldCArICcgVHJhaW4gU3RhdGlvbicgOiB0eXBlPy5pbmNsdWRlcyhBZGRyZXNzVHlwZS5BaXJwb3J0KSA/IGxvY2F0aW9uPy5TdHJlZXQgOiBsb2NhdGlvbj8uSG91c2UsXG4gICAgICBzdHJlZXRBbmROdW1iZXI6IGxvY2F0aW9uPy5TdHJlZXQsXG4gICAgICB0b3duOiBsb2NhdGlvbj8uVG93bixcbiAgICAgIGNvdW50eTogbG9jYXRpb24/LkNvdW50eSxcbiAgICAgIHBvc3Rjb2RlOiBsb2NhdGlvbj8uUG9zdENvZGU/LnJlcGxhY2UoL1xccysvZywgJycpID8/ICcnLFxuICAgICAgY291bnRyeUNvZGU6IGxvY2F0aW9uLkNvdW50cnlDb2RlIHx8IGxvY2F0aW9uLkNvdW50cnksXG4gICAgICBmbGlnaHROdW1iZXI6IGxvY2F0aW9uPy5GbGlnaHROdW1iZXIgPyBsb2NhdGlvbj8uRmxpZ2h0TnVtYmVyIDogbnVsbCxcbiAgICAgIHRlcm1pbmFsOiBsb2NhdGlvbi5UZXJtaW5hbCB8fCAgbnVsbFxuICAgIH07XG5cbiAgICBpZiAodGhpcy52ZWhpY2xlVHlwZSA9PT0gQ2FiSGlyZVZlaGljbGVUeXBlLkxpbW8pIHtcbiAgICAgIGNvbnN0IGZsaWdodFRyYWluRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgPSB0eXBlPy5pbmNsdWRlcyhBZGRyZXNzVHlwZS5UcmFpblN0YXRpb24pIHx8IHR5cGU/LmluY2x1ZGVzKEFkZHJlc3NUeXBlLkFpcnBvcnQpID8gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2RhdGUsIGxvY2F0aW9uPy5GbGlnaHRUcmFpbkRhdGVUaW1lKSA6IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jb21tb25Qcm9wZXJ0aWVzIGFzIENhYkhpcmVMb2NhdGlvbklucHV0LFxuICAgICAgICBhZGRyZXNzVHlwZTogYWRkcmVzc1R5cGUsXG4gICAgICAgIGNhcnJpZXI6ICBsb2NhdGlvbj8uQ2FycmllcixcbiAgICAgICAgYWlycG9ydFN0YXRpb25OYW1lOiBsb2NhdGlvbj8uQWlycG9ydFN0YXRpb25OYW1lLFxuICAgICAgICBmbGlnaHRUcmFpbkRhdGVUaW1lOiBmbGlnaHRUcmFpbkRhdGVUaW1lID8gdGhpcy5oZWxwZXJzLmZvcm1hdEdyb3VuZHNwYW5EYXRlVGltZShmbGlnaHRUcmFpbkRhdGVUaW1lKSA6IG51bGxcbiAgICAgIH07XG4gICAgfSByZXR1cm4gY29tbW9uUHJvcGVydGllcyBhcyBDYWJIaXJlTG9jYXRpb25JbnB1dDtcbiAgfVxuXG4gIG1hdGNoQWRkcmVzc2VzKCkge1xuICAgIHRoaXMuX3RvTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMudG9BZGRyZXNzKTtcbiAgICB0aGlzLl9mcm9tTG9jYXRpb24gPSB0aGlzLmNyZWF0ZUNhYkhpcmVMb2NhdGlvbih0aGlzLnRlbXBQYXJhbXMuZnJvbUFkZHJlc3MpO1xuICAgIHRoaXMuX3ZpYXNbMF0ucG9zdGNvZGUgPSB0aGlzLnRlbXBQYXJhbXM/LnZpYXNGcm9tPy5Qb3N0Q29kZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBzb3J0QnkoYXNjPzogYm9vbGVhbiwgcmV0dXJuSW5kZXg/OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hTZXJ2aWNlLmlzQ2xvbmluZy52YWx1ZSkge1xuICAgICAgcmV0dXJuOyAvLyBEb24ndCBwZXJmb3JtIHNvcnRpbmcgaWYgaXNDbG9uaW5nIGlzIHRydWVcbiAgICB9XG4gICAgXG4gICAgaWYgKHJldHVybkluZGV4ID49IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKCdoZXJlJyk7XG4gICAgICBsZXQgcmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmZ1bGxNdWx0aVJlc3VsdHNbcmV0dXJuSW5kZXhdKTtcbiAgICAgIGlmIChhc2MpIHtcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGIucHJpY2UgLSBhLnByaWNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBhLnByaWNlIC0gYi5wcmljZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZ1bGxNdWx0aVJlc3VsdHNbcmV0dXJuSW5kZXhdID0gcmVzdWx0cztcbiAgICAgIHRoaXMubXVsdGlSZXN1bHRzLm5leHQodGhpcy5mdWxsTXVsdGlSZXN1bHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cyk7XG4gICAgICBpZiAoYXNjKSB7XG4gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKGE6IENhYkhpcmVRdW90ZSwgYjogQ2FiSGlyZVF1b3RlKSA9PiBiLnByaWNlIC0gYS5wcmljZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRzID0gcmVzdWx0cz8uc29ydCgoYTogQ2FiSGlyZVF1b3RlLCBiOiBDYWJIaXJlUXVvdGUpID0+IGEucHJpY2UgLSBiLnByaWNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vICEgc3R1ZmYgdG8gZ28gaW4gYSBwb3N0Y29kZSBzZXJ2aWVcblxuICBnZXRBZGRyZXNzRm9ybWF0KGxvY2F0aW9uOiBhbnksIHBsYWNlRGVzY3JpcHRpb24/OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBIb3VzZTogdGhpcy5nZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlscyhsb2NhdGlvbiwgWydmbG9vcicsICdzdHJlZXRfbnVtYmVyJywgJ3ByZW1pc2UnXSksXG4gICAgICBTdHJlZXQ6IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFsncm91dGUnLCAnc3RyZWV0X25hbWUnLCAnZXN0YWJsaXNobWVudCddKSxcbiAgICAgIFRvd246IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFtcbiAgICAgICAgJ3Bvc3RhbF90b3duJyxcbiAgICAgICAgJ2FkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMicsXG4gICAgICAgICdsb2NhbGl0eSdcbiAgICAgIF0pLFxuICAgICAgUG9zdENvZGU6IHRoaXMuZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHMobG9jYXRpb24sIFsncG9zdGNvZGUnLCAncG9zdGFsX2NvZGUnXSksXG4gICAgICBDb3VudHJ5OiB0aGlzLmdldEFkZHJlc3NGcm9tUGxhY2VEZXRhaWxzKGxvY2F0aW9uLCBbJ2NvdW50cnknXSksXG4gICAgICBDb3VudHJ5Q29kZTogdGhpcy5nZXRBZGRyZXNzRnJvbVBsYWNlRGV0YWlsc1Nob3J0KGxvY2F0aW9uLCBbJ2NvdW50cnknXSksXG4gICAgICBwbGFjZURlc2NyaXB0aW9uXG4gICAgfTtcbiAgfVxuXG4gIGdldEFkZHJlc3NGcm9tUGxhY2VEZXRhaWxzKHBsYWNlRGV0YWlsczogYW55LCB0eXBlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGxldCBhZGRyZXNzUHJvcCA9IG51bGw7XG4gICAgaWYgKHBsYWNlRGV0YWlscyAmJiBBcnJheS5pc0FycmF5KHBsYWNlRGV0YWlscykpIHtcbiAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICBjb25zdCBwcm9wID0gcGxhY2VEZXRhaWxzLmZpbHRlcihwZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGQudHlwZXMpICYmIHBkLnR5cGVzLmluY2x1ZGVzKHR5cGUpO1xuICAgICAgICB9KVswXTtcblxuICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgIGFkZHJlc3NQcm9wID0gIHByb3AubG9uZ19uYW1lO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhZGRyZXNzUHJvcDtcbiAgfVxuXG5cbiAgZ2V0QWRkcmVzc0Zyb21QbGFjZURldGFpbHNTaG9ydChwbGFjZURldGFpbHM6IGFueSwgdHlwZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBsZXQgYWRkcmVzc1Byb3AgPSBudWxsO1xuICAgIGlmIChwbGFjZURldGFpbHMgJiYgQXJyYXkuaXNBcnJheShwbGFjZURldGFpbHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgICAgY29uc3QgcHJvcCA9IHBsYWNlRGV0YWlscy5maWx0ZXIocGQgPT4ge1xuICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBkLnR5cGVzKSAmJiBwZC50eXBlcy5pbmNsdWRlcyh0eXBlKTtcbiAgICAgICAgfSlbMF07XG5cbiAgICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgICBhZGRyZXNzUHJvcCA9IHByb3Auc2hvcnRfbmFtZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWRkcmVzc1Byb3A7XG4gIH1cblxuICBnZXRBZGRyZXNzRnJvbUFpcnBvcnREZXRhaWxzKGFpcnBvcnREZXRhaWxzOiBMb2NhdGlvbkRldGFpbCwgYWlycG9ydE5hbWU6IHN0cmluZykge1xuICAgIGNvbnNvbGUubG9nKGFpcnBvcnREZXRhaWxzKTtcbiAgICBsZXQgYWRkcmVzczogQWRkcmVzc0Zvcm0gPSBudWxsO1xuICAgIGlmIChhaXJwb3J0RGV0YWlscykge1xuICAgICAgYWRkcmVzcyA9IHtcbiAgICAgICAgQ291bnRyeTogYWlycG9ydERldGFpbHMuY291bnRyeSxcbiAgICAgICAgU3RyZWV0OiBhaXJwb3J0RGV0YWlscy5yb2FkLFxuICAgICAgICBQb3N0Q29kZTogYWlycG9ydERldGFpbHMucG9zdGNvZGUsXG4gICAgICAgIFRvd246IGFpcnBvcnREZXRhaWxzLmNpdHksXG4gICAgICAgIHBsYWNlRGVzY3JpcHRpb246IGFpcnBvcnROYW1lLFxuICAgICAgICBIb3VzZTogYWlycG9ydE5hbWVcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBhZGRyZXNzO1xuICB9XG5cbiAgc2V0TG9jYXRpb25Gcm9tQWlycG9ydChhaXJwb3J0RGV0YWlsczogTG9jYXRpb25EZXRhaWwsIGFpcnBvcnROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5nZXRBZGRyZXNzRnJvbUFpcnBvcnREZXRhaWxzKGFpcnBvcnREZXRhaWxzLCBhaXJwb3J0TmFtZSk7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gVGF4aUZvcm1Nb2RlLlNUQVRJT04pIHtcbiAgICAgIGlmICh0aGlzLmFpcnBvcnRTZWFyY2hUeXBlID09PSBBaXJwb3J0U2VhcmNoTW9kZS5QSUNLVVApIHtcbiAgICAgICAgdGhpcy5mcm9tQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRvQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkVG9TZWxlY3RlZFBsYWNlcyhhZGRyZXNzOiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkUGxhY2VzLnB1c2goYWRkcmVzcyk7XG4gIH1cblxuICBzZXRPdXRib3VuZEZvcm1WaXNpYmlsaXR5KHNob3dGb3JtOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5vdXRib3VuZFZpc2liaWxpdHkubmV4dChzaG93Rm9ybSk7XG4gIH1cblxuICBzZXRJbmJvdW5kRm9ybVZpc2liaWxpdHkoc2hvd0Zvcm06IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmluYm91bmRWaXNpYmlsaXR5Lm5leHQoc2hvd0Zvcm0pO1xuICB9XG5cbiAgZ2V0T3V0Ym91bmRGb3JtVmlzaWJpbGl0eSgpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLm91dGJvdW5kVmlzaWJpbGl0eTtcbiAgfVxuXG4gIGdldEluYm91bmRGb3JtVmlzaWJpbGl0eSgpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmluYm91bmRWaXNpYmlsaXR5O1xuICB9XG5cbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMocHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPik6IHZvaWQge1xuICAgIGNvbnN0IGZsaWdodEl0ZW06IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID1cbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRmxpZ2h0XT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgcmFpbEl0ZW06IFNlYXJjaFJhaWxRdWVyeVZhcmlhYmxlcyA9IHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuUmFpbF0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IGlybEl0ZW06IFNlYXJjaElybFF1ZXJ5VmFyaWFibGVzID1cbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuSW50ZXJuYXRpb25hbFJhaWxdPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCBob3RlbEl0ZW06IFNlYXJjaEhvdGVsc1F1ZXJ5VmFyaWFibGVzID0gcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5SYWlsXT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgY2FySXRlbTogU2VhcmNoQ2FySGlyZVF1ZXJ5VmFyaWFibGVzID0gcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5DYXJdPy5zZWFyY2hRdWVyeTtcbiAgICBjb25zdCBsb3VuZ2VJdGVtOiBTZWFyY2hMb3VuZ2VzUXVlcnlWYXJpYWJsZXMgPSBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkxvdW5nZV0/LnNlYXJjaFF1ZXJ5O1xuICAgIGNvbnN0IHBhcmtpbmdJdGVtOiBTZWFyY2hQYXJraW5nUXVlcnlWYXJpYWJsZXMgPVxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5QYXJraW5nXT8uc2VhcmNoUXVlcnk7XG4gICAgY29uc3QgZXVyb3N0YXJJdGVtOiBTZWFyY2hFdXJvc3RhclF1ZXJ5VmFyaWFibGVzID1cbiAgICAgIHByZXZpb3VzSXRlbXNbU2VydmljZVR5cGUuRXVyb3N0YXJdPy5zZWFyY2hRdWVyeTtcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuRkxJR0hULmluYm91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuRkxJR0hULmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5GTElHSFQub3V0Ym91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuRkxJR0hULm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKFxuICAgICAgICAgICAgYCR7ZGF0ZUFycmF5WzBdfSR7ZGF0ZUFycmF5WzFdfSR7ZGF0ZUFycmF5WzJdLnN1YnN0cmluZygwLCAyKX1gLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhYmhpcmUgZnJvbSBmbGlnaHQgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmFpbEl0ZW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLlJBSUwuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5SQUlMLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5SQUlMLm91dGJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLlJBSUwub3V0Ym91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FiaGlyZSBmcm9tIHJhaWwgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXJsSXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuSU5URVJOQVRJT05BTF9SQUlMLmluYm91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuSU5URVJOQVRJT05BTF9SQUlMLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5JTlRFUk5BVElPTkFMX1JBSUwub3V0Ym91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuSU5URVJOQVRJT05BTF9SQUlMLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKFxuICAgICAgICAgICAgYCR7ZGF0ZUFycmF5WzBdfSR7ZGF0ZUFycmF5WzFdfSR7ZGF0ZUFycmF5WzJdLnN1YnN0cmluZygwLCAyKX1gLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhYmhpcmUgZnJvbSBpbnRlcm5hdGlvbmFsIHJhaWwgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaG90ZWxJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5IT1RFTC5pbmJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLkhPVEVMLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5IT1RFTC5vdXRib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5IT1RFTC5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShcbiAgICAgICAgICAgIGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBjYWJoaXJlIGZyb20gaG90ZWwgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FySXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuQ0FSLmluYm91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuQ0FSLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5DQVIub3V0Ym91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuQ0FSLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKFxuICAgICAgICAgICAgYCR7ZGF0ZUFycmF5WzBdfSR7ZGF0ZUFycmF5WzFdfSR7ZGF0ZUFycmF5WzJdLnN1YnN0cmluZygwLCAyKX1gLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhYmhpcmUgZnJvbSBjYXIgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobG91bmdlSXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzSXRlbXMuTE9VTkdFLmluYm91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuTE9VTkdFLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5MT1VOR0Uub3V0Ym91bmREYXRlKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gKHByZXZpb3VzSXRlbXMuTE9VTkdFLm91dGJvdW5kRGF0ZSBhcyBzdHJpbmcpLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5oZWxwZXJzLnl5eXltbWRkVGltZVRvTmdEYXRlKFxuICAgICAgICAgICAgYCR7ZGF0ZUFycmF5WzBdfSR7ZGF0ZUFycmF5WzFdfSR7ZGF0ZUFycmF5WzJdLnN1YnN0cmluZygwLCAyKX1gLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIGNhYmhpcmUgZnJvbSBsb3VuZ2UgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocGFya2luZ0l0ZW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwcmV2aW91c0l0ZW1zLlBBUktJTkcuaW5ib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5QQVJLSU5HLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5QQVJLSU5HLm91dGJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLlBBUktJTkcub3V0Ym91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgY2FiaGlyZSBmcm9tIHBhcmtpbmcgaXRlbScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXVyb3N0YXJJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAocHJldmlvdXNJdGVtcy5FVVJPU1RBUi5pbmJvdW5kRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGVBcnJheSA9IChwcmV2aW91c0l0ZW1zLkVVUk9TVEFSLmluYm91bmREYXRlIGFzIHN0cmluZykuc3BsaXQoJy0nKTtcbiAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLmhlbHBlcnMueXl5eW1tZGRUaW1lVG9OZ0RhdGUoXG4gICAgICAgICAgICBgJHtkYXRlQXJyYXlbMF19JHtkYXRlQXJyYXlbMV19JHtkYXRlQXJyYXlbMl0uc3Vic3RyaW5nKDAsIDIpfWAsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNJdGVtcy5FVVJPU1RBUi5vdXRib3VuZERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAocHJldmlvdXNJdGVtcy5FVVJPU1RBUi5vdXRib3VuZERhdGUgYXMgc3RyaW5nKS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuaGVscGVycy55eXl5bW1kZFRpbWVUb05nRGF0ZShcbiAgICAgICAgICAgIGAke2RhdGVBcnJheVswXX0ke2RhdGVBcnJheVsxXX0ke2RhdGVBcnJheVsyXS5zdWJzdHJpbmcoMCwgMil9YCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHRyeWluZyB0byBwcmVwb3B1bGF0ZSBjYWJoaXJlIGZyb20gZXVyb3N0YXIgaXRlbScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVNlYXJjaEZyb21FeHBpcmVkQmFza2V0SXRlbShiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLCBzZXREYXRlVGltZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hDYWJIaXJlUXVlcnk6IFNlYXJjaENhYkhpcmVRdWVyeVZhcmlhYmxlcyA9IGJhc2tldEl0ZW0uc2VhcmNoUXVlcnk7XG5cbiAgICBpZiAoc2VhcmNoQ2FiSGlyZVF1ZXJ5KSB7XG4gICAgICBpZiAoc2V0RGF0ZVRpbWUpIHtcbiAgICAgICAgdGhpcy5kZXBhcnRzID0gbW9tZW50KHNlYXJjaENhYkhpcmVRdWVyeS5kZXBhcnRzKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy5zZXRRdWVyeUZyb21CYXNrZXRJdGVtKGJhc2tldEl0ZW0pO1xuICAgIH1cblxuICAgIHRoaXMuYWR1bHRzID0gc2VhcmNoQ2FiSGlyZVF1ZXJ5LmFkdWx0cztcbiAgICB0aGlzLmNoaWxkcmVuID0gc2VhcmNoQ2FiSGlyZVF1ZXJ5LmNoaWxkcmVuO1xuICAgIHRoaXMuaW5mYW50cyA9IHNlYXJjaENhYkhpcmVRdWVyeS5pbmZhbnRzO1xuICAgIHRoaXMuYWRkVHJhdmVsbGVyc0Zyb21CYXNrZXRJdGVtKGJhc2tldEl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0QWRkcmVzc0xvY2F0aW9uKGFkZHJlc3M6IENhYkhpcmVMb2NhdGlvbklucHV0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIENvdW50cnlDb2RlOiBhZGRyZXNzLmNvdW50cnlDb2RlLFxuICAgICAgSG91c2U6IGFkZHJlc3MuYnVpbGRpbmdOYW1lLFxuICAgICAgU3RyZWV0OiBhZGRyZXNzLnN0cmVldEFuZE51bWJlcixcbiAgICAgIFRvd246IGFkZHJlc3MudG93bixcbiAgICAgIFBvc3RDb2RlOiBhZGRyZXNzLnBvc3Rjb2RlLFxuICAgICAgQ291bnRyeTogYWRkcmVzcy5jb3VudHJ5Q29kZSxcbiAgICAgIFRlcm1pbmFsOiBhZGRyZXNzLnRlcm1pbmFsLFxuICAgICAgQ291bnR5OiAgYWRkcmVzcy5jb3VudHksXG4gICAgICBGbGlnaHROdW1iZXI6IGFkZHJlc3MuZmxpZ2h0TnVtYmVyLFxuICAgICAgRmxpZ2h0VHJhaW5EYXRlVGltZTogYWRkcmVzcy5mbGlnaHRUcmFpbkRhdGVUaW1lLFxuICAgICAgQ2FycmllcjogYWRkcmVzcy5jYXJyaWVyXG4gICAgfTtcbiAgfVxuXG4gIGdldFRyYW5zVHlwZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRyYW5zVHlwZUluZGV4ID0gdGhpcy50ZW1wUGFyYW1zLnZlaGljbGVUeXBlO1xuICAgIHJldHVybiB0aGlzLnRyYW5zVHlwZXMuZmluZCh4ID0+IHgua2V5ID09PSB0cmFuc1R5cGVJbmRleCk/LnZhbHVlIHx8ICcnO1xuICB9XG5cbiAgZ2V0UGFzc2VuZ2VycyA9ICgpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGFkdWx0cyA9IHRoaXMuYWR1bHRzO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICBsZXQgcGFzc2VuZ2VycyA9IGAke2FkdWx0c30gQWR1bHRgO1xuXG4gICAgaWYgKE51bWJlcihhZHVsdHMpICE9PSAxKSB7XG4gICAgICBwYXNzZW5nZXJzICs9ICdzJztcbiAgICB9XG4gICAgaWYgKE51bWJlcihjaGlsZHJlbikgPT09IDEpIHtcbiAgICAgIHBhc3NlbmdlcnMgKz0gYCwgJHtjaGlsZHJlbn0gQ2hpbGRgO1xuICAgIH1cblxuICAgIGlmIChOdW1iZXIoY2hpbGRyZW4pID4gMSkge1xuICAgICAgcGFzc2VuZ2VycyArPSBgLCAke2NoaWxkcmVufSBDaGlsZHJlbmA7XG4gICAgfVxuICAgIHJldHVybiBwYXNzZW5nZXJzO1xuICAgIHJldHVybiAnJztcbiAgfTtcblxuICBhc3luYyBhZGRDYWJIaXJlVG9CYXNrZXQoXG4gICAgY2FiSGlyZVF1b3RlOiBDYWJIaXJlUXVvdGUsXG4gICAgY2FiSGlyZVF1ZXJ5OiBTZWFyY2hDYWJIaXJlUXVlcnlWYXJpYWJsZXMsXG4gICAgaWdub3JlSW52b2tlZDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIGlmIChjYWJIaXJlUXVvdGUudW5hdmFpbGFibGUgJiYgIXRoaXMudXNlclNlcnZpY2UuY2FuT3ZlcnJpZGUoKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKGNhYkhpcmVRdW90ZSk7XG4gICAgaWYgKGJhc2tldCkge1xuICAgICAgY29uc3Qgd2hhdEhhcHBlbmVkID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxuICAgICAgICB7XG4gICAgICAgICAgYWR1bHRzOiBjYWJIaXJlUXVlcnkuYWR1bHRzLFxuICAgICAgICAgIGJhc2tldDogYmFza2V0LmlkLFxuICAgICAgICAgIHNlcnZpY2U6IGNhYkhpcmVRdW90ZS5zb3VyY2VJZC50b1N0cmluZygpLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgYWRkaXRpb25hbDogY2FiSGlyZVF1b3RlLmFkZGl0aW9uYWwsXG4gICAgICAgICAgICBpZDogY2FiSGlyZVF1b3RlLmlkLFxuICAgICAgICAgICAgZGVwYXJ0czogY2FiSGlyZVF1ZXJ5LmRlcGFydHMsXG4gICAgICAgICAgICBzdXBwbGllck5hbWU6IGNhYkhpcmVRdW90ZS5zdXBwbGllck5hbWUsXG4gICAgICAgICAgICBlc3RpbWF0ZWRDTzI6IGNhYkhpcmVRdW90ZS5lc3RpbWF0ZWRDTzIsXG4gICAgICAgICAgICBmcm9tTG9jYXRpb246IHtcbiAgICAgICAgICAgICAgYWRkcmVzc1R5cGU6IGNhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24uYWRkcmVzc1R5cGUsXG4gICAgICAgICAgICAgIGJ1aWxkaW5nTmFtZTogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbi5idWlsZGluZ05hbWUsXG4gICAgICAgICAgICAgIHN0cmVldEFuZE51bWJlcjogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbi5zdHJlZXRBbmROdW1iZXIsXG4gICAgICAgICAgICAgIHRvd246IGNhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24udG93bixcbiAgICAgICAgICAgICAgcG9zdGNvZGU6IGNhYkhpcmVRdWVyeS5mcm9tTG9jYXRpb24ucG9zdGNvZGUsXG4gICAgICAgICAgICAgIGNvdW50eTogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbi5jb3VudHksXG4gICAgICAgICAgICAgIGNvdW50cnlDb2RlOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uLmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgICBsYXRpdHVkZTogY2FiSGlyZVF1b3RlLmZyb21Mb2NhdGlvbi5sYXRpdHVkZSxcbiAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBjYWJIaXJlUXVvdGUuZnJvbUxvY2F0aW9uLmxvbmdpdHVkZSxcbiAgICAgICAgICAgICAgZmxpZ2h0VHJhaW5EYXRlVGltZTogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbj8uZmxpZ2h0VHJhaW5EYXRlVGltZSxcbiAgICAgICAgICAgICAgZmxpZ2h0TnVtYmVyOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uPy5mbGlnaHROdW1iZXIsXG4gICAgICAgICAgICAgIHRlcm1pbmFsOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uPy50ZXJtaW5hbCxcbiAgICAgICAgICAgICAgY2FycmllcjogY2FiSGlyZVF1ZXJ5LmZyb21Mb2NhdGlvbj8uY2FycmllcixcbiAgICAgICAgICAgICAgYWlycG9ydFN0YXRpb25OYW1lOiBjYWJIaXJlUXVlcnkuZnJvbUxvY2F0aW9uPy5haXJwb3J0U3RhdGlvbk5hbWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b0xvY2F0aW9uOiB7XG4gICAgICAgICAgICAgIGFkZHJlc3NUeXBlOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi5hZGRyZXNzVHlwZSxcbiAgICAgICAgICAgICAgYnVpbGRpbmdOYW1lOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi5idWlsZGluZ05hbWUsXG4gICAgICAgICAgICAgIHN0cmVldEFuZE51bWJlcjogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24uc3RyZWV0QW5kTnVtYmVyLFxuICAgICAgICAgICAgICB0b3duOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbi50b3duLFxuICAgICAgICAgICAgICBwb3N0Y29kZTogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24ucG9zdGNvZGUsXG4gICAgICAgICAgICAgIGNvdW50eTogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24uY291bnR5LFxuICAgICAgICAgICAgICBjb3VudHJ5Q29kZTogY2FiSGlyZVF1ZXJ5LnRvTG9jYXRpb24uY291bnRyeUNvZGUsXG4gICAgICAgICAgICAgIGxhdGl0dWRlOiBjYWJIaXJlUXVvdGUudG9Mb2NhdGlvbi5sYXRpdHVkZSxcbiAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBjYWJIaXJlUXVvdGUudG9Mb2NhdGlvbi5sb25naXR1ZGUsXG4gICAgICAgICAgICAgIGZsaWdodFRyYWluRGF0ZVRpbWU6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uPy5mbGlnaHRUcmFpbkRhdGVUaW1lLFxuICAgICAgICAgICAgICBmbGlnaHROdW1iZXI6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uPy5mbGlnaHROdW1iZXIsXG4gICAgICAgICAgICAgIHRlcm1pbmFsOiBjYWJIaXJlUXVlcnkudG9Mb2NhdGlvbj8udGVybWluYWwsXG4gICAgICAgICAgICAgIGNhcnJpZXI6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uPy5jYXJyaWVyLFxuICAgICAgICAgICAgICBhaXJwb3J0U3RhdGlvbk5hbWU6IGNhYkhpcmVRdWVyeS50b0xvY2F0aW9uPy5haXJwb3J0U3RhdGlvbk5hbWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2aWFzOiBjYWJIaXJlUXVlcnkudmlhcyxcbiAgICAgICAgICAgIHZlaGljbGVUeXBlOiBjYWJIaXJlUXVvdGUudmVoaWNsZVR5cGUsXG4gICAgICAgICAgICB0cmlwRGlzdGFuY2VNZXRyZXM6IGNhYkhpcmVRdW90ZS50cmlwRGlzdGFuY2VNZXRyZXMsXG4gICAgICAgICAgICB0cmlwRHVyYXRpb25TZWNvbmRzOiBjYWJIaXJlUXVvdGUudHJpcER1cmF0aW9uU2Vjb25kcyxcbiAgICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmljZTogY2FiSGlyZVF1b3RlLnByaWNlLFxuICAgICAgICAgIGN1cnJlbmN5OiBjYWJIaXJlUXVvdGUuY3VycmVuY3ksXG4gICAgICAgICAgc2VhcmNoUXVlcnk6IGNhYkhpcmVRdWVyeSxcbiAgICAgICAgICBjbzJQZXJJdGVtOiBjYWJIaXJlUXVvdGUuY28yUGVySXRlbSxcbiAgICAgICAgICBjbzJQZXJQYXNzZW5nZXI6IGNhYkhpcmVRdW90ZS5jbzJQZXJQYXNzZW5nZXIsXG4gICAgICAgICAgb3V0Ym91bmREYXRlOiBjYWJIaXJlUXVlcnkuZGVwYXJ0cyxcbiAgICAgICAgICBsb3dlc3RQcmljZTpcbiAgICAgICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZT8uYW1vdW50IHx8IHRoaXMuY2hlYXBlc3RQcmljZT8uY3VycmVuY3lDb2RlICE9PSBjYWJIaXJlUXVvdGUuY3VycmVuY3lcbiAgICAgICAgICAgICAgPyB0aGlzLmNoZWFwZXN0UHJpY2U/LmFtb3VudFxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTpcbiAgICAgICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZT8uYW1vdW50IHx8IHRoaXMuY2hlYXBlc3RQcmljZT8uY3VycmVuY3lDb2RlICE9PSBjYWJIaXJlUXVvdGUuY3VycmVuY3lcbiAgICAgICAgICAgICAgPyA8Q3VycmVuY3lDb2RlPnRoaXMuY2hlYXBlc3RQcmljZT8uY3VycmVuY3lDb2RlXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIHJlYXNvbktleXM6IGNhYkhpcmVRdW90ZS5yZXF1aXJlc1JlYXNvbktleXMsXG4gICAgICAgICAgICBhZ2VudE92ZXJyb2RlVW5hdmFpbGFibGU6Y2FiSGlyZVF1b3RlLnVuYXZhaWxhYmxlXG5cbiAgICAgICAgfSxcbiAgICAgICAgaW50QmFza2V0LFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcbiAgICAgICAgY2FiSGlyZVF1b3RlLnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGlnbm9yZUludm9rZWRcbiAgICAgICk7XG4gICAgICBpZiAod2hhdEhhcHBlbmVkID09PSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoKSB7XG4gICAgICAgICAgdGhpcy5yZXNlYXJjaFdpdGhOZXdVc2VyKCk7XG4gICAgICAgIH1cbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XG4gICAgfVxuICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbDtcbiAgfVxuXG4gIHN3aXRjaEZyb21BbmRUb0xvY2F0aW9uKCkge1xuICAgIGNvbnN0IG5ld0Zyb21BZGRyZXNzID0geyAuLi50aGlzLnRvQWRkcmVzcyB9O1xuICAgIGNvbnN0IG5ld1RvQWRkcmVzcyA9IHsgLi4udGhpcy5mcm9tQWRkcmVzcyB9O1xuICAgIHRoaXMuZnJvbUFkZHJlc3MgPSBuZXdGcm9tQWRkcmVzcztcbiAgICB0aGlzLnRvQWRkcmVzcyA9IG5ld1RvQWRkcmVzcztcbiAgfVxuXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IENhYkhpcmVRdW90ZVtdKTogSUNoZWFwZXN0UHJpY2Uge1xuICAgIGlmICghcmVzdWx0cz8ubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBjdXJyZW5jeSA9IHJlc3VsdHNbMF0uY3VycmVuY3k7XG4gICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKFxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IENhYkhpcmVRdW90ZSkgPT4ge1xuICAgICAgICBjb25zdCBwcmljZSA9IHJlc3VsdC5wcmljZTtcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xuICAgICAgfSxcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XG4gICAgKTtcbiAgfVxuXG4gIGdldFRlcm1zQW5kQ29uZChjYWJIaXJlUXVvdGU6IENhYkhpcmVRdW90ZSkge1xuICAgIGNvbnN0IGRlcGFydHMgPSBtb21lbnQoY2FiSGlyZVF1b3RlLmRlcGFydHMpLnV0YygpLmZvcm1hdChCYXNlSGVscGVyUm91dGluZXMuSVNPX0RBVEFfRk9STUFUX1RJTUUpO1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdMb3dlc3QgUHJpY2UnLFxuICAgICAgICB2YWx1ZTogY2FiSGlyZVF1b3RlLnByaWNlLnRvU3RyaW5nKCkgKyAnICcgKyBjYWJIaXJlUXVvdGUuY3VycmVuY3lcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdQaWNrdXAgVGltZScsXG4gICAgICAgIHZhbHVlOiBkZXBhcnRzXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVGVybXMgYW5kIENvbmRpdGlvbnMnLFxuICAgICAgICB2YWx1ZTpcbiAgICAgICAgICBjYWJIaXJlUXVvdGUuc291cmNlID09PSBTZXJ2aWNlUHJvdmlkZXIuQ01BQ1xuICAgICAgICAgICAgPyAnPGEgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cImh0dHBzOi8vd3d3LmNtYWNncm91cC5jb20vXCI+d3d3LmNtYWNncm91cC5jb208L2E+J1xuICAgICAgICAgICAgOiBjYWJIaXJlUXVvdGUuYWRkaXRpb25hbD8ucHJvdmlkZXJzUHJpY2luZz8ubm90ZXNcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgc2F2ZVNlYXJjaCgpOiBPYnNlcnZhYmxlPFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XG4gICAgICBjb25zdCBxdWVyeTogUXVlcnlTZWFyY2hDYWJIaXJlQXJncyA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVNlYXJjaFF1ZXJ5OiBJQ2FiSGlyZVNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkNhYixcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XG4gICAgfVxuICB9XG4gIGFzeW5jIGFwcGx5RmF2b3VyaXRlKGZhdjogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGZhdi5mcm9tTG9jYXRpb24uU3RyZWV0ICYmIGZhdi50b0xvY2F0aW9uLlN0cmVldCkge1xuICAgICAgdGhpcy5tb2RlID0gVGF4aUZvcm1Nb2RlLkFERFJFU1M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kZSA9IFRheGlGb3JtTW9kZS5TVEFUSU9OO1xuICAgICAgdGhpcy5haXJwb3J0U2VhcmNoVHlwZSA9IGZhdi5mcm9tTG9jYXRpb24uU3RyZWV0XG4gICAgICAgID8gQWlycG9ydFNlYXJjaE1vZGUuRFJPUE9GRlxuICAgICAgICA6IEFpcnBvcnRTZWFyY2hNb2RlLlBJQ0tVUDtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KCFmYXYuZnJvbUxvY2F0aW9uLlN0cmVldCA/IGZhdi5mcm9tTG9jYXRpb24uSG91c2UgOiBmYXYudG9Mb2NhdGlvbi5Ib3VzZSlcbiAgICAgICAgLnN1YnNjcmliZShhaXJwb3J0ID0+IHtcbiAgICAgICAgICB0aGlzLmFpcnBvcnQgPSAoYWlycG9ydCBhcyBhbnlbXSlbMF07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmFkdWx0cyA9IGZhdi5hZHVsdHM7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGZhdi5jaGlsZHJlbjtcbiAgICB0aGlzLmluZmFudHMgPSBmYXYuaW5mYW50cztcbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLkhvdXNlID0gZmF2LmZyb21Mb2NhdGlvbi5Ib3VzZVxuICAgIC8vIHRoaXMuZnJvbUFkZHJlc3MuU3RyZWV0ID0gZmF2LmZyb21Mb2NhdGlvbi5TdHJlZXRcbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLlRvd24gPSBmYXYuZnJvbUxvY2F0aW9uLlRvd25cbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLkNvdW50cnkgPSBmYXYuZnJvbUxvY2F0aW9uLkNvdW50cnlcbiAgICAvLyB0aGlzLmZyb21BZGRyZXNzLlBvc3RDb2RlID0gZmF2LmZyb21Mb2NhdGlvbi5Qb3N0Q29kZVxuICAgIC8vIHRoaXMuZnJvbUFkZHJlc3MucGxhY2VEZXNjcmlwdGlvbiA9IGZhdi5mcm9tTG9jYXRpb24ucGxhY2VEZXNjcmlwdGlvblxuICAgIC8vIHRoaXMudG9BZGRyZXNzLkhvdXNlID0gZmF2LnRvTG9jYXRpb24uSG91c2VcbiAgICAvLyB0aGlzLnRvQWRkcmVzcy5TdHJlZXQgPSBmYXYudG9Mb2NhdGlvbi5TdHJlZXRcbiAgICAvLyB0aGlzLnRvQWRkcmVzcy5Ub3duID0gZmF2LnRvTG9jYXRpb24uVG93blxuICAgIC8vIHRoaXMudG9BZGRyZXNzLkNvdW50cnkgPSBmYXYudG9Mb2NhdGlvbi5Db3VudHJ5XG4gICAgLy8gdGhpcy50b0FkZHJlc3MuUG9zdENvZGUgPSBmYXYudG9Mb2NhdGlvbi5Qb3N0Q29kZVxuICAgIC8vIHRoaXMudG9BZGRyZXNzLnBsYWNlRGVzY3JpcHRpb24gPSBmYXYudG9Mb2NhdGlvbi5wbGFjZURlc2NyaXB0aW9uXG4gICAgdGhpcy5mcm9tQWRkcmVzcyA9IGZhdi5mcm9tTG9jYXRpb247XG4gICAgdGhpcy50b0FkZHJlc3MgPSBmYXYudG9Mb2NhdGlvbjtcbiAgICB0aGlzLnZlaGljbGVUeXBlID0gZmF2LnZlaGljbGVUeXBlO1xuICB9XG5cbiAgbWVzc2FnZUNvbmZpZ0NoZWNrKGNvbmZpZzogYW55LCBpc0NoZWNrUGFzczogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGlmIChjb25maWcuYWlycG9ydCAmJiBpc0NoZWNrUGFzcykge1xuICAgICAgY29uc3QgZnJvbUFpcnBvcnQgPSB0aGlzLmZyb21BZGRyZXNzPy5BaXJwb3J0U3RhdGlvbk5hbWUgPT09IGNvbmZpZy5haXJwb3J0O1xuICAgICAgY29uc3QgdG9BaXJwb3J0ID0gdGhpcy50b0FkZHJlc3M/LkFpcnBvcnRTdGF0aW9uTmFtZSA9PT0gY29uZmlnLmFpcnBvcnQ7XG4gICAgICBpc0NoZWNrUGFzcyA9IGZyb21BaXJwb3J0IHx8IHRvQWlycG9ydDtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5jaXR5ICYmIGlzQ2hlY2tQYXNzKSB7XG4gICAgICBjb25zdCBjaXR5ID0gY29uZmlnLmNpdHkudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgIGxldCBmcm9tQ2l0eSA9IHRoaXMuZnJvbUxvY2F0aW9uPy50b3duPy50b0xvd2VyQ2FzZSgpLnRyaW0oKSA9PT0gIGNpdHk7XG4gICAgICBpZih0aGlzLmZyb21Mb2NhdGlvbj8uYnVpbGRpbmdOYW1lICYmICFmcm9tQ2l0eSl7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmZyb21Mb2NhdGlvbj8uYnVpbGRpbmdOYW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgZnJvbUNpdHkgPSBuYW1lLmluY2x1ZGVzKGNpdHkpO1xuICAgICAgfVxuICAgICAgbGV0IHRvQ2l0eSA9IHRoaXMudG9Mb2NhdGlvbj8udG93bj8udG9Mb3dlckNhc2UoKS50cmltKCkgPT09ICBjaXR5O1xuICAgICAgaWYodGhpcy50b0xvY2F0aW9uPy5idWlsZGluZ05hbWUgJiYgIXRvQ2l0eSl7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnRvTG9jYXRpb24/LmJ1aWxkaW5nTmFtZT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgIHRvQ2l0eSA9IG5hbWUuaW5jbHVkZXMoY2l0eSk7XG4gICAgICB9XG5cbiAgICAgIGlzQ2hlY2tQYXNzID0gZnJvbUNpdHkgfHwgdG9DaXR5O1xuICAgIH1cbiAgICByZXR1cm4gaXNDaGVja1Bhc3M7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUxvY2F0aW9uKFxuICAgIG1vZGU6IFRheGlGb3JtTW9kZSxcbiAgICBsb2NhdGlvbjogQ2FiSGlyZUxvY2F0aW9uSW5wdXRcbiAgKTogUHJvbWlzZTxSYWlsQWlycG9ydCB8IG51bGw+IHtcbiAgICBpZiAobW9kZSAhPT0gVGF4aUZvcm1Nb2RlLlNUQVRJT04pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgXG4gICAgY29uc3QgdGVybSA9IGxvY2F0aW9uLmJ1aWxkaW5nTmFtZS5yZXBsYWNlKC9eW14sXSssXFxzKi8sIFwiXCIpO1xuICAgIGNvbnN0IGlzVHJ1ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBcbiAgICBpZiAobG9jYXRpb24udGVybWluYWwpIHsgLy8gYWlycG9ydCB0eXBlXG4gICAgICBjb25zdCBsb2NhdGlvbnMgID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRMb2NhdGlvbnModGVybSwgbG9jYXRpb24uY291bnRyeUNvZGUsIGlzVHJ1ZVN1YmplY3QpLnRvUHJvbWlzZSgpO1xuICAgICAgaWYgKGxvY2F0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHsgYWlycG9ydCwgbmFtZSwgdHlwZSB9ID0gbG9jYXRpb25zWzBdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgYWlycG9ydCxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHN1cHBsaWVyX2NvZGU6IG51bGwsXG4gICAgICAgICAgaXNhaXJwb3J0OiBudWxsLFxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBhaXJwb3J0LmRlc3RpbmF0aW9uLFxuICAgICAgICAgIHRlcm1pbmFsOiBsb2NhdGlvbi50ZXJtaW5hbCxcbiAgICAgICAgfSBhcyBSYWlsQWlycG9ydDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxvY2F0aW9uLmJ1aWxkaW5nTmFtZSA9PT0gbG9jYXRpb24uc3RyZWV0QW5kTnVtYmVyKSB7IC8vIFRyYWluIFN0LiB0eXBlXG4gICAgICBjb25zdCBsb2NhdGlvbnMgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0U3RhdGlvbkxvY2F0aW9ucyh0ZXJtLCBpc1RydWVTdWJqZWN0KS50b1Byb21pc2UoKTtcbiAgICAgIGlmIChsb2NhdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIHJhaWxzdGF0aW9uLCB0eXBlIH0gPSBsb2NhdGlvbnNbMF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHJhaWxzdGF0aW9uLFxuICAgICAgICAgIHN1cHBsaWVyX2NvZGU6IG51bGwsXG4gICAgICAgICAgaXNhaXJwb3J0OiBudWxsLFxuICAgICAgICAgIGRlc3RpbmF0aW9uOiBudWxsLFxuICAgICAgICB9IGFzIFJhaWxBaXJwb3J0O1xuICAgICAgfVxuICAgIH1cbiAgXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRBZGRyZXNzKGV2ZW50OiBhbnkpOiBBZGRyZXNzRm9ybSB7XG4gICAgbGV0IGFkZHJlc3M6IEFkZHJlc3NGb3JtID0gbnVsbDtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGxldCBhZGRyZXNzVHlwZTogc3RyaW5nID0gZXZlbnQ/LnR5cGU7XG4gICAgICBpZiAoYWRkcmVzc1R5cGU/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKCdhaXJwb3J0JykpIHtcbiAgICAgICAgYWRkcmVzcyA9IHtcbiAgICAgICAgICBIb3VzZTogZXZlbnQ/LnR5cGUsXG4gICAgICAgICAgU3RyZWV0OiBldmVudD8ubmFtZSxcbiAgICAgICAgICBQb3N0Q29kZTogZXZlbnQ/LmFpcnBvcnQ/LnBvc3Rjb2RlLFxuICAgICAgICAgIFRlcm1pbmFsOiBldmVudD8udGVybWluYWwgfHwgbnVsbCxcbiAgICAgICAgICBDb3VudHJ5OiBldmVudD8uYWlycG9ydD8uY291bnRyeUNvZGUsXG4gICAgICAgICAgRmxpZ2h0TnVtYmVyOiAgZXZlbnQ/LmZsaWdodE51bWJlciB8fCAnJyxcbiAgICAgICAgICBDYXJyaWVyOiAgZXZlbnQ/LmNhcnJpZXIgfHwgJycsXG4gICAgICAgICAgQWlycG9ydFN0YXRpb25OYW1lOiBldmVudD8uYWlycG9ydD8uZ2F0ZXdheSB8fCAnJ1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGRyZXNzID0ge1xuICAgICAgICAgIEhvdXNlOiBldmVudD8udHlwZSxcbiAgICAgICAgICBTdHJlZXQ6IGV2ZW50Py5uYW1lLFxuICAgICAgICAgIFBvc3RDb2RlOiBldmVudD8ucmFpbHN0YXRpb24/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXG4gICAgICAgICAgQ291bnRyeTogZXZlbnQ/LnJhaWxzdGF0aW9uPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlLFxuICAgICAgICAgIEZsaWdodE51bWJlcjogIGV2ZW50Py5mbGlnaHROdW1iZXIgfHwgJycsXG4gICAgICAgICAgQ2FycmllcjogIGV2ZW50Py5jYXJyaWVyIHx8ICcnLFxuICAgICAgICAgIEFpcnBvcnRTdGF0aW9uTmFtZTogZXZlbnQ/LnJhaWxzdGF0aW9uPy5zdGF0aW9uQ29kZSB8fCAnJyxcbiAgICAgICAgICBGbGlnaHRUcmFpbkRhdGVUaW1lOiBldmVudD8uZmxpZ2h0VHJhaW5EYXRlVGltZSB8fCAnMDk6MDAnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFkZHJlc3M7XG4gIH1cblxuICBfYXBwbHlGaWx0ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VhcmNoU2VydmljZS5pc0Nsb25pbmcuZ2V0VmFsdWUoKSkge1xuICAgICAgY29uc3QgZmlsdGVyZWRSZXN1bHRzID0gdGhpcy5mdWxsUmVzdWx0cy5maWx0ZXIoKHJlc3VsdDogQ2FiSGlyZVF1b3RlKSA9PiBcbiAgICAgICAgcmVzdWx0LnN1cHBsaWVyTmFtZSA9PT0gdGhpcy5jbG9uZWRCYXNrZXRJdGVtRGV0YWlscy5zdXBwbGllck5hbWVcbiAgICAgICk7XG4gICAgICB0aGlzLnJlc3VsdHMubmV4dCh0aGlzLmhlbHBlcnMuY2xvbmUoZmlsdGVyZWRSZXN1bHRzKSk7XG4gICAgfSBcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMgPSB7fTtcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2UgdXNlIHRoaXMgbWV0aG9kIGZvciBmZWF0dXJlczogRXhwaXJlZEJhc2tldCwgQ29weUJhc2tldCwgQ2xvbmVCYXNrZXRcbiAgLy8gTm90ZTogRG8gbm90IGluY2x1ZGUgZGF0ZXMgYW5kIHRhdmVsbGVycyBpbiB0aGlzIG1ldGhvZFxuICBhc3luYyBhcHBseVNlYXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hDYWJIaXJlUXVlcnlWYXJpYWJsZXMsIHN0YXJ0U2VhcmNoOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIHRoaXMuZnJvbUFkZHJlc3MgPSB0aGlzLmNvbnZlcnRBZGRyZXNzTG9jYXRpb24oXG4gICAgICBxdWVyeS5mcm9tTG9jYXRpb25cbiAgICApO1xuXG4gICAgdGhpcy50b0FkZHJlc3MgPSB0aGlzLmNvbnZlcnRBZGRyZXNzTG9jYXRpb24oXG4gICAgICBxdWVyeS50b0xvY2F0aW9uXG4gICAgKTtcblxuICAgIGNvbnN0IGlzTGltbzogYm9vbGVhbiA9IHF1ZXJ5Lm1lc3NhZ2VUeXBlID09PSBNZXNzYWdlVHlwZS5MaW1vID8gdHJ1ZSA6IGZhbHNlO1xuICBcbiAgICB0aGlzLnZlaGljbGVUeXBlID0gaXNMaW1vID8gQ2FiSGlyZVZlaGljbGVUeXBlLkxpbW8gOiBxdWVyeS52ZWhpY2xlVHlwZTtcbiAgICB0aGlzLmxpbW9UeXBlID0gaXNMaW1vID8gcXVlcnkudmVoaWNsZVR5cGUgOiBudWxsO1xuICAgIHRoaXMudHJhbnNwb3J0VHlwZSA9IGlzTGltbyA/IHRoaXMudGVtcFBhcmFtcy50cmFuc3BvcnRUeXBlIDogbnVsbDtcbiAgICB0aGlzLmxpbW9Bc0RpcmVjdGVkRHVyYXRpb24gPSBxdWVyeS50cmFuc3BvcnRUeXBlID09PSBUcmFuc3BvcnRUeXBlLkhvdXJseSA/ICtxdWVyeS5saW1vQXNEaXJlY3RlZER1cmF0aW9uIDogbnVsbDtcblxuICAgIHRoaXMubW9kZSA9IHF1ZXJ5LmZyb21Mb2NhdGlvbi5idWlsZGluZ05hbWUgPT09IHF1ZXJ5LmZyb21Mb2NhdGlvbi5zdHJlZXRBbmROdW1iZXIgfHwgcXVlcnkuZnJvbUxvY2F0aW9uLnRlcm1pbmFsID8gVGF4aUZvcm1Nb2RlLlNUQVRJT04gOiBUYXhpRm9ybU1vZGUuQUREUkVTUztcbiAgICB0aGlzLm1vZGVUbyA9IHF1ZXJ5LnRvTG9jYXRpb24uYnVpbGRpbmdOYW1lID09PSBxdWVyeS50b0xvY2F0aW9uLnN0cmVldEFuZE51bWJlciB8fCBxdWVyeS50b0xvY2F0aW9uLnRlcm1pbmFsID8gVGF4aUZvcm1Nb2RlLlNUQVRJT04gOiBUYXhpRm9ybU1vZGUuQUREUkVTUztcblxuICAgIHRoaXMuZnJvbVN0YXRpb24gPSBhd2FpdCB0aGlzLmhhbmRsZUxvY2F0aW9uKHRoaXMubW9kZSwgcXVlcnkuZnJvbUxvY2F0aW9uKTtcbiAgICB0aGlzLnRvU3RhdGlvbiA9IGF3YWl0IHRoaXMuaGFuZGxlTG9jYXRpb24odGhpcy5tb2RlVG8sIHF1ZXJ5LnRvTG9jYXRpb24pO1xuXG4gICAgdGhpcy52aWFzID0gcXVlcnkudmlhcyBhcyBDYWJIaXJlTG9jYXRpb25JbnB1dFtdIHx8IFtdO1xuICAgIGlmICh0aGlzLnZpYXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52aWFzRnJvbSA9IHRoaXMuY29udmVydEFkZHJlc3NMb2NhdGlvbih0aGlzLnZpYXNbMF0pO1xuICAgIH1cbiAgICBpZiAodGhpcy52aWFzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMudmlhc1RvID0gdGhpcy5jb252ZXJ0QWRkcmVzc0xvY2F0aW9uKHRoaXMudmlhc1sxXSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0U2VhcmNoKSB7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgIH1cbiAgfVxufVxuIl19