@sumaris-net/ngx-components 18.6.8 → 18.7.1-beta1

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 (52) hide show
  1. package/esm2022/src/app/admin/services/validator/person.validator.mjs +1 -1
  2. package/esm2022/src/app/core/about/about.modal.mjs +5 -4
  3. package/esm2022/src/app/core/account/account.page.mjs +16 -18
  4. package/esm2022/src/app/core/form/properties/properties.table.mjs +28 -32
  5. package/esm2022/src/app/core/form/properties/properties.utils.mjs +14 -1
  6. package/esm2022/src/app/core/home/home.mjs +5 -5
  7. package/esm2022/src/app/core/services/account.service.mjs +26 -7
  8. package/esm2022/src/app/core/services/local-settings.service.mjs +9 -2
  9. package/esm2022/src/app/core/services/model/account.model.mjs +30 -11
  10. package/esm2022/src/app/core/services/model/entity.model.mjs +1 -1
  11. package/esm2022/src/app/core/services/network.service.mjs +1 -1
  12. package/esm2022/src/app/core/services/platform.service.mjs +4 -3
  13. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +4 -4
  14. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +1 -1
  15. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +1 -1
  16. package/esm2022/src/app/shared/file/uri.utils.mjs +1 -6
  17. package/esm2022/src/app/shared/markdown/markdown.component.mjs +20 -19
  18. package/esm2022/src/app/shared/markdown/markdown.modal.mjs +10 -24
  19. package/esm2022/src/app/shared/markdown/markdown.module.mjs +4 -3
  20. package/esm2022/src/app/shared/markdown/markdown.service.mjs +3 -2
  21. package/esm2022/src/app/shared/markdown/markdown.utils.mjs +1 -3
  22. package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +3 -3
  23. package/esm2022/src/app/shared/markdown/testing/markdown.testing.module.mjs +4 -5
  24. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +1 -1
  25. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +1 -1
  26. package/esm2022/src/app/shared/shared.module.mjs +11 -4
  27. package/esm2022/src/app/social/user-event/user-event.model.mjs +1 -1
  28. package/fesm2022/sumaris-net.ngx-components.mjs +3251 -3213
  29. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  30. package/package.json +1 -1
  31. package/src/app/admin/services/validator/person.validator.d.ts +1 -1
  32. package/src/app/core/account/account.page.d.ts +2 -0
  33. package/src/app/core/form/properties/properties.table.d.ts +4 -10
  34. package/src/app/core/form/properties/properties.utils.d.ts +4 -0
  35. package/src/app/core/home/home.d.ts +1 -1
  36. package/src/app/core/services/account.service.d.ts +2 -0
  37. package/src/app/core/services/local-settings.service.d.ts +1 -0
  38. package/src/app/core/services/model/account.model.d.ts +17 -2
  39. package/src/app/core/services/model/entity.model.d.ts +2 -2
  40. package/src/app/core/services/validator/base.validator.class.d.ts +5 -5
  41. package/src/app/core/table/entities-async-table-datasource.class.d.ts +2 -2
  42. package/src/app/core/table/entities-table-datasource.class.d.ts +2 -2
  43. package/src/app/shared/markdown/markdown.component.d.ts +3 -4
  44. package/src/app/shared/markdown/markdown.modal.d.ts +7 -10
  45. package/src/app/shared/markdown/markdown.module.d.ts +2 -1
  46. package/src/app/shared/markdown/markdown.service.d.ts +1 -0
  47. package/src/app/shared/markdown/testing/markdown.testing.module.d.ts +1 -2
  48. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +4 -2
  49. package/src/app/shared/named-filter/named-filter.model.d.ts +2 -2
  50. package/src/app/shared/shared.module.d.ts +3 -2
  51. package/src/app/social/user-event/user-event.model.d.ts +2 -2
  52. package/src/assets/manifest.json +1 -1
@@ -69,4 +69,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
69
69
  type: Injectable,
70
70
  args: [{ providedIn: 'root' }]
71
71
  }], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.TranslateService }, { type: i3.AccountService }] });
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uLnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvYWRtaW4vc2VydmljZXMvdmFsaWRhdG9yL3BlcnNvbi52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQW1DLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBVSxXQUFXLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFHcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7O0FBVTVGLE1BQU0sT0FBTyxzQkFHWCxTQUFRLG1CQUFzQjtJQUlsQjtJQUhaLFlBQ0UsV0FBK0IsRUFDL0IsU0FBMkIsRUFDakIsY0FBOEI7UUFFeEMsS0FBSyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUZwQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFHMUMsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVEsRUFBRSxJQUFRO1FBQ25DLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckMsTUFBTSxVQUFVLEdBQTZCO1lBQzNDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNSLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNoQixZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbEIsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFNB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QUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMxSCxDQUFDO0lBRUQsNkJBQTZCO0lBRW5CLGtCQUFrQixDQUFDLElBQVE7UUFDbkMsT0FBTztZQUNMLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLG9CQUFvQixFQUFFLElBQUk7WUFDMUIsR0FBRyxJQUFJO1NBQ1IsQ0FBQztJQUNKLENBQUM7d0dBbkVVLHNCQUFzQjs0R0FBdEIsc0JBQXNCLGNBRFQsTUFBTTs7NEZBQ25CLHNCQUFzQjtrQkFEbEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUGVyc29uLCBQZXJzb25VdGlscyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvbW9kZWwvcGVyc29uLm1vZGVsJztcbmltcG9ydCB7IFNoYXJlZFZhbGlkYXRvcnMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdmFsaWRhdG9yL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgU3RhdHVzSWRzIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9tb2RlbC9tb2RlbC5lbnVtJztcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7IEFwcFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3ZhbGlkYXRvci9iYXNlLnZhbGlkYXRvci5jbGFzcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVyc29uVmFsaWRhdG9yT3B0aW9ucyB7XG4gIHdpdGhBdmF0YXI/OiBib29sZWFuO1xuICB3aXRoVXNlcm5hbWU/OiBib29sZWFuO1xuICB3aXRoVXNlcm5hbWVFeHRyYW5ldD86IGJvb2xlYW47XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUGVyc29uVmFsaWRhdG9yU2VydmljZTxcbiAgVCBleHRlbmRzIFBlcnNvbiA9IFBlcnNvbixcbiAgTyBleHRlbmRzIFBlcnNvblZhbGlkYXRvck9wdGlvbnMgPSBQZXJzb25WYWxpZGF0b3JPcHRpb25zLFxuPiBleHRlbmRzIEFwcFZhbGlkYXRvclNlcnZpY2U8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGZvcm1CdWlsZGVyLCB0cmFuc2xhdGUpO1xuICB9XG5cbiAgZ2V0Rm9ybUdyb3VwQ29uZmlnKGRhdGE/OiBULCBvcHRzPzogTyk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIG9wdHMgPSB0aGlzLmZpbGxEZWZhdWx0T3B0aW9ucyhvcHRzKTtcblxuICAgIGNvbnN0IGZvcm1Db25maWc6IHsgW2tleTogc3RyaW5nXTogYW55W10gfSA9IHtcbiAgICAgIGlkOiBbJyddLFxuICAgICAgdXBkYXRlRGF0ZTogWycnXSxcbiAgICAgIGNyZWF0aW9uRGF0ZTogWycnXSxcbiAgICAgIGxhc3ROYW1lOiBbZGF0YT8ubGFzdE5hbWUgfHwgbnVsbCwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgyKV0pXSxcbiAgICAgIGZpcnN0TmFtZTogW2RhdGE/LmZpcnN0TmFtZSB8fCBudWxsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIpXSldLFxuICAgICAgZW1haWw6IFtkYXRhPy5lbWFpbCB8fCBudWxsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdKV0sXG4gICAgICBtYWluUHJvZmlsZTogW2RhdGE/Lm1haW5Qcm9maWxlIHx8IFBlcnNvblV0aWxzLmdldE1haW5Qcm9maWxlKGRhdGE/LnByb2ZpbGVzKSB8fCAnR1VFU1QnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHN0YXR1c0lkOiBbZGF0YT8uc3RhdHVzSWQgfHwgU3RhdHVzSWRzLlRFTVBPUkFSWSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBwdWJrZXk6IFtkYXRhPy5wdWJrZXkgfHwgbnVsbCwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBTaGFyZWRWYWxpZGF0b3JzLnB1YmtleV0pXSxcbiAgICB9O1xuXG4gICAgaWYgKG9wdHMud2l0aEF2YXRhcikge1xuICAgICAgZm9ybUNvbmZpZy5hdmF0YXIgPSBbKGRhdGEgJiYgZGF0YS5hdmF0YXIpIHx8IG51bGxdO1xuICAgIH1cbiAgICBpZiAob3B0cy53aXRoVXNlcm5hbWUpIHtcbiAgICAgIGZvcm1Db25maWcudXNlcm5hbWUgPSBbKGRhdGEgJiYgZGF0YS51c2VybmFtZSkgfHwgbnVsbCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMildO1xuICAgIH1cbiAgICBpZiAob3B0cy53aXRoVXNlcm5hbWVFeHRyYW5ldCkge1xuICAgICAgZm9ybUNvbmZpZy51c2VybmFtZUV4dHJhbmV0ID0gWyhkYXRhICYmIGRhdGEudXNlcm5hbWVFeHRyYW5ldCkgfHwgbnVsbCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMildO1xuICAgIH1cblxuICAgIC8vIEFkZCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIHRoaXMuYWNjb3VudFNlcnZpY2UuYWRkaXRpb25hbEZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiW3JlZ2lzdGVyLWZvcm1dIEFkZCBhZGRpdGlvbmFsIGZpZWxkIHtcIiArIGZpZWxkLm5hbWUgKyBcIn0gdG8gZm9ybVwiLCBmaWVsZCk7XG4gICAgICBmb3JtQ29uZmlnW2ZpZWxkLmtleV0gPSBbKGRhdGEgJiYgZGF0YVtmaWVsZC5rZXldKSB8fCBudWxsLCB0aGlzLmdldFZhbGlkYXRvcnMoZmllbGQpXTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmb3JtQ29uZmlnO1xuICB9XG5cbiAgZ2V0VmFsaWRhdG9ycyhmaWVsZDogRm9ybUZpZWxkRGVmaW5pdGlvbik6IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSB7XG4gICAgY29uc3QgdmFsaWRhdG9yRm5zOiBWYWxpZGF0b3JGbltdID0gW107XG4gICAgaWYgKGZpZWxkLmV4dHJhICYmIGZpZWxkLmV4dHJhLmFjY291bnQgJiYgZmllbGQuZXh0cmEuYWNjb3VudC5yZXF1aXJlZCkge1xuICAgICAgdmFsaWRhdG9yRm5zLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgfVxuICAgIGlmIChmaWVsZC50eXBlID09PSAnZW50aXR5Jykge1xuICAgICAgdmFsaWRhdG9yRm5zLnB1c2goU2hhcmVkVmFsaWRhdG9ycy5lbnRpdHkpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3JGbnMubGVuZ3RoID8gVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvckZucykgOiB2YWxpZGF0b3JGbnMubGVuZ3RoID09PSAxID8gdmFsaWRhdG9yRm5zWzBdIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgZmlsbERlZmF1bHRPcHRpb25zKG9wdHM/OiBPKTogTyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpdGhBdmF0YXI6IHRydWUsXG4gICAgICB3aXRoVXNlcm5hbWU6IHRydWUsXG4gICAgICB3aXRoVXNlcm5hbWVFeHRyYW5ldDogdHJ1ZSxcbiAgICAgIC4uLm9wdHMsXG4gICAgfTtcbiAgfVxufVxuIl19
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uLnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvYWRtaW4vc2VydmljZXMvdmFsaWRhdG9yL3BlcnNvbi52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQW1DLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBVSxXQUFXLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFHcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7O0FBVTVGLE1BQU0sT0FBTyxzQkFBNkcsU0FBUSxtQkFHakk7SUFJYTtJQUhaLFlBQ0UsV0FBK0IsRUFDL0IsU0FBMkIsRUFDakIsY0FBOEI7UUFFeEMsS0FBSyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUZwQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFHMUMsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVEsRUFBRSxJQUFRO1FBQ25DLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckMsTUFBTSxVQUFVLEdBQTZCO1lBQzNDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNSLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNoQixZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbEIsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFNB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QUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMxSCxDQUFDO0lBRUQsNkJBQTZCO0lBRW5CLGtCQUFrQixDQUFDLElBQVE7UUFDbkMsT0FBTztZQUNMLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLG9CQUFvQixFQUFFLElBQUk7WUFDMUIsR0FBRyxJQUFJO1NBQ1IsQ0FBQztJQUNKLENBQUM7d0dBbkVVLHNCQUFzQjs0R0FBdEIsc0JBQXNCLGNBRFQsTUFBTTs7NEZBQ25CLHNCQUFzQjtrQkFEbEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUGVyc29uLCBQZXJzb25VdGlscyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvbW9kZWwvcGVyc29uLm1vZGVsJztcbmltcG9ydCB7IFNoYXJlZFZhbGlkYXRvcnMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdmFsaWRhdG9yL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgU3RhdHVzSWRzIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9tb2RlbC9tb2RlbC5lbnVtJztcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7IEFwcFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3ZhbGlkYXRvci9iYXNlLnZhbGlkYXRvci5jbGFzcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVyc29uVmFsaWRhdG9yT3B0aW9ucyB7XG4gIHdpdGhBdmF0YXI/OiBib29sZWFuO1xuICB3aXRoVXNlcm5hbWU/OiBib29sZWFuO1xuICB3aXRoVXNlcm5hbWVFeHRyYW5ldD86IGJvb2xlYW47XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUGVyc29uVmFsaWRhdG9yU2VydmljZTxUIGV4dGVuZHMgUGVyc29uID0gUGVyc29uLCBPIGV4dGVuZHMgUGVyc29uVmFsaWRhdG9yT3B0aW9ucyA9IFBlcnNvblZhbGlkYXRvck9wdGlvbnM+IGV4dGVuZHMgQXBwVmFsaWRhdG9yU2VydmljZTxcbiAgVCxcbiAgT1xuPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoZm9ybUJ1aWxkZXIsIHRyYW5zbGF0ZSk7XG4gIH1cblxuICBnZXRGb3JtR3JvdXBDb25maWcoZGF0YT86IFQsIG9wdHM/OiBPKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgb3B0cyA9IHRoaXMuZmlsbERlZmF1bHRPcHRpb25zKG9wdHMpO1xuXG4gICAgY29uc3QgZm9ybUNvbmZpZzogeyBba2V5OiBzdHJpbmddOiBhbnlbXSB9ID0ge1xuICAgICAgaWQ6IFsnJ10sXG4gICAgICB1cGRhdGVEYXRlOiBbJyddLFxuICAgICAgY3JlYXRpb25EYXRlOiBbJyddLFxuICAgICAgbGFzdE5hbWU6IFtkYXRhPy5sYXN0TmFtZSB8fCBudWxsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIpXSldLFxuICAgICAgZmlyc3ROYW1lOiBbZGF0YT8uZmlyc3ROYW1lIHx8IG51bGwsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMildKV0sXG4gICAgICBlbWFpbDogW2RhdGE/LmVtYWlsIHx8IG51bGwsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0pXSxcbiAgICAgIG1haW5Qcm9maWxlOiBbZGF0YT8ubWFpblByb2ZpbGUgfHwgUGVyc29uVXRpbHMuZ2V0TWFpblByb2ZpbGUoZGF0YT8ucHJvZmlsZXMpIHx8ICdHVUVTVCcsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgc3RhdHVzSWQ6IFtkYXRhPy5zdGF0dXNJZCB8fCBTdGF0dXNJZHMuVEVNUE9SQVJZLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHB1YmtleTogW2RhdGE/LnB1YmtleSB8fCBudWxsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFNoYXJlZFZhbGlkYXRvcnMucHVia2V5XSldLFxuICAgIH07XG5cbiAgICBpZiAob3B0cy53aXRoQXZhdGFyKSB7XG4gICAgICBmb3JtQ29uZmlnLmF2YXRhciA9IFsoZGF0YSAmJiBkYXRhLmF2YXRhcikgfHwgbnVsbF07XG4gICAgfVxuICAgIGlmIChvcHRzLndpdGhVc2VybmFtZSkge1xuICAgICAgZm9ybUNvbmZpZy51c2VybmFtZSA9IFsoZGF0YSAmJiBkYXRhLnVzZXJuYW1lKSB8fCBudWxsLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgyKV07XG4gICAgfVxuICAgIGlmIChvcHRzLndpdGhVc2VybmFtZUV4dHJhbmV0KSB7XG4gICAgICBmb3JtQ29uZmlnLnVzZXJuYW1lRXh0cmFuZXQgPSBbKGRhdGEgJiYgZGF0YS51c2VybmFtZUV4dHJhbmV0KSB8fCBudWxsLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgyKV07XG4gICAgfVxuXG4gICAgLy8gQWRkIGFkZGl0aW9uYWwgZmllbGRzXG4gICAgdGhpcy5hY2NvdW50U2VydmljZS5hZGRpdGlvbmFsRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJbcmVnaXN0ZXItZm9ybV0gQWRkIGFkZGl0aW9uYWwgZmllbGQge1wiICsgZmllbGQubmFtZSArIFwifSB0byBmb3JtXCIsIGZpZWxkKTtcbiAgICAgIGZvcm1Db25maWdbZmllbGQua2V5XSA9IFsoZGF0YSAmJiBkYXRhW2ZpZWxkLmtleV0pIHx8IG51bGwsIHRoaXMuZ2V0VmFsaWRhdG9ycyhmaWVsZCldO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZvcm1Db25maWc7XG4gIH1cblxuICBnZXRWYWxpZGF0b3JzKGZpZWxkOiBGb3JtRmllbGREZWZpbml0aW9uKTogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdIHtcbiAgICBjb25zdCB2YWxpZGF0b3JGbnM6IFZhbGlkYXRvckZuW10gPSBbXTtcbiAgICBpZiAoZmllbGQuZXh0cmEgJiYgZmllbGQuZXh0cmEuYWNjb3VudCAmJiBmaWVsZC5leHRyYS5hY2NvdW50LnJlcXVpcmVkKSB7XG4gICAgICB2YWxpZGF0b3JGbnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICB9XG4gICAgaWYgKGZpZWxkLnR5cGUgPT09ICdlbnRpdHknKSB7XG4gICAgICB2YWxpZGF0b3JGbnMucHVzaChTaGFyZWRWYWxpZGF0b3JzLmVudGl0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvckZucy5sZW5ndGggPyBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9yRm5zKSA6IHZhbGlkYXRvckZucy5sZW5ndGggPT09IDEgPyB2YWxpZGF0b3JGbnNbMF0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBmaWxsRGVmYXVsdE9wdGlvbnMob3B0cz86IE8pOiBPIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2l0aEF2YXRhcjogdHJ1ZSxcbiAgICAgIHdpdGhVc2VybmFtZTogdHJ1ZSxcbiAgICAgIHdpdGhVc2VybmFtZUV4dHJhbmV0OiB0cnVlLFxuICAgICAgLi4ub3B0cyxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -10,8 +10,9 @@ import * as i3 from "../services/config.service";
10
10
  import * as i4 from "@angular/common";
11
11
  import * as i5 from "ngx-markdown";
12
12
  import * as i6 from "@angular/material/icon";
13
- import * as i7 from "../../shared/pipes/arrays.pipe";
14
- import * as i8 from "../../shared/pipes/string.pipes";
13
+ import * as i7 from "../../shared/markdown/markdown.directive";
14
+ import * as i8 from "../../shared/pipes/arrays.pipe";
15
+ import * as i9 from "../../shared/pipes/string.pipes";
15
16
  export const APP_ABOUT_DEVELOPERS = new InjectionToken('aboutDevelopers');
16
17
  export const APP_ABOUT_PARTNERS = new InjectionToken('aboutPartners');
17
18
  export class AboutModal {
@@ -62,7 +63,7 @@ export class AboutModal {
62
63
  this.reportIssueUrl = config?.getProperty(CORE_CONFIG_OPTIONS.REPORT_ISSUE_URL) || this.environment.reportIssueUrl;
63
64
  }
64
65
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AboutModal, deps: [{ token: i1.TranslateService }, { token: i2.ModalController }, { token: i3.ConfigService }, { token: ENVIRONMENT, optional: true }, { token: APP_ABOUT_DEVELOPERS, optional: true }, { token: APP_ABOUT_PARTNERS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
65
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AboutModal, selector: "app-about-modal", ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"light\">\n <ion-title>\n {{ 'ABOUT.TITLE' | translate }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"close()\" visible-xs visible-sm visible-mobile>\n {{ 'COMMON.BTN_CLOSE' | translate }}\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <ion-list lines=\"none\">\n <!-- Peer info -->\n @if (config$ | async; as config) {\n <ion-item>\n <span slot=\"start\">&nbsp;</span>\n <ion-label class=\"ion-text-wrap\">\n <h2>\n <b>{{ config.label | capitalize }}</b>\n @if (config.name) {\n -\n <span [innerHTML]=\"config.name\"></span>\n }\n </h2>\n\n @if (config.description) {\n <p>\n <markdown [data]=\"config.description\" emoji></markdown>\n </p>\n }\n </ion-label>\n </ion-item>\n }\n\n <!-- Version info -->\n <ion-item>\n <span slot=\"start\">&nbsp;</span>\n <ion-label class=\"ion-text-wrap\">\n <h2>\n <small *ngIf=\"name\">{{ 'ABOUT.POWERED_BY' | translate }}</small>\n {{ name }}\n <span *ngIf=\"version\" [innerHTML]=\"'ABOUT.VERSION' | translate: { version: version }\"></span>\n </h2>\n <p [innerHTML]=\"'ABOUT.LICENSE' | translate\"></p>\n </ion-label>\n </ion-item>\n\n <!-- Help -->\n <ion-item *ngIf=\"forumUrl || helpUrl\">\n <mat-icon slot=\"start\">help_outline</mat-icon>\n <ion-label>\n <p>\n {{ 'ABOUT.HELP' | translate }}\n </p>\n <p>\n <ion-button fill=\"solid\" color=\"accent\" href=\"{{ helpUrl }}\" target=\"help\" size=\"default\">\n <mat-icon slot=\"start\">description</mat-icon>\n <ion-text translate>ABOUT.USER_MANUAL</ion-text>\n </ion-button>\n <ion-button fill=\"solid\" color=\"secondary\" href=\"{{ forumUrl }}\" target=\"forum\" size=\"default\">\n <ion-icon slot=\"start\" name=\"chatbubbles\"></ion-icon>\n <ion-text translate>ABOUT.FORUM</ion-text>\n </ion-button>\n </p>\n </ion-label>\n </ion-item>\n\n <!-- Report issue -->\n <ion-item *ngIf=\"reportIssueUrl\">\n <ion-icon slot=\"start\" name=\"bug\" color=\"dark\"></ion-icon>\n <ion-label>\n <p>\n {{ 'ABOUT.REPORT_ISSUE' | translate }}\n </p>\n <p>\n <a color=\"primary\" href=\"{{ reportIssueUrl }}\" target=\"_system\" translate>ABOUT.BTN_REPORT_ISSUE</a>\n </p>\n </ion-label>\n </ion-item>\n\n <!-- Source code -->\n <ion-item *ngIf=\"sourceUrl\">\n <ion-icon slot=\"start\" name=\"code\" color=\"dark\"></ion-icon>\n <ion-label>\n <p>\n {{ 'ABOUT.SOURCE_CODE' | translate }}\n </p>\n <p>\n <a color=\"primary\" href=\"{{ sourceUrl }}\" target=\"_system\">{{ sourceUrl }}</a>\n </p>\n </ion-label>\n </ion-item>\n\n <!-- Developers -->\n <ion-item *ngIf=\"developers | isNotEmptyArray\">\n <ion-icon slot=\"start\" name=\"people\" color=\"dark\"></ion-icon>\n <ion-label>\n <p>\n {{ 'ABOUT.DEVELOPED_BY' | translate }}\n </p>\n <ion-list lines=\"none\">\n <ion-item *ngFor=\"let item of developers\" class=\"ion-no-padding\">\n <ion-label>\n <p>\n <a color=\"primary\" href=\"{{ item.siteUrl }}\" target=\"_system\">{{ item.name || item.label }}</a>\n </p>\n </ion-label>\n <ion-img slot=\"end\" [src]=\"item.logo\" />\n </ion-item>\n </ion-list>\n </ion-label>\n </ion-item>\n\n <!-- Partners -->\n <ion-item class=\"item-partners\" *ngIf=\"partners | isNotEmptyArray\">\n <ion-icon slot=\"start\" name=\"megaphone\" color=\"dark\"></ion-icon>\n <ion-text>\n <p>{{ 'ABOUT.PARTNERS' | translate }}</p>\n <p>\n <a *ngFor=\"let item of partners\" href=\"{{ item.siteUrl }}\" class=\"partners\" target=\"_system\">\n <img *ngIf=\"item.logo; else partnerName\" [src]=\"item.logo\" [alt]=\"item.label\" />\n <ng-template #partnerName>\n <ion-text>{{ item.label }}</ion-text>\n </ng-template>\n </a>\n </p>\n </ion-text>\n </ion-item>\n </ion-list>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{ 'COMMON.BTN_CLOSE' | translate }}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", styles: [".item-partners ion-text{height:auto}.item-partners ion-text p:last-child{display:flex;flex-wrap:wrap;flex-direction:row;justify-content:space-between}.item-partners ion-text p:last-child a{padding:2px}.item-partners ion-text p:last-child a img{text-align:center;display:inline-block;max-height:40px!important}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i7.NotEmptyArrayPipe, name: "isNotEmptyArray" }, { kind: "pipe", type: i8.CapitalizePipe, name: "capitalize" }] });
66
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AboutModal, selector: "app-about-modal", ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"light\">\n <ion-title>\n {{ 'ABOUT.TITLE' | translate }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"close()\" visible-xs visible-sm visible-mobile>\n {{ 'COMMON.BTN_CLOSE' | translate }}\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <ion-list lines=\"none\">\n <!-- Peer info -->\n @if (config$ | async; as config) {\n <ion-item>\n <span slot=\"start\">&nbsp;</span>\n <ion-label class=\"ion-text-wrap\">\n <h2>\n <b>{{ config.label | capitalize }}</b>\n @if (config.name) {\n -\n <span [innerHTML]=\"config.name\"></span>\n }\n </h2>\n\n @if (config.description) {\n <p>\n <markdown [data]=\"config.description\" emoji></markdown>\n </p>\n }\n </ion-label>\n </ion-item>\n }\n\n <!-- Version info -->\n <ion-item>\n <span slot=\"start\">&nbsp;</span>\n <ion-label class=\"ion-text-wrap\">\n <h2>\n <small *ngIf=\"name\">{{ 'ABOUT.POWERED_BY' | translate }}</small>\n {{ name }}\n <span *ngIf=\"version\" [innerHTML]=\"'ABOUT.VERSION' | translate: { version: version }\"></span>\n </h2>\n <p [innerHTML]=\"'ABOUT.LICENSE' | translate\"></p>\n </ion-label>\n </ion-item>\n\n <!-- Help -->\n <ion-item *ngIf=\"forumUrl || helpUrl\">\n <mat-icon slot=\"start\">help_outline</mat-icon>\n <ion-label>\n <p>\n {{ 'ABOUT.HELP' | translate }}\n </p>\n <p>\n <ion-button fill=\"solid\" color=\"accent\" href=\"{{ helpUrl }}\" target=\"help\" size=\"default\">\n <mat-icon slot=\"start\">description</mat-icon>\n <ion-text translate>ABOUT.USER_MANUAL</ion-text>\n </ion-button>\n <ion-button fill=\"solid\" color=\"secondary\" href=\"{{ forumUrl }}\" target=\"forum\" size=\"default\">\n <ion-icon slot=\"start\" name=\"chatbubbles\"></ion-icon>\n <ion-text translate>ABOUT.FORUM</ion-text>\n </ion-button>\n </p>\n </ion-label>\n </ion-item>\n\n <!-- Report issue -->\n <ion-item *ngIf=\"reportIssueUrl\">\n <ion-icon slot=\"start\" name=\"bug\" color=\"dark\"></ion-icon>\n <ion-label>\n <p>\n {{ 'ABOUT.REPORT_ISSUE' | translate }}\n </p>\n <p>\n <a color=\"primary\" href=\"{{ reportIssueUrl }}\" target=\"_system\" translate>ABOUT.BTN_REPORT_ISSUE</a>\n </p>\n </ion-label>\n </ion-item>\n\n <!-- Source code -->\n <ion-item *ngIf=\"sourceUrl\">\n <ion-icon slot=\"start\" name=\"code\" color=\"dark\"></ion-icon>\n <ion-label>\n <p>\n {{ 'ABOUT.SOURCE_CODE' | translate }}\n </p>\n <p>\n <a color=\"primary\" href=\"{{ sourceUrl }}\" target=\"_system\">{{ sourceUrl }}</a>\n </p>\n </ion-label>\n </ion-item>\n\n <!-- Developers -->\n <ion-item *ngIf=\"developers | isNotEmptyArray\">\n <ion-icon slot=\"start\" name=\"people\" color=\"dark\"></ion-icon>\n <ion-label>\n <p>\n {{ 'ABOUT.DEVELOPED_BY' | translate }}\n </p>\n <ion-list lines=\"none\">\n <ion-item *ngFor=\"let item of developers\" class=\"ion-no-padding\">\n <ion-label>\n <p>\n <a color=\"primary\" href=\"{{ item.siteUrl }}\" target=\"_system\">{{ item.name || item.label }}</a>\n </p>\n </ion-label>\n <ion-img slot=\"end\" [src]=\"item.logo\" />\n </ion-item>\n </ion-list>\n </ion-label>\n </ion-item>\n\n <!-- Partners -->\n <ion-item class=\"item-partners\" *ngIf=\"partners | isNotEmptyArray\">\n <ion-icon slot=\"start\" name=\"megaphone\" color=\"dark\"></ion-icon>\n <ion-text>\n <p>{{ 'ABOUT.PARTNERS' | translate }}</p>\n <p>\n <a *ngFor=\"let item of partners\" href=\"{{ item.siteUrl }}\" class=\"partners\" target=\"_system\">\n <img *ngIf=\"item.logo; else partnerName\" [src]=\"item.logo\" [alt]=\"item.label\" />\n <ng-template #partnerName>\n <ion-text>{{ item.label }}</ion-text>\n </ng-template>\n </a>\n </p>\n </ion-text>\n </ion-item>\n </ion-list>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{ 'COMMON.BTN_CLOSE' | translate }}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", styles: [".item-partners ion-text{height:auto}.item-partners ion-text p:last-child{display:flex;flex-wrap:wrap;flex-direction:row;justify-content:space-between}.item-partners ion-text p:last-child a{padding:2px}.item-partners ion-text p:last-child a img{text-align:center;display:inline-block;max-height:40px!important}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.MarkdownDirective, selector: "markdown,[markdown]" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i8.NotEmptyArrayPipe, name: "isNotEmptyArray" }, { kind: "pipe", type: i9.CapitalizePipe, name: "capitalize" }] });
66
67
  }
67
68
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AboutModal, decorators: [{
68
69
  type: Component,
@@ -83,4 +84,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
83
84
  type: Inject,
84
85
  args: [APP_ABOUT_PARTNERS]
85
86
  }] }] });
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJvdXQubW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvYWJvdXQvYWJvdXQubW9kYWwudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvYWJvdXQvYWJvdXQubW9kYWwuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQWEsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUsvRCxPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7O0FBRXJFLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksY0FBYyxDQUF3QixpQkFBaUIsQ0FBQyxDQUFDO0FBQ2pHLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUF3QixlQUFlLENBQUMsQ0FBQztBQU83RixNQUFNLE9BQU8sVUFBVTtJQVlUO0lBQ0E7SUFDQTtJQUNpQztJQUNNO0lBQ0Y7SUFoQnhDLElBQUksQ0FBUztJQUNiLE9BQU8sQ0FBUztJQUNoQixTQUFTLENBQVM7SUFDbEIsT0FBTyxDQUE0QjtJQUM1QyxjQUFjLENBQVM7SUFDdkIsUUFBUSxDQUFTO0lBQ2pCLE9BQU8sQ0FBUztJQUVDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRXBELFlBQ1ksU0FBMkIsRUFDM0IsZUFBZ0MsRUFDaEMsYUFBNEIsRUFDSyxXQUFXLEVBQ0wsVUFBaUMsRUFDbkMsUUFBK0I7UUFMcEUsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ0ssZ0JBQVcsR0FBWCxXQUFXLENBQUE7UUFDTCxlQUFVLEdBQVYsVUFBVSxDQUF1QjtRQUNuQyxhQUFRLEdBQVIsUUFBUSxDQUF1QjtRQUU5RSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzdCLGtEQUFrRDtZQUNsRCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUkscUJBQXFCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO1FBQ3hHLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFDdEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQztRQUNoRSxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQ3BELElBQUksQ0FBQyxPQUFPLEdBQUcsV0FBVyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBRXBDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCwrQkFBK0I7SUFFckIsU0FBUyxDQUFDLE1BQXNCO1FBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxFQUFFLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztRQUNoRyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxXQUFXLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDN0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLEVBQUUsV0FBVyxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUM7SUFDckgsQ0FBQzt3R0FoRFUsVUFBVSw4R0FlQyxXQUFXLDZCQUNYLG9CQUFvQiw2QkFDcEIsa0JBQWtCOzRGQWpCN0IsVUFBVSx1RENuQnZCLGl3SkFpSkE7OzRGRDlIYSxVQUFVO2tCQUx0QixTQUFTOytCQUNFLGlCQUFpQjs7MEJBbUJ4QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLFdBQVc7OzBCQUM5QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLG9CQUFvQjs7MEJBQ3ZDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdGlvblRva2VuLCBPbkRlc3Ryb3ksIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBjYXBpdGFsaXplRmlyc3RMZXR0ZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IERlcGFydG1lbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9kZXBhcnRtZW50Lm1vZGVsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ09SRV9DT05GSUdfT1BUSU9OUyB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5cbmV4cG9ydCBjb25zdCBBUFBfQUJPVVRfREVWRUxPUEVSUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxQYXJ0aWFsPERlcGFydG1lbnQ+W10+KCdhYm91dERldmVsb3BlcnMnKTtcbmV4cG9ydCBjb25zdCBBUFBfQUJPVVRfUEFSVE5FUlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48UGFydGlhbDxEZXBhcnRtZW50PltdPignYWJvdXRQYXJ0bmVycycpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYWJvdXQtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWJvdXQubW9kYWwuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Fib3V0Lm1vZGFsLnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQWJvdXRNb2RhbCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBzb3VyY2VVcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgY29uZmlnJDogT2JzZXJ2YWJsZTxDb25maWd1cmF0aW9uPjtcbiAgcmVwb3J0SXNzdWVVcmw6IHN0cmluZztcbiAgZm9ydW1Vcmw6IHN0cmluZztcbiAgaGVscFVybDogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBtb2RhbENvbnRyb2xsZXI6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfQUJPVVRfREVWRUxPUEVSUykgcHVibGljIGRldmVsb3BlcnM6IFBhcnRpYWw8RGVwYXJ0bWVudD5bXSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9BQk9VVF9QQVJUTkVSUykgcHVibGljIHBhcnRuZXJzOiBQYXJ0aWFsPERlcGFydG1lbnQ+W11cbiAgKSB7XG4gICAgdGhpcy5uYW1lID0gdHJhbnNsYXRlLmluc3RhbnQoJ0FQUF9OQU1FJyk7XG4gICAgaWYgKHRoaXMubmFtZSA9PT0gJ0FQUF9OQU1FJykge1xuICAgICAgLy8gTm90IHRyYW5zbGF0ZWQ6IHVzZSBuYW1lIGZyb20gdGhlIGVudmlyb25uZW1lbnRcbiAgICAgIHRoaXMubmFtZSA9IChlbnZpcm9ubWVudCAmJiBlbnZpcm9ubWVudC5uYW1lICYmIGNhcGl0YWxpemVGaXJzdExldHRlcihlbnZpcm9ubWVudC5uYW1lKSkgfHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLnZlcnNpb24gPSBlbnZpcm9ubWVudCAmJiBlbnZpcm9ubWVudC52ZXJzaW9uO1xuICAgIHRoaXMuc291cmNlVXJsID0gZW52aXJvbm1lbnQgJiYgZW52aXJvbm1lbnQuc291cmNlVXJsO1xuICAgIHRoaXMucmVwb3J0SXNzdWVVcmwgPSBlbnZpcm9ubWVudCAmJiBlbnZpcm9ubWVudC5yZXBvcnRJc3N1ZVVybDtcbiAgICB0aGlzLmZvcnVtVXJsID0gZW52aXJvbm1lbnQgJiYgZW52aXJvbm1lbnQuZm9ydW1Vcmw7XG4gICAgdGhpcy5oZWxwVXJsID0gZW52aXJvbm1lbnQgJiYgZW52aXJvbm1lbnQuaGVscFVybDtcbiAgICB0aGlzLmNvbmZpZyQgPSBjb25maWdTZXJ2aWNlLmNvbmZpZztcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5jb25maWckLnN1YnNjcmliZSgoY29uZmlnKSA9PiB0aGlzLnNldENvbmZpZyhjb25maWcpKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKCkge1xuICAgIGF3YWl0IHRoaXMubW9kYWxDb250cm9sbGVyLmRpc21pc3MoKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgc2V0Q29uZmlnKGNvbmZpZz86IENvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLmZvcnVtVXJsID0gY29uZmlnPy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkZPUlVNX1VSTCkgfHwgdGhpcy5lbnZpcm9ubWVudC5mb3J1bVVybDtcbiAgICB0aGlzLmhlbHBVcmwgPSBjb25maWc/LmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuSEVMUF9VUkwpIHx8IHRoaXMuZW52aXJvbm1lbnQuaGVscFVybDtcbiAgICB0aGlzLnJlcG9ydElzc3VlVXJsID0gY29uZmlnPy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLlJFUE9SVF9JU1NVRV9VUkwpIHx8IHRoaXMuZW52aXJvbm1lbnQucmVwb3J0SXNzdWVVcmw7XG4gIH1cbn1cbiIsIjxpb24taGVhZGVyPlxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJsaWdodFwiPlxuICAgIDxpb24tdGl0bGU+XG4gICAgICB7eyAnQUJPVVQuVElUTEUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9pb24tdGl0bGU+XG5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImNsb3NlKClcIiB2aXNpYmxlLXhzIHZpc2libGUtc20gdmlzaWJsZS1tb2JpbGU+XG4gICAgICAgIHt7ICdDT01NT04uQlROX0NMT1NFJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG5cbjxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gIDxpb24tbGlzdCBsaW5lcz1cIm5vbmVcIj5cbiAgICA8IS0tIFBlZXIgaW5mbyAtLT5cbiAgICBAaWYgKGNvbmZpZyQgfCBhc3luYzsgYXMgY29uZmlnKSB7XG4gICAgICA8aW9uLWl0ZW0+XG4gICAgICAgIDxzcGFuIHNsb3Q9XCJzdGFydFwiPiZuYnNwOzwvc3Bhbj5cbiAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImlvbi10ZXh0LXdyYXBcIj5cbiAgICAgICAgICA8aDI+XG4gICAgICAgICAgICA8Yj57eyBjb25maWcubGFiZWwgfCBjYXBpdGFsaXplIH19PC9iPlxuICAgICAgICAgICAgQGlmIChjb25maWcubmFtZSkge1xuICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiY29uZmlnLm5hbWVcIj48L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9oMj5cblxuICAgICAgICAgIEBpZiAoY29uZmlnLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgPG1hcmtkb3duIFtkYXRhXT1cImNvbmZpZy5kZXNjcmlwdGlvblwiIGVtb2ppPjwvbWFya2Rvd24+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgfVxuICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgIDwvaW9uLWl0ZW0+XG4gICAgfVxuXG4gICAgPCEtLSBWZXJzaW9uIGluZm8gLS0+XG4gICAgPGlvbi1pdGVtPlxuICAgICAgPHNwYW4gc2xvdD1cInN0YXJ0XCI+Jm5ic3A7PC9zcGFuPlxuICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImlvbi10ZXh0LXdyYXBcIj5cbiAgICAgICAgPGgyPlxuICAgICAgICAgIDxzbWFsbCAqbmdJZj1cIm5hbWVcIj57eyAnQUJPVVQuUE9XRVJFRF9CWScgfCB0cmFuc2xhdGUgfX08L3NtYWxsPlxuICAgICAgICAgIHt7IG5hbWUgfX1cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInZlcnNpb25cIiBbaW5uZXJIVE1MXT1cIidBQk9VVC5WRVJTSU9OJyB8IHRyYW5zbGF0ZTogeyB2ZXJzaW9uOiB2ZXJzaW9uIH1cIj48L3NwYW4+XG4gICAgICAgIDwvaDI+XG4gICAgICAgIDxwIFtpbm5lckhUTUxdPVwiJ0FCT1VULkxJQ0VOU0UnIHwgdHJhbnNsYXRlXCI+PC9wPlxuICAgICAgPC9pb24tbGFiZWw+XG4gICAgPC9pb24taXRlbT5cblxuICAgIDwhLS0gSGVscCAtLT5cbiAgICA8aW9uLWl0ZW0gKm5nSWY9XCJmb3J1bVVybCB8fCBoZWxwVXJsXCI+XG4gICAgICA8bWF0LWljb24gc2xvdD1cInN0YXJ0XCI+aGVscF9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgIDxpb24tbGFiZWw+XG4gICAgICAgIDxwPlxuICAgICAgICAgIHt7ICdBQk9VVC5IRUxQJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJzb2xpZFwiIGNvbG9yPVwiYWNjZW50XCIgaHJlZj1cInt7IGhlbHBVcmwgfX1cIiB0YXJnZXQ9XCJoZWxwXCIgc2l6ZT1cImRlZmF1bHRcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBzbG90PVwic3RhcnRcIj5kZXNjcmlwdGlvbjwvbWF0LWljb24+XG4gICAgICAgICAgICA8aW9uLXRleHQgdHJhbnNsYXRlPkFCT1VULlVTRVJfTUFOVUFMPC9pb24tdGV4dD5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBocmVmPVwie3sgZm9ydW1VcmwgfX1cIiB0YXJnZXQ9XCJmb3J1bVwiIHNpemU9XCJkZWZhdWx0XCI+XG4gICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cImNoYXRidWJibGVzXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDxpb24tdGV4dCB0cmFuc2xhdGU+QUJPVVQuRk9SVU08L2lvbi10ZXh0PlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9wPlxuICAgICAgPC9pb24tbGFiZWw+XG4gICAgPC9pb24taXRlbT5cblxuICAgIDwhLS0gUmVwb3J0IGlzc3VlIC0tPlxuICAgIDxpb24taXRlbSAqbmdJZj1cInJlcG9ydElzc3VlVXJsXCI+XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cImJ1Z1wiIGNvbG9yPVwiZGFya1wiPjwvaW9uLWljb24+XG4gICAgICA8aW9uLWxhYmVsPlxuICAgICAgICA8cD5cbiAgICAgICAgICB7eyAnQUJPVVQuUkVQT1JUX0lTU1VFJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxhIGNvbG9yPVwicHJpbWFyeVwiIGhyZWY9XCJ7eyByZXBvcnRJc3N1ZVVybCB9fVwiIHRhcmdldD1cIl9zeXN0ZW1cIiB0cmFuc2xhdGU+QUJPVVQuQlROX1JFUE9SVF9JU1NVRTwvYT5cbiAgICAgICAgPC9wPlxuICAgICAgPC9pb24tbGFiZWw+XG4gICAgPC9pb24taXRlbT5cblxuICAgIDwhLS0gU291cmNlIGNvZGUgLS0+XG4gICAgPGlvbi1pdGVtICpuZ0lmPVwic291cmNlVXJsXCI+XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cImNvZGVcIiBjb2xvcj1cImRhcmtcIj48L2lvbi1pY29uPlxuICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAgPHA+XG4gICAgICAgICAge3sgJ0FCT1VULlNPVVJDRV9DT0RFJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxhIGNvbG9yPVwicHJpbWFyeVwiIGhyZWY9XCJ7eyBzb3VyY2VVcmwgfX1cIiB0YXJnZXQ9XCJfc3lzdGVtXCI+e3sgc291cmNlVXJsIH19PC9hPlxuICAgICAgICA8L3A+XG4gICAgICA8L2lvbi1sYWJlbD5cbiAgICA8L2lvbi1pdGVtPlxuXG4gICAgPCEtLSBEZXZlbG9wZXJzIC0tPlxuICAgIDxpb24taXRlbSAqbmdJZj1cImRldmVsb3BlcnMgfCBpc05vdEVtcHR5QXJyYXlcIj5cbiAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwicGVvcGxlXCIgY29sb3I9XCJkYXJrXCI+PC9pb24taWNvbj5cbiAgICAgIDxpb24tbGFiZWw+XG4gICAgICAgIDxwPlxuICAgICAgICAgIHt7ICdBQk9VVC5ERVZFTE9QRURfQlknIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPGlvbi1saXN0IGxpbmVzPVwibm9uZVwiPlxuICAgICAgICAgIDxpb24taXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkZXZlbG9wZXJzXCIgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgPGEgY29sb3I9XCJwcmltYXJ5XCIgaHJlZj1cInt7IGl0ZW0uc2l0ZVVybCB9fVwiIHRhcmdldD1cIl9zeXN0ZW1cIj57eyBpdGVtLm5hbWUgfHwgaXRlbS5sYWJlbCB9fTwvYT5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICA8aW9uLWltZyBzbG90PVwiZW5kXCIgW3NyY109XCJpdGVtLmxvZ29cIiAvPlxuICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgIDwvaW9uLWxpc3Q+XG4gICAgICA8L2lvbi1sYWJlbD5cbiAgICA8L2lvbi1pdGVtPlxuXG4gICAgPCEtLSBQYXJ0bmVycyAtLT5cbiAgICA8aW9uLWl0ZW0gY2xhc3M9XCJpdGVtLXBhcnRuZXJzXCIgKm5nSWY9XCJwYXJ0bmVycyB8IGlzTm90RW1wdHlBcnJheVwiPlxuICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJtZWdhcGhvbmVcIiBjb2xvcj1cImRhcmtcIj48L2lvbi1pY29uPlxuICAgICAgPGlvbi10ZXh0PlxuICAgICAgICA8cD57eyAnQUJPVVQuUEFSVE5FUlMnIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICA8YSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBwYXJ0bmVyc1wiIGhyZWY9XCJ7eyBpdGVtLnNpdGVVcmwgfX1cIiBjbGFzcz1cInBhcnRuZXJzXCIgdGFyZ2V0PVwiX3N5c3RlbVwiPlxuICAgICAgICAgICAgPGltZyAqbmdJZj1cIml0ZW0ubG9nbzsgZWxzZSBwYXJ0bmVyTmFtZVwiIFtzcmNdPVwiaXRlbS5sb2dvXCIgW2FsdF09XCJpdGVtLmxhYmVsXCIgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGFydG5lck5hbWU+XG4gICAgICAgICAgICAgIDxpb24tdGV4dD57eyBpdGVtLmxhYmVsIH19PC9pb24tdGV4dD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L3A+XG4gICAgICA8L2lvbi10ZXh0PlxuICAgIDwvaW9uLWl0ZW0+XG4gIDwvaW9uLWxpc3Q+XG48L2lvbi1jb250ZW50PlxuXG48aW9uLWZvb3RlciBoaWRkZW4teHMgaGlkZGVuLXNtIGhpZGRlbi1tb2JpbGU+XG4gIDxpb24tdG9vbGJhcj5cbiAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCIgbm93cmFwPlxuICAgICAgPGlvbi1jb2w+PC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIChjbGljayk9XCJjbG9zZSgpXCI+e3sgJ0NPTU1PTi5CVE5fQ0xPU0UnIHwgdHJhbnNsYXRlIH19PC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cbiAgPC9pb24tdG9vbGJhcj5cbjwvaW9uLWZvb3Rlcj5cbiJdfQ==
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJvdXQubW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvYWJvdXQvYWJvdXQubW9kYWwudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvYWJvdXQvYWJvdXQubW9kYWwuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQWEsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUsvRCxPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7OztBQUVyRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGNBQWMsQ0FBd0IsaUJBQWlCLENBQUMsQ0FBQztBQUNqRyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBd0IsZUFBZSxDQUFDLENBQUM7QUFPN0YsTUFBTSxPQUFPLFVBQVU7SUFZVDtJQUNBO0lBQ0E7SUFDaUM7SUFDTTtJQUNGO0lBaEJ4QyxJQUFJLENBQVM7SUFDYixPQUFPLENBQVM7SUFDaEIsU0FBUyxDQUFTO0lBQ2xCLE9BQU8sQ0FBNEI7SUFDNUMsY0FBYyxDQUFTO0lBQ3ZCLFFBQVEsQ0FBUztJQUNqQixPQUFPLENBQVM7SUFFQyxhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUVwRCxZQUNZLFNBQTJCLEVBQzNCLGVBQWdDLEVBQ2hDLGFBQTRCLEVBQ0ssV0FBVyxFQUNMLFVBQWlDLEVBQ25DLFFBQStCO1FBTHBFLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUNLLGdCQUFXLEdBQVgsV0FBVyxDQUFBO1FBQ0wsZUFBVSxHQUFWLFVBQVUsQ0FBdUI7UUFDbkMsYUFBUSxHQUFSLFFBQVEsQ0FBdUI7UUFFOUUsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM3QixrREFBa0Q7WUFDbEQsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsSUFBSSxJQUFJLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUN4RyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDO1FBQ3RELElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQUM7UUFDaEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQztRQUNwRCxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQ2xELElBQUksQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUVwQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsK0JBQStCO0lBRXJCLFNBQVMsQ0FBQyxNQUFzQjtRQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sRUFBRSxXQUFXLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDaEcsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLEVBQUUsV0FBVyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQzdGLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxFQUFFLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO0lBQ3JILENBQUM7d0dBaERVLFVBQVUsOEdBZUMsV0FBVyw2QkFDWCxvQkFBb0IsNkJBQ3BCLGtCQUFrQjs0RkFqQjdCLFVBQVUsdURDbkJ2Qixpd0pBaUpBOzs0RkQ5SGEsVUFBVTtrQkFMdEIsU0FBUzsrQkFDRSxpQkFBaUI7OzBCQW1CeEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxXQUFXOzswQkFDOUIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxvQkFBb0I7OzBCQUN2QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgT25EZXN0cm95LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBEZXBhcnRtZW50IH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvZGVwYXJ0bWVudC5tb2RlbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2NvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENPUkVfQ09ORklHX09QVElPTlMgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcvY29yZS5jb25maWcnO1xuXG5leHBvcnQgY29uc3QgQVBQX0FCT1VUX0RFVkVMT1BFUlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48UGFydGlhbDxEZXBhcnRtZW50PltdPignYWJvdXREZXZlbG9wZXJzJyk7XG5leHBvcnQgY29uc3QgQVBQX0FCT1VUX1BBUlRORVJTID0gbmV3IEluamVjdGlvblRva2VuPFBhcnRpYWw8RGVwYXJ0bWVudD5bXT4oJ2Fib3V0UGFydG5lcnMnKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWFib3V0LW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Fib3V0Lm1vZGFsLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hYm91dC5tb2RhbC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEFib3V0TW9kYWwgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgc291cmNlVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZyQ6IE9ic2VydmFibGU8Q29uZmlndXJhdGlvbj47XG4gIHJlcG9ydElzc3VlVXJsOiBzdHJpbmc7XG4gIGZvcnVtVXJsOiBzdHJpbmc7XG4gIGhlbHBVcmw6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgbW9kYWxDb250cm9sbGVyOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0FCT1VUX0RFVkVMT1BFUlMpIHB1YmxpYyBkZXZlbG9wZXJzOiBQYXJ0aWFsPERlcGFydG1lbnQ+W10sXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfQUJPVVRfUEFSVE5FUlMpIHB1YmxpYyBwYXJ0bmVyczogUGFydGlhbDxEZXBhcnRtZW50PltdXG4gICkge1xuICAgIHRoaXMubmFtZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdBUFBfTkFNRScpO1xuICAgIGlmICh0aGlzLm5hbWUgPT09ICdBUFBfTkFNRScpIHtcbiAgICAgIC8vIE5vdCB0cmFuc2xhdGVkOiB1c2UgbmFtZSBmcm9tIHRoZSBlbnZpcm9ubmVtZW50XG4gICAgICB0aGlzLm5hbWUgPSAoZW52aXJvbm1lbnQgJiYgZW52aXJvbm1lbnQubmFtZSAmJiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoZW52aXJvbm1lbnQubmFtZSkpIHx8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy52ZXJzaW9uID0gZW52aXJvbm1lbnQgJiYgZW52aXJvbm1lbnQudmVyc2lvbjtcbiAgICB0aGlzLnNvdXJjZVVybCA9IGVudmlyb25tZW50ICYmIGVudmlyb25tZW50LnNvdXJjZVVybDtcbiAgICB0aGlzLnJlcG9ydElzc3VlVXJsID0gZW52aXJvbm1lbnQgJiYgZW52aXJvbm1lbnQucmVwb3J0SXNzdWVVcmw7XG4gICAgdGhpcy5mb3J1bVVybCA9IGVudmlyb25tZW50ICYmIGVudmlyb25tZW50LmZvcnVtVXJsO1xuICAgIHRoaXMuaGVscFVybCA9IGVudmlyb25tZW50ICYmIGVudmlyb25tZW50LmhlbHBVcmw7XG4gICAgdGhpcy5jb25maWckID0gY29uZmlnU2VydmljZS5jb25maWc7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMuY29uZmlnJC5zdWJzY3JpYmUoKGNvbmZpZykgPT4gdGhpcy5zZXRDb25maWcoY29uZmlnKSkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBhc3luYyBjbG9zZSgpIHtcbiAgICBhd2FpdCB0aGlzLm1vZGFsQ29udHJvbGxlci5kaXNtaXNzKCk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgZnVuY3Rpb25zIC0tICovXG5cbiAgcHJvdGVjdGVkIHNldENvbmZpZyhjb25maWc/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5mb3J1bVVybCA9IGNvbmZpZz8uZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5GT1JVTV9VUkwpIHx8IHRoaXMuZW52aXJvbm1lbnQuZm9ydW1Vcmw7XG4gICAgdGhpcy5oZWxwVXJsID0gY29uZmlnPy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkhFTFBfVVJMKSB8fCB0aGlzLmVudmlyb25tZW50LmhlbHBVcmw7XG4gICAgdGhpcy5yZXBvcnRJc3N1ZVVybCA9IGNvbmZpZz8uZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5SRVBPUlRfSVNTVUVfVVJMKSB8fCB0aGlzLmVudmlyb25tZW50LnJlcG9ydElzc3VlVXJsO1xuICB9XG59XG4iLCI8aW9uLWhlYWRlcj5cbiAgPGlvbi10b29sYmFyIGNvbG9yPVwibGlnaHRcIj5cbiAgICA8aW9uLXRpdGxlPlxuICAgICAge3sgJ0FCT1VULlRJVExFJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvaW9uLXRpdGxlPlxuXG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJjbG9zZSgpXCIgdmlzaWJsZS14cyB2aXNpYmxlLXNtIHZpc2libGUtbW9iaWxlPlxuICAgICAgICB7eyAnQ09NTU9OLkJUTl9DTE9TRScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24taGVhZGVyPlxuXG48aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICA8aW9uLWxpc3QgbGluZXM9XCJub25lXCI+XG4gICAgPCEtLSBQZWVyIGluZm8gLS0+XG4gICAgQGlmIChjb25maWckIHwgYXN5bmM7IGFzIGNvbmZpZykge1xuICAgICAgPGlvbi1pdGVtPlxuICAgICAgICA8c3BhbiBzbG90PVwic3RhcnRcIj4mbmJzcDs8L3NwYW4+XG4gICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJpb24tdGV4dC13cmFwXCI+XG4gICAgICAgICAgPGgyPlxuICAgICAgICAgICAgPGI+e3sgY29uZmlnLmxhYmVsIHwgY2FwaXRhbGl6ZSB9fTwvYj5cbiAgICAgICAgICAgIEBpZiAoY29uZmlnLm5hbWUpIHtcbiAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImNvbmZpZy5uYW1lXCI+PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICBAaWYgKGNvbmZpZy5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIDxtYXJrZG93biBbZGF0YV09XCJjb25maWcuZGVzY3JpcHRpb25cIiBlbW9qaT48L21hcmtkb3duPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICA8L2lvbi1pdGVtPlxuICAgIH1cblxuICAgIDwhLS0gVmVyc2lvbiBpbmZvIC0tPlxuICAgIDxpb24taXRlbT5cbiAgICAgIDxzcGFuIHNsb3Q9XCJzdGFydFwiPiZuYnNwOzwvc3Bhbj5cbiAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJpb24tdGV4dC13cmFwXCI+XG4gICAgICAgIDxoMj5cbiAgICAgICAgICA8c21hbGwgKm5nSWY9XCJuYW1lXCI+e3sgJ0FCT1VULlBPV0VSRURfQlknIHwgdHJhbnNsYXRlIH19PC9zbWFsbD5cbiAgICAgICAgICB7eyBuYW1lIH19XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJ2ZXJzaW9uXCIgW2lubmVySFRNTF09XCInQUJPVVQuVkVSU0lPTicgfCB0cmFuc2xhdGU6IHsgdmVyc2lvbjogdmVyc2lvbiB9XCI+PC9zcGFuPlxuICAgICAgICA8L2gyPlxuICAgICAgICA8cCBbaW5uZXJIVE1MXT1cIidBQk9VVC5MSUNFTlNFJyB8IHRyYW5zbGF0ZVwiPjwvcD5cbiAgICAgIDwvaW9uLWxhYmVsPlxuICAgIDwvaW9uLWl0ZW0+XG5cbiAgICA8IS0tIEhlbHAgLS0+XG4gICAgPGlvbi1pdGVtICpuZ0lmPVwiZm9ydW1VcmwgfHwgaGVscFVybFwiPlxuICAgICAgPG1hdC1pY29uIHNsb3Q9XCJzdGFydFwiPmhlbHBfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICA8aW9uLWxhYmVsPlxuICAgICAgICA8cD5cbiAgICAgICAgICB7eyAnQUJPVVQuSEVMUCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwic29saWRcIiBjb2xvcj1cImFjY2VudFwiIGhyZWY9XCJ7eyBoZWxwVXJsIH19XCIgdGFyZ2V0PVwiaGVscFwiIHNpemU9XCJkZWZhdWx0XCI+XG4gICAgICAgICAgICA8bWF0LWljb24gc2xvdD1cInN0YXJ0XCI+ZGVzY3JpcHRpb248L21hdC1pY29uPlxuICAgICAgICAgICAgPGlvbi10ZXh0IHRyYW5zbGF0ZT5BQk9VVC5VU0VSX01BTlVBTDwvaW9uLXRleHQ+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJzb2xpZFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgaHJlZj1cInt7IGZvcnVtVXJsIH19XCIgdGFyZ2V0PVwiZm9ydW1cIiBzaXplPVwiZGVmYXVsdFwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJjaGF0YnViYmxlc1wiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8aW9uLXRleHQgdHJhbnNsYXRlPkFCT1VULkZPUlVNPC9pb24tdGV4dD5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvcD5cbiAgICAgIDwvaW9uLWxhYmVsPlxuICAgIDwvaW9uLWl0ZW0+XG5cbiAgICA8IS0tIFJlcG9ydCBpc3N1ZSAtLT5cbiAgICA8aW9uLWl0ZW0gKm5nSWY9XCJyZXBvcnRJc3N1ZVVybFwiPlxuICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJidWdcIiBjb2xvcj1cImRhcmtcIj48L2lvbi1pY29uPlxuICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAgPHA+XG4gICAgICAgICAge3sgJ0FCT1VULlJFUE9SVF9JU1NVRScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICA8YSBjb2xvcj1cInByaW1hcnlcIiBocmVmPVwie3sgcmVwb3J0SXNzdWVVcmwgfX1cIiB0YXJnZXQ9XCJfc3lzdGVtXCIgdHJhbnNsYXRlPkFCT1VULkJUTl9SRVBPUlRfSVNTVUU8L2E+XG4gICAgICAgIDwvcD5cbiAgICAgIDwvaW9uLWxhYmVsPlxuICAgIDwvaW9uLWl0ZW0+XG5cbiAgICA8IS0tIFNvdXJjZSBjb2RlIC0tPlxuICAgIDxpb24taXRlbSAqbmdJZj1cInNvdXJjZVVybFwiPlxuICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJjb2RlXCIgY29sb3I9XCJkYXJrXCI+PC9pb24taWNvbj5cbiAgICAgIDxpb24tbGFiZWw+XG4gICAgICAgIDxwPlxuICAgICAgICAgIHt7ICdBQk9VVC5TT1VSQ0VfQ09ERScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICA8YSBjb2xvcj1cInByaW1hcnlcIiBocmVmPVwie3sgc291cmNlVXJsIH19XCIgdGFyZ2V0PVwiX3N5c3RlbVwiPnt7IHNvdXJjZVVybCB9fTwvYT5cbiAgICAgICAgPC9wPlxuICAgICAgPC9pb24tbGFiZWw+XG4gICAgPC9pb24taXRlbT5cblxuICAgIDwhLS0gRGV2ZWxvcGVycyAtLT5cbiAgICA8aW9uLWl0ZW0gKm5nSWY9XCJkZXZlbG9wZXJzIHwgaXNOb3RFbXB0eUFycmF5XCI+XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cInBlb3BsZVwiIGNvbG9yPVwiZGFya1wiPjwvaW9uLWljb24+XG4gICAgICA8aW9uLWxhYmVsPlxuICAgICAgICA8cD5cbiAgICAgICAgICB7eyAnQUJPVVQuREVWRUxPUEVEX0JZJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxpb24tbGlzdCBsaW5lcz1cIm5vbmVcIj5cbiAgICAgICAgICA8aW9uLWl0ZW0gKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGV2ZWxvcGVyc1wiIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgIDxpb24tbGFiZWw+XG4gICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIDxhIGNvbG9yPVwicHJpbWFyeVwiIGhyZWY9XCJ7eyBpdGVtLnNpdGVVcmwgfX1cIiB0YXJnZXQ9XCJfc3lzdGVtXCI+e3sgaXRlbS5uYW1lIHx8IGl0ZW0ubGFiZWwgfX08L2E+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgPGlvbi1pbWcgc2xvdD1cImVuZFwiIFtzcmNdPVwiaXRlbS5sb2dvXCIgLz5cbiAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICA8L2lvbi1saXN0PlxuICAgICAgPC9pb24tbGFiZWw+XG4gICAgPC9pb24taXRlbT5cblxuICAgIDwhLS0gUGFydG5lcnMgLS0+XG4gICAgPGlvbi1pdGVtIGNsYXNzPVwiaXRlbS1wYXJ0bmVyc1wiICpuZ0lmPVwicGFydG5lcnMgfCBpc05vdEVtcHR5QXJyYXlcIj5cbiAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwibWVnYXBob25lXCIgY29sb3I9XCJkYXJrXCI+PC9pb24taWNvbj5cbiAgICAgIDxpb24tdGV4dD5cbiAgICAgICAgPHA+e3sgJ0FCT1VULlBBUlRORVJTJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgPHA+XG4gICAgICAgICAgPGEgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcGFydG5lcnNcIiBocmVmPVwie3sgaXRlbS5zaXRlVXJsIH19XCIgY2xhc3M9XCJwYXJ0bmVyc1wiIHRhcmdldD1cIl9zeXN0ZW1cIj5cbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpdGVtLmxvZ287IGVsc2UgcGFydG5lck5hbWVcIiBbc3JjXT1cIml0ZW0ubG9nb1wiIFthbHRdPVwiaXRlbS5sYWJlbFwiIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BhcnRuZXJOYW1lPlxuICAgICAgICAgICAgICA8aW9uLXRleHQ+e3sgaXRlbS5sYWJlbCB9fTwvaW9uLXRleHQ+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9wPlxuICAgICAgPC9pb24tdGV4dD5cbiAgICA8L2lvbi1pdGVtPlxuICA8L2lvbi1saXN0PlxuPC9pb24tY29udGVudD5cblxuPGlvbi1mb290ZXIgaGlkZGVuLXhzIGhpZGRlbi1zbSBoaWRkZW4tbW9iaWxlPlxuICA8aW9uLXRvb2xiYXI+XG4gICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiIG5vd3JhcD5cbiAgICAgIDxpb24tY29sPjwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJzb2xpZFwiIGNvbG9yPVwidGVydGlhcnlcIiAoY2xpY2spPVwiY2xvc2UoKVwiPnt7ICdDT01NT04uQlROX0NMT1NFJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICA8L2lvbi1yb3c+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1mb290ZXI+XG4iXX0=
@@ -73,15 +73,19 @@ export class AccountPage extends AppForm {
73
73
  get valid() {
74
74
  return super.valid && (this.propertiesTable?.valid || true);
75
75
  }
76
+ get invalid() {
77
+ return super.invalid && (this.propertiesTable ? this.propertiesTable.invalid : false);
78
+ }
79
+ get dirty() {
80
+ return super.dirty || this.propertiesTable?.dirty || false;
81
+ }
76
82
  showLatLonFormat = true;
77
83
  canChangePassword = false;
78
84
  showSecurityDetails = false;
79
85
  showTechnicalDetails = true;
80
86
  showApiTokens = false;
81
- constructor(injector, formBuilder, accountService, network, navController, validatorService,
82
- // protected settingsValidatorService: UserSettingsValidatorService,
83
- configService, cd, locales) {
84
- super(injector, validatorService.getFormGroup(accountService.account));
87
+ constructor(injector, formBuilder, accountService, network, navController, validatorService, configService, cd, locales) {
88
+ super(injector, validatorService.getFormGroup(accountService.account, { withSettings: true }));
85
89
  this.formBuilder = formBuilder;
86
90
  this.accountService = accountService;
87
91
  this.network = network;
@@ -90,10 +94,6 @@ export class AccountPage extends AppForm {
90
94
  this.configService = configService;
91
95
  this.cd = cd;
92
96
  this.locales = locales;
93
- // Add settings fo form
94
- // this.settingsForm = settingsValidatorService.getFormGroup(accountService.account && accountService.account.settings);
95
- // this.settingsContentForm = (this.settingsForm.controls['content'] as UntypedFormGroup);
96
- // this.form.addControl('settings', this.settingsForm);
97
97
  this.mobile = this.settings.mobile;
98
98
  this.debug = !environment.production;
99
99
  // By default, disable the form
@@ -171,15 +171,13 @@ export class AccountPage extends AppForm {
171
171
  super.setValue(data, opts);
172
172
  // Set options
173
173
  if (isNotEmptyArray(this.optionDefinitions) && this.propertiesTable) {
174
- const properties = data?.settings?.asLocalSettings()?.properties || {};
175
- const propertiesEntities = [];
176
- this.optionDefinitions
177
- .map((definition) => definition.key)
178
- .forEach((key) => {
179
- if (isNotNil(properties[key])) {
180
- propertiesEntities.push(PropertyEntity.fromObject({ id: key, value: properties[key] }));
181
- }
182
- });
174
+ const { properties } = data?.settings?.asLocalSettings({ definitions: this.optionDefinitions }) || {};
175
+ const propertiesEntities = this.optionDefinitions
176
+ .map((definition) => {
177
+ const value = properties[definition.key];
178
+ return isNotNil(value) ? PropertyEntity.fromObject({ definition, value }) : null;
179
+ })
180
+ .filter(isNotNil);
183
181
  await this.propertiesTable.ready();
184
182
  this.propertiesTable.value = propertiesEntities;
185
183
  }
@@ -363,4 +361,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
363
361
  type: HostListener,
364
362
  args: ['window:beforeunload', ['$event']]
365
363
  }] } });
366
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5wYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2FjY291bnQvYWNjb3VudC5wYWdlLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2FjY291bnQvYWNjb3VudC5wYWdlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBK0IsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BKLE9BQU8sRUFBRSxhQUFhLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRCxPQUFPLEVBQXdDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sb0JBQW9CLENBQUM7QUFFNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQStCLE1BQU0sa0NBQWtDLENBQUM7QUFFNUYsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQXNCLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXpGLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztB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QUFHLGFBQWEsS0FBSyxPQUFPLENBQUM7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNsRCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRVMsWUFBWTtRQUNwQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFUyxzQkFBc0I7UUFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN6RCxDQUFDO3dHQWxXVSxXQUFXLDBRQWtEWixXQUFXOzRGQWxEVixXQUFXLDBlQ2pDeEIsazJjQXlVQTs7NEZEeFNhLFdBQVc7a0JBTnZCLFNBQVM7K0JBQ0Usa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU07OzBCQW9ENUMsTUFBTTsyQkFBQyxXQUFXO3lDQWpEb0IsUUFBUTtzQkFBaEQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNTLGVBQWU7c0JBQTlELFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNGLFdBQVc7c0JBQXRELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFtVTFDLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWNjb3VudCB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2FjY291bnQubW9kZWwnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWNjb3VudFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy92YWxpZGF0b3IvYWNjb3VudC52YWxpZGF0b3InO1xuaW1wb3J0IHsgQXBwRm9ybSB9IGZyb20gJy4uL2Zvcm0vZm9ybS5jbGFzcyc7XG5pbXBvcnQgeyBBcHBGb3JtVXRpbHMsIENhbkxlYXZlIH0gZnJvbSAnLi4vZm9ybS9mb3JtLnV0aWxzJztcbmltcG9ydCB7IEZvcm1GaWVsZERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBMQVRfTE9OR19QQVRURVJOUyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9sYXRsb25nL2xhdGxvbmcudXRpbHMnO1xuaW1wb3J0IHsgU3RhdHVzSWRzIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvbW9kZWwuZW51bSc7XG5pbXBvcnQgeyBBUFBfTE9DQUxFUywgTG9jYWxlQ29uZmlnLCBMb2NhbFNldHRpbmdzIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHsgTmV0d29ya1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNYXRUYWJHcm91cCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IENPUkVfQ09ORklHX09QVElPTlMgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHsgQXBwUHJvcGVydGllc1RhYmxlLCBQcm9wZXJ0eUVudGl0eSB9IGZyb20gJy4uL2Zvcm0vcHJvcGVydGllcy9wcm9wZXJ0aWVzLnRhYmxlJztcbmltcG9ydCB7IFByb3BlcnR5TWFwIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IFVzZXJUb2tlblRhYmxlIH0gZnJvbSAnLi90b2tlbi50YWJsZSc7XG5pbXBvcnQgeyBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2NvbmZpZy5tb2RlbCc7XG5cbmltcG9ydCB7IEF1dGhUb2tlblR5cGUgfSBmcm9tICcuLi9zZXJ2aWNlcy9uZXR3b3JrLnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWFjY291bnQtcGFnZScsXG4gIHRlbXBsYXRlVXJsOiAnYWNjb3VudC5wYWdlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hY2NvdW50LnBhZ2Uuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQWNjb3VudFBhZ2UgZXh0ZW5kcyBBcHBGb3JtPEFjY291bnQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENhbkxlYXZlIHtcbiAgQFZpZXdDaGlsZCgndGFiR3JvdXAnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJHcm91cDogTWF0VGFiR3JvdXA7XG4gIEBWaWV3Q2hpbGQoJ3Byb3BlcnRpZXNUYWJsZScsIHsgc3RhdGljOiB0cnVlIH0pIHByb3BlcnRpZXNUYWJsZTogQXBwUHJvcGVydGllc1RhYmxlO1xuICBAVmlld0NoaWxkKCd0b2tlbnNUYWJsZScsIHsgc3RhdGljOiB0cnVlIH0pIHRva2Vuc1RhYmxlOiBVc2VyVG9rZW5UYWJsZTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gIHByb3RlY3RlZCBpc0xvZ2luOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgY2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgbmV0d29ya1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgZW1haWwgPSB7XG4gICAgY29uZmlybWVkOiBmYWxzZSxcbiAgICBub3RDb25maXJtZWQ6IGZhbHNlLFxuICAgIHNlbmRpbmc6IGZhbHNlLFxuICAgIGVycm9yOiB1bmRlZmluZWQsXG4gIH07XG4gIHByb3RlY3RlZCBhZGRpdGlvbmFsRmllbGRzOiBGb3JtRmllbGREZWZpbml0aW9uW107XG4gIHByb3RlY3RlZCBvcHRpb25EZWZpbml0aW9uczogRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuXG4gIGdldCBzZXR0aW5nc0Zvcm0oKTogVW50eXBlZEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3NldHRpbmdzJykgYXMgVW50eXBlZEZvcm1Hcm91cDtcbiAgfVxuXG4gIC8vIHNldHRpbmdzQ29udGVudEZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gIHByb3RlY3RlZCBsb2NhbGVzOiBMb2NhbGVDb25maWdbXTtcbiAgcHJvdGVjdGVkIGxhdExvbmdGb3JtYXRzID0gTEFUX0xPTkdfUEFUVEVSTlM7XG4gIHByb3RlY3RlZCBzYXZpbmcgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHN1Ym1pdHRlZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgYWNjb3VudFJlYWRPbmx5ID0gZmFsc2U7XG4gIHByb3RlY3RlZCByZWFkb25seSBtb2JpbGU6IGJvb2xlYW47XG5cbiAgZ2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci52YWxpZCAmJiAodGhpcy5wcm9wZXJ0aWVzVGFibGU/LnZhbGlkIHx8IHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNob3dMYXRMb25Gb3JtYXQgPSB0cnVlO1xuICBwcm90ZWN0ZWQgY2FuQ2hhbmdlUGFzc3dvcmQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHNob3dTZWN1cml0eURldGFpbHMgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHNob3dUZWNobmljYWxEZXRhaWxzID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIHNob3dBcGlUb2tlbnMgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHVibGljIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHVibGljIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwdWJsaWMgbmV0d29yazogTmV0d29ya1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRvclNlcnZpY2U6IEFjY291bnRWYWxpZGF0b3JTZXJ2aWNlLFxuICAgIC8vIHByb3RlY3RlZCBzZXR0aW5nc1ZhbGlkYXRvclNlcnZpY2U6IFVzZXJTZXR0aW5nc1ZhbGlkYXRvclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBASW5qZWN0KEFQUF9MT0NBTEVTKSBsb2NhbGVzOiBMb2NhbGVDb25maWdbXVxuICApIHtcbiAgICBzdXBlcihpbmplY3RvciwgdmFsaWRhdG9yU2VydmljZS5nZXRGb3JtR3JvdXAoYWNjb3VudFNlcnZpY2UuYWNjb3VudCkpO1xuXG4gICAgdGhpcy5sb2NhbGVzID0gbG9jYWxlcztcblxuICAgIC8vIEFkZCBzZXR0aW5ncyBmbyBmb3JtXG4gICAgLy8gdGhpcy5zZXR0aW5nc0Zvcm0gPSBzZXR0aW5nc1ZhbGlkYXRvclNlcnZpY2UuZ2V0Rm9ybUdyb3VwKGFjY291bnRTZXJ2aWNlLmFjY291bnQgJiYgYWNjb3VudFNlcnZpY2UuYWNjb3VudC5zZXR0aW5ncyk7XG4gICAgLy8gdGhpcy5zZXR0aW5nc0NvbnRlbnRGb3JtID0gKHRoaXMuc2V0dGluZ3NGb3JtLmNvbnRyb2xzWydjb250ZW50J10gYXMgVW50eXBlZEZvcm1Hcm91cCk7XG4gICAgLy8gdGhpcy5mb3JtLmFkZENvbnRyb2woJ3NldHRpbmdzJywgdGhpcy5zZXR0aW5nc0Zvcm0pO1xuXG4gICAgdGhpcy5tb2JpbGUgPSB0aGlzLnNldHRpbmdzLm1vYmlsZTtcbiAgICB0aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG5cbiAgICAvLyBCeSBkZWZhdWx0LCBkaXNhYmxlIHRoZSBmb3JtXG4gICAgdGhpcy5kaXNhYmxlKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgLy8gR2V0IHVzZXIgb3B0aW9uc1xuICAgIHRoaXMub3B0aW9uRGVmaW5pdGlvbnMgPSAodGhpcy5hY2NvdW50U2VydmljZS5vcHRpb25EZWZzIHx8IFtdKS5maWx0ZXIoXG4gICAgICAoZGVmaW5pdGlvbikgPT4gIWRlZmluaXRpb24uZGlzYWJsZWQgJiYgKCFkZWZpbml0aW9uLm1pblByb2ZpbGUgfHwgdGhpcy5hY2NvdW50U2VydmljZS5oYXNNaW5Qcm9maWxlKGRlZmluaXRpb24ubWluUHJvZmlsZSkpXG4gICAgKTtcblxuICAgIC8vIE9ic2VydmVkIHNvbWUgZXZlbnRzXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9naW4ucGlwZShmaWx0ZXIoKCkgPT4gIXRoaXMuc2F2aW5nKSkuc3Vic2NyaWJlKChhY2NvdW50KSA9PiB0aGlzLm9uTG9naW4oYWNjb3VudCkpKTtcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dvdXQuc3Vic2NyaWJlKCgpID0+IHRoaXMub25Mb2dvdXQoKSkpO1xuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uQ2FuY2VsLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5hY2NvdW50U2VydmljZS5hY2NvdW50KTtcbiAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2UuJGFkZGl0aW9uYWxGaWVsZHMuc3Vic2NyaWJlKChhZGRpdGlvbmFsRmllbGRzKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkaXRpb25hbEZpZWxkcyA9IGFkZGl0aW9uYWxGaWVsZHMuc2xpY2UoKTsgLy8gQ29weVxuICAgICAgICBpZiAodGhpcy5hY2NvdW50U2VydmljZS5pc0xvZ2luKCkpIHtcbiAgICAgICAgICB0aGlzLm9uTG9naW4odGhpcy5hY2NvdW50U2VydmljZS5hY2NvdW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuY29uZmlnU2VydmljZS5jb25maWcuc3Vic2NyaWJlKChjb25maWcpID0+IHRoaXMub25Db25maWdMb2FkZWQoY29uZmlnKSkpO1xuXG4gICAgLy8gUmVhbGlnbiB0YWIsIGFmdGVyIGEgZGVsYXkgYmVjYXVzZSB0aGUgdGFiIGNhbiBiZSBkaXNhYmxlZCB3aGVuIGNvbXBvbmVudCBpcyBjcmVhdGVkXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRhYkdyb3VwLnJlYWxpZ25JbmtCYXIoKSwgNTAwKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5zdG9wTGlzdGVuQ2hhbmdlcygpO1xuICAgIHRoaXMubmV0d29ya1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG9uTG9naW4oYWNjb3VudDogQWNjb3VudCkge1xuICAgIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBMb2dnZWQgYWNjb3VudDogJywgYWNjb3VudCk7XG4gICAgdGhpcy5pc0xvZ2luID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0VmFsdWUoYWNjb3VudCk7XG5cbiAgICB0aGlzLmVtYWlsLmNvbmZpcm1lZCA9IGFjY291bnQgJiYgYWNjb3VudC5lbWFpbCAmJiBhY2NvdW50LnN0YXR1c0lkICE9PSBTdGF0dXNJZHMuVEVNUE9SQVJZO1xuICAgIHRoaXMuZW1haWwubm90Q29uZmlybWVkID0gYWNjb3VudCAmJiBhY2NvdW50LmVtYWlsICYmICghYWNjb3VudC5zdGF0dXNJZCB8fCBhY2NvdW50LnN0YXR1c0lkID09PSBTdGF0dXNJZHMuVEVNUE9SQVJZKTtcblxuICAgIHRoaXMubmV0d29ya1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm5ldHdvcmtTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWcsXG4gICAgICB0aGlzLm5ldHdvcmsub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5waXBlKG1hcCgoY29ubmVjdGlvblR5cGUpID0+IGNvbm5lY3Rpb25UeXBlICE9PSAnbm9uZScpKSxcbiAgICBdKS5zdWJzY3JpYmUoKFtjb25maWcsIG9ubGluZV0pID0+IHtcbiAgICAgIHRoaXMub25Db25maWdMb2FkZWQoY29uZmlnKTtcblxuICAgICAgaWYgKG9ubGluZSkge1xuICAgICAgICB0aGlzLmVuYWJsZSgpO1xuICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIHRoaXMuc3RhcnRMaXN0ZW5DaGFuZ2VzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc2FibGUoKTtcbiAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICB0aGlzLnN0b3BMaXN0ZW5DaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uTG9nb3V0KCkge1xuICAgIHRoaXMuaXNMb2dpbiA9IGZhbHNlO1xuICAgIHRoaXMuZW1haWwuY29uZmlybWVkID0gZmFsc2U7XG4gICAgdGhpcy5lbWFpbC5ub3RDb25maXJtZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVtYWlsLnNlbmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtYWlsLmVycm9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgdGhpcy5uZXR3b3JrU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zdG9wTGlzdGVuQ2hhbmdlcygpO1xuXG4gICAgLy8gQmFjayB0byBob21lXG4gICAgdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlUm9vdCgnLycpO1xuICB9XG5cbiAgYXN5bmMgc2V0VmFsdWUoZGF0YTogQWNjb3VudCwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgb25seVNlbGY/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzdXBlci5zZXRWYWx1ZShkYXRhLCBvcHRzKTtcblxuICAgIC8vIFNldCBvcHRpb25zXG4gICAgaWYgKGlzTm90RW1wdHlBcnJheSh0aGlzLm9wdGlvbkRlZmluaXRpb25zKSAmJiB0aGlzLnByb3BlcnRpZXNUYWJsZSkge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IGRhdGE/LnNldHRpbmdzPy5hc0xvY2FsU2V0dGluZ3MoKT8ucHJvcGVydGllcyB8fCB7fTtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXNFbnRpdGllczogUHJvcGVydHlFbnRpdHlbXSA9IFtdO1xuICAgICAgdGhpcy5vcHRpb25EZWZpbml0aW9uc1xuICAgICAgICAubWFwKChkZWZpbml0aW9uKSA9PiBkZWZpbml0aW9uLmtleSlcbiAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChpc05vdE5pbChwcm9wZXJ0aWVzW2tleV0pKSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzRW50aXRpZXMucHVzaChQcm9wZXJ0eUVudGl0eS5mcm9tT2JqZWN0KHsgaWQ6IGtleSwgdmFsdWU6IHByb3BlcnRpZXNba2V5XSB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIGF3YWl0IHRoaXMucHJvcGVydGllc1RhYmxlLnJlYWR5KCk7XG4gICAgICB0aGlzLnByb3BlcnRpZXNUYWJsZS52YWx1ZSA9IHByb3BlcnRpZXNFbnRpdGllcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnNUYWJsZSkge1xuICAgICAgYXdhaXQgdGhpcy50b2tlbnNUYWJsZS5yZWFkeSgpO1xuICAgICAgdGhpcy50b2tlbnNUYWJsZS52YWx1ZSA9IGRhdGEudG9rZW5zO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2goXz86IEV2ZW50KSB7XG4gICAgdGhpcy5kaXNhYmxlKCk7XG4gICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hY2NvdW50U2VydmljZS5yZWxvYWQoKTtcbiAgfVxuXG4gIHN0YXJ0TGlzdGVuQ2hhbmdlcygpIHtcbiAgICBpZiAodGhpcy5jaGFuZ2VzU3Vic2NyaXB0aW9uKSByZXR1cm47IC8vIGFscmVhZHkgc3RhcnRlZFxuICAgIHRoaXMuY2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuYWNjb3VudFNlcnZpY2UubGlzdGVuQ2hhbmdlcygpO1xuICB9XG5cbiAgc3RvcExpc3RlbkNoYW5nZXMoKSB7XG4gICAgaWYgKCF0aGlzLmNoYW5nZXNTdWJzY3JpcHRpb24pIHJldHVybjtcbiAgICB0aGlzLmNoYW5nZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNoYW5nZXNTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBhc3luYyBzZW5kQ29uZmlybWF0aW9uRW1haWwoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBqc29uID0gdGhpcy5mb3JtLnZhbHVlO1xuICAgIGpzb24uZW1haWwgPSB0aGlzLmZvcm0uY29udHJvbHNbJ2VtYWlsJ10udmFsdWU7XG4gICAgaWYgKCFqc29uLmVtYWlsIHx8ICF0aGlzLmVtYWlsLm5vdENvbmZpcm1lZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmVtYWlsLnNlbmRpbmcgPSB0cnVlO1xuICAgIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBTZW5kaW5nIGNvbmZpcm1hdGlvbiBlbWFpbC4uLicpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFjY291bnRTZXJ2aWNlLnNlbmRDb25maXJtYXRpb25FbWFpbChqc29uLmVtYWlsLCAoanNvbi5zZXR0aW5ncyAmJiBqc29uLnNldHRpbmdzLmxvY2FsZSkgfHwgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcpO1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIENvbmZpcm1hdGlvbiBlbWFpbCBzZW50LicpO1xuICAgICAgdGhpcy5lbWFpbC5zZW5kaW5nID0gZmFsc2U7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVtYWlsLnNlbmRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZW1haWwuZXJyb3IgPSAoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnI7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZShldmVudD86IEV2ZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuc2F2aW5nKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgYXdhaXQgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcodGhpcy5mb3JtKTtcblxuICAgICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICAgIEFwcEZvcm1VdGlscy5sb2dGb3JtRXJyb3JzKHRoaXMuZm9ybSk7XG4gICAgICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgdGhpcy5zYXZpbmcgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBuZXdBY2NvdW50ID0gQWNjb3VudC5mcm9tT2JqZWN0KHtcbiAgICAgIC4uLnRoaXMuYWNjb3VudFNlcnZpY2UuYWNjb3VudC5hc09iamVjdCgpLFxuICAgICAgLi4udGhpcy5mb3JtLnZhbHVlLFxuICAgIH0pO1xuXG4gICAgaWYgKGlzTm90RW1wdHlBcnJheSh0aGlzLm9wdGlvbkRlZmluaXRpb25zKSAmJiB0aGlzLnByb3BlcnRpZXNUYWJsZSkge1xuICAgICAgLy8gbWVyZ2UgcHJvcGVydGllc1xuICAgICAgYXdhaXQgdGhpcy5wcm9wZXJ0aWVzVGFibGUuc2F2ZSgpO1xuICAgICAgY29uc3QgcHJvcGVydHlFbnRpdGllcyA9IHRoaXMucHJvcGVydGllc1RhYmxlLnZhbHVlIHx8IFtdO1xuICAgICAgY29uc3QgcHJvcGVydGllczogUHJvcGVydHlNYXAgPSBwcm9wZXJ0eUVudGl0aWVzLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XG4gICAgICAgIHJlc1tpdGVtLmlkXSA9IGl0ZW0udmFsdWU7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9LCB7fSk7XG4gICAgICBjb25zdCBuZXdQcm9wZXJ0aWVzID0geyAuLi5uZXdBY2NvdW50LnNldHRpbmdzLmNvbnRlbnRbJ3Byb3BlcnRpZXMnXSwgLi4ucHJvcGVydGllcyB9O1xuICAgICAgbmV3QWNjb3VudC5zZXR0aW5ncy5tZXJnZSg8TG9jYWxTZXR0aW5ncz57IHByb3BlcnRpZXM6IG5ld1Byb3BlcnRpZXMgfSwgWydwcm9wZXJ0aWVzJ10pO1xuICAgIH0gZWxzZSBpZiAobmV3QWNjb3VudC5zZXR0aW5ncy5jb250ZW50Wydwcm9wZXJ0aWVzJ10pIHtcbiAgICAgIC8vIENsZWFuIHByb3BlcnRpZXNcbiAgICAgIGRlbGV0ZSBuZXdBY2NvdW50LnNldHRpbmdzLmNvbnRlbnRbJ3Byb3BlcnRpZXMnXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnNUYWJsZSkge1xuICAgICAgYXdhaXQgdGhpcy50b2tlbnNUYWJsZS5zYXZlKCk7XG4gICAgICBuZXdBY2NvdW50LnRva2VucyA9IHRoaXMudG9rZW5zVGFibGUudmFsdWU7XG4gICAgfVxuXG4gICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIFNhdmluZyBhY2NvdW50Li4uJywgbmV3QWNjb3VudCk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgICBhd2FpdCB0aGlzLmFjY291bnRTZXJ2aWNlLnNhdmUobmV3QWNjb3VudCk7XG5cbiAgICAgIC8vIFJlbG9hZFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm9uTG9naW4odGhpcy5hY2NvdW50U2VydmljZS5hY2NvdW50KSwgMTAwKTtcblxuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB0aGlzLmVycm9yID0gKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5lbmFibGUoKTtcbiAgICB9XG4gIH1cblxuICBlbmFibGUob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBzdXBlci5lbmFibGUob3B0cyk7XG5cbiAgICAvLyBTb21lIGZpZWxkcyBhcmUgYWx3YXlzIGRpc2FibGVcbiAgICB0aGlzLmZvcm0uY29udHJvbHMuZW1haWwuZGlzYWJsZSgpO1xuICAgIHRoaXMuZm9ybS5jb250cm9scy5tYWluUHJvZmlsZS5kaXNhYmxlKCk7XG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLnB1YmtleS5kaXNhYmxlKCk7XG5cbiAgICAvLyBEaXNhYmxlIGFjY291bnQgZmllbGRzIGlmIHJlYWRvbmx5IGJ5IGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuYWNjb3VudFJlYWRPbmx5O1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmxhc3ROYW1lLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuZm9ybS5jb250cm9scy5maXJzdE5hbWUuZGlzYWJsZSgpO1xuICAgIH1cblxuICAgIC8vIEFsd2F5cyBkaXNhYmxlIHNvbWUgYWRkaXRpb25hbCBmaWVsZHNcbiAgICB0aGlzLmFkZGl0aW9uYWxGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbZmllbGQua2V5XTtcbiAgICAgIGlmICghY29udHJvbCkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICAgIGNvbnN0IGZpZWxkRGlzYWJsZWQgPSBkaXNhYmxlZCB8fCAoZmllbGQuZXh0cmE/LmFjY291bnQgJiYgZmllbGQuZXh0cmEuYWNjb3VudC5kaXNhYmxlZCkgfHwgZmFsc2U7XG4gICAgICBpZiAoZmllbGREaXNhYmxlZCAmJiBjb250cm9sLmVuYWJsZWQpIHtcbiAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXF1aXJlZCA9IChmaWVsZC5leHRyYT8uYWNjb3VudCAmJiBmaWVsZC5leHRyYS5hY2NvdW50LnJlcXVpcmVkKSB8fCBmYWxzZTtcbiAgICAgIGlmICghZmllbGQucmVxdWlyZWQgJiYgcmVxdWlyZWQpIHtcbiAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKGNvbnRyb2wudmFsaWRhdG9yID8gVmFsaWRhdG9ycy5jb21wb3NlKFtjb250cm9sLnZhbGlkYXRvciwgVmFsaWRhdG9ycy5yZXF1aXJlZF0pIDogVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbCgpIHtcbiAgICBhd2FpdCBzdXBlci5jYW5jZWwoKTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKF8/OiBFdmVudCkge1xuICAgIGlmICh0aGlzLnNhdmluZykgcmV0dXJuO1xuXG4gICAgLy8gQmFjayB0byBob21lXG4gICAgcmV0dXJuIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoJy8nKTsgLy8gYmFjayB0byBob21lXG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6YmVmb3JldW5sb2FkJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlUmVmcmVzaChldmVudDogQmVmb3JlVW5sb2FkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBBdm9pZCB0byBxdWl0IHdlYiBicm93c2VyIHBhZ2UsIHdpdGhvdXQgc2F2aW5nXG4gICAgaWYgKCF0aGlzLm1vYmlsZSAmJiB0aGlzLmRpcnR5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBBdm9pZCB0byBxdWl0IHdpdGhvdXQgc2F2aW5nXG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ29uZmlnTG9hZGVkKGNvbmZpZzogQ29uZmlndXJhdGlvbikge1xuICAgIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBDb25maWcgbG9hZGVkOiAnLCBjb25maWcpO1xuICAgIHRoaXMuYWNjb3VudFJlYWRPbmx5ID0gY29uZmlnLmdldFByb3BlcnR5QXNCb29sZWFuKENPUkVfQ09ORklHX09QVElPTlMuQUNDT1VOVF9SRUFET05MWSk7XG4gICAgdGhpcy5zaG93TGF0TG9uRm9ybWF0ID1cbiAgICAgIGNvbmZpZy5nZXRQcm9wZXJ0eUFzQm9vbGVhbihDT1JFX0NPTkZJR19PUFRJT05TLkFDQ09VTlRfTEFUX0xPTkdfRk9STUFUX0VOQUJMRSkgJiZcbiAgICAgIC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggZGVwcmVjYXRlZCBrZXlcbiAgICAgIGNvbmZpZy5nZXRQcm9wZXJ0eUFzQm9vbGVhbihDT1JFX0NPTkZJR19PUFRJT05TLkRFRkFVTFRfTEFUX0xPTkdfRk9STUFUX0VOQUJMRUQpO1xuXG4gICAgY29uc3QgYXV0aFRva2VuVHlwZSA9IGNvbmZpZy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkFVVEhfVE9LRU5fVFlQRSkgYXMgQXV0aFRva2VuVHlwZTtcbiAgICB0aGlzLmNhbkNoYW5nZVBhc3N3b3JkID0gYXV0aFRva2VuVHlwZSA9PT0gJ3Rva2VuJztcbiAgICB0aGlzLnNob3dTZWN1cml0eURldGFpbHMgPSB0aGlzLmNhbkNoYW5nZVBhc3N3b3JkO1xuICAgIHRoaXMuc2hvd0FwaVRva2VucyA9IGNvbmZpZy5nZXRQcm9wZXJ0eUFzQm9vbGVhbihDT1JFX0NPTkZJR19PUFRJT05TLkFVVEhfQVBJX1RPS0VOX0VOQUJMRUQpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3BlbkNoYW5nZVBhc3N3b3JkUGFnZSgpIHtcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKCdhY2NvdW50L3Bhc3N3b3JkJyk7XG4gIH1cbn1cbiIsIjxhcHAtdG9vbGJhclxuICBbdGl0bGVdPVwiJ0FDQ09VTlQuVElUTEUnIHwgdHJhbnNsYXRlXCJcbiAgY29sb3I9XCJwcmltYXJ5XCJcbiAgW2hhc1ZhbGlkYXRlXT1cImRpcnR5ICYmICFzYXZpbmdcIlxuICBbaGFzQ2xvc2VdPVwiIWRpcnR5ICYmICFzYXZpbmdcIlxuICAob25WYWxpZGF0ZSk9XCJzYXZlKClcIlxuICAob25DbG9zZSk9XCJjbG9zZSgkZXZlbnQpXCJcbj5cbiAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICBAaWYgKGxvYWRpbmcgfHwgc2F2aW5nKSB7XG4gICAgICA8IS0tIGxvYWRlciAtLT5cbiAgICAgIDxpb24tc3Bpbm5lcj48L2lvbi1zcGlubmVyPlxuICAgIH0gQGVsc2UgaWYgKG5ldHdvcmsub25saW5lKSB7XG4gICAgICA8IS0tIHJlZnJlc2ggYnV0dG9uIChpZiBvbmxpbmUpIC0tPlxuICAgICAgPGlvbi1idXR0b24gW21hdFRvb2x0aXBdPVwiJ0NPTU1PTi5CVE5fUkVGUkVTSCcgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwicmVmcmVzaCgkZXZlbnQpXCI+XG4gICAgICAgIDxtYXQtaWNvbiBzbG90PVwiaWNvbi1vbmx5XCI+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgfVxuICA8L2lvbi1idXR0b25zPlxuPC9hcHAtdG9vbGJhcj5cblxuPGlvbi1jb250ZW50PlxuICA8IS0tIEluc3RhbGwgKGFuZCB1cGdyYWRlKSBjYXJkIC0tPlxuICA8YXBwLWluc3RhbGwtdXBncmFkZS1jYXJkIFtpc0xvZ2luXT1cImlzTG9naW5cIiBbc2hvd0luc3RhbGxCdXR0b25dPVwidHJ1ZVwiPjwvYXBwLWluc3RhbGwtdXBncmFkZS1jYXJkPlxuXG4gIDwhLS0gZXJyb3IgLS0+XG4gIEBpZiAobW9iaWxlICYmIGVycm9yU3ViamVjdCB8IGFzeW5jOyBhcyBlcnJvcikge1xuICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIj5cbiAgICAgIDxpb24taWNvbiBjb2xvcj1cImRhbmdlclwiIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJhbGVydC1jaXJjbGVcIj48L2lvbi1pY29uPlxuICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cImRhbmdlclwiIGNsYXNzPVwiZXJyb3JcIiBbaW5uZXJIVE1MXT1cImVycm9yIHwgdHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gICAgPC9pb24taXRlbT5cbiAgfVxuXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIG5vdmFsaWRhdGUgY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiPlxuICAgIDxtYXQtdGFiLWdyb3VwXG4gICAgICAjdGFiR3JvdXBcbiAgICAgIFsoc2VsZWN0ZWRJbmRleCldPVwic2VsZWN0ZWRUYWJJbmRleFwiXG4gICAgICBjbGFzcz1cIm1hdC1tZGMtdGFiLWRpc2FibGVkLWhpZGRlblwiXG4gICAgICBbbWF0LXN0cmV0Y2gtdGFic109XCJtb2JpbGVcIlxuICAgICAgZHluYW1pY0hlaWdodFxuICAgID5cbiAgICAgIDwhLS0gVEFCOiB1c2VyIGRldGFpbHMgLS0+XG4gICAgICA8bWF0LXRhYiBbbGFiZWxdPVwiJ0FDQ09VTlQuVVNFUl9ERVRBSUxTLlRJVExFJyB8IHRyYW5zbGF0ZVwiIGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XG4gICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgPGlvbi1pY29uIG1hdFByZWZpeCBzbG90PVwic3RhcnRcIiBuYW1lPVwicGVyc29uLWNpcmNsZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8aW9uLWxhYmVsPnt7ICdBQ0NPVU5ULlVTRVJfREVUQUlMUy5USVRMRScgfCB0cmFuc2xhdGUgfX08L2lvbi1sYWJlbD5cbiAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImVuZFwiIG5hbWU9XCJhbGVydC1jaXJjbGVcIiBjb2xvcj1cImRhbmdlclwiICpuZ0lmPVwic3VibWl0dGVkICYmIGZvcm0uaW52YWxpZFwiPjwvaW9uLWljb24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICA8IS0tIGxlZnQgIG1hcmdpbiAtLT5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCIwXCIgc2l6ZS1sZz1cIjFcIiBzaXplLXhsPVwiMlwiPiZuYnNwOzwvaW9uLWNvbD5cblxuICAgICAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICA8aW9uLWxpc3QtaGVhZGVyPjxwIFtpbm5lckhUTUxdPVwiJ0FDQ09VTlQuVVNFUl9ERVRBSUxTLkRFU0NSSVBUSU9OJyB8IHRyYW5zbGF0ZVwiPjwvcD48L2lvbi1saXN0LWhlYWRlcj5cblxuICAgICAgICAgICAgICA8aW9uLWxpc3QgW2luc2V0XT1cIm1vYmlsZVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gRW1haWwgLS0+XG4gICAgICAgICAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdVU0VSLkVNQUlMJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIiBhdXRvY29tcGxldGU9XCJzZWN0aW9uLXJlZCBlbWFpbFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmVtYWlsLmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIGZvcm0uY29udHJvbHMuZW1haWwuZGlydHlcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgRVJST1IuRklFTERfUkVRVUlSRURcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmVtYWlsLmhhc0Vycm9yKCdlbWFpbCcpICYmIGZvcm0uY29udHJvbHMuZW1haWwuZGlydHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnRVJST1IuRklFTERfTk9UX1ZBTElEX0VNQUlMJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICBAaWYgKGVtYWlsPy5ub3RDb25maXJtZWQpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmcgaW9uLXBhZGRpbmctYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWNvbCBjb2xvcj1cImRhbmdlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgY29sb3I9XCJkYW5nZXJcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0IFtpbm5lckhUTUxdPVwiJ0FDQ09VTlQuRU1BSUxfTk9UX0NPTkZJUk1FRF9MQUJFTCcgfCB0cmFuc2xhdGVcIj48L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cblxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tcm93IHN0eWxlPVwiaGVpZ2h0OiA1MXB4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWNvbCBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgW2lubmVySFRNTF09XCInQUNDT1VOVC5FTUFJTF9OT1RfUkVDRUlWRURfUVVFU1RJT04nIHwgdHJhbnNsYXRlXCI+PC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWVtYWlsLnNlbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwic29saWRcIiBjb2xvcj1cInNlY29uZGFyeVwiIChjbGljayk9XCJzZW5kQ29uZmlybWF0aW9uRW1haWwoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FDQ09VTlQuQlROX1JFU0VORCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tc3Bpbm5lciBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+PC9pb24tc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cblxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tcm93ICpuZ0lmPVwiZW1haWwuZXJyb3IgJiYgIWVtYWlsLnNlbmRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImVtYWlsLmVycm9yICYmICFlbWFpbC5zZW5kaW5nXCIgW2lubmVySFRNTF09XCJlbWFpbC5lcnJvciB8IHRyYW5zbGF0ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWdyaWQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8IS0tIExhc3QgbmFtZSAtLT5cbiAgICAgICAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ1VTRVIuTEFTVF9OQU1FJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIFthcHBBdXRvZm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F1dG9mb2N1c0RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGFzdE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cInNlY3Rpb24tYmx1ZSBmYW1pbHktbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybS5jb250cm9scy5sYXN0TmFtZS5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBmb3JtLmNvbnRyb2xzLmxhc3ROYW1lLmRpcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIEVSUk9SLkZJRUxEX1JFUVVJUkVEXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybS5jb250cm9scy5sYXN0TmFtZS5oYXNFcnJvcignbWlubGVuZ3RoJykgJiYgZm9ybS5jb250cm9scy5sYXN0TmFtZS5kaXJ0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdFUlJPUi5GSUVMRF9NSU5fTEVOR1RIJyB8IHRyYW5zbGF0ZTogeyByZXF1aXJlZExlbmd0aDogMiB9IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9pb24taXRlbT5cblxuICAgICAgICAgICAgICAgIDwhLS0gRmlyc3QgbmFtZSAtLT5cbiAgICAgICAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ1VTRVIuRklSU1RfTkFNRScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImZpcnN0TmFtZVwiIGF1dG9jb21wbGV0ZT1cInNlY3Rpb24tYmx1ZSBnaXZlbi1uYW1lXCIgcmVxdWlyZWQgLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybS5jb250cm9scy5maXJzdE5hbWUuaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgZm9ybS5jb250cm9scy5maXJzdE5hbWUuZGlydHlcIlxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgRVJST1IuRklFTERfUkVRVUlSRURcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmZpcnN0TmFtZS5oYXNFcnJvcignbWlubGVuZ3RoJykgJiYgZm9ybS5jb250cm9scy5maXJzdE5hbWUuZGlydHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnRVJST1IuRklFTERfTUlOX0xFTkdUSCcgfCB0cmFuc2xhdGU6IHsgcmVxdWlyZWRMZW5ndGg6IDIgfSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEFkZGl0aW9uYWwgZmllbGRzIC0tPlxuICAgICAgICAgICAgICAgIEBmb3IgKGRlZmluaXRpb24gb2YgYWRkaXRpb25hbEZpZWxkczsgdHJhY2sgZGVmaW5pdGlvbi5rZXkpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1mb3JtLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgW2RlZmluaXRpb25dPVwiZGVmaW5pdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJkZWZpbml0aW9uLmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmluaXRpb24uZXh0cmEgJiYgZGVmaW5pdGlvbi5leHRyYS5hY2NvdW50ICYmIGRlZmluaXRpb24uZXh0cmEuYWNjb3VudC5yZXF1aXJlZCkgfHwgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2lvbi1saXN0PlxuXG4gICAgICAgICAgICAgIDwhLS0gU2VjdXJpdHkgLS0+XG4gICAgICAgICAgICAgIEBpZiAoc2hvd1NlY3VyaXR5RGV0YWlscykge1xuICAgICAgICAgICAgICAgIDxpb24tbGlzdC1oZWFkZXI+PGgzIHRyYW5zbGF0ZT5BQ0NPVU5ULlNFQ1VSSVRZLlRJVExFPC9oMz48L2lvbi1saXN0LWhlYWRlcj5cblxuICAgICAgICAgICAgICAgIDxpb24tbGlzdCBbaW5zZXRdPVwibW9iaWxlXCI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgW2J1dHRvbl09XCJtb2JpbGVcIlxuICAgICAgICAgICAgICAgICAgICByb3V0ZXJEaXJlY3Rpb249XCJmb3J3YXJkXCJcbiAgICAgICAgICAgICAgICAgICAgbGluZXM9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5DaGFuZ2VQYXNzd29yZFBhZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwia2V5cGFkXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPnt7ICdBQ0NPVU5ULlNFQ1VSSVRZLlBBU1NXT1JEJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cInRlcnRpYXJ5XCI+e3sgJ0FDQ09VTlQuU0VDVVJJVFkuQlROX0NIQU5HRV9QQVNTV09SRCcgfCB0cmFuc2xhdGUgfX08L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgICBAaWYgKCFtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImVuZFwiIGNvbG9yPVwidGVydGlhcnlcIiBuYW1lPVwiY2hldnJvbi1mb3J3YXJkXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICAgICAgICA8L2lvbi1saXN0PlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgPCEtLSBUZWNobmljYWwgZGV0YWlscyAtLT5cbiAgICAgICAgICAgICAgQGlmIChzaG93VGVjaG5pY2FsRGV0YWlscykge1xuICAgICAgICAgICAgICAgIDxpb24tbGlzdC1oZWFkZXI+PGgzIHRyYW5zbGF0ZT5BQ0NPVU5ULlVTRVJfREVUQUlMUy5URUNITklDQUxfRElWSURFUjwvaDM+PC9pb24tbGlzdC1oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICA8aW9uLWxpc3QgW2luc2V0XT1cIm1vYmlsZVwiPlxuICAgICAgICAgICAgICAgICAgPCEtLSBwcm9maWxlIC0tPlxuICAgICAgICAgICAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnQUNDT1VOVC5VU0VSX0RFVEFJTFMuUFJPRklMRScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgaGlkZGVuIHJlYWRvbmx5PVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cIm1haW5Qcm9maWxlXCIgcmVxdWlyZWQgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnVVNFUi5QUk9GSUxFX0VOVU0uJyArIGZvcm0uY29udHJvbHMubWFpblByb2ZpbGUudmFsdWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmZpcnN0TmFtZS5oYXNFcnJvcignbWFpblByb2ZpbGUnKSAmJiBmb3JtLmNvbnRyb2xzLm1haW5Qcm9maWxlLmRpcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIEVSUk9SLkZJRUxEX1JFUVVJUkVEXG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIHB1YmtleSAtLT5cbiAgICAgICAgICAgICAgICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ0FDQ09VTlQuVVNFUl9ERVRBSUxTLlBVQktFWScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVhZG9ubHk9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwicHVia2V5XCIgcmVxdWlyZWQgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm0uY29udHJvbHMuZmlyc3ROYW1lLmhhc0Vycm9yKCdwdWJrZXknKSAmJiBmb3JtLmNvbnRyb2xzLmZpcnN0TmFtZS5kaXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBFUlJPUi5GSUVMRF9SRVFVSVJFRFxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmZpcnN0TmFtZS5oYXNFcnJvcigncHVia2V5JykgJiYgZm9ybS5jb250cm9scy5maXJzdE5hbWUuZGlydHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfUFVCS0VZPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICAgICAgICA8L2lvbi1saXN0PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgICAgIDwhLS0gcmlnaHQgbWFyZ2luIC0tPlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjBcIiBzaXplLWxnPVwiMVwiIHNpemUteGw9XCIyXCI+Jm5ic3A7PC9pb24tY29sPlxuICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgPC9pb24tZ3JpZD5cbiAgICAgIDwvbWF0LXRhYj5cblxuICAgICAgPCEtLSBUQUI6IHNldHRpbmdzIC0tPlxuICAgICAgPG1hdC10YWIgW2xhYmVsXT1cIidBQ0NPVU5ULlNFVFRJTkdTLlRJVExFJyB8IHRyYW5zbGF0ZVwiIGZvcm1Hcm91cE5hbWU9XCJzZXR0aW5nc1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cbiAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICA8aW9uLWljb24gbWF0UHJlZml4IHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJzZXR0aW5nc1wiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5BQ0NPVU5ULlNFVFRJTkdTLlRJVExFPC9pb24tbGFiZWw+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICAgICAgPHAgW2lubmVySFRNTF09XCInQUNDT1VOVC5TRVRUSU5HUy5ERVNDUklQVElPTicgfCB0cmFuc2xhdGVcIj48L3A+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdBQ0NPVU5ULlNFVFRJTkdTLkxPQ0FMRScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImxvY2FsZVwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsb2NhbGVzXCIgW3ZhbHVlXT1cIml0ZW0ua2V5XCI+XG4gICAgICAgICAgICAgICAge3sgaXRlbS52YWx1ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPVwic2V0dGluZ3NGb3JtPy5jb250cm9scy5sb2NhbGUuaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgc2V0dGluZ3NGb3JtPy5jb250cm9scy5sb2NhbGUuZGlydHlcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgRVJST1IuRklFTERfUkVRVUlSRURcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8IS0tIGxhdC9sb25nIGZvcm1hdC0tPlxuICAgICAgICAgIEBpZiAoc2hvd0xhdExvbkZvcm1hdCkge1xuICAgICAgICAgICAgQGxldCBjb250cm9sID0gc2V0dGluZ3NGb3JtIHwgZm9ybUdldENvbnRyb2w6ICdsYXRMb25nRm9ybWF0JztcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnQUNDT1VOVC5TRVRUSU5HUy5MQVRfTE9OR19GT1JNQVQnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBsYXRMb25nRm9ybWF0czsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0NPTU1PTi5MQVRfTE9ORy5FTlVNLicgKyBpdGVtIHwgdXBwZXJjYXNlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIEBpZiAoY29udHJvbC5kaXJ0eSAmJiBjb250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gT3B0aW9ucyB0YWJsZSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnMtdGFibGVcIiBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCJvcHRpb25EZWZpbml0aW9ucyB8IGlzRW1wdHlBcnJheVwiPlxuICAgICAgICAgIDxhcHAtcHJvcGVydGllcy10YWJsZVxuICAgICAgICAgICAgI3Byb3BlcnRpZXNUYWJsZVxuICAgICAgICAgICAgaTE4bkNvbHVtblByZWZpeD1cIkFDQ09VTlQuU0VUVElOR1MuT1BUSU9OUy5cIlxuICAgICAgICAgICAgW2RlZmluaXRpb25zXT1cIm9wdGlvbkRlZmluaXRpb25zXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbY2FuRWRpdF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtkZWJ1Z109XCJkZWJ1Z1wiXG4gICAgICAgICAgICAob25EaXJ0eSk9XCIkZXZlbnQgPyBtYXJrQXNEaXJ0eSgpIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICA+PC9hcHAtcHJvcGVydGllcy10YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC10YWI+XG5cbiAgICAgIDwhLS0gVEFCOiB0b2tlbnMgLS0+XG4gICAgICA8bWF0LXRhYiBbbGFiZWxdPVwiJ0FDQ09VTlQuVE9LRU5TLlRJVExFJyB8IHRyYW5zbGF0ZVwiIGZvcm1Hcm91cE5hbWU9XCJ0b2tlbnNcIiBbZGlzYWJsZWRdPVwiIXNob3dBcGlUb2tlbnNcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XG4gICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgPGlvbi1pY29uIG1hdFByZWZpeCBzbG90PVwic3RhcnRcIiBuYW1lPVwidGlja2V0XCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkFDQ09VTlQuVE9LRU5TLlRJVExFPC9pb24tbGFiZWw+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICAgICAgPHAgW2lubmVySFRNTF09XCInQUNDT1VOVC5UT0tFTlMuREVTQ1JJUFRJT04nIHwgdHJhbnNsYXRlXCI+PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSBUb2tlbnMgdGFibGUgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2tlbnMtdGFibGVcIj5cbiAgICAgICAgICA8YXBwLXVzZXItdG9rZW4tdGFibGVcbiAgICAgICAgICAgICN0b2tlbnNUYWJsZVxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjYW5FZGl0XT1cInRydWVcIlxuICAgICAgICAgICAgW2RlYnVnXT1cImRlYnVnXCJcbiAgICAgICAgICAgIChvbkRpcnR5KT1cIiRldmVudCA/IG1hcmtBc0RpcnR5KCkgOiB1bmRlZmluZWRcIlxuICAgICAgICAgID48L2FwcC11c2VyLXRva2VuLXRhYmxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LXRhYj5cbiAgICA8L21hdC10YWItZ3JvdXA+XG4gIDwvZm9ybT5cbjwvaW9uLWNvbnRlbnQ+XG5cbjxpb24tZm9vdGVyIGhpZGRlbi14cyBoaWRkZW4tc20gaGlkZGVuLW1vYmlsZT5cbiAgPGFwcC1mb3JtLWJ1dHRvbnMtYmFyIChvbkNhbmNlbCk9XCJjYW5jZWwoKVwiIChvblNhdmUpPVwic2F2ZSgpXCIgW2Rpc2FibGVkXT1cIiFmb3JtLmRpcnR5IHx8ICF2YWxpZCB8fCBzYXZpbmdcIj5cbiAgICA8IS0tIGVycm9yIC0tPlxuICAgIDxpb24taXRlbSAqbmdJZj1cImVycm9yICYmICFtb2JpbGVcIiBsaW5lcz1cIm5vbmVcIj5cbiAgICAgIDxpb24taWNvbiBjb2xvcj1cImRhbmdlclwiIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJhbGVydC1jaXJjbGVcIj48L2lvbi1pY29uPlxuICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cImRhbmdlclwiIGNsYXNzPVwiZXJyb3JcIiBbaW5uZXJIVE1MXT1cImVycm9yIHwgdHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gICAgPC9pb24taXRlbT5cbiAgPC9hcHAtZm9ybS1idXR0b25zLWJhcj5cbjwvaW9uLWZvb3Rlcj5cbiJdfQ==
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5wYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2FjY291bnQvYWNjb3VudC5wYWdlLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2FjY291bnQvYWNjb3VudC5wYWdlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBK0IsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BKLE9BQU8sRUFBRSxhQUFhLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRCxPQUFPLEVBQXdDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sb0JBQW9CLENBQUM7QUFFNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQStCLE1BQU0sa0NBQWtDLENBQUM7QUFFNUYsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQXNCLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztB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QVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWNjb3VudCB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2FjY291bnQubW9kZWwnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWNjb3VudFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy92YWxpZGF0b3IvYWNjb3VudC52YWxpZGF0b3InO1xuaW1wb3J0IHsgQXBwRm9ybSB9IGZyb20gJy4uL2Zvcm0vZm9ybS5jbGFzcyc7XG5pbXBvcnQgeyBBcHBGb3JtVXRpbHMsIENhbkxlYXZlIH0gZnJvbSAnLi4vZm9ybS9mb3JtLnV0aWxzJztcbmltcG9ydCB7IEZvcm1GaWVsZERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBMQVRfTE9OR19QQVRURVJOUyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9sYXRsb25nL2xhdGxvbmcudXRpbHMnO1xuaW1wb3J0IHsgU3RhdHVzSWRzIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvbW9kZWwuZW51bSc7XG5pbXBvcnQgeyBBUFBfTE9DQUxFUywgTG9jYWxlQ29uZmlnLCBMb2NhbFNldHRpbmdzIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHsgTmV0d29ya1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNYXRUYWJHcm91cCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IENPUkVfQ09ORklHX09QVElPTlMgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHsgQXBwUHJvcGVydGllc1RhYmxlLCBQcm9wZXJ0eUVudGl0eSB9IGZyb20gJy4uL2Zvcm0vcHJvcGVydGllcy9wcm9wZXJ0aWVzLnRhYmxlJztcbmltcG9ydCB7IGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IFVzZXJUb2tlblRhYmxlIH0gZnJvbSAnLi90b2tlbi50YWJsZSc7XG5pbXBvcnQgeyBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2NvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBBdXRoVG9rZW5UeXBlIH0gZnJvbSAnLi4vc2VydmljZXMvbmV0d29yay50eXBlcyc7XG5pbXBvcnQgeyBQcm9wZXJ0eU1hcCB9IGZyb20gJy4uLy4uL3NoYXJlZC90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1hY2NvdW50LXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJ2FjY291bnQucGFnZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWNjb3VudC5wYWdlLnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFjY291bnRQYWdlIGV4dGVuZHMgQXBwRm9ybTxBY2NvdW50PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDYW5MZWF2ZSB7XG4gIEBWaWV3Q2hpbGQoJ3RhYkdyb3VwJywgeyBzdGF0aWM6IHRydWUgfSkgdGFiR3JvdXA6IE1hdFRhYkdyb3VwO1xuICBAVmlld0NoaWxkKCdwcm9wZXJ0aWVzVGFibGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcm9wZXJ0aWVzVGFibGU6IEFwcFByb3BlcnRpZXNUYWJsZTtcbiAgQFZpZXdDaGlsZCgndG9rZW5zVGFibGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0b2tlbnNUYWJsZTogVXNlclRva2VuVGFibGU7XG5cbiAgcHJvdGVjdGVkIHNlbGVjdGVkVGFiSW5kZXggPSAwO1xuICBwcm90ZWN0ZWQgaXNMb2dpbjogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGNoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIG5ldHdvcmtTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIGVtYWlsID0ge1xuICAgIGNvbmZpcm1lZDogZmFsc2UsXG4gICAgbm90Q29uZmlybWVkOiBmYWxzZSxcbiAgICBzZW5kaW5nOiBmYWxzZSxcbiAgICBlcnJvcjogdW5kZWZpbmVkLFxuICB9O1xuICBwcm90ZWN0ZWQgYWRkaXRpb25hbEZpZWxkczogRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuICBwcm90ZWN0ZWQgb3B0aW9uRGVmaW5pdGlvbnM6IEZvcm1GaWVsZERlZmluaXRpb25bXTtcblxuICBnZXQgc2V0dGluZ3NGb3JtKCk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdzZXR0aW5ncycpIGFzIFVudHlwZWRGb3JtR3JvdXA7XG4gIH1cblxuICAvLyBzZXR0aW5nc0NvbnRlbnRGb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBwcm90ZWN0ZWQgbG9jYWxlczogTG9jYWxlQ29uZmlnW107XG4gIHByb3RlY3RlZCBsYXRMb25nRm9ybWF0cyA9IExBVF9MT05HX1BBVFRFUk5TO1xuICBwcm90ZWN0ZWQgc2F2aW5nID0gZmFsc2U7XG4gIHByb3RlY3RlZCBzdWJtaXR0ZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGFjY291bnRSZWFkT25seSA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9iaWxlOiBib29sZWFuO1xuXG4gIGdldCB2YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIudmFsaWQgJiYgKHRoaXMucHJvcGVydGllc1RhYmxlPy52YWxpZCB8fCB0cnVlKTtcbiAgfVxuXG4gIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5pbnZhbGlkICYmICh0aGlzLnByb3BlcnRpZXNUYWJsZSA/IHRoaXMucHJvcGVydGllc1RhYmxlLmludmFsaWQgOiBmYWxzZSk7XG4gIH1cblxuICBnZXQgZGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmRpcnR5IHx8IHRoaXMucHJvcGVydGllc1RhYmxlPy5kaXJ0eSB8fCBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93TGF0TG9uRm9ybWF0ID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIGNhbkNoYW5nZVBhc3N3b3JkID0gZmFsc2U7XG4gIHByb3RlY3RlZCBzaG93U2VjdXJpdHlEZXRhaWxzID0gZmFsc2U7XG4gIHByb3RlY3RlZCBzaG93VGVjaG5pY2FsRGV0YWlscyA9IHRydWU7XG4gIHByb3RlY3RlZCBzaG93QXBpVG9rZW5zID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHB1YmxpYyBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHB1YmxpYyBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHVibGljIG5ldHdvcms6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBuYXZDb250cm9sbGVyOiBOYXZDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCB2YWxpZGF0b3JTZXJ2aWNlOiBBY2NvdW50VmFsaWRhdG9yU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoQVBQX0xPQ0FMRVMpIGxvY2FsZXM6IExvY2FsZUNvbmZpZ1tdXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yLCB2YWxpZGF0b3JTZXJ2aWNlLmdldEZvcm1Hcm91cChhY2NvdW50U2VydmljZS5hY2NvdW50LCB7IHdpdGhTZXR0aW5nczogdHJ1ZSB9KSk7XG5cbiAgICB0aGlzLmxvY2FsZXMgPSBsb2NhbGVzO1xuXG4gICAgdGhpcy5tb2JpbGUgPSB0aGlzLnNldHRpbmdzLm1vYmlsZTtcbiAgICB0aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG5cbiAgICAvLyBCeSBkZWZhdWx0LCBkaXNhYmxlIHRoZSBmb3JtXG4gICAgdGhpcy5kaXNhYmxlKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgLy8gR2V0IHVzZXIgb3B0aW9uc1xuICAgIHRoaXMub3B0aW9uRGVmaW5pdGlvbnMgPSAodGhpcy5hY2NvdW50U2VydmljZS5vcHRpb25EZWZzIHx8IFtdKS5maWx0ZXIoXG4gICAgICAoZGVmaW5pdGlvbikgPT4gIWRlZmluaXRpb24uZGlzYWJsZWQgJiYgKCFkZWZpbml0aW9uLm1pblByb2ZpbGUgfHwgdGhpcy5hY2NvdW50U2VydmljZS5oYXNNaW5Qcm9maWxlKGRlZmluaXRpb24ubWluUHJvZmlsZSkpXG4gICAgKTtcblxuICAgIC8vIE9ic2VydmVkIHNvbWUgZXZlbnRzXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9naW4ucGlwZShmaWx0ZXIoKCkgPT4gIXRoaXMuc2F2aW5nKSkuc3Vic2NyaWJlKChhY2NvdW50KSA9PiB0aGlzLm9uTG9naW4oYWNjb3VudCkpKTtcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dvdXQuc3Vic2NyaWJlKCgpID0+IHRoaXMub25Mb2dvdXQoKSkpO1xuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uQ2FuY2VsLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5hY2NvdW50U2VydmljZS5hY2NvdW50KTtcbiAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2UuJGFkZGl0aW9uYWxGaWVsZHMuc3Vic2NyaWJlKChhZGRpdGlvbmFsRmllbGRzKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkaXRpb25hbEZpZWxkcyA9IGFkZGl0aW9uYWxGaWVsZHMuc2xpY2UoKTsgLy8gQ29weVxuICAgICAgICBpZiAodGhpcy5hY2NvdW50U2VydmljZS5pc0xvZ2luKCkpIHtcbiAgICAgICAgICB0aGlzLm9uTG9naW4odGhpcy5hY2NvdW50U2VydmljZS5hY2NvdW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuY29uZmlnU2VydmljZS5jb25maWcuc3Vic2NyaWJlKChjb25maWcpID0+IHRoaXMub25Db25maWdMb2FkZWQoY29uZmlnKSkpO1xuXG4gICAgLy8gUmVhbGlnbiB0YWIsIGFmdGVyIGEgZGVsYXkgYmVjYXVzZSB0aGUgdGFiIGNhbiBiZSBkaXNhYmxlZCB3aGVuIGNvbXBvbmVudCBpcyBjcmVhdGVkXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRhYkdyb3VwLnJlYWxpZ25JbmtCYXIoKSwgNTAwKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5zdG9wTGlzdGVuQ2hhbmdlcygpO1xuICAgIHRoaXMubmV0d29ya1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG9uTG9naW4oYWNjb3VudDogQWNjb3VudCkge1xuICAgIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBMb2dnZWQgYWNjb3VudDogJywgYWNjb3VudCk7XG4gICAgdGhpcy5pc0xvZ2luID0gdHJ1ZTtcblxuICAgIHRoaXMuc2V0VmFsdWUoYWNjb3VudCk7XG5cbiAgICB0aGlzLmVtYWlsLmNvbmZpcm1lZCA9IGFjY291bnQgJiYgYWNjb3VudC5lbWFpbCAmJiBhY2NvdW50LnN0YXR1c0lkICE9PSBTdGF0dXNJZHMuVEVNUE9SQVJZO1xuICAgIHRoaXMuZW1haWwubm90Q29uZmlybWVkID0gYWNjb3VudCAmJiBhY2NvdW50LmVtYWlsICYmICghYWNjb3VudC5zdGF0dXNJZCB8fCBhY2NvdW50LnN0YXR1c0lkID09PSBTdGF0dXNJZHMuVEVNUE9SQVJZKTtcblxuICAgIHRoaXMubmV0d29ya1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm5ldHdvcmtTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWcsXG4gICAgICB0aGlzLm5ldHdvcmsub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5waXBlKG1hcCgoY29ubmVjdGlvblR5cGUpID0+IGNvbm5lY3Rpb25UeXBlICE9PSAnbm9uZScpKSxcbiAgICBdKS5zdWJzY3JpYmUoKFtjb25maWcsIG9ubGluZV0pID0+IHtcbiAgICAgIHRoaXMub25Db25maWdMb2FkZWQoY29uZmlnKTtcblxuICAgICAgaWYgKG9ubGluZSkge1xuICAgICAgICB0aGlzLmVuYWJsZSgpO1xuICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIHRoaXMuc3RhcnRMaXN0ZW5DaGFuZ2VzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc2FibGUoKTtcbiAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICB0aGlzLnN0b3BMaXN0ZW5DaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uTG9nb3V0KCkge1xuICAgIHRoaXMuaXNMb2dpbiA9IGZhbHNlO1xuICAgIHRoaXMuZW1haWwuY29uZmlybWVkID0gZmFsc2U7XG4gICAgdGhpcy5lbWFpbC5ub3RDb25maXJtZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVtYWlsLnNlbmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtYWlsLmVycm9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgdGhpcy5uZXR3b3JrU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zdG9wTGlzdGVuQ2hhbmdlcygpO1xuXG4gICAgLy8gQmFjayB0byBob21lXG4gICAgdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlUm9vdCgnLycpO1xuICB9XG5cbiAgYXN5bmMgc2V0VmFsdWUoZGF0YTogQWNjb3VudCwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgb25seVNlbGY/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzdXBlci5zZXRWYWx1ZShkYXRhLCBvcHRzKTtcblxuICAgIC8vIFNldCBvcHRpb25zXG4gICAgaWYgKGlzTm90RW1wdHlBcnJheSh0aGlzLm9wdGlvbkRlZmluaXRpb25zKSAmJiB0aGlzLnByb3BlcnRpZXNUYWJsZSkge1xuICAgICAgY29uc3QgeyBwcm9wZXJ0aWVzIH0gPSBkYXRhPy5zZXR0aW5ncz8uYXNMb2NhbFNldHRpbmdzKHsgZGVmaW5pdGlvbnM6IHRoaXMub3B0aW9uRGVmaW5pdGlvbnMgfSkgfHwge307XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzRW50aXRpZXM6IFByb3BlcnR5RW50aXR5W10gPSB0aGlzLm9wdGlvbkRlZmluaXRpb25zXG4gICAgICAubWFwKChkZWZpbml0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJvcGVydGllc1tkZWZpbml0aW9uLmtleV07XG4gICAgICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyBQcm9wZXJ0eUVudGl0eS5mcm9tT2JqZWN0KHsgZGVmaW5pdGlvbiwgdmFsdWUgfSkgOiBudWxsO1xuICAgICAgfSlcbiAgICAgICAgLmZpbHRlcihpc05vdE5pbCk7XG4gICAgICBhd2FpdCB0aGlzLnByb3BlcnRpZXNUYWJsZS5yZWFkeSgpO1xuICAgICAgdGhpcy5wcm9wZXJ0aWVzVGFibGUudmFsdWUgPSBwcm9wZXJ0aWVzRW50aXRpZXM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zVGFibGUpIHtcbiAgICAgIGF3YWl0IHRoaXMudG9rZW5zVGFibGUucmVhZHkoKTtcbiAgICAgIHRoaXMudG9rZW5zVGFibGUudmFsdWUgPSBkYXRhLnRva2VucztcbiAgICB9XG4gIH1cblxuICBhc3luYyByZWZyZXNoKF8/OiBFdmVudCkge1xuICAgIHRoaXMuZGlzYWJsZSgpO1xuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYWNjb3VudFNlcnZpY2UucmVsb2FkKCk7XG4gIH1cblxuICBzdGFydExpc3RlbkNoYW5nZXMoKSB7XG4gICAgaWYgKHRoaXMuY2hhbmdlc1N1YnNjcmlwdGlvbikgcmV0dXJuOyAvLyBhbHJlYWR5IHN0YXJ0ZWRcbiAgICB0aGlzLmNoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLmFjY291bnRTZXJ2aWNlLmxpc3RlbkNoYW5nZXMoKTtcbiAgfVxuXG4gIHN0b3BMaXN0ZW5DaGFuZ2VzKCkge1xuICAgIGlmICghdGhpcy5jaGFuZ2VzU3Vic2NyaXB0aW9uKSByZXR1cm47XG4gICAgdGhpcy5jaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jaGFuZ2VzU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgc2VuZENvbmZpcm1hdGlvbkVtYWlsKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QganNvbiA9IHRoaXMuZm9ybS52YWx1ZTtcbiAgICBqc29uLmVtYWlsID0gdGhpcy5mb3JtLmNvbnRyb2xzWydlbWFpbCddLnZhbHVlO1xuICAgIGlmICghanNvbi5lbWFpbCB8fCAhdGhpcy5lbWFpbC5ub3RDb25maXJtZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5lbWFpbC5zZW5kaW5nID0gdHJ1ZTtcbiAgICBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gU2VuZGluZyBjb25maXJtYXRpb24gZW1haWwuLi4nKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hY2NvdW50U2VydmljZS5zZW5kQ29uZmlybWF0aW9uRW1haWwoanNvbi5lbWFpbCwgKGpzb24uc2V0dGluZ3MgJiYganNvbi5zZXR0aW5ncy5sb2NhbGUpIHx8IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nKTtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBDb25maXJtYXRpb24gZW1haWwgc2VudC4nKTtcbiAgICAgIHRoaXMuZW1haWwuc2VuZGluZyA9IGZhbHNlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lbWFpbC5zZW5kaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmVtYWlsLmVycm9yID0gKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmUoZXZlbnQ/OiBFdmVudCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLnNhdmluZykgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgIGF3YWl0IEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHRoaXMuZm9ybSk7XG5cbiAgICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgICBBcHBGb3JtVXRpbHMubG9nRm9ybUVycm9ycyh0aGlzLmZvcm0pO1xuICAgICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgbmV3QWNjb3VudCA9IEFjY291bnQuZnJvbU9iamVjdCh7XG4gICAgICAuLi50aGlzLmFjY291bnRTZXJ2aWNlLmFjY291bnQuYXNPYmplY3QoKSxcbiAgICAgIC4uLnRoaXMuZm9ybS52YWx1ZSxcbiAgICB9KTtcblxuICAgIGlmIChpc05vdEVtcHR5QXJyYXkodGhpcy5vcHRpb25EZWZpbml0aW9ucykgJiYgdGhpcy5wcm9wZXJ0aWVzVGFibGUpIHtcbiAgICAgIC8vIG1lcmdlIHByb3BlcnRpZXNcbiAgICAgIGF3YWl0IHRoaXMucHJvcGVydGllc1RhYmxlLnNhdmUoKTtcblxuICAgICAgY29uc3QgcHJvcGVydHlFbnRpdGllcyA9IHRoaXMucHJvcGVydGllc1RhYmxlLnZhbHVlIHx8IFtdO1xuICAgICAgY29uc3QgcHJvcGVydGllczogUHJvcGVydHlNYXAgPSBwcm9wZXJ0eUVudGl0aWVzLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XG4gICAgICAgIHJlc1tpdGVtLmlkXSA9IGl0ZW0udmFsdWU7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9LCB7fSk7XG4gICAgICBjb25zdCBuZXdQcm9wZXJ0aWVzID0geyAuLi5uZXdBY2NvdW50LnNldHRpbmdzLmNvbnRlbnRbJ3Byb3BlcnRpZXMnXSwgLi4ucHJvcGVydGllcyB9O1xuICAgICAgbmV3QWNjb3VudC5zZXR0aW5ncy5tZXJnZSg8TG9jYWxTZXR0aW5ncz57IHByb3BlcnRpZXM6IG5ld1Byb3BlcnRpZXMgfSwgWydwcm9wZXJ0aWVzJ10pO1xuICAgIH0gZWxzZSBpZiAobmV3QWNjb3VudC5zZXR0aW5ncy5jb250ZW50Wydwcm9wZXJ0aWVzJ10pIHtcbiAgICAgIC8vIENsZWFuIHByb3BlcnRpZXNcbiAgICAgIGRlbGV0ZSBuZXdBY2NvdW50LnNldHRpbmdzLmNvbnRlbnRbJ3Byb3BlcnRpZXMnXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50b2tlbnNUYWJsZSkge1xuICAgICAgYXdhaXQgdGhpcy50b2tlbnNUYWJsZS5zYXZlKCk7XG4gICAgICBuZXdBY2NvdW50LnRva2VucyA9IHRoaXMudG9rZW5zVGFibGUudmFsdWU7XG4gICAgfVxuXG4gICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIFNhdmluZyBhY2NvdW50Li4uJywgbmV3QWNjb3VudCk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgICBhd2FpdCB0aGlzLmFjY291bnRTZXJ2aWNlLnNhdmUobmV3QWNjb3VudCk7XG5cbiAgICAgIC8vIFJlbG9hZFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm9uTG9naW4odGhpcy5hY2NvdW50U2VydmljZS5hY2NvdW50KSwgMTAwKTtcblxuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB0aGlzLmVycm9yID0gKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5lbmFibGUoKTtcbiAgICB9XG4gIH1cblxuICBlbmFibGUob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBzdXBlci5lbmFibGUob3B0cyk7XG5cbiAgICAvLyBTb21lIGZpZWxkcyBhcmUgYWx3YXlzIGRpc2FibGVcbiAgICB0aGlzLmZvcm0uY29udHJvbHMuZW1haWwuZGlzYWJsZSgpO1xuICAgIHRoaXMuZm9ybS5jb250cm9scy5tYWluUHJvZmlsZS5kaXNhYmxlKCk7XG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLnB1YmtleS5kaXNhYmxlKCk7XG5cbiAgICAvLyBEaXNhYmxlIGFjY291bnQgZmllbGRzIGlmIHJlYWRvbmx5IGJ5IGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuYWNjb3VudFJlYWRPbmx5O1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmxhc3ROYW1lLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuZm9ybS5jb250cm9scy5maXJzdE5hbWUuZGlzYWJsZSgpO1xuICAgIH1cblxuICAgIC8vIEFsd2F5cyBkaXNhYmxlIHNvbWUgYWRkaXRpb25hbCBmaWVsZHNcbiAgICB0aGlzLmFkZGl0aW9uYWxGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbZmllbGQua2V5XTtcbiAgICAgIGlmICghY29udHJvbCkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICAgIGNvbnN0IGZpZWxkRGlzYWJsZWQgPSBkaXNhYmxlZCB8fCAoZmllbGQuZXh0cmE/LmFjY291bnQgJiYgZmllbGQuZXh0cmEuYWNjb3VudC5kaXNhYmxlZCkgfHwgZmFsc2U7XG4gICAgICBpZiAoZmllbGREaXNhYmxlZCAmJiBjb250cm9sLmVuYWJsZWQpIHtcbiAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXF1aXJlZCA9IChmaWVsZC5leHRyYT8uYWNjb3VudCAmJiBmaWVsZC5leHRyYS5hY2NvdW50LnJlcXVpcmVkKSB8fCBmYWxzZTtcbiAgICAgIGlmICghZmllbGQucmVxdWlyZWQgJiYgcmVxdWlyZWQpIHtcbiAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKGNvbnRyb2wudmFsaWRhdG9yID8gVmFsaWRhdG9ycy5jb21wb3NlKFtjb250cm9sLnZhbGlkYXRvciwgVmFsaWRhdG9ycy5yZXF1aXJlZF0pIDogVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbCgpIHtcbiAgICBhd2FpdCBzdXBlci5jYW5jZWwoKTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKF8/OiBFdmVudCkge1xuICAgIGlmICh0aGlzLnNhdmluZykgcmV0dXJuO1xuXG4gICAgLy8gQmFjayB0byBob21lXG4gICAgcmV0dXJuIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoJy8nKTsgLy8gYmFjayB0byBob21lXG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6YmVmb3JldW5sb2FkJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlUmVmcmVzaChldmVudDogQmVmb3JlVW5sb2FkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBBdm9pZCB0byBxdWl0IHdlYiBicm93c2VyIHBhZ2UsIHdpdGhvdXQgc2F2aW5nXG4gICAgaWYgKCF0aGlzLm1vYmlsZSAmJiB0aGlzLmRpcnR5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBBdm9pZCB0byBxdWl0IHdpdGhvdXQgc2F2aW5nXG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ29uZmlnTG9hZGVkKGNvbmZpZzogQ29uZmlndXJhdGlvbikge1xuICAgIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBDb25maWcgbG9hZGVkOiAnLCBjb25maWcpO1xuICAgIHRoaXMuYWNjb3VudFJlYWRPbmx5ID0gY29uZmlnLmdldFByb3BlcnR5QXNCb29sZWFuKENPUkVfQ09ORklHX09QVElPTlMuQUNDT1VOVF9SRUFET05MWSk7XG4gICAgdGhpcy5zaG93TGF0TG9uRm9ybWF0ID1cbiAgICAgIGNvbmZpZy5nZXRQcm9wZXJ0eUFzQm9vbGVhbihDT1JFX0NPTkZJR19PUFRJT05TLkFDQ09VTlRfTEFUX0xPTkdfRk9STUFUX0VOQUJMRSkgJiZcbiAgICAgIC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggZGVwcmVjYXRlZCBrZXlcbiAgICAgIGNvbmZpZy5nZXRQcm9wZXJ0eUFzQm9vbGVhbihDT1JFX0NPTkZJR19PUFRJT05TLkRFRkFVTFRfTEFUX0xPTkdfRk9STUFUX0VOQUJMRUQpO1xuXG4gICAgY29uc3QgYXV0aFRva2VuVHlwZSA9IGNvbmZpZy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkFVVEhfVE9LRU5fVFlQRSkgYXMgQXV0aFRva2VuVHlwZTtcbiAgICB0aGlzLmNhbkNoYW5nZVBhc3N3b3JkID0gYXV0aFRva2VuVHlwZSA9PT0gJ3Rva2VuJztcbiAgICB0aGlzLnNob3dTZWN1cml0eURldGFpbHMgPSB0aGlzLmNhbkNoYW5nZVBhc3N3b3JkO1xuICAgIHRoaXMuc2hvd0FwaVRva2VucyA9IGNvbmZpZy5nZXRQcm9wZXJ0eUFzQm9vbGVhbihDT1JFX0NPTkZJR19PUFRJT05TLkFVVEhfQVBJX1RPS0VOX0VOQUJMRUQpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3BlbkNoYW5nZVBhc3N3b3JkUGFnZSgpIHtcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKCdhY2NvdW50L3Bhc3N3b3JkJyk7XG4gIH1cbn1cbiIsIjxhcHAtdG9vbGJhclxuICBbdGl0bGVdPVwiJ0FDQ09VTlQuVElUTEUnIHwgdHJhbnNsYXRlXCJcbiAgY29sb3I9XCJwcmltYXJ5XCJcbiAgW2hhc1ZhbGlkYXRlXT1cImRpcnR5ICYmICFzYXZpbmdcIlxuICBbaGFzQ2xvc2VdPVwiIWRpcnR5ICYmICFzYXZpbmdcIlxuICAob25WYWxpZGF0ZSk9XCJzYXZlKClcIlxuICAob25DbG9zZSk9XCJjbG9zZSgkZXZlbnQpXCJcbj5cbiAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICBAaWYgKGxvYWRpbmcgfHwgc2F2aW5nKSB7XG4gICAgICA8IS0tIGxvYWRlciAtLT5cbiAgICAgIDxpb24tc3Bpbm5lcj48L2lvbi1zcGlubmVyPlxuICAgIH0gQGVsc2UgaWYgKG5ldHdvcmsub25saW5lKSB7XG4gICAgICA8IS0tIHJlZnJlc2ggYnV0dG9uIChpZiBvbmxpbmUpIC0tPlxuICAgICAgPGlvbi1idXR0b24gW21hdFRvb2x0aXBdPVwiJ0NPTU1PTi5CVE5fUkVGUkVTSCcgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwicmVmcmVzaCgkZXZlbnQpXCI+XG4gICAgICAgIDxtYXQtaWNvbiBzbG90PVwiaWNvbi1vbmx5XCI+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgfVxuICA8L2lvbi1idXR0b25zPlxuPC9hcHAtdG9vbGJhcj5cblxuPGlvbi1jb250ZW50PlxuICA8IS0tIEluc3RhbGwgKGFuZCB1cGdyYWRlKSBjYXJkIC0tPlxuICA8YXBwLWluc3RhbGwtdXBncmFkZS1jYXJkIFtpc0xvZ2luXT1cImlzTG9naW5cIiBbc2hvd0luc3RhbGxCdXR0b25dPVwidHJ1ZVwiPjwvYXBwLWluc3RhbGwtdXBncmFkZS1jYXJkPlxuXG4gIDwhLS0gZXJyb3IgLS0+XG4gIEBpZiAobW9iaWxlICYmIGVycm9yU3ViamVjdCB8IGFzeW5jOyBhcyBlcnJvcikge1xuICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIj5cbiAgICAgIDxpb24taWNvbiBjb2xvcj1cImRhbmdlclwiIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJhbGVydC1jaXJjbGVcIj48L2lvbi1pY29uPlxuICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cImRhbmdlclwiIGNsYXNzPVwiZXJyb3JcIiBbaW5uZXJIVE1MXT1cImVycm9yIHwgdHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gICAgPC9pb24taXRlbT5cbiAgfVxuXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIG5vdmFsaWRhdGUgY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiPlxuICAgIDxtYXQtdGFiLWdyb3VwXG4gICAgICAjdGFiR3JvdXBcbiAgICAgIFsoc2VsZWN0ZWRJbmRleCldPVwic2VsZWN0ZWRUYWJJbmRleFwiXG4gICAgICBjbGFzcz1cIm1hdC1tZGMtdGFiLWRpc2FibGVkLWhpZGRlblwiXG4gICAgICBbbWF0LXN0cmV0Y2gtdGFic109XCJtb2JpbGVcIlxuICAgICAgZHluYW1pY0hlaWdodFxuICAgID5cbiAgICAgIDwhLS0gVEFCOiB1c2VyIGRldGFpbHMgLS0+XG4gICAgICA8bWF0LXRhYiBbbGFiZWxdPVwiJ0FDQ09VTlQuVVNFUl9ERVRBSUxTLlRJVExFJyB8IHRyYW5zbGF0ZVwiIGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XG4gICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgPGlvbi1pY29uIG1hdFByZWZpeCBzbG90PVwic3RhcnRcIiBuYW1lPVwicGVyc29uLWNpcmNsZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8aW9uLWxhYmVsPnt7ICdBQ0NPVU5ULlVTRVJfREVUQUlMUy5USVRMRScgfCB0cmFuc2xhdGUgfX08L2lvbi1sYWJlbD5cbiAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImVuZFwiIG5hbWU9XCJhbGVydC1jaXJjbGVcIiBjb2xvcj1cImRhbmdlclwiICpuZ0lmPVwic3VibWl0dGVkICYmIGZvcm0uaW52YWxpZFwiPjwvaW9uLWljb24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICA8IS0tIGxlZnQgIG1hcmdpbiAtLT5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCIwXCIgc2l6ZS1sZz1cIjFcIiBzaXplLXhsPVwiMlwiPiZuYnNwOzwvaW9uLWNvbD5cblxuICAgICAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICA8aW9uLWxpc3QtaGVhZGVyPjxwIFtpbm5lckhUTUxdPVwiJ0FDQ09VTlQuVVNFUl9ERVRBSUxTLkRFU0NSSVBUSU9OJyB8IHRyYW5zbGF0ZVwiPjwvcD48L2lvbi1saXN0LWhlYWRlcj5cblxuICAgICAgICAgICAgICA8aW9uLWxpc3QgW2luc2V0XT1cIm1vYmlsZVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gRW1haWwgLS0+XG4gICAgICAgICAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdVU0VSLkVNQUlMJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIiBhdXRvY29tcGxldGU9XCJzZWN0aW9uLXJlZCBlbWFpbFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmVtYWlsLmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIGZvcm0uY29udHJvbHMuZW1haWwuZGlydHlcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgRVJST1IuRklFTERfUkVRVUlSRURcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmVtYWlsLmhhc0Vycm9yKCdlbWFpbCcpICYmIGZvcm0uY29udHJvbHMuZW1haWwuZGlydHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnRVJST1IuRklFTERfTk9UX1ZBTElEX0VNQUlMJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICBAaWYgKGVtYWlsPy5ub3RDb25maXJtZWQpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmcgaW9uLXBhZGRpbmctYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWNvbCBjb2xvcj1cImRhbmdlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgY29sb3I9XCJkYW5nZXJcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0IFtpbm5lckhUTUxdPVwiJ0FDQ09VTlQuRU1BSUxfTk9UX0NPTkZJUk1FRF9MQUJFTCcgfCB0cmFuc2xhdGVcIj48L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cblxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tcm93IHN0eWxlPVwiaGVpZ2h0OiA1MXB4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWNvbCBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgW2lubmVySFRNTF09XCInQUNDT1VOVC5FTUFJTF9OT1RfUkVDRUlWRURfUVVFU1RJT04nIHwgdHJhbnNsYXRlXCI+PC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWVtYWlsLnNlbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwic29saWRcIiBjb2xvcj1cInNlY29uZGFyeVwiIChjbGljayk9XCJzZW5kQ29uZmlybWF0aW9uRW1haWwoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FDQ09VTlQuQlROX1JFU0VORCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tc3Bpbm5lciBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+PC9pb24tc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cblxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tcm93ICpuZ0lmPVwiZW1haWwuZXJyb3IgJiYgIWVtYWlsLnNlbmRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImVtYWlsLmVycm9yICYmICFlbWFpbC5zZW5kaW5nXCIgW2lubmVySFRNTF09XCJlbWFpbC5lcnJvciB8IHRyYW5zbGF0ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWdyaWQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8IS0tIExhc3QgbmFtZSAtLT5cbiAgICAgICAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ1VTRVIuTEFTVF9OQU1FJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIFthcHBBdXRvZm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F1dG9mb2N1c0RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGFzdE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cInNlY3Rpb24tYmx1ZSBmYW1pbHktbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybS5jb250cm9scy5sYXN0TmFtZS5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBmb3JtLmNvbnRyb2xzLmxhc3ROYW1lLmRpcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIEVSUk9SLkZJRUxEX1JFUVVJUkVEXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybS5jb250cm9scy5sYXN0TmFtZS5oYXNFcnJvcignbWlubGVuZ3RoJykgJiYgZm9ybS5jb250cm9scy5sYXN0TmFtZS5kaXJ0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdFUlJPUi5GSUVMRF9NSU5fTEVOR1RIJyB8IHRyYW5zbGF0ZTogeyByZXF1aXJlZExlbmd0aDogMiB9IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9pb24taXRlbT5cblxuICAgICAgICAgICAgICAgIDwhLS0gRmlyc3QgbmFtZSAtLT5cbiAgICAgICAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ1VTRVIuRklSU1RfTkFNRScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImZpcnN0TmFtZVwiIGF1dG9jb21wbGV0ZT1cInNlY3Rpb24tYmx1ZSBnaXZlbi1uYW1lXCIgcmVxdWlyZWQgLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybS5jb250cm9scy5maXJzdE5hbWUuaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgZm9ybS5jb250cm9scy5maXJzdE5hbWUuZGlydHlcIlxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgRVJST1IuRklFTERfUkVRVUlSRURcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmZpcnN0TmFtZS5oYXNFcnJvcignbWlubGVuZ3RoJykgJiYgZm9ybS5jb250cm9scy5maXJzdE5hbWUuZGlydHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnRVJST1IuRklFTERfTUlOX0xFTkdUSCcgfCB0cmFuc2xhdGU6IHsgcmVxdWlyZWRMZW5ndGg6IDIgfSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEFkZGl0aW9uYWwgZmllbGRzIC0tPlxuICAgICAgICAgICAgICAgIEBmb3IgKGRlZmluaXRpb24gb2YgYWRkaXRpb25hbEZpZWxkczsgdHJhY2sgZGVmaW5pdGlvbi5rZXkpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1mb3JtLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgW2RlZmluaXRpb25dPVwiZGVmaW5pdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJkZWZpbml0aW9uLmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmluaXRpb24uZXh0cmEgJiYgZGVmaW5pdGlvbi5leHRyYS5hY2NvdW50ICYmIGRlZmluaXRpb24uZXh0cmEuYWNjb3VudC5yZXF1aXJlZCkgfHwgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2lvbi1saXN0PlxuXG4gICAgICAgICAgICAgIDwhLS0gU2VjdXJpdHkgLS0+XG4gICAgICAgICAgICAgIEBpZiAoc2hvd1NlY3VyaXR5RGV0YWlscykge1xuICAgICAgICAgICAgICAgIDxpb24tbGlzdC1oZWFkZXI+PGgzIHRyYW5zbGF0ZT5BQ0NPVU5ULlNFQ1VSSVRZLlRJVExFPC9oMz48L2lvbi1saXN0LWhlYWRlcj5cblxuICAgICAgICAgICAgICAgIDxpb24tbGlzdCBbaW5zZXRdPVwibW9iaWxlXCI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgW2J1dHRvbl09XCJtb2JpbGVcIlxuICAgICAgICAgICAgICAgICAgICByb3V0ZXJEaXJlY3Rpb249XCJmb3J3YXJkXCJcbiAgICAgICAgICAgICAgICAgICAgbGluZXM9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5DaGFuZ2VQYXNzd29yZFBhZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwia2V5cGFkXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPnt7ICdBQ0NPVU5ULlNFQ1VSSVRZLlBBU1NXT1JEJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cInRlcnRpYXJ5XCI+e3sgJ0FDQ09VTlQuU0VDVVJJVFkuQlROX0NIQU5HRV9QQVNTV09SRCcgfCB0cmFuc2xhdGUgfX08L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgICBAaWYgKCFtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImVuZFwiIGNvbG9yPVwidGVydGlhcnlcIiBuYW1lPVwiY2hldnJvbi1mb3J3YXJkXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICAgICAgICA8L2lvbi1saXN0PlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgPCEtLSBUZWNobmljYWwgZGV0YWlscyAtLT5cbiAgICAgICAgICAgICAgQGlmIChzaG93VGVjaG5pY2FsRGV0YWlscykge1xuICAgICAgICAgICAgICAgIDxpb24tbGlzdC1oZWFkZXI+PGgzIHRyYW5zbGF0ZT5BQ0NPVU5ULlVTRVJfREVUQUlMUy5URUNITklDQUxfRElWSURFUjwvaDM+PC9pb24tbGlzdC1oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICA8aW9uLWxpc3QgW2luc2V0XT1cIm1vYmlsZVwiPlxuICAgICAgICAgICAgICAgICAgPCEtLSBwcm9maWxlIC0tPlxuICAgICAgICAgICAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnQUNDT1VOVC5VU0VSX0RFVEFJTFMuUFJPRklMRScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgaGlkZGVuIHJlYWRvbmx5PVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cIm1haW5Qcm9maWxlXCIgcmVxdWlyZWQgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnVVNFUi5QUk9GSUxFX0VOVU0uJyArIGZvcm0uY29udHJvbHMubWFpblByb2ZpbGUudmFsdWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmZpcnN0TmFtZS5oYXNFcnJvcignbWFpblByb2ZpbGUnKSAmJiBmb3JtLmNvbnRyb2xzLm1haW5Qcm9maWxlLmRpcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIEVSUk9SLkZJRUxEX1JFUVVJUkVEXG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIHB1YmtleSAtLT5cbiAgICAgICAgICAgICAgICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ0FDQ09VTlQuVVNFUl9ERVRBSUxTLlBVQktFWScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVhZG9ubHk9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwicHVia2V5XCIgcmVxdWlyZWQgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm0uY29udHJvbHMuZmlyc3ROYW1lLmhhc0Vycm9yKCdwdWJrZXknKSAmJiBmb3JtLmNvbnRyb2xzLmZpcnN0TmFtZS5kaXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBFUlJPUi5GSUVMRF9SRVFVSVJFRFxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmZpcnN0TmFtZS5oYXNFcnJvcigncHVia2V5JykgJiYgZm9ybS5jb250cm9scy5maXJzdE5hbWUuZGlydHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfUFVCS0VZPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICAgICAgICA8L2lvbi1saXN0PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgICAgIDwhLS0gcmlnaHQgbWFyZ2luIC0tPlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjBcIiBzaXplLWxnPVwiMVwiIHNpemUteGw9XCIyXCI+Jm5ic3A7PC9pb24tY29sPlxuICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgPC9pb24tZ3JpZD5cbiAgICAgIDwvbWF0LXRhYj5cblxuICAgICAgPCEtLSBUQUI6IHNldHRpbmdzIC0tPlxuICAgICAgPG1hdC10YWIgW2xhYmVsXT1cIidBQ0NPVU5ULlNFVFRJTkdTLlRJVExFJyB8IHRyYW5zbGF0ZVwiIGZvcm1Hcm91cE5hbWU9XCJzZXR0aW5nc1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cbiAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICA8aW9uLWljb24gbWF0UHJlZml4IHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJzZXR0aW5nc1wiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5BQ0NPVU5ULlNFVFRJTkdTLlRJVExFPC9pb24tbGFiZWw+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICAgICAgPHAgW2lubmVySFRNTF09XCInQUNDT1VOVC5TRVRUSU5HUy5ERVNDUklQVElPTicgfCB0cmFuc2xhdGVcIj48L3A+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdBQ0NPVU5ULlNFVFRJTkdTLkxPQ0FMRScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImxvY2FsZVwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsb2NhbGVzXCIgW3ZhbHVlXT1cIml0ZW0ua2V5XCI+XG4gICAgICAgICAgICAgICAge3sgaXRlbS52YWx1ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPVwic2V0dGluZ3NGb3JtPy5jb250cm9scy5sb2NhbGUuaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgc2V0dGluZ3NGb3JtPy5jb250cm9scy5sb2NhbGUuZGlydHlcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgRVJST1IuRklFTERfUkVRVUlSRURcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8IS0tIGxhdC9sb25nIGZvcm1hdC0tPlxuICAgICAgICAgIEBpZiAoc2hvd0xhdExvbkZvcm1hdCkge1xuICAgICAgICAgICAgQGxldCBjb250cm9sID0gc2V0dGluZ3NGb3JtIHwgZm9ybUdldENvbnRyb2w6ICdsYXRMb25nRm9ybWF0JztcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnQUNDT1VOVC5TRVRUSU5HUy5MQVRfTE9OR19GT1JNQVQnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBsYXRMb25nRm9ybWF0czsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0NPTU1PTi5MQVRfTE9ORy5FTlVNLicgKyBpdGVtIHwgdXBwZXJjYXNlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIEBpZiAoY29udHJvbC5kaXJ0eSAmJiBjb250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gT3B0aW9ucyB0YWJsZSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnMtdGFibGVcIiBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCJvcHRpb25EZWZpbml0aW9ucyB8IGlzRW1wdHlBcnJheVwiPlxuICAgICAgICAgIDxhcHAtcHJvcGVydGllcy10YWJsZVxuICAgICAgICAgICAgI3Byb3BlcnRpZXNUYWJsZVxuICAgICAgICAgICAgaTE4bkNvbHVtblByZWZpeD1cIkFDQ09VTlQuU0VUVElOR1MuT1BUSU9OUy5cIlxuICAgICAgICAgICAgW2RlZmluaXRpb25zXT1cIm9wdGlvbkRlZmluaXRpb25zXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbY2FuRWRpdF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtkZWJ1Z109XCJkZWJ1Z1wiXG4gICAgICAgICAgICAob25EaXJ0eSk9XCIkZXZlbnQgPyBtYXJrQXNEaXJ0eSgpIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICA+PC9hcHAtcHJvcGVydGllcy10YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC10YWI+XG5cbiAgICAgIDwhLS0gVEFCOiB0b2tlbnMgLS0+XG4gICAgICA8bWF0LXRhYiBbbGFiZWxdPVwiJ0FDQ09VTlQuVE9LRU5TLlRJVExFJyB8IHRyYW5zbGF0ZVwiIGZvcm1Hcm91cE5hbWU9XCJ0b2tlbnNcIiBbZGlzYWJsZWRdPVwiIXNob3dBcGlUb2tlbnNcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XG4gICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgPGlvbi1pY29uIG1hdFByZWZpeCBzbG90PVwic3RhcnRcIiBuYW1lPVwidGlja2V0XCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkFDQ09VTlQuVE9LRU5TLlRJVExFPC9pb24tbGFiZWw+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICAgICAgPHAgW2lubmVySFRNTF09XCInQUNDT1VOVC5UT0tFTlMuREVTQ1JJUFRJT04nIHwgdHJhbnNsYXRlXCI+PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSBUb2tlbnMgdGFibGUgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2tlbnMtdGFibGVcIj5cbiAgICAgICAgICA8YXBwLXVzZXItdG9rZW4tdGFibGVcbiAgICAgICAgICAgICN0b2tlbnNUYWJsZVxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjYW5FZGl0XT1cInRydWVcIlxuICAgICAgICAgICAgW2RlYnVnXT1cImRlYnVnXCJcbiAgICAgICAgICAgIChvbkRpcnR5KT1cIiRldmVudCA/IG1hcmtBc0RpcnR5KCkgOiB1bmRlZmluZWRcIlxuICAgICAgICAgID48L2FwcC11c2VyLXRva2VuLXRhYmxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LXRhYj5cbiAgICA8L21hdC10YWItZ3JvdXA+XG4gIDwvZm9ybT5cbjwvaW9uLWNvbnRlbnQ+XG5cbjxpb24tZm9vdGVyIGhpZGRlbi14cyBoaWRkZW4tc20gaGlkZGVuLW1vYmlsZT5cbiAgPGFwcC1mb3JtLWJ1dHRvbnMtYmFyIChvbkNhbmNlbCk9XCJjYW5jZWwoKVwiIChvblNhdmUpPVwic2F2ZSgpXCIgW2Rpc2FibGVkXT1cIiFmb3JtLmRpcnR5IHx8ICF2YWxpZCB8fCBzYXZpbmdcIj5cbiAgICA8IS0tIGVycm9yIC0tPlxuICAgIDxpb24taXRlbSAqbmdJZj1cImVycm9yICYmICFtb2JpbGVcIiBsaW5lcz1cIm5vbmVcIj5cbiAgICAgIDxpb24taWNvbiBjb2xvcj1cImRhbmdlclwiIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJhbGVydC1jaXJjbGVcIj48L2lvbi1pY29uPlxuICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cImRhbmdlclwiIGNsYXNzPVwiZXJyb3JcIiBbaW5uZXJIVE1MXT1cImVycm9yIHwgdHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gICAgPC9pb24taXRlbT5cbiAgPC9hcHAtZm9ybS1idXR0b25zLWJhcj5cbjwvaW9uLWZvb3Rlcj5cbiJdfQ==