valtech-components 4.0.25 → 4.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/README.md +31 -262
  2. package/esm2022/lib/components/molecules/content-reaction/content-reaction.component.mjs +4 -7
  3. package/esm2022/lib/components/molecules/modal-shell/modal-shell.component.mjs +3 -3
  4. package/esm2022/lib/components/organisms/api-key-create-modal/api-key-create-modal.component.mjs +7 -7
  5. package/esm2022/lib/components/organisms/api-keys-modal/api-keys-modal.component.mjs +13 -13
  6. package/esm2022/lib/components/organisms/avatar-upload/avatar-upload.component.mjs +3 -3
  7. package/esm2022/lib/components/organisms/change-password-modal/change-password-modal.component.mjs +5 -5
  8. package/esm2022/lib/components/organisms/create-org-modal/create-org-modal.component.mjs +5 -5
  9. package/esm2022/lib/components/organisms/delete-account-modal/delete-account-modal.component.mjs +4 -3
  10. package/esm2022/lib/components/organisms/edit-org-modal/edit-org-modal.component.mjs +5 -5
  11. package/esm2022/lib/components/organisms/invite-member-modal/invite-member-modal.component.mjs +7 -5
  12. package/esm2022/lib/components/organisms/login-attempt-modal/login-attempt-modal.component.mjs +6 -3
  13. package/esm2022/lib/components/organisms/member-detail-modal/member-detail-modal.component.mjs +6 -5
  14. package/esm2022/lib/components/organisms/member-import-modal/member-import-modal.component.mjs +9 -9
  15. package/esm2022/lib/components/organisms/mfa-modal/mfa-modal.component.mjs +3 -3
  16. package/esm2022/lib/components/organisms/org-info-sheet/org-info-sheet.component.mjs +37 -48
  17. package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +8 -2
  18. package/esm2022/lib/components/organisms/organization-view/organization-view.i18n.mjs +15 -3
  19. package/esm2022/lib/components/organisms/session-list-modal/session-list-modal.component.mjs +4 -3
  20. package/esm2022/lib/components/organisms/switch-org-modal/switch-org-modal.component.mjs +3 -3
  21. package/esm2022/lib/components/organisms/transfer-ownership-modal/transfer-ownership-modal.component.mjs +7 -7
  22. package/esm2022/lib/services/firebase/messaging.service.mjs +2 -2
  23. package/esm2022/lib/services/refreshable-stream/refreshable-stream.mjs +2 -2
  24. package/esm2022/lib/version.mjs +2 -2
  25. package/fesm2022/valtech-components.mjs +136 -122
  26. package/fesm2022/valtech-components.mjs.map +1 -1
  27. package/lib/components/organisms/org-info-sheet/org-info-sheet.component.d.ts +12 -1
  28. package/lib/version.d.ts +1 -1
  29. package/package.json +1 -1
  30. package/src/lib/services/firebase/firebase-messaging-sw.js +0 -145
@@ -338,7 +338,7 @@ export class MessagingService {
338
338
  const token = await this.requestPermission();
339
339
  if (!token) {
340
340
  // requestPermission devuelve null tanto por permiso denegado como por
341
- // fallo al obtener el token. Distinguimos por el estado del permiso.
341
+ // fallo al obtener el token. Distivdsmos por el estado del permiso.
342
342
  const permission = this.getPermissionState();
343
343
  if (permission === 'denied' || permission === 'default') {
344
344
  return { status: 'denied', reason: 'Permiso de notificaciones denegado' };
@@ -927,4 +927,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
927
927
  type: Inject,
928
928
  args: [PLATFORM_ID]
929
929
  }] }, { type: i0.NgZone }] });
930
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL21lc3NhZ2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFvQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFhLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFdBQVcsSUFBSSxjQUFjLEVBQUUsWUFBWSxJQUFJLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5RCxPQUFPLEVBQWMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBeUNuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSCxNQUFNLE9BQU8sZ0JBQWdCO0lBcUQzQixZQUNVLFFBQWtCLEVBQ2UsTUFBNkIsRUFDekMsVUFBa0IsRUFDdkMsTUFBYztRQUhkLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDZSxXQUFNLEdBQU4sTUFBTSxDQUF1QjtRQUN6QyxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ3ZDLFdBQU0sR0FBTixNQUFNLENBQVE7UUF4RGhCLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7UUFDcEQsNkJBQXdCLEdBQUcsSUFBSSxPQUFPLEVBQTBCLENBQUM7UUFDakUsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FB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a0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEUsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOytHQXg5QlUsZ0JBQWdCLDBDQXVEakIsdUJBQXVCLGFBQ3ZCLFdBQVc7bUhBeERWLGdCQUFnQixjQURILE1BQU07OzRGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkF3RDdCLE1BQU07MkJBQUMsdUJBQXVCOzswQkFDOUIsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZXNzYWdpbmcgU2VydmljZSAoRkNNKVxuICpcbiAqIFNlcnZpY2lvIHBhcmEgRmlyZWJhc2UgQ2xvdWQgTWVzc2FnaW5nIChQdXNoIE5vdGlmaWNhdGlvbnMpLlxuICogUGVybWl0ZSBzb2xpY2l0YXIgcGVybWlzb3MsIG9idGVuZXIgdG9rZW5zLCBlc2N1Y2hhciBtZW5zYWplcyB5IG1hbmVqYXJcbiAqIG5hdmVnYWNpw7NuIChkZWVwIGxpbmtpbmcpIGN1YW5kbyBlbCB1c3VhcmlvIHRvY2EgdW5hIG5vdGlmaWNhY2nDs24uXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdab25lLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWVzc2FnaW5nLCBnZXRUb2tlbiwgZGVsZXRlVG9rZW4sIG9uTWVzc2FnZSB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvbWVzc2FnaW5nJztcbmltcG9ydCB7IGlzU3VwcG9ydGVkIGFzIGZjbUlzU3VwcG9ydGVkLCBnZXRNZXNzYWdpbmcgYXMgZmNtR2V0TWVzc2FnaW5nIH0gZnJvbSAnZmlyZWJhc2UvbWVzc2FnaW5nJztcbmltcG9ydCB7IGdldEFwcCwgZ2V0QXBwcywgaW5pdGlhbGl6ZUFwcCB9IGZyb20gJ2ZpcmViYXNlL2FwcCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBFbmFibGVQdXNoUmVzdWx0LFxuICBOb3RpZmljYXRpb25BY3Rpb24sXG4gIE5vdGlmaWNhdGlvbkNsaWNrRXZlbnQsXG4gIE5vdGlmaWNhdGlvblBheWxvYWQsXG4gIE5vdGlmaWNhdGlvblBlcm1pc3Npb24sXG4gIFZhbHRlY2hGaXJlYmFzZUNvbmZpZyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQ2FsbGJhY2sgb3BjaW9uYWwgZGUgcmVnaXN0cm8gZGUgZGV2aWNlIHBhcmEgYE1lc3NhZ2luZ1NlcnZpY2UuZW5hYmxlKClgLlxuICpcbiAqIEVsIHJlZ2lzdHJvIGRlbCBkZXZpY2Ugdml2ZSBlbiBgQXV0aFNlcnZpY2VgIChuZWNlc2l0YSBlbCBKV1QgKyBlbCBlbmRwb2ludFxuICogZGVsIGJhY2tlbmQpLiBgTWVzc2FnaW5nU2VydmljZWAgTk8gcHVlZGUgZGVwZW5kZXIgZGUgYEF1dGhTZXJ2aWNlYCBzaW5cbiAqIGNyZWFyIHVuIGNpY2xvIChBdXRoU2VydmljZSDihpIgTWVzc2FnaW5nU2VydmljZSkuIFBvciBlc28gZWwgY2FsbGVyIGxlIHBhc2FcbiAqIGVsIHBhc28gZGUgcmVnaXN0cm8gY29tbyBjYWxsYmFjay4gUmVjaWJlIGVsIHRva2VuIEZDTSB5IGRldnVlbHZlIHNpIGVsXG4gKiBkZXZpY2UgcXVlZMOzIHJlZ2lzdHJhZG8uXG4gKi9cbmV4cG9ydCB0eXBlIFJlZ2lzdGVyRGV2aWNlRm4gPSAodG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxib29sZWFuPjtcblxuLyoqXG4gKiBPcGNpb25lcyBkZSBgTWVzc2FnaW5nU2VydmljZS5lbmFibGUoKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5hYmxlUHVzaE9wdGlvbnMge1xuICAvKipcbiAgICogUGFzbyBvcGNpb25hbCBkZSByZWdpc3RybyBkZSBkZXZpY2UgZW4gZWwgYmFja2VuZC4gU2kgc2Ugb21pdGUsIGBlbmFibGUoKWBcbiAgICogcmVzdWVsdmUgY29uIGBzdGF0dXM6ICdlbmFibGVkJ2AgYXBlbmFzIG9idGllbmUgZWwgdG9rZW4gKHNpbiByZWdpc3RyYXIpLlxuICAgKi9cbiAgcmVnaXN0ZXJEZXZpY2U/OiBSZWdpc3RlckRldmljZUZuO1xufVxuXG4vKipcbiAqIEVzdGFkbyBpbnRlcm5vIGRlbCBzZXJ2aWNpbyBkZSBtZXNzYWdpbmdcbiAqL1xuaW50ZXJmYWNlIE1lc3NhZ2luZ1N0YXRlIHtcbiAgdG9rZW46IHN0cmluZyB8IG51bGw7XG4gIHBlcm1pc3Npb246IE5vdGlmaWNhdGlvblBlcm1pc3Npb247XG4gIGlzU3VwcG9ydGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFNlcnZpY2lvIHBhcmEgRmlyZWJhc2UgQ2xvdWQgTWVzc2FnaW5nIChGQ00pLlxuICpcbiAqIFBlcm1pdGUgcmVjaWJpciBub3RpZmljYWNpb25lcyBwdXNoIGVuIGxhIGFwbGljYWNpw7NuIHdlYi5cbiAqIFJlcXVpZXJlIFZBUElEIGtleSBjb25maWd1cmFkYSBlbiBWYWx0ZWNoRmlyZWJhc2VDb25maWcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uQ29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBtZXNzYWdpbmcgPSBpbmplY3QoTWVzc2FnaW5nU2VydmljZSk7XG4gKlxuICogICB0b2tlbiA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAqXG4gKiAgIGFzeW5jIGVuYWJsZU5vdGlmaWNhdGlvbnMoKSB7XG4gKiAgICAgLy8gU29saWNpdGFyIHBlcm1pc28geSBvYnRlbmVyIHRva2VuXG4gKiAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLm1lc3NhZ2luZy5yZXF1ZXN0UGVybWlzc2lvbigpO1xuICpcbiAqICAgICBpZiAodG9rZW4pIHtcbiAqICAgICAgIHRoaXMudG9rZW4uc2V0KHRva2VuKTtcbiAqICAgICAgIC8vIEVudmlhciB0b2tlbiBhIHR1IGJhY2tlbmQgcGFyYSBhbG1hY2VuYXJsb1xuICogICAgICAgYXdhaXQgdGhpcy5iYWNrZW5kLnJlZ2lzdGVyRGV2aWNlVG9rZW4odG9rZW4pO1xuICogICAgIH1cbiAqICAgfVxuICpcbiAqICAgLy8gRXNjdWNoYXIgbWVuc2FqZXMgZW4gZm9yZWdyb3VuZFxuICogICBtZXNzYWdlcyQgPSB0aGlzLm1lc3NhZ2luZy5vbk1lc3NhZ2UoKTtcbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2luZ1NlcnZpY2Uge1xuICBwcml2YXRlIG1lc3NhZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Tm90aWZpY2F0aW9uUGF5bG9hZD4oKTtcbiAgcHJpdmF0ZSBub3RpZmljYXRpb25DbGlja1N1YmplY3QgPSBuZXcgU3ViamVjdDxOb3RpZmljYXRpb25DbGlja0V2ZW50PigpO1xuICBwcml2YXRlIHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVzc2FnaW5nU3RhdGU+KHtcbiAgICB0b2tlbjogbnVsbCxcbiAgICBwZXJtaXNzaW9uOiAnZGVmYXVsdCcsXG4gICAgaXNTdXBwb3J0ZWQ6IGZhbHNlLFxuICB9KTtcblxuICBwcml2YXRlIHVuc3Vic2NyaWJlT25NZXNzYWdlPzogKCkgPT4gdm9pZDtcblxuICAvKiogRmxhZyBwYXJhIHBlcnNpc3RpciBtZW5zYWplcyBGQ00gZW4gbG9jYWxTdG9yYWdlIChkZWJ1Z2dpbmcpICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVidWdQZXJzaXN0ZW5jZTogYm9vbGVhbjtcbiAgLyoqIEtleSBwYXJhIGxvY2FsU3RvcmFnZSBkZSBtZW5zYWplcyBGQ00gKGRlYnVnZ2luZykgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBERUJVR19TVE9SQUdFX0tFWSA9ICdmY21fZGVidWdfbWVzc2FnZXMnO1xuICAvKipcbiAgICogS2V5IGRlIGxvY2FsU3RvcmFnZSBkb25kZSBzZSBwZXJzaXN0ZSBlbCB0b2tlbiBGQ00uXG4gICAqXG4gICAqIEVsIHRva2VuIHZpdmUgZW4gdW4gYEJlaGF2aW9yU3ViamVjdGAgZW4gbWVtb3JpYSB5IHNlIHBpZXJkZSBlbiBjYWRhXG4gICAqIHJlY2FyZ2EgLyBzdXNwZW5zacOzbiBkZSBsYSBQV0EgKGlPUyByZWluaWNpYSBQV0FzIGNvbiBmcmVjdWVuY2lhKS4gUGVyc2lzdGlyXG4gICAqIGVsIHRva2VuIHBlcm1pdGUgaGlkcmF0YXIgZWwgZXN0YWRvIGVuIGNvbGQgc3RhcnQgeSBxdWUgbGEgVUkgbm8gcGFycGFkZWUuXG4gICAqIEVzIHVuICpvcHRpbWlzdGljIGhpbnQqIOKAlCBsYSB2ZXJkYWQgbGEgY29uZmlybWEgZWwgc2lndWllbnRlIGBnZXRUb2tlbigpYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgVE9LRU5fU1RPUkFHRV9LRVkgPSAndmFsdGVjaF9mY21fdG9rZW4nO1xuXG4gIC8qKlxuICAgKiBUaW1lb3V0IChtcykgcGFyYSBgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHlgIGRlbnRybyBkZSBgZ2V0VG9rZW4oKWAuXG4gICAqXG4gICAqIEVuIHVuIGNvbGQgbG9hZCBlbCBTVyBwdWVkZSBubyBlc3RhciBhY3RpdmFkbyBhw7puIHkgYHNlcnZpY2VXb3JrZXIucmVhZHlgXG4gICAqIG5vIHJlc29sdmVyIG51bmNhLiBQYXNhZG8gZXN0ZSB0aWVtcG8sIGBnZXRUb2tlbigpYCByZWNoYXphIGxpbXBpbyBlbiBsdWdhclxuICAgKiBkZSBjb2xnYXJzZSBpbmRlZmluaWRhbWVudGUuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IFNXX1JFQURZX1RJTUVPVVRfTVMgPSAxMF8wMDA7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgKG1zKSBkZWwgd2F0Y2hkb2cgZGUgYGVuYWJsZSgpYCBhbnRlcyBkZSBhdXRvLXJlY2FyZ2FyIGxhIHDDoWdpbmEuXG4gICAqXG4gICAqIEVsIGZsdWpvIGRlIGFjdGl2YWNpw7NuIGEgdmVjZXMgc2UgY3VlbGdhIEFOVEVTIGRlIGBnZXRUb2tlbigpYCDigJQgY2Fzb1xuICAgKiB0w61waWNvOiBgTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uKClgIG5vIG11ZXN0cmEgZWwgcG9wdXAgZGVsIFNPIGVuIHVuXG4gICAqIGNvbGQgbG9hZC4gRWwgdGltZW91dCBkZSBgZ2V0VG9rZW4oKWAgKFNXX1JFQURZX1RJTUVPVVRfTVMpIG5vIGN1YnJlIGVzbztcbiAgICogcG9yIGVzbyBgZW5hYmxlKClgIGVudnVlbHZlIGVsIGZsdWpvIGNvbXBsZXRvIGVuIGVzdGUgd2F0Y2hkb2cuXG4gICAqXG4gICAqIFVuIGZsdWpvIGV4aXRvc28gcmVhbCBsbGVnYSBhIHRva2VuK2RldmljZSBlbiB+NHM7IDE1cyBlcyBob2xnYWRvIHkgbm9cbiAgICogYXRyYXBhIHVuIMOpeGl0byBsZW50by5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgRU5BQkxFX1dBVENIRE9HX01TID0gMTVfMDAwO1xuXG4gIC8qKlxuICAgKiBLZXkgZGUgc2Vzc2lvblN0b3JhZ2Ug4oCUIGdhcmFudGl6YSB1biBzb2xvIGF1dG8tcmVsb2FkIHBvciBzZXNpw7NuLiBTaSBlbFxuICAgKiBmbHVqbyBzZSBjdWVsZ2EgdW5hIDLCqiB2ZXogdHJhcyBlbCByZWxvYWQsIE5PIHNlIHJlY2FyZ2EgZGUgbnVldm8gKGFudGktbG9vcCkuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IEFVVE9SRUxPQURfRkxBRyA9ICdub3RpZi1lbmFibGUtYXV0b3JlbG9hZCc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQEluamVjdChWQUxURUNIX0ZJUkVCQVNFX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IFZhbHRlY2hGaXJlYmFzZUNvbmZpZyxcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdCxcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICkge1xuICAgIHRoaXMuZGVidWdQZXJzaXN0ZW5jZSA9IHRoaXMuY29uZmlnPy5kZWJ1Z01lc3NhZ2VQZXJzaXN0ZW5jZSA/PyBmYWxzZTtcbiAgICB0aGlzLmluaXRpYWxpemVNZXNzYWdpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxhIGluc3RhbmNpYSBkZSBNZXNzYWdpbmcgdmlhIEZpcmViYXNlIFNESyBkaXJlY3RvIChOTyBBbmd1bGFyRmlyZSBESSkuXG4gICAqXG4gICAqICoqUG9yIHF1w6kgbm8gdXNhbW9zIGBpbmplY3Rvci5nZXQoTWVzc2FnaW5nKWA6KipcbiAgICogQW5ndWxhckZpcmUgYHByb3ZpZGVNZXNzYWdpbmdgIHJlZ2lzdHJhIHVuIEFQUF9JTklUSUFMSVpFUiBxdWUgaW50ZXJuYW1lbnRlXG4gICAqIHJlc3VlbHZlIGBhd2FpdCBpc1N1cHBvcnRlZCgpYC4gU2kgYGluamVjdG9yLmdldChNZXNzYWdpbmcpYCBzZSBsbGFtYSBhbnRlc1xuICAgKiBxdWUgZXNlIEFQUF9JTklUSUFMSVpFUiB0ZXJtaW5lIChlai4gb3Ryb3MgQVBQX0lOSVRJQUxJWkVSIGRlbCBjbGllbnRlXG4gICAqIGNvbnN0cnV5ZW4gQXV0aFNlcnZpY2Ug4oaSIE1lc3NhZ2luZ1NlcnZpY2Ug4oaSIHRvY2EgTWVzc2FnaW5nIHRlbXByYW5vKSxcbiAgICogQW5ndWxhckZpcmUgbGFuemEgZWwgZXJyb3IgXCJBUFBfSU5JVElBTElaRVIgLi4uIGhhcyBub3QgcmVzb2x2ZWRcIi4gQW5ndWxhclxuICAgKiBESSAqKmNhY2hlYSBlcnJvcmVzIGRlIGZhY3RvcnkqKiDigJQgdW5hIHZleiBxdWUgZmFsbMOzLCB0b2RvcyBsb3NcbiAgICogYGluamVjdG9yLmdldGAgc2lndWllbnRlcyByZXRvcm5hbiBlbCBtaXNtbyBlcnJvciBjYWNoZWFkby4gUmV0cnkgbG9vcHNcbiAgICogbm8gZnVuY2lvbmFuLlxuICAgKlxuICAgKiAqKldvcmthcm91bmQ6KiogYnlwYXNzIEFuZ3VsYXJGaXJlIGVudGlyZWx5IHkgdXNhciBGaXJlYmFzZSBTREsgZGlyZWN0b1xuICAgKiAoYGZpcmViYXNlL21lc3NhZ2luZy5nZXRNZXNzYWdpbmcoZ2V0QXBwKCkpYCkuIEFuZ3VsYXJGaXJlIGVzIHVuIHdyYXBwZXJcbiAgICogc29icmUgZWwgbWlzbW8gU0RLIOKAlCBsYSBpbnN0YW5jaWEgcXVlIG9idGVuZW1vcyBlcyBmdW5jaW9uYWxtZW50ZSBpZMOpbnRpY2EuXG4gICAqIGBnZXRBcHAoKWAgcmV0b3JuYSBsYSBkZWZhdWx0IEZpcmViYXNlIGFwcCBpbmljaWFsaXphZGEgcG9yXG4gICAqIGBwcm92aWRlRmlyZWJhc2VBcHAoKCkgPT4gaW5pdGlhbGl6ZUFwcChjb25maWcuZmlyZWJhc2UpKWAuIFNpIHBvciBhbGd1bmFcbiAgICogcmF6w7NuIG5vIGVzdMOhIGluaWNpYWxpemFkYSBhw7puLCBoYWNlbW9zIGluaXRpYWxpemVBcHAgaWRlbXBvdGVudGUuXG4gICAqL1xuICBwcml2YXRlIGZjbVN1cHBvcnRQcm9taXNlPzogUHJvbWlzZTxib29sZWFuPjtcblxuICBwcml2YXRlIGFzeW5jIGdldE1lc3NhZ2luZ0luc3RhbmNlKCk6IFByb21pc2U8TWVzc2FnaW5nIHwgbnVsbD4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoIXRoaXMuZmNtU3VwcG9ydFByb21pc2UpIHtcbiAgICAgIHRoaXMuZmNtU3VwcG9ydFByb21pc2UgPSBmY21Jc1N1cHBvcnRlZCgpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gZmNtSXNTdXBwb3J0ZWQgdGhyZXc6JywgZXJyKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHN1cHBvcnRlZCA9IGF3YWl0IHRoaXMuZmNtU3VwcG9ydFByb21pc2U7XG4gICAgaWYgKCFzdXBwb3J0ZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gRkNNIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYXBwID0gZ2V0QXBwcygpLmxlbmd0aCA+IDAgPyBnZXRBcHAoKSA6IGluaXRpYWxpemVBcHAodGhpcy5jb25maWcuZmlyZWJhc2UpO1xuICAgICAgLy8gQ2FzdCBhIE1lc3NhZ2luZyAodG9rZW4gZGUgQW5ndWxhckZpcmUpIOKAlCBlbCB0aXBvIHN1YnlhY2VudGUgZGVsIFNES1xuICAgICAgLy8gZXMgZWwgbWlzbW8uIExhcyBmdW5jaW9uZXMgZ2V0VG9rZW4vZGVsZXRlVG9rZW4vb25NZXNzYWdlIGRlXG4gICAgICAvLyBAYW5ndWxhci9maXJlL21lc3NhZ2luZyBzb24gcmUtZXhwb3J0cyBkZWwgU0RLIHkgYWNlcHRhbiBlc3RhIGluc3RhbmNlLlxuICAgICAgcmV0dXJuIGZjbUdldE1lc3NhZ2luZyhhcHApIGFzIE1lc3NhZ2luZztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZXNzYWdpbmddIGZpcmViYXNlIGdldE1lc3NhZ2luZygpIHRocmV3OicsIGVycik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSU5JQ0lBTElaQUNJw5NOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBJbmljaWFsaXphIGVsIHNlcnZpY2lvIGRlIG1lc3NhZ2luZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplTWVzc2FnaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEhpZHJhdGFyIGVsIHRva2VuIGRlc2RlIGxvY2FsU3RvcmFnZSBBTlRFUyBkZWwgY2hlY2sgZGUgc29wb3J0ZTogZWwgdG9rZW5cbiAgICAvLyBjYWNoZWFkbyBlcyB1biBoaW50IG9wdGltaXN0YSBwYXJhIGxhIFVJIHRyYXMgcmVjYXJnYXMgLyBzdXNwZW5zaW9uZXMgZGVcbiAgICAvLyBsYSBQV0EuIExhIHZhbGlkZXogcmVhbCBzZSBjb25maXJtYSBlbiBlbCBwcsOzeGltbyBnZXRUb2tlbigpLlxuICAgIHRoaXMuaHlkcmF0ZVRva2VuRnJvbVN0b3JhZ2UoKTtcblxuICAgIGNvbnN0IHN1cHBvcnRlZCA9IGF3YWl0IHRoaXMuY2hlY2tTdXBwb3J0KCk7XG4gICAgY29uc3QgcGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvblN0YXRlKCk7XG5cbiAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgIC4uLnRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLFxuICAgICAgaXNTdXBwb3J0ZWQ6IHN1cHBvcnRlZCxcbiAgICAgIHBlcm1pc3Npb24sXG4gICAgfSk7XG5cbiAgICAvLyBTaSB5YSB0aWVuZSBwZXJtaXNvLCBjb25maWd1cmFyIGxpc3RlbmVyc1xuICAgIGlmIChzdXBwb3J0ZWQgJiYgcGVybWlzc2lvbiA9PT0gJ2dyYW50ZWQnKSB7XG4gICAgICB0aGlzLnNldHVwTWVzc2FnZUxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgLy8gRXNjdWNoYXIgbWVuc2FqZXMgZGVsIFNlcnZpY2UgV29ya2VyIChjbGlja3MgZW4gbm90aWZpY2FjaW9uZXMgYmFja2dyb3VuZClcbiAgICB0aGlzLnNldHVwU2VydmljZVdvcmtlckxpc3RlbmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJhIGxpc3RlbmVyIHBhcmEgbWVuc2FqZXMgZGVsIFNlcnZpY2UgV29ya2VyLlxuICAgKiBSZWNpYmUgZXZlbnRvcyBjdWFuZG8gZWwgdXN1YXJpbyBoYWNlIGNsaWNrIGVuIHVuYSBub3RpZmljYWNpw7NuIGJhY2tncm91bmQuXG4gICAqL1xuICBwcml2YXRlIHNldHVwU2VydmljZVdvcmtlckxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSB8fCAhKCdzZXJ2aWNlV29ya2VyJyBpbiBuYXZpZ2F0b3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGV2ZW50ID0+IHtcbiAgICAgIC8vIFNvbG8gcHJvY2VzYXIgbWVuc2FqZXMgZGUgbm90aWZpY2FjacOzbiBjbGljayBiaWVuIGZvcm1hZG9zLlxuICAgICAgLy8gRW4gYXBwcyBjb24gbcO6bHRpcGxlcyBTVyAoUFdBIG5nc3ctd29ya2VyICsgZmlyZWJhc2UtbWVzc2FnaW5nLXN3KSxcbiAgICAgIC8vIG8gdmFyaWFudGVzIGRlbCBwYXlsb2FkLCBgbm90aWZpY2F0aW9uYCBwdWVkZSBubyBleGlzdGlyIGF1bnF1ZVxuICAgICAgLy8gYGRhdGEudHlwZWAgY29pbmNpZGEg4oaSIGd1YXJkIGRlZmVuc2l2byBldml0YSBUeXBlRXJyb3IuXG4gICAgICBpZiAoZXZlbnQuZGF0YT8udHlwZSAhPT0gJ05PVElGSUNBVElPTl9DTElDSycpIHJldHVybjtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGV2ZW50LmRhdGEubm90aWZpY2F0aW9uIGFzIE5vdGlmaWNhdGlvblBheWxvYWQgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoIW5vdGlmaWNhdGlvbikgcmV0dXJuO1xuXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmV4dHJhY3RBY3Rpb25Gcm9tRGF0YShub3RpZmljYXRpb24uZGF0YSk7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uQ2xpY2tTdWJqZWN0Lm5leHQoe1xuICAgICAgICAgIG5vdGlmaWNhdGlvbixcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIEZDTSBlc3TDoSBzb3BvcnRhZG8gZW4gZWwgbmF2ZWdhZG9yIGFjdHVhbFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjaGVja1N1cHBvcnQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZpY2FyIEFQSXMgbmVjZXNhcmlhc1xuICAgIGlmICghKCdOb3RpZmljYXRpb24nIGluIHdpbmRvdykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoISgnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhciBxdWUgbWVzc2FnaW5nIGVzdMOpIGRpc3BvbmlibGUgKGFzeW5jIOKAlCBlc3BlcmEgQVBQX0lOSVRJQUxJWkVSKVxuICAgIGlmICghKGF3YWl0IHRoaXMuZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQRVJNSVNPUyBZIFRPS0VOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTb2xpY2l0YSBwZXJtaXNvIGRlIG5vdGlmaWNhY2lvbmVzIHkgb2J0aWVuZSBlbCB0b2tlbiBGQ00uXG4gICAqXG4gICAqIEByZXR1cm5zIFRva2VuIEZDTSBzaSBzZSBvdG9yZ8OzIHBlcm1pc28sIG51bGwgc2kgc2UgZGVuZWfDs1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHRva2VuID0gYXdhaXQgbWVzc2FnaW5nLnJlcXVlc3RQZXJtaXNzaW9uKCk7XG4gICAqIGlmICh0b2tlbikge1xuICAgKiAgIGNvbnNvbGUubG9nKCdUb2tlbiBGQ006JywgdG9rZW4pO1xuICAgKiAgIC8vIEVudmlhciBhIGJhY2tlbmRcbiAgICogfSBlbHNlIHtcbiAgICogICBjb25zb2xlLmxvZygnUGVybWlzbyBkZW5lZ2FkbyBvIG5vIHNvcG9ydGFkbycpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdFBlcm1pc3Npb24oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgaWYgKCEoYXdhaXQgdGhpcy5pc1N1cHBvcnRlZCgpKSkge1xuICAgICAgY29uc29sZS53YXJuKCdGQ00gbm8gZXN0w6Egc29wb3J0YWRvIGVuIGVzdGUgbmF2ZWdhZG9yJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gU29saWNpdGFyIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXNcbiAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBhd2FpdCBOb3RpZmljYXRpb24ucmVxdWVzdFBlcm1pc3Npb24oKTtcblxuICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7XG4gICAgICAgIC4uLnRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLFxuICAgICAgICBwZXJtaXNzaW9uOiBwZXJtaXNzaW9uIGFzIE5vdGlmaWNhdGlvblBlcm1pc3Npb24sXG4gICAgICB9KTtcblxuICAgICAgaWYgKHBlcm1pc3Npb24gIT09ICdncmFudGVkJykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1Blcm1pc28gZGUgbm90aWZpY2FjaW9uZXMgZGVuZWdhZG8nKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIE9idGVuZXIgdG9rZW4gRkNNXG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIC8vIENvbmZpZ3VyYXIgbGlzdGVuZXIgZGUgbWVuc2FqZXNcbiAgICAgICAgdGhpcy5zZXR1cE1lc3NhZ2VMaXN0ZW5lcigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdG9rZW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNvbGljaXRhbmRvIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXM6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZsdWpvIGNvbXBsZXRvIGRlIGFjdGl2YWNpw7NuIGRlIHB1c2gsIHJvYnVzdG8sIGNyb3NzLWFwcC5cbiAgICpcbiAgICogT3JxdWVzdGE6IHBlZGlyIHBlcm1pc28g4oaSIFNXIHJlYWR5IOKGkiBvYnRlbmVyIHRva2VuIEZDTSDihpIgKG9wY2lvbmFsKVxuICAgKiByZWdpc3RyYXIgZWwgZGV2aWNlIGVuIGJhY2tlbmQuIEVzIGVsIHB1bnRvIGRlIG9ycXVlc3RhY2nDs24gw7puaWNvIHF1ZSBjYWRhXG4gICAqIGFwcCBkZWwgZmFjdG9yeSBjb25zdW1lIOKAlCBsYSBsw7NnaWNhIGRlIHJvYnVzdGV6IHZpdmUgYXF1w60sIG5vIGVuIGNhZGEgcMOhZ2luYS5cbiAgICpcbiAgICogKipXYXRjaGRvZyBkZSBhdXRvLXJlbG9hZC4qKiBFbCBmbHVqbyBhIHZlY2VzIHNlIGN1ZWxnYSBBTlRFUyBkZSBgZ2V0VG9rZW4oKWBcbiAgICogKGVqLiBgTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uKClgIHF1ZSBubyBtdWVzdHJhIGVsIHBvcHVwIGVuIHVuIGNvbGRcbiAgICogbG9hZCkg4oCUIGVsIHRpbWVvdXQgaW50ZXJubyBkZSBgZ2V0VG9rZW4oKWAgbm8gY3VicmUgZXNlIGNhc28uIFBvciBlc29cbiAgICogYGVuYWJsZSgpYCBlbnZ1ZWx2ZSBlbCBmbHVqbyBlbnRlcm8gZW4gdW4gd2F0Y2hkb2c6IHNpIG5vIGFsY2FuemEgdW4gZXN0YWRvXG4gICAqIHRlcm1pbmFsIGVuIGBFTkFCTEVfV0FUQ0hET0dfTVNgICgxNXMpOlxuICAgKiAgLSAxwqogdmV6IGVuIGxhIHNlc2nDs24g4oaSIG1hcmNhIHVuIGZsYWcgZW4gYHNlc3Npb25TdG9yYWdlYCB5IGhhY2VcbiAgICogICAgYHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKWAgKHVuIGZyZXNoIGxvYWQgc3VlbGUgdGVuZXIgZWwgU1cgYWN0aXZvKS5cbiAgICogICAgUmVzdWVsdmUgY29uIGB7IHN0YXR1czogJ3RpbWVvdXQnLCByZWxvYWRlZDogdHJ1ZSB9YC5cbiAgICogIC0geWEgc2UgYXV0by1yZWNhcmfDsyBhbnRlcyDihpIgTk8gcmVjYXJnYSAoYW50aS1sb29wKTogbGltcGlhIGVsIGZsYWcgeVxuICAgKiAgICByZXN1ZWx2ZSBjb24gYHsgc3RhdHVzOiAndGltZW91dCcsIHJlbG9hZGVkOiBmYWxzZSB9YCBwYXJhIHF1ZSBsYSBhcHBcbiAgICogICAgbXVlc3RyZSB1biBlcnJvci5cbiAgICpcbiAgICogTk8gaGFjZSB0aHJvdyDigJQgc2llbXByZSByZXN1ZWx2ZSBjb24gdW4gYEVuYWJsZVB1c2hSZXN1bHRgIGRlc2NyaXB0aXZvIHF1ZVxuICAgKiBsYSBww6FnaW5hIGNvbnN1bWlkb3JhIGluc3BlY2Npb25hIHBhcmEgZGVjaWRpciBxdcOpIHRvYXN0IG1vc3RyYXIuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zLnJlZ2lzdGVyRGV2aWNlIENhbGxiYWNrIG9wY2lvbmFsIHF1ZSByZWdpc3RyYSBlbCBkZXZpY2UgZW5cbiAgICogICBlbCBiYWNrZW5kICh2aXZlIGVuIGBBdXRoU2VydmljZWAg4oCUIHNlIHBhc2EgY29tbyBjYWxsYmFjayBwYXJhIGV2aXRhciBlbFxuICAgKiAgIGNpY2xvIGRlIERJIEF1dGhTZXJ2aWNlIOKGlCBNZXNzYWdpbmdTZXJ2aWNlKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBtZXNzYWdpbmcuZW5hYmxlKHtcbiAgICogICByZWdpc3RlckRldmljZTogKHRva2VuKSA9PiBhdXRoLnJlZ2lzdGVyRGV2aWNlKHRva2VuKS50aGVuKHIgPT4gci5yZWdpc3RlcmVkKSxcbiAgICogfSk7XG4gICAqIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZW5hYmxlZCcpIHtcbiAgICogICAvLyByZXN1bHQudG9rZW4gZGlzcG9uaWJsZSDigJQgcHVzaCBhY3Rpdm9cbiAgICogfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSAndGltZW91dCcgJiYgIXJlc3VsdC5yZWxvYWRlZCkge1xuICAgKiAgIC8vIG1vc3RyYXIgZXJyb3I6IGVsIGZsdWpvIHNlIGNvbGfDsyB5IHlhIHNlIGNvbnN1bWnDsyBlbCBhdXRvLXJlbG9hZFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZW5hYmxlKG9wdGlvbnM6IEVuYWJsZVB1c2hPcHRpb25zID0ge30pOiBQcm9taXNlPEVuYWJsZVB1c2hSZXN1bHQ+IHtcbiAgICBjb25zb2xlLmxvZygnW01lc3NhZ2luZ10gZW5hYmxlKCkgc3RhcnQnKTtcblxuICAgIGxldCB3YXRjaGRvZzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBFbCB3YXRjaGRvZyBjb3JyZSBlbiBwYXJhbGVsbyBhbCBmbHVqbyByZWFsLiBMbyBxdWUgZ2FuZSBlbCByYWNlIGRlZmluZVxuICAgIC8vIGVsIHJlc3VsdGFkby4gRWwgZmx1am8gcmVhbCwgc2kgZ2FuYSwgbGltcGlhIGVsIHdhdGNoZG9nIGVuIGVsIGBmaW5hbGx5YC5cbiAgICBjb25zdCB3YXRjaGRvZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTxFbmFibGVQdXNoUmVzdWx0PihyZXNvbHZlID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuOyAvLyBTU1Ig4oCUIHNpbiB3YXRjaGRvZy5cbiAgICAgIHdhdGNoZG9nID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHdhdGNoZG9nID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zb2xlLndhcm4oYFtNZXNzYWdpbmddIGVuYWJsZSgpIGNvbGdhZG8gPiR7dGhpcy5FTkFCTEVfV0FUQ0hET0dfTVN9bXMg4oCUIHdhdGNoZG9nYCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzQXV0b1JlbG9hZGVkKCkpIHtcbiAgICAgICAgICAvLyBBbnRpLWxvb3A6IHlhIHJlY2FyZ2Ftb3MgdW5hIHZleiBlc3RhIHNlc2nDs24geSB2b2x2acOzIGEgY29sZ2FyLlxuICAgICAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gYXV0by1yZWxvYWQgeWEgY29uc3VtaWRvIOKAlCBubyBzZSByZWNhcmdhIGRlIG51ZXZvJyk7XG4gICAgICAgICAgdGhpcy5jbGVhckF1dG9SZWxvYWRGbGFnKCk7XG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXM6ICd0aW1lb3V0JyxcbiAgICAgICAgICAgIHJlbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHJlYXNvbjogYEZsdWpvIGRlIGFjdGl2YWNpw7NuIGNvbGdhZG8gPiR7dGhpcy5FTkFCTEVfV0FUQ0hET0dfTVMgLyAxMDAwfXNgLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDHCqiB2ZXo6IG1hcmNhciB5IHJlY2FyZ2FyLiBVbiBmcmVzaCBsb2FkIHN1ZWxlIHRlbmVyIGVsIFNXIGFjdGl2by5cbiAgICAgICAgY29uc29sZS53YXJuKCdbTWVzc2FnaW5nXSBhdXRvLXJlY2FyZ2FuZG8gbGEgcMOhZ2luYSAoMS8xIHBvciBzZXNpw7NuKScpO1xuICAgICAgICB0aGlzLm1hcmtBdXRvUmVsb2FkZWQoKTtcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgc3RhdHVzOiAndGltZW91dCcsXG4gICAgICAgICAgcmVsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgcmVhc29uOiAnQXV0by1yZWNhcmdhbmRvIHBhcmEgcmVpbnRlbnRhciBsYSBhY3RpdmFjacOzbicsXG4gICAgICAgIH0pO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICB9LCB0aGlzLkVOQUJMRV9XQVRDSERPR19NUyk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBmbG93ID0gdGhpcy5ydW5FbmFibGVGbG93KG9wdGlvbnMpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgaWYgKHdhdGNoZG9nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHdhdGNoZG9nKTtcbiAgICAgICAgd2F0Y2hkb2cgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtmbG93LCB3YXRjaGRvZ1Byb21pc2VdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVqbyByZWFsIGRlIGFjdGl2YWNpw7NuLCBzaW4gZWwgd2F0Y2hkb2cgKGxvIGVudnVlbHZlIGBlbmFibGUoKWApLlxuICAgKiBSZXN1ZWx2ZSBzaWVtcHJlIGNvbiB1biBgRW5hYmxlUHVzaFJlc3VsdGAg4oCUIG5vIGhhY2UgdGhyb3cuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJ1bkVuYWJsZUZsb3cob3B0aW9uczogRW5hYmxlUHVzaE9wdGlvbnMpOiBQcm9taXNlPEVuYWJsZVB1c2hSZXN1bHQ+IHtcbiAgICBpZiAoIShhd2FpdCB0aGlzLmlzU3VwcG9ydGVkKCkpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tNZXNzYWdpbmddIGVuYWJsZTogRkNNIG5vIHNvcG9ydGFkbycpO1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiAndW5zdXBwb3J0ZWQnLCByZWFzb246ICdGQ00gbm8gc29wb3J0YWRvIGVuIGVzdGUgbmF2ZWdhZG9yJyB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBwZXJtaXNzaW9uIOKGkiBTVyByZWFkeSDihpIgZ2V0VG9rZW4gKHJlcXVlc3RQZXJtaXNzaW9uIGVuY2FkZW5hIGxhcyAzKS5cbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5yZXF1ZXN0UGVybWlzc2lvbigpO1xuXG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIC8vIHJlcXVlc3RQZXJtaXNzaW9uIGRldnVlbHZlIG51bGwgdGFudG8gcG9yIHBlcm1pc28gZGVuZWdhZG8gY29tbyBwb3JcbiAgICAgICAgLy8gZmFsbG8gYWwgb2J0ZW5lciBlbCB0b2tlbi4gRGlzdGluZ3VpbW9zIHBvciBlbCBlc3RhZG8gZGVsIHBlcm1pc28uXG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSB0aGlzLmdldFBlcm1pc3Npb25TdGF0ZSgpO1xuICAgICAgICBpZiAocGVybWlzc2lvbiA9PT0gJ2RlbmllZCcgfHwgcGVybWlzc2lvbiA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiAnZGVuaWVkJywgcmVhc29uOiAnUGVybWlzbyBkZSBub3RpZmljYWNpb25lcyBkZW5lZ2FkbycgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6ICdlcnJvcicsIHJlYXNvbjogJ05vIHNlIHB1ZG8gb2J0ZW5lciBlbCB0b2tlbiBGQ00nIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFJlZ2lzdHJvIGRlIGRldmljZSBlbiBiYWNrZW5kIChvcGNpb25hbCDigJQgZWwgY2FsbGVyIHBhc2EgZWwgY2FsbGJhY2spLlxuICAgICAgaWYgKG9wdGlvbnMucmVnaXN0ZXJEZXZpY2UpIHtcbiAgICAgICAgY29uc3QgcmVnaXN0ZXJlZCA9IGF3YWl0IG9wdGlvbnMucmVnaXN0ZXJEZXZpY2UodG9rZW4pO1xuICAgICAgICBpZiAoIXJlZ2lzdGVyZWQpIHtcbiAgICAgICAgICByZXR1cm4geyBzdGF0dXM6ICdlcnJvcicsIHRva2VuLCByZWFzb246ICdObyBzZSBwdWRvIHJlZ2lzdHJhciBlbCBkaXNwb3NpdGl2bycgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDDiXhpdG86IGVzdGFkbyB0ZXJtaW5hbC4gTGltcGlhciBlbCBmbGFnIGFudGktbG9vcCBwYXJhIGZ1dHVyb3MgaW50ZW50b3MuXG4gICAgICB0aGlzLmNsZWFyQXV0b1JlbG9hZEZsYWcoKTtcbiAgICAgIGNvbnNvbGUubG9nKCdbTWVzc2FnaW5nXSBlbmFibGUoKSBzdWNjZXNzJyk7XG4gICAgICByZXR1cm4geyBzdGF0dXM6ICdlbmFibGVkJywgdG9rZW4gfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgcmVhc29uID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGAke2Vycm9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YCA6IFN0cmluZyhlcnJvcik7XG4gICAgICBjb25zb2xlLmVycm9yKCdbTWVzc2FnaW5nXSBlbmFibGUoKSBlcnJvcjonLCByZWFzb24sIGVycm9yKTtcbiAgICAgIHJldHVybiB7IHN0YXR1czogJ2Vycm9yJywgcmVhc29uIH07XG4gICAgfVxuICB9XG5cbiAgLyoqIFRydWUgc2kgeWEgc2UgYXV0by1yZWNhcmfDsyB1bmEgdmV6IGVuIGVzdGEgc2VzacOzbi4gKi9cbiAgcHJpdmF0ZSBoYXNBdXRvUmVsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuQVVUT1JFTE9BRF9GTEFHKSA9PT0gJzEnO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gc2Vzc2lvblN0b3JhZ2UgcHVlZGUgbm8gZXN0YXIgZGlzcG9uaWJsZSAobW9kbyBwcml2YWRvIGVzdHJpY3RvLCBTU1IpLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBNYXJjYSBxdWUgc2UgY29uc3VtacOzIGVsIGF1dG8tcmVsb2FkIGRlIGVzdGEgc2VzacOzbi4gKi9cbiAgcHJpdmF0ZSBtYXJrQXV0b1JlbG9hZGVkKCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuQVVUT1JFTE9BRF9GTEFHLCAnMScpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLyogc2Vzc2lvblN0b3JhZ2Ugbm8gZGlzcG9uaWJsZSDigJQgYmVzdC1lZmZvcnQuICovXG4gICAgfVxuICB9XG5cbiAgLyoqIExpbXBpYSBlbCBmbGFnIGFudGktbG9vcCDigJQgdHJhcyB1biDDqXhpdG8gbyB1biBmYWxsbyBkZWZpbml0aXZvLiAqL1xuICBwcml2YXRlIGNsZWFyQXV0b1JlbG9hZEZsYWcoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5BVVRPUkVMT0FEX0ZMQUcpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLyogc2Vzc2lvblN0b3JhZ2Ugbm8gZGlzcG9uaWJsZSDigJQgbmFkYSBxdWUgbGltcGlhci4gKi9cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCB0b2tlbiBGQ00gYWN0dWFsIChzaW4gc29saWNpdGFyIHBlcm1pc28pLlxuICAgKlxuICAgKiBAcmV0dXJucyBUb2tlbiBGQ00gc2kgZXN0w6EgZGlzcG9uaWJsZSwgbnVsbCBzaSBub1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHRva2VuID0gYXdhaXQgbWVzc2FnaW5nLmdldFRva2VuKCk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZ2V0VG9rZW4oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc29sZS5sb2coJ1tNZXNzYWdpbmddIGdldFRva2VuKCkgc3RhcnQnKTtcbiAgICBjb25zdCBtZXNzYWdpbmcgPSBhd2FpdCB0aGlzLmdldE1lc3NhZ2luZ0luc3RhbmNlKCk7XG4gICAgaWYgKCFtZXNzYWdpbmcpIHtcbiAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gZ2V0VG9rZW4gYWJvcnRlZDogbm8gTWVzc2FnaW5nIGluc3RhbmNlJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB2YXBpZEtleSA9IHRoaXMuY29uZmlnLm1lc3NhZ2luZ1ZhcGlkS2V5O1xuICAgIGlmICghdmFwaWRLZXkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1tNZXNzYWdpbmddIFZBUElEIGtleSBubyBjb25maWd1cmFkYSAoY29uZmlnLm1lc3NhZ2luZ1ZhcGlkS2V5KS4gRkNNIG5vIGZ1bmNpb25hcsOhLidcbiAgICAgICk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gUmV1dGlsaXphciBlbCBTVyB5YSByZWdpc3RyYWRvIChlbiBjb25maWcudHMgZHVyYW50ZSBlbCBib290c3RyYXApIGVuXG4gICAgICAvLyBsdWdhciBkZSByZS1yZWdpc3RyYXJsbyBlbiBjYWRhIGxsYW1hZGEg4oCUIHJlLXJlZ2lzdHJhciBkaXNwYXJhXG4gICAgICAvLyByZXZhbGlkYWNpb25lcyBkZWwgU1cgZW4gaU9TIFBXQS4gU29sbyByZWdpc3RyYW1vcyBzaSBubyBleGlzdGUgYcO6bi5cbiAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IHRoaXMucmVzb2x2ZVNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24oKTtcbiAgICAgIGNvbnNvbGUubG9nKCdbTWVzc2FnaW5nXSBTVyByZXNvbHZlZCwgd2FpdGluZyByZWFkeS4uLicpO1xuICAgICAgLy8gRXNwZXJhciBhIHF1ZSBlbCBTVyBlc3TDqSBhY3Rpdm8sIGNvbiB0aW1lb3V0OiBgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHlgXG4gICAgICAvLyBwdWVkZSBubyByZXNvbHZlciBOVU5DQSBlbiB1biBjb2xkIGxvYWQgKFNXIGHDum4gbm8gYWN0aXZhZG8pIOKGkiBzaW4gZWxcbiAgICAgIC8vIHRpbWVvdXQgYGdldFRva2VuKClgIHNlIGN1ZWxnYSBpbmRlZmluaWRhbWVudGUuIENvbiBlbCByYWNlLCBzaSBlbCBTVyBub1xuICAgICAgLy8gcXVlZGEgbGlzdG8gZW4gU1dfUkVBRFlfVElNRU9VVF9NUywgZXN0YSBwcm9tZXNhIHJlY2hhemEgbGltcGlvLlxuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yU2VydmljZVdvcmtlclJlYWR5KCk7XG4gICAgICBjb25zb2xlLmxvZygnW01lc3NhZ2luZ10gU1cgcmVhZHksIGNhbGxpbmcgRmlyZWJhc2UgZ2V0VG9rZW4oKS4uLicpO1xuXG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGdldFRva2VuKG1lc3NhZ2luZywge1xuICAgICAgICB2YXBpZEtleSxcbiAgICAgICAgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbjogcmVnaXN0cmF0aW9uLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAnW01lc3NhZ2luZ10gRmlyZWJhc2UgZ2V0VG9rZW4gcmV0dXJuZWQ6JyxcbiAgICAgICAgdG9rZW4gPyBgJHt0b2tlbi5zbGljZSgwLCAxNil94oCmYCA6ICdudWxsL2VtcHR5J1xuICAgICAgKTtcblxuICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7XG4gICAgICAgIC4uLnRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLFxuICAgICAgICB0b2tlbixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBQZXJzaXN0aXIgZWwgdG9rZW4gcGFyYSBoaWRyYXRhciBlbCBlc3RhZG8gZW4gZnV0dXJvcyBjb2xkIHN0YXJ0cy5cbiAgICAgIHRoaXMucGVyc2lzdFRva2VuKHRva2VuKTtcblxuICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBObyB0cmFnYW1vcyBsYSBjYXVzYTogbG9ndWVhbW9zIGVsIGRldGFsbGUgcGFyYSBkaWFnbsOzc3RpY28uIExhIGZpcm1hXG4gICAgICAvLyBzaWd1ZSBzaWVuZG8gUHJvbWlzZTxzdHJpbmcgfCBudWxsPiBwYXJhIG5vIHJvbXBlciBjYWxsZXJzLlxuICAgICAgY29uc3QgcmVhc29uID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGAke2Vycm9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YCA6IFN0cmluZyhlcnJvcik7XG4gICAgICBjb25zb2xlLmVycm9yKCdbTWVzc2FnaW5nXSBnZXRUb2tlbiBlcnJvcjonLCByZWFzb24sIGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1ZWx2ZSBlbCBgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbmAgZGVsIFNXIGRlIEZDTS5cbiAgICpcbiAgICogRWwgU1cgYC9maXJlYmFzZS1tZXNzYWdpbmctc3cuanNgIHlhIHNlIHJlZ2lzdHJhIHVuYSB2ZXogZW4gZWwgYm9vdHN0cmFwIGRlXG4gICAqIGxhIGFwcCAoYGNvbmZpZy50c2ApLiBSZXV0aWxpemFtb3MgZXNlIHJlZ2lzdHJvIGVuIGx1Z2FyIGRlIHJlLXJlZ2lzdHJhcmxvXG4gICAqIGVuIGNhZGEgYGdldFRva2VuKClgIOKAlCByZS1yZWdpc3RyYXIgcmVwZXRpZGFtZW50ZSBkaXNwYXJhIHJldmFsaWRhY2lvbmVzIGRlbFxuICAgKiBTVyBlbiBpT1MgUFdBLiBTb2xvIHJlZ2lzdHJhbW9zIGNvbW8gZmFsbGJhY2sgc2kgdG9kYXbDrWEgbm8gZXhpc3RlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXNvbHZlU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbigpOiBQcm9taXNlPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmdldFJlZ2lzdHJhdGlvbignL2ZpcmViYXNlLW1lc3NhZ2luZy1zdy5qcycpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgICBjb25zb2xlLndhcm4oJ1tNZXNzYWdpbmddIFNXIG5vdCByZWdpc3RlcmVkIHlldCwgcmVnaXN0ZXJpbmcgYXMgZmFsbGJhY2snKTtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9maXJlYmFzZS1tZXNzYWdpbmctc3cuanMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFc3BlcmEgYSBxdWUgZWwgU2VydmljZSBXb3JrZXIgcXVlZGUgYWN0aXZvIChgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHlgKVxuICAgKiBwZXJvIGNvbiB1biB0aW1lb3V0IGR1cm8uXG4gICAqXG4gICAqIGBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeWAgcmVzdWVsdmUgY3VhbmRvIGhheSB1biBTVyAqYWN0aXZvKi4gRW4gdW5cbiAgICogY29sZCBsb2FkIChwcmltZXJhIHZpc2l0YSwgU1cgcmVjacOpbiByZWdpc3RyYWRvLCBpT1MgUFdBIHJlY2nDqW4gYWJpZXJ0YSkgZWxcbiAgICogU1cgcHVlZGUgcXVlZGFyIGVuIGVzdGFkbyBgaW5zdGFsbGluZ2AvYHdhaXRpbmdgIHkgYHJlYWR5YCBubyByZXNvbHZlciBudW5jYVxuICAgKiDihpIgYGdldFRva2VuKClgIHNlIGN1ZWxnYS4gRWwgYFByb21pc2UucmFjZWAgY29udHJhIHVuIGBzZXRUaW1lb3V0YCBnYXJhbnRpemFcbiAgICogcXVlIGVzdGEgZXNwZXJhIHRlcm1pbmE6IG8gZ2FuYSBgcmVhZHlgIChjYXNvIG5vcm1hbCkgbyBnYW5hIGVsIHRpbWVvdXQgeVxuICAgKiBsYW56YW1vcyB1biBlcnJvciBjbGFybyBwYXJhIHF1ZSBgZ2V0VG9rZW4oKWAgcmVjaGFjZSBlbiB2ZXogZGUgY29sZ2Fyc2UuXG4gICAqXG4gICAqIEVsIHRpbWVyIHNlIGxpbXBpYSBlbiBhbWJhcyByYW1hcyBwYXJhIG5vIGRlamFyIHRpbWVycyBjb2xnYW5kby5cbiAgICovXG4gIHByaXZhdGUgd2FpdEZvclNlcnZpY2VXb3JrZXJSZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgcmVhZHkgPSBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aW1lciAhPT0gdW5kZWZpbmVkKSBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdGltZW91dCA9IG5ldyBQcm9taXNlPG5ldmVyPigoXywgcmVqZWN0KSA9PiB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFtNZXNzYWdpbmddIHNlcnZpY2Ugd29ya2VyIG5vIHF1ZWTDsyBsaXN0byBlbiAke3RoaXMuU1dfUkVBRFlfVElNRU9VVF9NUyAvIDEwMDB9c2BcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9LCB0aGlzLlNXX1JFQURZX1RJTUVPVVRfTVMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIFByb21pc2UucmFjZShbcmVhZHksIHRpbWVvdXRdKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIGlmICh0aW1lciAhPT0gdW5kZWZpbmVkKSBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3RlIGVsIHRva2VuIEZDTSBlbiBsb2NhbFN0b3JhZ2UgKG8gbG8gbGltcGlhIHNpIGVzIG51bGwvZW1wdHkpLlxuICAgKi9cbiAgcHJpdmF0ZSBwZXJzaXN0VG9rZW4odG9rZW46IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuVE9LRU5fU1RPUkFHRV9LRVksIHRva2VuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVE9LRU5fU1RPUkFHRV9LRVkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gdG9rZW4gcGVyc2lzdGVuY2UgZmFpbGVkOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRyYXRhIGVsIGVzdGFkbyBkZWwgdG9rZW4gZGVzZGUgbG9jYWxTdG9yYWdlIGVuIGVsIGFycmFucXVlIGRlbCBzZXJ2aWNpby5cbiAgICovXG4gIHByaXZhdGUgaHlkcmF0ZVRva2VuRnJvbVN0b3JhZ2UoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhY2hlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVE9LRU5fU1RPUkFHRV9LRVkpO1xuICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICB0aGlzLnNldFRva2VuRnJvbVN0b3JhZ2UoY2FjaGVkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tNZXNzYWdpbmddIHRva2VuIGh5ZHJhdGlvbiBmYWlsZWQ6JywgZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVsaW1pbmEgZWwgdG9rZW4gRkNNIGFjdHVhbCAodW5zdWJzY3JpYmUgZGUgbm90aWZpY2FjaW9uZXMpLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IG1lc3NhZ2luZy5kZWxldGVUb2tlbigpO1xuICAgKiBjb25zb2xlLmxvZygnVG9rZW4gZWxpbWluYWRvLCBubyByZWNpYmlyw6EgbcOhcyBub3RpZmljYWNpb25lcycpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGRlbGV0ZVRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1lc3NhZ2luZyA9IGF3YWl0IHRoaXMuZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKTtcbiAgICBpZiAoIW1lc3NhZ2luZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVUb2tlbihtZXNzYWdpbmcpO1xuXG4gICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5zdGF0ZVN1YmplY3QudmFsdWUsXG4gICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIExpbXBpYXIgZWwgdG9rZW4gcGVyc2lzdGlkbyDigJQgeWEgbm8gZXN0YW1vcyBzdXNjcml0b3MuXG4gICAgICB0aGlzLnBlcnNpc3RUb2tlbihudWxsKTtcblxuICAgICAgLy8gTGltcGlhciBsaXN0ZW5lciBkZSBtZW5zYWplc1xuICAgICAgaWYgKHRoaXMudW5zdWJzY3JpYmVPbk1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZU9uTWVzc2FnZSgpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlT25NZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBlbGltaW5hbmRvIHRva2VuIEZDTTonLCBlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNlIHB1ZG8gZWxpbWluYXIgZWwgdG9rZW4gZGUgbm90aWZpY2FjaW9uZXMnKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTUVOU0FKRVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgZGUgbWVuc2FqZXMgcmVjaWJpZG9zIGVuIGZvcmVncm91bmQuXG4gICAqXG4gICAqIElNUE9SVEFOVEU6IExvcyBtZW5zYWplcyBlbiBiYWNrZ3JvdW5kIHNvbiBtYW5lamFkb3MgcG9yIGVsIFNlcnZpY2UgV29ya2VyLlxuICAgKlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHF1ZSBlbWl0ZSBjdWFuZG8gbGxlZ2EgdW4gbWVuc2FqZSBlbiBmb3JlZ3JvdW5kXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogbWVzc2FnaW5nLm9uTWVzc2FnZSgpLnN1YnNjcmliZShwYXlsb2FkID0+IHtcbiAgICogICBjb25zb2xlLmxvZygnTWVuc2FqZSByZWNpYmlkbzonLCBwYXlsb2FkKTtcbiAgICogICAvLyBNb3N0cmFyIG5vdGlmaWNhY2nDs24gY3VzdG9tIG8gYWN0dWFsaXphciBVSVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBvbk1lc3NhZ2UoKTogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25QYXlsb2FkPiB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJhIGVsIGxpc3RlbmVyIGRlIG1lbnNhamVzIGVuIGZvcmVncm91bmRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2V0dXBNZXNzYWdlTGlzdGVuZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVzc2FnaW5nID0gYXdhaXQgdGhpcy5nZXRNZXNzYWdpbmdJbnN0YW5jZSgpO1xuICAgIGlmICghbWVzc2FnaW5nIHx8IHRoaXMudW5zdWJzY3JpYmVPbk1lc3NhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVuc3Vic2NyaWJlT25NZXNzYWdlID0gb25NZXNzYWdlKG1lc3NhZ2luZywgcGF5bG9hZCA9PiB7XG4gICAgICBjb25zdCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvblBheWxvYWQgPSB7XG4gICAgICAgIHRpdGxlOiBwYXlsb2FkLm5vdGlmaWNhdGlvbj8udGl0bGUsXG4gICAgICAgIGJvZHk6IHBheWxvYWQubm90aWZpY2F0aW9uPy5ib2R5LFxuICAgICAgICBpbWFnZTogcGF5bG9hZC5ub3RpZmljYXRpb24/LmltYWdlLFxuICAgICAgICBkYXRhOiBwYXlsb2FkLmRhdGEgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICAgICAgbWVzc2FnZUlkOiBwYXlsb2FkLm1lc3NhZ2VJZCxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMubWVzc2FnZVN1YmplY3QubmV4dChub3RpZmljYXRpb24pO1xuXG4gICAgICAvLyBQZXJzaXN0aXIgZW4gbG9jYWxTdG9yYWdlIHBhcmEgZGVidWdnaW5nIHNpIGVzdMOhIGhhYmlsaXRhZG9cbiAgICAgIGlmICh0aGlzLmRlYnVnUGVyc2lzdGVuY2UpIHtcbiAgICAgICAgdGhpcy5wZXJzaXN0TWVzc2FnZUZvckRlYnVnKG5vdGlmaWNhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdGUgdW4gbWVuc2FqZSBGQ00gZW4gbG9jYWxTdG9yYWdlIHBhcmEgZGVidWdnaW5nLlxuICAgKiBTb2xvIHNlIHVzYSBjdWFuZG8gZGVidWdNZXNzYWdlUGVyc2lzdGVuY2UgZXN0w6EgaGFiaWxpdGFkby5cbiAgICogTWFudGllbmUgbG9zIMO6bHRpbW9zIDUwIG1lbnNhamVzLlxuICAgKi9cbiAgcHJpdmF0ZSBwZXJzaXN0TWVzc2FnZUZvckRlYnVnKG1lc3NhZ2U6IE5vdGlmaWNhdGlvblBheWxvYWQpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5ERUJVR19TVE9SQUdFX0tFWSk7XG4gICAgICBjb25zdCBtZXNzYWdlcyA9IHN0b3JlZCA/IEpTT04ucGFyc2Uoc3RvcmVkKSA6IFtdO1xuICAgICAgbWVzc2FnZXMudW5zaGlmdCh7IC4uLm1lc3NhZ2UsIHJlY2VpdmVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9KTtcbiAgICAgIC8vIE1hbnRlbmVyIHNvbG8gw7psdGltb3MgNTBcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuREVCVUdfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VzLnNsaWNlKDAsIDUwKSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gRGVidWcgcGVyc2lzdGVuY2UgZmFpbGVkOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFU1RBRE8gWSBVVElMSURBREVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIGVzdGFkbyBhY3R1YWwgZGVsIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXMuXG4gICAqXG4gICAqIEByZXR1cm5zICdncmFudGVkJyB8ICdkZW5pZWQnIHwgJ2RlZmF1bHQnXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcGVybWlzc2lvbiA9IG1lc3NhZ2luZy5nZXRQZXJtaXNzaW9uU3RhdGUoKTtcbiAgICogaWYgKHBlcm1pc3Npb24gPT09ICdncmFudGVkJykge1xuICAgKiAgIC8vIFlhIHRpZW5lIHBlcm1pc29cbiAgICogfSBlbHNlIGlmIChwZXJtaXNzaW9uID09PSAnZGVmYXVsdCcpIHtcbiAgICogICAvLyBQdWVkZSBzb2xpY2l0YXIgcGVybWlzb1xuICAgKiB9IGVsc2Uge1xuICAgKiAgIC8vIERlbmVnYWRvLCBkZWJlIGhhYmlsaXRhciBtYW51YWxtZW50ZVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0UGVybWlzc2lvblN0YXRlKCk6IE5vdGlmaWNhdGlvblBlcm1pc3Npb24ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuICdkZWZhdWx0JztcbiAgICB9XG5cbiAgICBpZiAoISgnTm90aWZpY2F0aW9uJyBpbiB3aW5kb3cpKSB7XG4gICAgICByZXR1cm4gJ2RlbmllZCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIE5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uIGFzIE5vdGlmaWNhdGlvblBlcm1pc3Npb247XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgRkNNIGVzdMOhIHNvcG9ydGFkbyBlbiBlbCBuYXZlZ2Fkb3IgYWN0dWFsLlxuICAgKiBVc2EgbMOzZ2ljYSBpbnRlbGlnZW50ZSBwYXJhIGV2aXRhciBmYWxzb3MgbmVnYXRpdm9zIHBvciB0aW1pbmcgZGVsIEluamVjdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB0cnVlIHNpIEZDTSBlc3TDoSBzb3BvcnRhZG9cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBpZiAoYXdhaXQgbWVzc2FnaW5nLmlzU3VwcG9ydGVkKCkpIHtcbiAgICogICAvLyBQdWVkZSB1c2FyIG5vdGlmaWNhY2lvbmVzIHB1c2hcbiAgICogfSBlbHNlIHtcbiAgICogICAvLyBOYXZlZ2Fkb3Igbm8gc29wb3J0YSBvIG5vIHRpZW5lIFNlcnZpY2UgV29ya2VyXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBpc1N1cHBvcnRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBTaSB5YSB0ZW5lbW9zIHRva2VuIGVuIGVzdGFkbywgY2xhcmFtZW50ZSBGQ00gZnVuY2lvbmFcbiAgICBpZiAodGhpcy5zdGF0ZVN1YmplY3QudmFsdWUudG9rZW4pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFNpIHlhIGNhbGN1bGFtb3Mgc29wb3J0ZSBleGl0b3NhbWVudGUsIHVzYXJsb1xuICAgIGlmICh0aGlzLnN0YXRlU3ViamVjdC52YWx1ZS5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZpY2FjaW9uZXMgYsOhc2ljYXMg4oCUIEFQSXMgZGVsIGJyb3dzZXJcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCEoJ05vdGlmaWNhdGlvbicgaW4gd2luZG93KSB8fCAhKCdzZXJ2aWNlV29ya2VyJyBpbiBuYXZpZ2F0b3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gaU9TIOKAlCBzb2xvIHNvcG9ydGEgcHVzaCB3ZWIgY3VhbmRvIGxhIFBXQSBlc3TDoSBpbnN0YWxhZGEgZW4gaG9tZSBzY3JlZW5cbiAgICAvLyAoaU9TIDE2LjQrKS4gRWRnZS9DaHJvbWUvRmlyZWZveCBlbiBpT1MgY29tcGFydGVuIGVzdGEgbGltaXRhY2nDs24gcG9ycXVlXG4gICAgLy8gZXN0w6FuIG9ibGlnYWRvcyBhIHVzYXIgV2ViS2l0LiBSZXRvcm5hbW9zIGZhbHNlIGFxdcOtIHBhcmEgcXVlIGxhIFVJIG11ZXN0cmVcbiAgICAvLyBlbCBmbHVqbyBcImluc3RhbGEgbGEgYXBwXCIgZW4gbHVnYXIgZGUgdW4gQ1RBIHF1ZSB2YSBhIGZhbGxhci5cbiAgICBpZiAodGhpcy5pc0lPU1dpdGhvdXRTdGFuZGFsb25lKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBOT1RBOiBkZWxpYmVyYWRhbWVudGUgTk8gY2hlcXVlYW1vcyBgZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKWAgYXF1w60gcG9ycXVlXG4gICAgLy8gZWwgZmFjdG9yeSBgcHJvdmlkZU1lc3NhZ2luZygoKSA9PiBnZXRNZXNzYWdpbmcoKSlgIGVzIGxhenkgZW4gQW5ndWxhclxuICAgIC8vIEZpcmUgeSBwdWVkZSBubyBlc3RhciByZXN1ZWx0byBjdWFuZG8gZXN0YSBmdW5jacOzbiBzZSBsbGFtYSB0ZW1wcmFub1xuICAgIC8vIGVuIGVsIGNpY2xvIGRlIHZpZGEuIEVzbyBjYXVzYWJhIGZhbHNvcyBuZWdhdGl2b3MuIFNpIEZDTSByZWFsbWVudGUgbm9cbiAgICAvLyBlc3TDoSBkaXNwb25pYmxlIChwcm95ZWN0byBzaW4gTWVzc2FnaW5nIGhhYmlsaXRhZG8sIFZBUElEIGludsOhbGlkbyksIGVsXG4gICAgLy8gZmxvdyBkb3duc3RyZWFtIChgZ2V0VG9rZW5gL2ByZXF1ZXN0UGVybWlzc2lvbmApIGZhbGxhcsOhIGNvbiBlcnJvciByZWFsLFxuICAgIC8vIHF1ZSBlcyBtZWpvciBVWCBxdWUgdW4gXCJubyBzb3BvcnRhZG9cIiBwcmVtYXR1cm8uXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogaU9TIHNpbiBlc3RhciBpbnN0YWxhZG8gY29tbyBQV0Egc3RhbmRhbG9uZSDigJQgcHVzaCB3ZWIgbm8gZGlzcG9uaWJsZS5cbiAgICogQXBsaWNhIGEgU2FmYXJpIHkgYSBFZGdlL0Nocm9tZS9GaXJlZm94IGVuIGlPUyAodG9kb3MgV2ViS2l0IHBvciBtYW5kYXRvIEFwcGxlKS5cbiAgICovXG4gIHByaXZhdGUgaXNJT1NXaXRob3V0U3RhbmRhbG9uZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB1YSA9IChuYXZpZ2F0b3IgYXMgTmF2aWdhdG9yKS51c2VyQWdlbnQgfHwgJyc7XG4gICAgY29uc3QgaXNJT1MgPSAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdCh1YSk7XG4gICAgaWYgKCFpc0lPUykgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGlzU3RhbmRhbG9uZSA9XG4gICAgICB3aW5kb3cubWF0Y2hNZWRpYT8uKCcoZGlzcGxheS1tb2RlOiBzdGFuZGFsb25lKScpLm1hdGNoZXMgfHxcbiAgICAgIChuYXZpZ2F0b3IgYXMgdW5rbm93biBhcyB7IHN0YW5kYWxvbmU/OiBib29sZWFuIH0pLnN0YW5kYWxvbmUgPT09IHRydWU7XG4gICAgcmV0dXJuICFpc1N0YW5kYWxvbmU7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCB0b2tlbiBhY3R1YWwgc2luIGhhY2VyIHJlcXVlc3QuXG4gICAqXG4gICAqIEByZXR1cm5zIFRva2VuIGFsbWFjZW5hZG8gbyBudWxsXG4gICAqL1xuICBnZXQgY3VycmVudFRva2VuKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZS50b2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIGRlbCBlc3RhZG8gY29tcGxldG8gZGVsIHNlcnZpY2lvIGRlIG1lc3NhZ2luZy5cbiAgICovXG4gIGdldCBzdGF0ZSQoKTogT2JzZXJ2YWJsZTxNZXNzYWdpbmdTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHlhIG90b3Jnw7MgcGVybWlzbyBkZSBub3RpZmljYWNpb25lcy5cbiAgICovXG4gIGdldCBoYXNQZXJtaXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZS5wZXJtaXNzaW9uID09PSAnZ3JhbnRlZCc7XG4gIH1cblxuICAvKipcbiAgICogSGlkcmF0YSBlbCBlc3RhZG8gZGVsIHRva2VuIGRlc2RlIHVuIHZhbG9yIGV4dGVybm8gKGVqOiBsb2NhbFN0b3JhZ2UpLlxuICAgKiDDmnRpbCBjdWFuZG8gZWwgdG9rZW4geWEgZXhpc3RlIHBlcm8gZWwgTWVzc2FnaW5nU2VydmljZSBubyBsbyB0aWVuZSBlbiBtZW1vcmlhLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gVG9rZW4gRkNNIGEgc2V0ZWFyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgc3RvcmVkVG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZmNtX3Rva2VuJyk7XG4gICAqIGlmIChzdG9yZWRUb2tlbikge1xuICAgKiAgIG1lc3NhZ2luZy5zZXRUb2tlbkZyb21TdG9yYWdlKHN0b3JlZFRva2VuKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHNldFRva2VuRnJvbVN0b3JhZ2UodG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdG9rZW4pIHJldHVybjtcblxuICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoe1xuICAgICAgLi4udGhpcy5zdGF0ZVN1YmplY3QudmFsdWUsXG4gICAgICB0b2tlbixcbiAgICAgIGlzU3VwcG9ydGVkOiB0cnVlLCAvLyBTaSBoYXkgdG9rZW4sIGNsYXJhbWVudGUgRkNNIGZ1bmNpb25hXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gREVFUCBMSU5LSU5HIC8gTkFWRUdBQ0nDk05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgZGUgY2xpY2tzIGVuIG5vdGlmaWNhY2lvbmVzLlxuICAgKlxuICAgKiBFbWl0ZSBjdWFuZG8gZWwgdXN1YXJpbyBoYWNlIGNsaWNrIGVuIHVuYSBub3RpZmljYWNpw7NuIChmb3JlZ3JvdW5kIG8gYmFja2dyb3VuZCkuXG4gICAqIFVzYSBlc3RlIG9ic2VydmFibGUgcGFyYSBuYXZlZ2FyIGEgbGEgcMOhZ2luYSBjb3JyZXNwb25kaWVudGUuXG4gICAqXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgcXVlIGVtaXRlIE5vdGlmaWNhdGlvbkNsaWNrRXZlbnRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBAQ29tcG9uZW50KHsuLi59KVxuICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICogICBwcml2YXRlIG1lc3NhZ2luZyA9IGluamVjdChNZXNzYWdpbmdTZXJ2aWNlKTtcbiAgICogICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgKlxuICAgKiAgIGNvbnN0cnVjdG9yKCkge1xuICAgKiAgICAgdGhpcy5tZXNzYWdpbmcub25Ob3RpZmljYXRpb25DbGljaygpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAqICAgICAgIGlmIChldmVudC5hY3Rpb24ucm91dGUpIHtcbiAgICogICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZXZlbnQuYWN0aW9uLnJvdXRlXSwge1xuICAgKiAgICAgICAgICAgcXVlcnlQYXJhbXM6IGV2ZW50LmFjdGlvbi5xdWVyeVBhcmFtc1xuICAgKiAgICAgICAgIH0pO1xuICAgKiAgICAgICB9XG4gICAqICAgICB9KTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBvbk5vdGlmaWNhdGlvbkNsaWNrKCk6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uQ2xpY2tFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbkNsaWNrU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWUgbGEgYWNjacOzbiBkZSBuYXZlZ2FjacOzbiBkZSBsb3MgZGF0b3MgZGUgdW5hIG5vdGlmaWNhY2nDs24uXG4gICAqXG4gICAqIEJ1c2NhIGNhbXBvcyBlc3BlY8OtZmljb3MgZW4gZWwgcGF5bG9hZCBkZSBkYXRvczpcbiAgICogLSBgcm91dGVgOiBSdXRhIGludGVybmEgZGUgbGEgYXBwIChlajogJy9vcmRlcnMvMTIzJylcbiAgICogLSBgdXJsYDogVVJMIGV4dGVybmEgKGVqOiAnaHR0cHM6Ly9leGFtcGxlLmNvbScpXG4gICAqIC0gYGFjdGlvbl90eXBlYDogVGlwbyBkZSBhY2Npw7NuIHBlcnNvbmFsaXphZGFcbiAgICogLSBDYW1wb3MgY29uIHByZWZpam8gYGFjdGlvbl9gOiBEYXRvcyBhZGljaW9uYWxlc1xuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIERhdG9zIGRlbCBwYXlsb2FkIGRlIGxhIG5vdGlmaWNhY2nDs25cbiAgICogQHJldHVybnMgQWNjacOzbiBkZSBuYXZlZ2FjacOzbiBleHRyYcOtZGFcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBQYXlsb2FkIGRlc2RlIGVsIGJhY2tlbmQ6XG4gICAqIC8vIHsgcm91dGU6ICcvb3JkZXJzLzEyMycsIGFjdGlvbl90eXBlOiAndmlld19vcmRlcicsIGFjdGlvbl9vcmRlcklkOiAnMTIzJyB9XG4gICAqXG4gICAqIGNvbnN0IGFjdGlvbiA9IG1lc3NhZ2luZy5leHRyYWN0QWN0aW9uRnJvbURhdGEobm90aWZpY2F0aW9uLmRhdGEpO1xuICAgKiAvLyB7IHJvdXRlOiAnL29yZGVycy8xMjMnLCBhY3Rpb25UeXBlOiAndmlld19vcmRlcicsIGFjdGlvbkRhdGE6IHsgb3JkZXJJZDogJzEyMycgfSB9XG4gICAqIGBgYFxuICAgKi9cbiAgZXh0cmFjdEFjdGlvbkZyb21EYXRhKGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogTm90aWZpY2F0aW9uQWN0aW9uIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3Rpb246IE5vdGlmaWNhdGlvbkFjdGlvbiA9IHt9O1xuXG4gICAgLy8gUnV0YSBpbnRlcm5hXG4gICAgaWYgKGRhdGFbJ3JvdXRlJ10pIHtcbiAgICAgIGFjdGlvbi5yb3V0ZSA9IGRhdGFbJ3JvdXRlJ107XG4gICAgfVxuXG4gICAgLy8gVVJMIGV4dGVybmFcbiAgICBpZiAoZGF0YVsndXJsJ10pIHtcbiAgICAgIGFjdGlvbi51cmwgPSBkYXRhWyd1cmwnXTtcbiAgICB9XG5cbiAgICAvLyBUaXBvIGRlIGFjY2nDs25cbiAgICBpZiAoZGF0YVsnYWN0aW9uX3R5cGUnXSkge1xuICAgICAgYWN0aW9uLmFjdGlvblR5cGUgPSBkYXRhWydhY3Rpb25fdHlwZSddO1xuICAgIH1cblxuICAgIC8vIFF1ZXJ5IHBhcmFtcyAocHVlZGUgdmVuaXIgY29tbyBKU09OIHN0cmluZylcbiAgICBpZiAoZGF0YVsncXVlcnlfcGFyYW1zJ10pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjdGlvbi5xdWVyeVBhcmFtcyA9IEpTT04ucGFyc2UoZGF0YVsncXVlcnlfcGFyYW1zJ10pO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFNpIG5vIGVzIEpTT04gdsOhbGlkbywgaW50ZW50YXIgcGFyc2VhciBjb21vIGtleT12YWx1ZVxuICAgICAgICBhY3Rpb24ucXVlcnlQYXJhbXMgPSB0aGlzLnBhcnNlUXVlcnlTdHJpbmcoZGF0YVsncXVlcnlfcGFyYW1zJ10pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERhdG9zIGFkaWNpb25hbGVzIGNvbiBwcmVmaWpvIGFjdGlvbl9cbiAgICBjb25zdCBhY3Rpb25EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJ2FjdGlvbl8nKSAmJiBrZXkgIT09ICdhY3Rpb25fdHlwZScpIHtcbiAgICAgICAgY29uc3QgY2xlYW5LZXkgPSBrZXkucmVwbGFjZSgnYWN0aW9uXycsICcnKTtcbiAgICAgICAgLy8gSW50ZW50YXIgcGFyc2VhciBKU09OIHNpIGVzIHBvc2libGVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhY3Rpb25EYXRhW2NsZWFuS2V5XSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBhY3Rpb25EYXRhW2NsZWFuS2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGFjdGlvbkRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIGFjdGlvbi5hY3Rpb25EYXRhID0gYWN0aW9uRGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRlIG1hbnVhbG1lbnRlIHVuIGV2ZW50byBkZSBjbGljayBlbiBub3RpZmljYWNpw7NuLlxuICAgKlxuICAgKiDDmnRpbCBwYXJhIG1hbmVqYXIgY2xpY2tzIGVuIG5vdGlmaWNhY2lvbmVzIGZvcmVncm91bmQgZG9uZGVcbiAgICogbGEgYXBwIGRlY2lkZSBtb3N0cmFyIHVuIGJhbm5lciBjdXN0b20uXG4gICAqXG4gICAqIEBwYXJhbSBub3RpZmljYXRpb24gLSBQYXlsb2FkIGRlIGxhIG5vdGlmaWNhY2nDs25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBtZXNzYWdpbmcub25NZXNzYWdlKCkuc3Vic2NyaWJlKG5vdGlmaWNhdGlvbiA9PiB7XG4gICAqICAgLy8gTW9zdHJhciBiYW5uZXIgY3VzdG9tXG4gICAqICAgdGhpcy5zaG93QmFubmVyKG5vdGlmaWNhdGlvbiwgKCkgPT4ge1xuICAgKiAgICAgLy8gVXN1YXJpbyBoaXpvIGNsaWNrIGVuIGVsIGJhbm5lclxuICAgKiAgICAgbWVzc2FnaW5nLmhhbmRsZU5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlvbik7XG4gICAqICAgfSk7XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGhhbmRsZU5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uUGF5bG9hZCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuZXh0cmFjdEFjdGlvbkZyb21EYXRhKG5vdGlmaWNhdGlvbi5kYXRhKTtcblxuICAgIHRoaXMubm90aWZpY2F0aW9uQ2xpY2tTdWJqZWN0Lm5leHQoe1xuICAgICAgbm90aWZpY2F0aW9uLFxuICAgICAgYWN0aW9uLFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIHVuYSBub3RpZmljYWNpw7NuIHRpZW5lIGFjY2nDs24gZGUgbmF2ZWdhY2nDs24uXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0b3MgZGVsIHBheWxvYWRcbiAgICogQHJldHVybnMgdHJ1ZSBzaSB0aWVuZSByb3V0ZSBvIHVybFxuICAgKi9cbiAgaGFzTmF2aWdhdGlvbkFjdGlvbihkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IGJvb2xlYW4ge1xuICAgIGlmICghZGF0YSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIShkYXRhWydyb3V0ZSddIHx8IGRhdGFbJ3VybCddKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZWEgdW4gcXVlcnkgc3RyaW5nIGVuIHVuIG9iamV0by5cbiAgICovXG4gIHByaXZhdGUgcGFyc2VRdWVyeVN0cmluZyhxdWVyeVN0cmluZzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICBpZiAoIXF1ZXJ5U3RyaW5nKSByZXR1cm4gcGFyYW1zO1xuXG4gICAgLy8gUmVtb3ZlciA/IGluaWNpYWwgc2kgZXhpc3RlXG4gICAgY29uc3QgY2xlYW5RdWVyeSA9IHF1ZXJ5U3RyaW5nLnN0YXJ0c1dpdGgoJz8nKSA/IHF1ZXJ5U3RyaW5nLnNsaWNlKDEpIDogcXVlcnlTdHJpbmc7XG5cbiAgICBmb3IgKGNvbnN0IHBhaXIgb2YgY2xlYW5RdWVyeS5zcGxpdCgnJicpKSB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYWlyLnNwbGl0KCc9Jyk7XG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQoa2V5KV0gPSBkZWNvZGVVUklDb21wb25lbnQodmFsdWUgfHwgJycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cbiJdfQ==
930
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL21lc3NhZ2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFvQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFhLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFdBQVcsSUFBSSxjQUFjLEVBQUUsWUFBWSxJQUFJLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5RCxPQUFPLEVBQWMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBeUNuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSCxNQUFNLE9BQU8sZ0JBQWdCO0lBcUQzQixZQUNVLFFBQWtCLEVBQ2UsTUFBNkIsRUFDekMsVUFBa0IsRUFDdkMsTUFBYztRQUhkLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDZSxXQUFNLEdBQU4sTUFBTSxDQUF1QjtRQUN6QyxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ3ZDLFdBQU0sR0FBTixNQUFNLENBQVE7UUF4RGhCLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7UUFDcEQsNkJBQXdCLEdBQUcsSUFBSSxPQUFPLEVBQTBCLENBQUM7UUFDakUsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBaUI7WUFDekQsS0FBSyxFQUFFLElBQUk7WUFDWCxVQUFVLEVBQUUsU0FBUztZQUNyQixXQUFXLEVBQUUsS0FBSztTQUNuQixDQUFDLENBQUM7UUFNSCx3REFBd0Q7UUFDdkMsc0JBQWlCLEdBQUcsb0JBQW9CLENBQUM7UUFDMUQ7Ozs7Ozs7V0FPRztRQUNjLHNCQUFpQixHQUFHLG1CQUFtQixDQUFDO1FBRXpEOzs7Ozs7V0FNRztRQUNjLHdCQUFtQixHQUFHLE1BQU0sQ0FBQztRQUU5Qzs7Ozs7Ozs7OztXQVVHO1FBQ2MsdUJBQWtCLEdBQUcsTUFBTSxDQUFDO1FBRTdDOzs7V0FHRztRQUNjLG9CQUFlLEdBQUcseUJBQXlCLENBQUM7UUFRM0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLElBQUksS0FBSyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUF3Qk8sS0FBSyxDQUFDLG9CQUFvQjtRQUNoQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXJELElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsY0FBYyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQy9DLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0NBQStDLENBQUMsQ0FBQztZQUM5RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEYsdUVBQXVFO1lBQ3ZFLCtEQUErRDtZQUMvRCwwRUFBMEU7WUFDMUUsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFjLENBQUM7UUFDM0MsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsaUJBQWlCO0lBQ2pCLDhFQUE4RTtJQUU5RTs7T0FFRztJQUNLLEtBQUssQ0FBQyxtQkFBbUI7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO1FBRUQsNEVBQTRFO1FBQzVFLDJFQUEyRTtRQUMzRSxnRUFBZ0U7UUFDaEUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFFL0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7WUFDMUIsV0FBVyxFQUFFLFNBQVM7WUFDdEIsVUFBVTtTQUNYLENBQUMsQ0FBQztRQUVILDRDQUE0QztRQUM1QyxJQUFJLFNBQVMsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUVELDZFQUE2RTtRQUM3RSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzNFLE9BQU87UUFDVCxDQUFDO1FBRUQsU0FBUyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDMUQsOERBQThEO1lBQzlELHNFQUFzRTtZQUN0RSxrRUFBa0U7WUFDbEUsMERBQTBEO1lBQzFELElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssb0JBQW9CO2dCQUFFLE9BQU87WUFDdEQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUErQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxZQUFZO2dCQUFFLE9BQU87WUFFMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDO29CQUNqQyxZQUFZO29CQUNaLE1BQU07b0JBQ04sU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO2lCQUN0QixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLFlBQVk7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELDRCQUE0QjtRQUM1QixJQUFJLENBQUMsQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxJQUFJLENBQUMsQ0FBQyxlQUFlLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCwyRUFBMkU7UUFDM0UsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDekMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLG1CQUFtQjtJQUNuQiw4RUFBOEU7SUFFOUU7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1lBQ3hELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILHNDQUFzQztZQUN0QyxNQUFNLFVBQVUsR0FBRyxNQUFNLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRTFELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsVUFBVSxFQUFFLFVBQW9DO2FBQ2pELENBQUMsQ0FBQztZQUVILElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7Z0JBQ25ELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELG9CQUFvQjtZQUNwQixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVwQyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLGtDQUFrQztnQkFDbEMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsQ0FBQztZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXFDRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBNkIsRUFBRTtRQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFFMUMsSUFBSSxRQUFtRCxDQUFDO1FBRXhELDBFQUEwRTtRQUMxRSw0RUFBNEU7UUFDNUUsTUFBTSxlQUFlLEdBQUcsSUFBSSxPQUFPLENBQW1CLE9BQU8sQ0FBQyxFQUFFO1lBQzlELElBQUksT0FBTyxNQUFNLEtBQUssV0FBVztnQkFBRSxPQUFPLENBQUMsc0JBQXNCO1lBQ2pFLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUN6QixRQUFRLEdBQUcsU0FBUyxDQUFDO2dCQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxJQUFJLENBQUMsa0JBQWtCLGVBQWUsQ0FBQyxDQUFDO2dCQUV0RixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO29CQUMzQixrRUFBa0U7b0JBQ2xFLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0RBQStELENBQUMsQ0FBQztvQkFDOUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7b0JBQzNCLE9BQU8sQ0FBQzt3QkFDTixNQUFNLEVBQUUsU0FBUzt3QkFDakIsUUFBUSxFQUFFLEtBQUs7d0JBQ2YsTUFBTSxFQUFFLGdDQUFnQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxHQUFHO3FCQUMxRSxDQUFDLENBQUM7b0JBQ0gsT0FBTztnQkFDVCxDQUFDO2dCQUVELHFFQUFxRTtnQkFDckUsT0FBTyxDQUFDLElBQUksQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO2dCQUN2RSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEIsT0FBTyxDQUFDO29CQUNOLE1BQU0sRUFBRSxTQUFTO29CQUNqQixRQUFRLEVBQUUsSUFBSTtvQkFDZCxNQUFNLEVBQUUsK0NBQStDO2lCQUN4RCxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQixDQUFDLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDcEQsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzNCLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkIsUUFBUSxHQUFHLFNBQVMsQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUEwQjtRQUNwRCxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxvQ0FBb0MsRUFBRSxDQUFDO1FBQ2pGLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCx1RUFBdUU7WUFDdkUsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUU3QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1gsc0VBQXNFO2dCQUN0RSxvRUFBb0U7Z0JBQ3BFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLFVBQVUsS0FBSyxRQUFRLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQztnQkFDNUUsQ0FBQztnQkFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsaUNBQWlDLEVBQUUsQ0FBQztZQUN4RSxDQUFDO1lBRUQseUVBQXlFO1lBQ3pFLElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUMzQixNQUFNLFVBQVUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDaEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxxQ0FBcUMsRUFBRSxDQUFDO2dCQUNuRixDQUFDO1lBQ0gsQ0FBQztZQUVELDJFQUEyRTtZQUMzRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUM7WUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDdEMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLE1BQU0sR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUYsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCx5REFBeUQ7SUFDakQsZUFBZTtRQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3RELElBQUksQ0FBQztZQUNILE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssR0FBRyxDQUFDO1FBQzlELENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCx5RUFBeUU7WUFDekUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELDJEQUEyRDtJQUNuRCxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFBRSxPQUFPO1FBQ2hELElBQUksQ0FBQztZQUNILGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsaURBQWlEO1FBQ25ELENBQUM7SUFDSCxDQUFDO0lBRUQsc0VBQXNFO0lBQzlELG1CQUFtQjtRQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUFFLE9BQU87UUFDaEQsSUFBSSxDQUFDO1lBQ0gsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLHNEQUFzRDtRQUN4RCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILEtBQUssQ0FBQyxRQUFRO1FBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQ3BFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDL0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTyxDQUFDLElBQUksQ0FDVixxRkFBcUYsQ0FDdEYsQ0FBQztZQUNGLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILHdFQUF3RTtZQUN4RSxpRUFBaUU7WUFDakUsdUVBQXVFO1lBQ3ZFLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7WUFDbkUsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1lBQ3pELGdGQUFnRjtZQUNoRix3RUFBd0U7WUFDeEUsMkVBQTJFO1lBQzNFLG1FQUFtRTtZQUNuRSxNQUFNLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0RBQXNELENBQUMsQ0FBQztZQUVwRSxNQUFNLEtBQUssR0FBRyxNQUFNLFFBQVEsQ0FBQyxTQUFTLEVBQUU7Z0JBQ3RDLFFBQVE7Z0JBQ1IseUJBQXlCLEVBQUUsWUFBWTthQUN4QyxDQUFDLENBQUM7WUFFSCxPQUFPLENBQUMsR0FBRyxDQUNULHlDQUF5QyxFQUN6QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUNoRCxDQUFDO1lBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUMxQixLQUFLO2FBQ04sQ0FBQyxDQUFDO1lBRUgscUVBQXFFO1lBQ3JFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFekIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLHdFQUF3RTtZQUN4RSw4REFBOEQ7WUFDOUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFGLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssS0FBSyxDQUFDLGdDQUFnQztRQUM1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDNUYsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLDREQUE0RCxDQUFDLENBQUM7UUFDM0UsT0FBTyxTQUFTLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSyx5QkFBeUI7UUFDL0IsSUFBSSxLQUFnRCxDQUFDO1FBRXJELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDcEQsSUFBSSxLQUFLLEtBQUssU0FBUztnQkFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBUSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMvQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDdEIsTUFBTSxDQUNKLElBQUksS0FBSyxDQUNQLGdEQUFnRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQ25GLENBQ0YsQ0FBQztZQUNKLENBQUMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDakQsSUFBSSxLQUFLLEtBQUssU0FBUztnQkFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZLENBQUMsS0FBZ0M7UUFDbkQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFBRSxPQUFPO1FBQ2hELElBQUksQ0FBQztZQUNILElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDbEQsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssdUJBQXVCO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQUUsT0FBTztRQUNoRCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzVELElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxXQUFXO1FBQ2YsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTdCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDLENBQUM7WUFFSCx5REFBeUQ7WUFDekQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV4QiwrQkFBK0I7WUFDL0IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNILENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsV0FBVztJQUNYLDhFQUE4RTtJQUU5RTs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLG9CQUFvQjtRQUNoQyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDNUMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUN6RCxNQUFNLFlBQVksR0FBd0I7Z0JBQ3hDLEtBQUssRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLEtBQUs7Z0JBQ2xDLElBQUksRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUk7Z0JBQ2hDLEtBQUssRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLEtBQUs7Z0JBQ2xDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBOEI7Z0JBQzVDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUzthQUM3QixDQUFDO1lBRUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFdkMsOERBQThEO1lBQzlELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM1QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLHNCQUFzQixDQUFDLE9BQTRCO1FBQ3pELElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDNUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RSwyQkFBMkI7WUFDM0IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUM7SUFDSCxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLHNCQUFzQjtJQUN0Qiw4RUFBOEU7SUFFOUU7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxJQUFJLENBQUMsQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUMsVUFBb0MsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSCxLQUFLLENBQUMsV0FBVztRQUNmLHlEQUF5RDtRQUN6RCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELGdEQUFnRDtRQUNoRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELDRDQUE0QztRQUM1QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDeEMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxDQUFDLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCwwRUFBMEU7UUFDMUUsMkVBQTJFO1FBQzNFLDhFQUE4RTtRQUM5RSxnRUFBZ0U7UUFDaEUsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSx5RUFBeUU7UUFDekUsdUVBQXVFO1FBQ3ZFLHlFQUF5RTtRQUN6RSwwRUFBMEU7UUFDMUUsMkVBQTJFO1FBQzNFLG1EQUFtRDtRQUNuRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSyxzQkFBc0I7UUFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN0RCxNQUFNLEVBQUUsR0FBSSxTQUF1QixDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDcEQsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDekIsTUFBTSxZQUFZLEdBQ2hCLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLE9BQU87WUFDeEQsU0FBaUQsQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDO1FBQ3pFLE9BQU8sQ0FBQyxZQUFZLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsbUJBQW1CLENBQUMsS0FBYTtRQUMvQixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFFbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDckIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7WUFDMUIsS0FBSztZQUNMLFdBQVcsRUFBRSxJQUFJLEVBQUUsd0NBQXdDO1NBQzVELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsNEJBQTRCO0lBQzVCLDhFQUE4RTtJQUU5RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0EwQkc7SUFDSCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9CRztJQUNILHFCQUFxQixDQUFDLElBQTZCO1FBQ2pELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sTUFBTSxHQUF1QixFQUFFLENBQUM7UUFFdEMsZUFBZTtRQUNmLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEIsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUVELGNBQWM7UUFDZCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFFRCxpQkFBaUI7UUFDakIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsOENBQThDO1FBQzlDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDO2dCQUNILE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLHdEQUF3RDtnQkFDeEQsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDbkUsQ0FBQztRQUNILENBQUM7UUFFRCx3Q0FBd0M7UUFDeEMsTUFBTSxVQUFVLEdBQTRCLEVBQUUsQ0FBQztRQUMvQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2hELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLEtBQUssYUFBYSxFQUFFLENBQUM7Z0JBQ3ZELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxzQ0FBc0M7Z0JBQ3RDLElBQUksQ0FBQztvQkFDSCxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztnQkFBQyxNQUFNLENBQUM7b0JBQ1AsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDL0IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxNQUFNLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUNqQyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FrQkc7SUFDSCx1QkFBdUIsQ0FBQyxZQUFpQztRQUN2RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUM7WUFDakMsWUFBWTtZQUNaLE1BQU07WUFDTixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsbUJBQW1CLENBQUMsSUFBNkI7UUFDL0MsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4QixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQyxXQUFtQjtRQUMxQyxNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO1FBRTFDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFFaEMsOEJBQThCO1FBQzlCLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUVwRixLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEUsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOytHQXg5QlUsZ0JBQWdCLDBDQXVEakIsdUJBQXVCLGFBQ3ZCLFdBQVc7bUhBeERWLGdCQUFnQixjQURILE1BQU07OzRGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkF3RDdCLE1BQU07MkJBQUMsdUJBQXVCOzswQkFDOUIsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZXNzYWdpbmcgU2VydmljZSAoRkNNKVxuICpcbiAqIFNlcnZpY2lvIHBhcmEgRmlyZWJhc2UgQ2xvdWQgTWVzc2FnaW5nIChQdXNoIE5vdGlmaWNhdGlvbnMpLlxuICogUGVybWl0ZSBzb2xpY2l0YXIgcGVybWlzb3MsIG9idGVuZXIgdG9rZW5zLCBlc2N1Y2hhciBtZW5zYWplcyB5IG1hbmVqYXJcbiAqIG5hdmVnYWNpw7NuIChkZWVwIGxpbmtpbmcpIGN1YW5kbyBlbCB1c3VhcmlvIHRvY2EgdW5hIG5vdGlmaWNhY2nDs24uXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdab25lLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWVzc2FnaW5nLCBnZXRUb2tlbiwgZGVsZXRlVG9rZW4sIG9uTWVzc2FnZSB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvbWVzc2FnaW5nJztcbmltcG9ydCB7IGlzU3VwcG9ydGVkIGFzIGZjbUlzU3VwcG9ydGVkLCBnZXRNZXNzYWdpbmcgYXMgZmNtR2V0TWVzc2FnaW5nIH0gZnJvbSAnZmlyZWJhc2UvbWVzc2FnaW5nJztcbmltcG9ydCB7IGdldEFwcCwgZ2V0QXBwcywgaW5pdGlhbGl6ZUFwcCB9IGZyb20gJ2ZpcmViYXNlL2FwcCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBFbmFibGVQdXNoUmVzdWx0LFxuICBOb3RpZmljYXRpb25BY3Rpb24sXG4gIE5vdGlmaWNhdGlvbkNsaWNrRXZlbnQsXG4gIE5vdGlmaWNhdGlvblBheWxvYWQsXG4gIE5vdGlmaWNhdGlvblBlcm1pc3Npb24sXG4gIFZhbHRlY2hGaXJlYmFzZUNvbmZpZyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQ2FsbGJhY2sgb3BjaW9uYWwgZGUgcmVnaXN0cm8gZGUgZGV2aWNlIHBhcmEgYE1lc3NhZ2luZ1NlcnZpY2UuZW5hYmxlKClgLlxuICpcbiAqIEVsIHJlZ2lzdHJvIGRlbCBkZXZpY2Ugdml2ZSBlbiBgQXV0aFNlcnZpY2VgIChuZWNlc2l0YSBlbCBKV1QgKyBlbCBlbmRwb2ludFxuICogZGVsIGJhY2tlbmQpLiBgTWVzc2FnaW5nU2VydmljZWAgTk8gcHVlZGUgZGVwZW5kZXIgZGUgYEF1dGhTZXJ2aWNlYCBzaW5cbiAqIGNyZWFyIHVuIGNpY2xvIChBdXRoU2VydmljZSDihpIgTWVzc2FnaW5nU2VydmljZSkuIFBvciBlc28gZWwgY2FsbGVyIGxlIHBhc2FcbiAqIGVsIHBhc28gZGUgcmVnaXN0cm8gY29tbyBjYWxsYmFjay4gUmVjaWJlIGVsIHRva2VuIEZDTSB5IGRldnVlbHZlIHNpIGVsXG4gKiBkZXZpY2UgcXVlZMOzIHJlZ2lzdHJhZG8uXG4gKi9cbmV4cG9ydCB0eXBlIFJlZ2lzdGVyRGV2aWNlRm4gPSAodG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxib29sZWFuPjtcblxuLyoqXG4gKiBPcGNpb25lcyBkZSBgTWVzc2FnaW5nU2VydmljZS5lbmFibGUoKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5hYmxlUHVzaE9wdGlvbnMge1xuICAvKipcbiAgICogUGFzbyBvcGNpb25hbCBkZSByZWdpc3RybyBkZSBkZXZpY2UgZW4gZWwgYmFja2VuZC4gU2kgc2Ugb21pdGUsIGBlbmFibGUoKWBcbiAgICogcmVzdWVsdmUgY29uIGBzdGF0dXM6ICdlbmFibGVkJ2AgYXBlbmFzIG9idGllbmUgZWwgdG9rZW4gKHNpbiByZWdpc3RyYXIpLlxuICAgKi9cbiAgcmVnaXN0ZXJEZXZpY2U/OiBSZWdpc3RlckRldmljZUZuO1xufVxuXG4vKipcbiAqIEVzdGFkbyBpbnRlcm5vIGRlbCBzZXJ2aWNpbyBkZSBtZXNzYWdpbmdcbiAqL1xuaW50ZXJmYWNlIE1lc3NhZ2luZ1N0YXRlIHtcbiAgdG9rZW46IHN0cmluZyB8IG51bGw7XG4gIHBlcm1pc3Npb246IE5vdGlmaWNhdGlvblBlcm1pc3Npb247XG4gIGlzU3VwcG9ydGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFNlcnZpY2lvIHBhcmEgRmlyZWJhc2UgQ2xvdWQgTWVzc2FnaW5nIChGQ00pLlxuICpcbiAqIFBlcm1pdGUgcmVjaWJpciBub3RpZmljYWNpb25lcyBwdXNoIGVuIGxhIGFwbGljYWNpw7NuIHdlYi5cbiAqIFJlcXVpZXJlIFZBUElEIGtleSBjb25maWd1cmFkYSBlbiBWYWx0ZWNoRmlyZWJhc2VDb25maWcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uQ29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBtZXNzYWdpbmcgPSBpbmplY3QoTWVzc2FnaW5nU2VydmljZSk7XG4gKlxuICogICB0b2tlbiA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAqXG4gKiAgIGFzeW5jIGVuYWJsZU5vdGlmaWNhdGlvbnMoKSB7XG4gKiAgICAgLy8gU29saWNpdGFyIHBlcm1pc28geSBvYnRlbmVyIHRva2VuXG4gKiAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLm1lc3NhZ2luZy5yZXF1ZXN0UGVybWlzc2lvbigpO1xuICpcbiAqICAgICBpZiAodG9rZW4pIHtcbiAqICAgICAgIHRoaXMudG9rZW4uc2V0KHRva2VuKTtcbiAqICAgICAgIC8vIEVudmlhciB0b2tlbiBhIHR1IGJhY2tlbmQgcGFyYSBhbG1hY2VuYXJsb1xuICogICAgICAgYXdhaXQgdGhpcy5iYWNrZW5kLnJlZ2lzdGVyRGV2aWNlVG9rZW4odG9rZW4pO1xuICogICAgIH1cbiAqICAgfVxuICpcbiAqICAgLy8gRXNjdWNoYXIgbWVuc2FqZXMgZW4gZm9yZWdyb3VuZFxuICogICBtZXNzYWdlcyQgPSB0aGlzLm1lc3NhZ2luZy5vbk1lc3NhZ2UoKTtcbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2luZ1NlcnZpY2Uge1xuICBwcml2YXRlIG1lc3NhZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Tm90aWZpY2F0aW9uUGF5bG9hZD4oKTtcbiAgcHJpdmF0ZSBub3RpZmljYXRpb25DbGlja1N1YmplY3QgPSBuZXcgU3ViamVjdDxOb3RpZmljYXRpb25DbGlja0V2ZW50PigpO1xuICBwcml2YXRlIHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVzc2FnaW5nU3RhdGU+KHtcbiAgICB0b2tlbjogbnVsbCxcbiAgICBwZXJtaXNzaW9uOiAnZGVmYXVsdCcsXG4gICAgaXNTdXBwb3J0ZWQ6IGZhbHNlLFxuICB9KTtcblxuICBwcml2YXRlIHVuc3Vic2NyaWJlT25NZXNzYWdlPzogKCkgPT4gdm9pZDtcblxuICAvKiogRmxhZyBwYXJhIHBlcnNpc3RpciBtZW5zYWplcyBGQ00gZW4gbG9jYWxTdG9yYWdlIChkZWJ1Z2dpbmcpICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVidWdQZXJzaXN0ZW5jZTogYm9vbGVhbjtcbiAgLyoqIEtleSBwYXJhIGxvY2FsU3RvcmFnZSBkZSBtZW5zYWplcyBGQ00gKGRlYnVnZ2luZykgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBERUJVR19TVE9SQUdFX0tFWSA9ICdmY21fZGVidWdfbWVzc2FnZXMnO1xuICAvKipcbiAgICogS2V5IGRlIGxvY2FsU3RvcmFnZSBkb25kZSBzZSBwZXJzaXN0ZSBlbCB0b2tlbiBGQ00uXG4gICAqXG4gICAqIEVsIHRva2VuIHZpdmUgZW4gdW4gYEJlaGF2aW9yU3ViamVjdGAgZW4gbWVtb3JpYSB5IHNlIHBpZXJkZSBlbiBjYWRhXG4gICAqIHJlY2FyZ2EgLyBzdXNwZW5zacOzbiBkZSBsYSBQV0EgKGlPUyByZWluaWNpYSBQV0FzIGNvbiBmcmVjdWVuY2lhKS4gUGVyc2lzdGlyXG4gICAqIGVsIHRva2VuIHBlcm1pdGUgaGlkcmF0YXIgZWwgZXN0YWRvIGVuIGNvbGQgc3RhcnQgeSBxdWUgbGEgVUkgbm8gcGFycGFkZWUuXG4gICAqIEVzIHVuICpvcHRpbWlzdGljIGhpbnQqIOKAlCBsYSB2ZXJkYWQgbGEgY29uZmlybWEgZWwgc2lndWllbnRlIGBnZXRUb2tlbigpYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgVE9LRU5fU1RPUkFHRV9LRVkgPSAndmFsdGVjaF9mY21fdG9rZW4nO1xuXG4gIC8qKlxuICAgKiBUaW1lb3V0IChtcykgcGFyYSBgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHlgIGRlbnRybyBkZSBgZ2V0VG9rZW4oKWAuXG4gICAqXG4gICAqIEVuIHVuIGNvbGQgbG9hZCBlbCBTVyBwdWVkZSBubyBlc3RhciBhY3RpdmFkbyBhw7puIHkgYHNlcnZpY2VXb3JrZXIucmVhZHlgXG4gICAqIG5vIHJlc29sdmVyIG51bmNhLiBQYXNhZG8gZXN0ZSB0aWVtcG8sIGBnZXRUb2tlbigpYCByZWNoYXphIGxpbXBpbyBlbiBsdWdhclxuICAgKiBkZSBjb2xnYXJzZSBpbmRlZmluaWRhbWVudGUuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IFNXX1JFQURZX1RJTUVPVVRfTVMgPSAxMF8wMDA7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgKG1zKSBkZWwgd2F0Y2hkb2cgZGUgYGVuYWJsZSgpYCBhbnRlcyBkZSBhdXRvLXJlY2FyZ2FyIGxhIHDDoWdpbmEuXG4gICAqXG4gICAqIEVsIGZsdWpvIGRlIGFjdGl2YWNpw7NuIGEgdmVjZXMgc2UgY3VlbGdhIEFOVEVTIGRlIGBnZXRUb2tlbigpYCDigJQgY2Fzb1xuICAgKiB0w61waWNvOiBgTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uKClgIG5vIG11ZXN0cmEgZWwgcG9wdXAgZGVsIFNPIGVuIHVuXG4gICAqIGNvbGQgbG9hZC4gRWwgdGltZW91dCBkZSBgZ2V0VG9rZW4oKWAgKFNXX1JFQURZX1RJTUVPVVRfTVMpIG5vIGN1YnJlIGVzbztcbiAgICogcG9yIGVzbyBgZW5hYmxlKClgIGVudnVlbHZlIGVsIGZsdWpvIGNvbXBsZXRvIGVuIGVzdGUgd2F0Y2hkb2cuXG4gICAqXG4gICAqIFVuIGZsdWpvIGV4aXRvc28gcmVhbCBsbGVnYSBhIHRva2VuK2RldmljZSBlbiB+NHM7IDE1cyBlcyBob2xnYWRvIHkgbm9cbiAgICogYXRyYXBhIHVuIMOpeGl0byBsZW50by5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgRU5BQkxFX1dBVENIRE9HX01TID0gMTVfMDAwO1xuXG4gIC8qKlxuICAgKiBLZXkgZGUgc2Vzc2lvblN0b3JhZ2Ug4oCUIGdhcmFudGl6YSB1biBzb2xvIGF1dG8tcmVsb2FkIHBvciBzZXNpw7NuLiBTaSBlbFxuICAgKiBmbHVqbyBzZSBjdWVsZ2EgdW5hIDLCqiB2ZXogdHJhcyBlbCByZWxvYWQsIE5PIHNlIHJlY2FyZ2EgZGUgbnVldm8gKGFudGktbG9vcCkuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IEFVVE9SRUxPQURfRkxBRyA9ICdub3RpZi1lbmFibGUtYXV0b3JlbG9hZCc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQEluamVjdChWQUxURUNIX0ZJUkVCQVNFX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IFZhbHRlY2hGaXJlYmFzZUNvbmZpZyxcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdCxcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICkge1xuICAgIHRoaXMuZGVidWdQZXJzaXN0ZW5jZSA9IHRoaXMuY29uZmlnPy5kZWJ1Z01lc3NhZ2VQZXJzaXN0ZW5jZSA/PyBmYWxzZTtcbiAgICB0aGlzLmluaXRpYWxpemVNZXNzYWdpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxhIGluc3RhbmNpYSBkZSBNZXNzYWdpbmcgdmlhIEZpcmViYXNlIFNESyBkaXJlY3RvIChOTyBBbmd1bGFyRmlyZSBESSkuXG4gICAqXG4gICAqICoqUG9yIHF1w6kgbm8gdXNhbW9zIGBpbmplY3Rvci5nZXQoTWVzc2FnaW5nKWA6KipcbiAgICogQW5ndWxhckZpcmUgYHByb3ZpZGVNZXNzYWdpbmdgIHJlZ2lzdHJhIHVuIEFQUF9JTklUSUFMSVpFUiBxdWUgaW50ZXJuYW1lbnRlXG4gICAqIHJlc3VlbHZlIGBhd2FpdCBpc1N1cHBvcnRlZCgpYC4gU2kgYGluamVjdG9yLmdldChNZXNzYWdpbmcpYCBzZSBsbGFtYSBhbnRlc1xuICAgKiBxdWUgZXNlIEFQUF9JTklUSUFMSVpFUiB0ZXJtaW5lIChlai4gb3Ryb3MgQVBQX0lOSVRJQUxJWkVSIGRlbCBjbGllbnRlXG4gICAqIGNvbnN0cnV5ZW4gQXV0aFNlcnZpY2Ug4oaSIE1lc3NhZ2luZ1NlcnZpY2Ug4oaSIHRvY2EgTWVzc2FnaW5nIHRlbXByYW5vKSxcbiAgICogQW5ndWxhckZpcmUgbGFuemEgZWwgZXJyb3IgXCJBUFBfSU5JVElBTElaRVIgLi4uIGhhcyBub3QgcmVzb2x2ZWRcIi4gQW5ndWxhclxuICAgKiBESSAqKmNhY2hlYSBlcnJvcmVzIGRlIGZhY3RvcnkqKiDigJQgdW5hIHZleiBxdWUgZmFsbMOzLCB0b2RvcyBsb3NcbiAgICogYGluamVjdG9yLmdldGAgc2lndWllbnRlcyByZXRvcm5hbiBlbCBtaXNtbyBlcnJvciBjYWNoZWFkby4gUmV0cnkgbG9vcHNcbiAgICogbm8gZnVuY2lvbmFuLlxuICAgKlxuICAgKiAqKldvcmthcm91bmQ6KiogYnlwYXNzIEFuZ3VsYXJGaXJlIGVudGlyZWx5IHkgdXNhciBGaXJlYmFzZSBTREsgZGlyZWN0b1xuICAgKiAoYGZpcmViYXNlL21lc3NhZ2luZy5nZXRNZXNzYWdpbmcoZ2V0QXBwKCkpYCkuIEFuZ3VsYXJGaXJlIGVzIHVuIHdyYXBwZXJcbiAgICogc29icmUgZWwgbWlzbW8gU0RLIOKAlCBsYSBpbnN0YW5jaWEgcXVlIG9idGVuZW1vcyBlcyBmdW5jaW9uYWxtZW50ZSBpZMOpbnRpY2EuXG4gICAqIGBnZXRBcHAoKWAgcmV0b3JuYSBsYSBkZWZhdWx0IEZpcmViYXNlIGFwcCBpbmljaWFsaXphZGEgcG9yXG4gICAqIGBwcm92aWRlRmlyZWJhc2VBcHAoKCkgPT4gaW5pdGlhbGl6ZUFwcChjb25maWcuZmlyZWJhc2UpKWAuIFNpIHBvciBhbGd1bmFcbiAgICogcmF6w7NuIG5vIGVzdMOhIGluaWNpYWxpemFkYSBhw7puLCBoYWNlbW9zIGluaXRpYWxpemVBcHAgaWRlbXBvdGVudGUuXG4gICAqL1xuICBwcml2YXRlIGZjbVN1cHBvcnRQcm9taXNlPzogUHJvbWlzZTxib29sZWFuPjtcblxuICBwcml2YXRlIGFzeW5jIGdldE1lc3NhZ2luZ0luc3RhbmNlKCk6IFByb21pc2U8TWVzc2FnaW5nIHwgbnVsbD4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoIXRoaXMuZmNtU3VwcG9ydFByb21pc2UpIHtcbiAgICAgIHRoaXMuZmNtU3VwcG9ydFByb21pc2UgPSBmY21Jc1N1cHBvcnRlZCgpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gZmNtSXNTdXBwb3J0ZWQgdGhyZXc6JywgZXJyKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHN1cHBvcnRlZCA9IGF3YWl0IHRoaXMuZmNtU3VwcG9ydFByb21pc2U7XG4gICAgaWYgKCFzdXBwb3J0ZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gRkNNIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYXBwID0gZ2V0QXBwcygpLmxlbmd0aCA+IDAgPyBnZXRBcHAoKSA6IGluaXRpYWxpemVBcHAodGhpcy5jb25maWcuZmlyZWJhc2UpO1xuICAgICAgLy8gQ2FzdCBhIE1lc3NhZ2luZyAodG9rZW4gZGUgQW5ndWxhckZpcmUpIOKAlCBlbCB0aXBvIHN1YnlhY2VudGUgZGVsIFNES1xuICAgICAgLy8gZXMgZWwgbWlzbW8uIExhcyBmdW5jaW9uZXMgZ2V0VG9rZW4vZGVsZXRlVG9rZW4vb25NZXNzYWdlIGRlXG4gICAgICAvLyBAYW5ndWxhci9maXJlL21lc3NhZ2luZyBzb24gcmUtZXhwb3J0cyBkZWwgU0RLIHkgYWNlcHRhbiBlc3RhIGluc3RhbmNlLlxuICAgICAgcmV0dXJuIGZjbUdldE1lc3NhZ2luZyhhcHApIGFzIE1lc3NhZ2luZztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZXNzYWdpbmddIGZpcmViYXNlIGdldE1lc3NhZ2luZygpIHRocmV3OicsIGVycik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSU5JQ0lBTElaQUNJw5NOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBJbmljaWFsaXphIGVsIHNlcnZpY2lvIGRlIG1lc3NhZ2luZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplTWVzc2FnaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEhpZHJhdGFyIGVsIHRva2VuIGRlc2RlIGxvY2FsU3RvcmFnZSBBTlRFUyBkZWwgY2hlY2sgZGUgc29wb3J0ZTogZWwgdG9rZW5cbiAgICAvLyBjYWNoZWFkbyBlcyB1biBoaW50IG9wdGltaXN0YSBwYXJhIGxhIFVJIHRyYXMgcmVjYXJnYXMgLyBzdXNwZW5zaW9uZXMgZGVcbiAgICAvLyBsYSBQV0EuIExhIHZhbGlkZXogcmVhbCBzZSBjb25maXJtYSBlbiBlbCBwcsOzeGltbyBnZXRUb2tlbigpLlxuICAgIHRoaXMuaHlkcmF0ZVRva2VuRnJvbVN0b3JhZ2UoKTtcblxuICAgIGNvbnN0IHN1cHBvcnRlZCA9IGF3YWl0IHRoaXMuY2hlY2tTdXBwb3J0KCk7XG4gICAgY29uc3QgcGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvblN0YXRlKCk7XG5cbiAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgIC4uLnRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLFxuICAgICAgaXNTdXBwb3J0ZWQ6IHN1cHBvcnRlZCxcbiAgICAgIHBlcm1pc3Npb24sXG4gICAgfSk7XG5cbiAgICAvLyBTaSB5YSB0aWVuZSBwZXJtaXNvLCBjb25maWd1cmFyIGxpc3RlbmVyc1xuICAgIGlmIChzdXBwb3J0ZWQgJiYgcGVybWlzc2lvbiA9PT0gJ2dyYW50ZWQnKSB7XG4gICAgICB0aGlzLnNldHVwTWVzc2FnZUxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgLy8gRXNjdWNoYXIgbWVuc2FqZXMgZGVsIFNlcnZpY2UgV29ya2VyIChjbGlja3MgZW4gbm90aWZpY2FjaW9uZXMgYmFja2dyb3VuZClcbiAgICB0aGlzLnNldHVwU2VydmljZVdvcmtlckxpc3RlbmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJhIGxpc3RlbmVyIHBhcmEgbWVuc2FqZXMgZGVsIFNlcnZpY2UgV29ya2VyLlxuICAgKiBSZWNpYmUgZXZlbnRvcyBjdWFuZG8gZWwgdXN1YXJpbyBoYWNlIGNsaWNrIGVuIHVuYSBub3RpZmljYWNpw7NuIGJhY2tncm91bmQuXG4gICAqL1xuICBwcml2YXRlIHNldHVwU2VydmljZVdvcmtlckxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSB8fCAhKCdzZXJ2aWNlV29ya2VyJyBpbiBuYXZpZ2F0b3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGV2ZW50ID0+IHtcbiAgICAgIC8vIFNvbG8gcHJvY2VzYXIgbWVuc2FqZXMgZGUgbm90aWZpY2FjacOzbiBjbGljayBiaWVuIGZvcm1hZG9zLlxuICAgICAgLy8gRW4gYXBwcyBjb24gbcO6bHRpcGxlcyBTVyAoUFdBIG5nc3ctd29ya2VyICsgZmlyZWJhc2UtbWVzc2FnaW5nLXN3KSxcbiAgICAgIC8vIG8gdmFyaWFudGVzIGRlbCBwYXlsb2FkLCBgbm90aWZpY2F0aW9uYCBwdWVkZSBubyBleGlzdGlyIGF1bnF1ZVxuICAgICAgLy8gYGRhdGEudHlwZWAgY29pbmNpZGEg4oaSIGd1YXJkIGRlZmVuc2l2byBldml0YSBUeXBlRXJyb3IuXG4gICAgICBpZiAoZXZlbnQuZGF0YT8udHlwZSAhPT0gJ05PVElGSUNBVElPTl9DTElDSycpIHJldHVybjtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGV2ZW50LmRhdGEubm90aWZpY2F0aW9uIGFzIE5vdGlmaWNhdGlvblBheWxvYWQgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoIW5vdGlmaWNhdGlvbikgcmV0dXJuO1xuXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmV4dHJhY3RBY3Rpb25Gcm9tRGF0YShub3RpZmljYXRpb24uZGF0YSk7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uQ2xpY2tTdWJqZWN0Lm5leHQoe1xuICAgICAgICAgIG5vdGlmaWNhdGlvbixcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIEZDTSBlc3TDoSBzb3BvcnRhZG8gZW4gZWwgbmF2ZWdhZG9yIGFjdHVhbFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjaGVja1N1cHBvcnQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZpY2FyIEFQSXMgbmVjZXNhcmlhc1xuICAgIGlmICghKCdOb3RpZmljYXRpb24nIGluIHdpbmRvdykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoISgnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhciBxdWUgbWVzc2FnaW5nIGVzdMOpIGRpc3BvbmlibGUgKGFzeW5jIOKAlCBlc3BlcmEgQVBQX0lOSVRJQUxJWkVSKVxuICAgIGlmICghKGF3YWl0IHRoaXMuZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQRVJNSVNPUyBZIFRPS0VOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTb2xpY2l0YSBwZXJtaXNvIGRlIG5vdGlmaWNhY2lvbmVzIHkgb2J0aWVuZSBlbCB0b2tlbiBGQ00uXG4gICAqXG4gICAqIEByZXR1cm5zIFRva2VuIEZDTSBzaSBzZSBvdG9yZ8OzIHBlcm1pc28sIG51bGwgc2kgc2UgZGVuZWfDs1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHRva2VuID0gYXdhaXQgbWVzc2FnaW5nLnJlcXVlc3RQZXJtaXNzaW9uKCk7XG4gICAqIGlmICh0b2tlbikge1xuICAgKiAgIGNvbnNvbGUubG9nKCdUb2tlbiBGQ006JywgdG9rZW4pO1xuICAgKiAgIC8vIEVudmlhciBhIGJhY2tlbmRcbiAgICogfSBlbHNlIHtcbiAgICogICBjb25zb2xlLmxvZygnUGVybWlzbyBkZW5lZ2FkbyBvIG5vIHNvcG9ydGFkbycpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdFBlcm1pc3Npb24oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgaWYgKCEoYXdhaXQgdGhpcy5pc1N1cHBvcnRlZCgpKSkge1xuICAgICAgY29uc29sZS53YXJuKCdGQ00gbm8gZXN0w6Egc29wb3J0YWRvIGVuIGVzdGUgbmF2ZWdhZG9yJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gU29saWNpdGFyIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXNcbiAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBhd2FpdCBOb3RpZmljYXRpb24ucmVxdWVzdFBlcm1pc3Npb24oKTtcblxuICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7XG4gICAgICAgIC4uLnRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLFxuICAgICAgICBwZXJtaXNzaW9uOiBwZXJtaXNzaW9uIGFzIE5vdGlmaWNhdGlvblBlcm1pc3Npb24sXG4gICAgICB9KTtcblxuICAgICAgaWYgKHBlcm1pc3Npb24gIT09ICdncmFudGVkJykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1Blcm1pc28gZGUgbm90aWZpY2FjaW9uZXMgZGVuZWdhZG8nKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIE9idGVuZXIgdG9rZW4gRkNNXG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIC8vIENvbmZpZ3VyYXIgbGlzdGVuZXIgZGUgbWVuc2FqZXNcbiAgICAgICAgdGhpcy5zZXR1cE1lc3NhZ2VMaXN0ZW5lcigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdG9rZW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNvbGljaXRhbmRvIHBlcm1pc28gZGUgbm90aWZpY2FjaW9uZXM6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZsdWpvIGNvbXBsZXRvIGRlIGFjdGl2YWNpw7NuIGRlIHB1c2gsIHJvYnVzdG8sIGNyb3NzLWFwcC5cbiAgICpcbiAgICogT3JxdWVzdGE6IHBlZGlyIHBlcm1pc28g4oaSIFNXIHJlYWR5IOKGkiBvYnRlbmVyIHRva2VuIEZDTSDihpIgKG9wY2lvbmFsKVxuICAgKiByZWdpc3RyYXIgZWwgZGV2aWNlIGVuIGJhY2tlbmQuIEVzIGVsIHB1bnRvIGRlIG9ycXVlc3RhY2nDs24gw7puaWNvIHF1ZSBjYWRhXG4gICAqIGFwcCBkZWwgZmFjdG9yeSBjb25zdW1lIOKAlCBsYSBsw7NnaWNhIGRlIHJvYnVzdGV6IHZpdmUgYXF1w60sIG5vIGVuIGNhZGEgcMOhZ2luYS5cbiAgICpcbiAgICogKipXYXRjaGRvZyBkZSBhdXRvLXJlbG9hZC4qKiBFbCBmbHVqbyBhIHZlY2VzIHNlIGN1ZWxnYSBBTlRFUyBkZSBgZ2V0VG9rZW4oKWBcbiAgICogKGVqLiBgTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uKClgIHF1ZSBubyBtdWVzdHJhIGVsIHBvcHVwIGVuIHVuIGNvbGRcbiAgICogbG9hZCkg4oCUIGVsIHRpbWVvdXQgaW50ZXJubyBkZSBgZ2V0VG9rZW4oKWAgbm8gY3VicmUgZXNlIGNhc28uIFBvciBlc29cbiAgICogYGVuYWJsZSgpYCBlbnZ1ZWx2ZSBlbCBmbHVqbyBlbnRlcm8gZW4gdW4gd2F0Y2hkb2c6IHNpIG5vIGFsY2FuemEgdW4gZXN0YWRvXG4gICAqIHRlcm1pbmFsIGVuIGBFTkFCTEVfV0FUQ0hET0dfTVNgICgxNXMpOlxuICAgKiAgLSAxwqogdmV6IGVuIGxhIHNlc2nDs24g4oaSIG1hcmNhIHVuIGZsYWcgZW4gYHNlc3Npb25TdG9yYWdlYCB5IGhhY2VcbiAgICogICAgYHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKWAgKHVuIGZyZXNoIGxvYWQgc3VlbGUgdGVuZXIgZWwgU1cgYWN0aXZvKS5cbiAgICogICAgUmVzdWVsdmUgY29uIGB7IHN0YXR1czogJ3RpbWVvdXQnLCByZWxvYWRlZDogdHJ1ZSB9YC5cbiAgICogIC0geWEgc2UgYXV0by1yZWNhcmfDsyBhbnRlcyDihpIgTk8gcmVjYXJnYSAoYW50aS1sb29wKTogbGltcGlhIGVsIGZsYWcgeVxuICAgKiAgICByZXN1ZWx2ZSBjb24gYHsgc3RhdHVzOiAndGltZW91dCcsIHJlbG9hZGVkOiBmYWxzZSB9YCBwYXJhIHF1ZSBsYSBhcHBcbiAgICogICAgbXVlc3RyZSB1biBlcnJvci5cbiAgICpcbiAgICogTk8gaGFjZSB0aHJvdyDigJQgc2llbXByZSByZXN1ZWx2ZSBjb24gdW4gYEVuYWJsZVB1c2hSZXN1bHRgIGRlc2NyaXB0aXZvIHF1ZVxuICAgKiBsYSBww6FnaW5hIGNvbnN1bWlkb3JhIGluc3BlY2Npb25hIHBhcmEgZGVjaWRpciBxdcOpIHRvYXN0IG1vc3RyYXIuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zLnJlZ2lzdGVyRGV2aWNlIENhbGxiYWNrIG9wY2lvbmFsIHF1ZSByZWdpc3RyYSBlbCBkZXZpY2UgZW5cbiAgICogICBlbCBiYWNrZW5kICh2aXZlIGVuIGBBdXRoU2VydmljZWAg4oCUIHNlIHBhc2EgY29tbyBjYWxsYmFjayBwYXJhIGV2aXRhciBlbFxuICAgKiAgIGNpY2xvIGRlIERJIEF1dGhTZXJ2aWNlIOKGlCBNZXNzYWdpbmdTZXJ2aWNlKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBtZXNzYWdpbmcuZW5hYmxlKHtcbiAgICogICByZWdpc3RlckRldmljZTogKHRva2VuKSA9PiBhdXRoLnJlZ2lzdGVyRGV2aWNlKHRva2VuKS50aGVuKHIgPT4gci5yZWdpc3RlcmVkKSxcbiAgICogfSk7XG4gICAqIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZW5hYmxlZCcpIHtcbiAgICogICAvLyByZXN1bHQudG9rZW4gZGlzcG9uaWJsZSDigJQgcHVzaCBhY3Rpdm9cbiAgICogfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSAndGltZW91dCcgJiYgIXJlc3VsdC5yZWxvYWRlZCkge1xuICAgKiAgIC8vIG1vc3RyYXIgZXJyb3I6IGVsIGZsdWpvIHNlIGNvbGfDsyB5IHlhIHNlIGNvbnN1bWnDsyBlbCBhdXRvLXJlbG9hZFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZW5hYmxlKG9wdGlvbnM6IEVuYWJsZVB1c2hPcHRpb25zID0ge30pOiBQcm9taXNlPEVuYWJsZVB1c2hSZXN1bHQ+IHtcbiAgICBjb25zb2xlLmxvZygnW01lc3NhZ2luZ10gZW5hYmxlKCkgc3RhcnQnKTtcblxuICAgIGxldCB3YXRjaGRvZzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBFbCB3YXRjaGRvZyBjb3JyZSBlbiBwYXJhbGVsbyBhbCBmbHVqbyByZWFsLiBMbyBxdWUgZ2FuZSBlbCByYWNlIGRlZmluZVxuICAgIC8vIGVsIHJlc3VsdGFkby4gRWwgZmx1am8gcmVhbCwgc2kgZ2FuYSwgbGltcGlhIGVsIHdhdGNoZG9nIGVuIGVsIGBmaW5hbGx5YC5cbiAgICBjb25zdCB3YXRjaGRvZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTxFbmFibGVQdXNoUmVzdWx0PihyZXNvbHZlID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuOyAvLyBTU1Ig4oCUIHNpbiB3YXRjaGRvZy5cbiAgICAgIHdhdGNoZG9nID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHdhdGNoZG9nID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zb2xlLndhcm4oYFtNZXNzYWdpbmddIGVuYWJsZSgpIGNvbGdhZG8gPiR7dGhpcy5FTkFCTEVfV0FUQ0hET0dfTVN9bXMg4oCUIHdhdGNoZG9nYCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzQXV0b1JlbG9hZGVkKCkpIHtcbiAgICAgICAgICAvLyBBbnRpLWxvb3A6IHlhIHJlY2FyZ2Ftb3MgdW5hIHZleiBlc3RhIHNlc2nDs24geSB2b2x2acOzIGEgY29sZ2FyLlxuICAgICAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gYXV0by1yZWxvYWQgeWEgY29uc3VtaWRvIOKAlCBubyBzZSByZWNhcmdhIGRlIG51ZXZvJyk7XG4gICAgICAgICAgdGhpcy5jbGVhckF1dG9SZWxvYWRGbGFnKCk7XG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXM6ICd0aW1lb3V0JyxcbiAgICAgICAgICAgIHJlbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHJlYXNvbjogYEZsdWpvIGRlIGFjdGl2YWNpw7NuIGNvbGdhZG8gPiR7dGhpcy5FTkFCTEVfV0FUQ0hET0dfTVMgLyAxMDAwfXNgLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDHCqiB2ZXo6IG1hcmNhciB5IHJlY2FyZ2FyLiBVbiBmcmVzaCBsb2FkIHN1ZWxlIHRlbmVyIGVsIFNXIGFjdGl2by5cbiAgICAgICAgY29uc29sZS53YXJuKCdbTWVzc2FnaW5nXSBhdXRvLXJlY2FyZ2FuZG8gbGEgcMOhZ2luYSAoMS8xIHBvciBzZXNpw7NuKScpO1xuICAgICAgICB0aGlzLm1hcmtBdXRvUmVsb2FkZWQoKTtcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgc3RhdHVzOiAndGltZW91dCcsXG4gICAgICAgICAgcmVsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgcmVhc29uOiAnQXV0by1yZWNhcmdhbmRvIHBhcmEgcmVpbnRlbnRhciBsYSBhY3RpdmFjacOzbicsXG4gICAgICAgIH0pO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICB9LCB0aGlzLkVOQUJMRV9XQVRDSERPR19NUyk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBmbG93ID0gdGhpcy5ydW5FbmFibGVGbG93KG9wdGlvbnMpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgaWYgKHdhdGNoZG9nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHdhdGNoZG9nKTtcbiAgICAgICAgd2F0Y2hkb2cgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtmbG93LCB3YXRjaGRvZ1Byb21pc2VdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVqbyByZWFsIGRlIGFjdGl2YWNpw7NuLCBzaW4gZWwgd2F0Y2hkb2cgKGxvIGVudnVlbHZlIGBlbmFibGUoKWApLlxuICAgKiBSZXN1ZWx2ZSBzaWVtcHJlIGNvbiB1biBgRW5hYmxlUHVzaFJlc3VsdGAg4oCUIG5vIGhhY2UgdGhyb3cuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJ1bkVuYWJsZUZsb3cob3B0aW9uczogRW5hYmxlUHVzaE9wdGlvbnMpOiBQcm9taXNlPEVuYWJsZVB1c2hSZXN1bHQ+IHtcbiAgICBpZiAoIShhd2FpdCB0aGlzLmlzU3VwcG9ydGVkKCkpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tNZXNzYWdpbmddIGVuYWJsZTogRkNNIG5vIHNvcG9ydGFkbycpO1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiAndW5zdXBwb3J0ZWQnLCByZWFzb246ICdGQ00gbm8gc29wb3J0YWRvIGVuIGVzdGUgbmF2ZWdhZG9yJyB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBwZXJtaXNzaW9uIOKGkiBTVyByZWFkeSDihpIgZ2V0VG9rZW4gKHJlcXVlc3RQZXJtaXNzaW9uIGVuY2FkZW5hIGxhcyAzKS5cbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5yZXF1ZXN0UGVybWlzc2lvbigpO1xuXG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIC8vIHJlcXVlc3RQZXJtaXNzaW9uIGRldnVlbHZlIG51bGwgdGFudG8gcG9yIHBlcm1pc28gZGVuZWdhZG8gY29tbyBwb3JcbiAgICAgICAgLy8gZmFsbG8gYWwgb2J0ZW5lciBlbCB0b2tlbi4gRGlzdGl2ZHNtb3MgcG9yIGVsIGVzdGFkbyBkZWwgcGVybWlzby5cbiAgICAgICAgY29uc3QgcGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvblN0YXRlKCk7XG4gICAgICAgIGlmIChwZXJtaXNzaW9uID09PSAnZGVuaWVkJyB8fCBwZXJtaXNzaW9uID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICByZXR1cm4geyBzdGF0dXM6ICdkZW5pZWQnLCByZWFzb246ICdQZXJtaXNvIGRlIG5vdGlmaWNhY2lvbmVzIGRlbmVnYWRvJyB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogJ2Vycm9yJywgcmVhc29uOiAnTm8gc2UgcHVkbyBvYnRlbmVyIGVsIHRva2VuIEZDTScgfTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVnaXN0cm8gZGUgZGV2aWNlIGVuIGJhY2tlbmQgKG9wY2lvbmFsIOKAlCBlbCBjYWxsZXIgcGFzYSBlbCBjYWxsYmFjaykuXG4gICAgICBpZiAob3B0aW9ucy5yZWdpc3RlckRldmljZSkge1xuICAgICAgICBjb25zdCByZWdpc3RlcmVkID0gYXdhaXQgb3B0aW9ucy5yZWdpc3RlckRldmljZSh0b2tlbik7XG4gICAgICAgIGlmICghcmVnaXN0ZXJlZCkge1xuICAgICAgICAgIHJldHVybiB7IHN0YXR1czogJ2Vycm9yJywgdG9rZW4sIHJlYXNvbjogJ05vIHNlIHB1ZG8gcmVnaXN0cmFyIGVsIGRpc3Bvc2l0aXZvJyB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIMOJeGl0bzogZXN0YWRvIHRlcm1pbmFsLiBMaW1waWFyIGVsIGZsYWcgYW50aS1sb29wIHBhcmEgZnV0dXJvcyBpbnRlbnRvcy5cbiAgICAgIHRoaXMuY2xlYXJBdXRvUmVsb2FkRmxhZygpO1xuICAgICAgY29uc29sZS5sb2coJ1tNZXNzYWdpbmddIGVuYWJsZSgpIHN1Y2Nlc3MnKTtcbiAgICAgIHJldHVybiB7IHN0YXR1czogJ2VuYWJsZWQnLCB0b2tlbiB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCByZWFzb24gPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gYCR7ZXJyb3IubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZXNzYWdpbmddIGVuYWJsZSgpIGVycm9yOicsIHJlYXNvbiwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiAnZXJyb3InLCByZWFzb24gfTtcbiAgICB9XG4gIH1cblxuICAvKiogVHJ1ZSBzaSB5YSBzZSBhdXRvLXJlY2FyZ8OzIHVuYSB2ZXogZW4gZXN0YSBzZXNpw7NuLiAqL1xuICBwcml2YXRlIGhhc0F1dG9SZWxvYWRlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5BVVRPUkVMT0FEX0ZMQUcpID09PSAnMSc7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBzZXNzaW9uU3RvcmFnZSBwdWVkZSBubyBlc3RhciBkaXNwb25pYmxlIChtb2RvIHByaXZhZG8gZXN0cmljdG8sIFNTUikuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqIE1hcmNhIHF1ZSBzZSBjb25zdW1pw7MgZWwgYXV0by1yZWxvYWQgZGUgZXN0YSBzZXNpw7NuLiAqL1xuICBwcml2YXRlIG1hcmtBdXRvUmVsb2FkZWQoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5BVVRPUkVMT0FEX0ZMQUcsICcxJyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBzZXNzaW9uU3RvcmFnZSBubyBkaXNwb25pYmxlIOKAlCBiZXN0LWVmZm9ydC4gKi9cbiAgICB9XG4gIH1cblxuICAvKiogTGltcGlhIGVsIGZsYWcgYW50aS1sb29wIOKAlCB0cmFzIHVuIMOpeGl0byBvIHVuIGZhbGxvIGRlZmluaXRpdm8uICovXG4gIHByaXZhdGUgY2xlYXJBdXRvUmVsb2FkRmxhZygpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkFVVE9SRUxPQURfRkxBRyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBzZXNzaW9uU3RvcmFnZSBubyBkaXNwb25pYmxlIOKAlCBuYWRhIHF1ZSBsaW1waWFyLiAqL1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIHRva2VuIEZDTSBhY3R1YWwgKHNpbiBzb2xpY2l0YXIgcGVybWlzbykuXG4gICAqXG4gICAqIEByZXR1cm5zIFRva2VuIEZDTSBzaSBlc3TDoSBkaXNwb25pYmxlLCBudWxsIHNpIG5vXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgdG9rZW4gPSBhd2FpdCBtZXNzYWdpbmcuZ2V0VG9rZW4oKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBnZXRUb2tlbigpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zb2xlLmxvZygnW01lc3NhZ2luZ10gZ2V0VG9rZW4oKSBzdGFydCcpO1xuICAgIGNvbnN0IG1lc3NhZ2luZyA9IGF3YWl0IHRoaXMuZ2V0TWVzc2FnaW5nSW5zdGFuY2UoKTtcbiAgICBpZiAoIW1lc3NhZ2luZykge1xuICAgICAgY29uc29sZS53YXJuKCdbTWVzc2FnaW5nXSBnZXRUb2tlbiBhYm9ydGVkOiBubyBNZXNzYWdpbmcgaW5zdGFuY2UnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHZhcGlkS2V5ID0gdGhpcy5jb25maWcubWVzc2FnaW5nVmFwaWRLZXk7XG4gICAgaWYgKCF2YXBpZEtleSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnW01lc3NhZ2luZ10gVkFQSUQga2V5IG5vIGNvbmZpZ3VyYWRhIChjb25maWcubWVzc2FnaW5nVmFwaWRLZXkpLiBGQ00gbm8gZnVuY2lvbmFyw6EuJ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBSZXV0aWxpemFyIGVsIFNXIHlhIHJlZ2lzdHJhZG8gKGVuIGNvbmZpZy50cyBkdXJhbnRlIGVsIGJvb3RzdHJhcCkgZW5cbiAgICAgIC8vIGx1Z2FyIGRlIHJlLXJlZ2lzdHJhcmxvIGVuIGNhZGEgbGxhbWFkYSDigJQgcmUtcmVnaXN0cmFyIGRpc3BhcmFcbiAgICAgIC8vIHJldmFsaWRhY2lvbmVzIGRlbCBTVyBlbiBpT1MgUFdBLiBTb2xvIHJlZ2lzdHJhbW9zIHNpIG5vIGV4aXN0ZSBhw7puLlxuICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0gYXdhaXQgdGhpcy5yZXNvbHZlU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbigpO1xuICAgICAgY29uc29sZS5sb2coJ1tNZXNzYWdpbmddIFNXIHJlc29sdmVkLCB3YWl0aW5nIHJlYWR5Li4uJyk7XG4gICAgICAvLyBFc3BlcmFyIGEgcXVlIGVsIFNXIGVzdMOpIGFjdGl2bywgY29uIHRpbWVvdXQ6IGBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeWBcbiAgICAgIC8vIHB1ZWRlIG5vIHJlc29sdmVyIE5VTkNBIGVuIHVuIGNvbGQgbG9hZCAoU1cgYcO6biBubyBhY3RpdmFkbykg4oaSIHNpbiBlbFxuICAgICAgLy8gdGltZW91dCBgZ2V0VG9rZW4oKWAgc2UgY3VlbGdhIGluZGVmaW5pZGFtZW50ZS4gQ29uIGVsIHJhY2UsIHNpIGVsIFNXIG5vXG4gICAgICAvLyBxdWVkYSBsaXN0byBlbiBTV19SRUFEWV9USU1FT1VUX01TLCBlc3RhIHByb21lc2EgcmVjaGF6YSBsaW1waW8uXG4gICAgICBhd2FpdCB0aGlzLndhaXRGb3JTZXJ2aWNlV29ya2VyUmVhZHkoKTtcbiAgICAgIGNvbnNvbGUubG9nKCdbTWVzc2FnaW5nXSBTVyByZWFkeSwgY2FsbGluZyBGaXJlYmFzZSBnZXRUb2tlbigpLi4uJyk7XG5cbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0VG9rZW4obWVzc2FnaW5nLCB7XG4gICAgICAgIHZhcGlkS2V5LFxuICAgICAgICBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uOiByZWdpc3RyYXRpb24sXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICdbTWVzc2FnaW5nXSBGaXJlYmFzZSBnZXRUb2tlbiByZXR1cm5lZDonLFxuICAgICAgICB0b2tlbiA/IGAke3Rva2VuLnNsaWNlKDAsIDE2KX3igKZgIDogJ251bGwvZW1wdHknXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5zdGF0ZVN1YmplY3QudmFsdWUsXG4gICAgICAgIHRva2VuLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFBlcnNpc3RpciBlbCB0b2tlbiBwYXJhIGhpZHJhdGFyIGVsIGVzdGFkbyBlbiBmdXR1cm9zIGNvbGQgc3RhcnRzLlxuICAgICAgdGhpcy5wZXJzaXN0VG9rZW4odG9rZW4pO1xuXG4gICAgICByZXR1cm4gdG9rZW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIE5vIHRyYWdhbW9zIGxhIGNhdXNhOiBsb2d1ZWFtb3MgZWwgZGV0YWxsZSBwYXJhIGRpYWduw7NzdGljby4gTGEgZmlybWFcbiAgICAgIC8vIHNpZ3VlIHNpZW5kbyBQcm9taXNlPHN0cmluZyB8IG51bGw+IHBhcmEgbm8gcm9tcGVyIGNhbGxlcnMuXG4gICAgICBjb25zdCByZWFzb24gPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gYCR7ZXJyb3IubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZXNzYWdpbmddIGdldFRva2VuIGVycm9yOicsIHJlYXNvbiwgZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc3VlbHZlIGVsIGBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uYCBkZWwgU1cgZGUgRkNNLlxuICAgKlxuICAgKiBFbCBTVyBgL2ZpcmViYXNlLW1lc3NhZ2luZy1zdy5qc2AgeWEgc2UgcmVnaXN0cmEgdW5hIHZleiBlbiBlbCBib290c3RyYXAgZGVcbiAgICogbGEgYXBwIChgY29uZmlnLnRzYCkuIFJldXRpbGl6YW1vcyBlc2UgcmVnaXN0cm8gZW4gbHVnYXIgZGUgcmUtcmVnaXN0cmFybG9cbiAgICogZW4gY2FkYSBgZ2V0VG9rZW4oKWAg4oCUIHJlLXJlZ2lzdHJhciByZXBldGlkYW1lbnRlIGRpc3BhcmEgcmV2YWxpZGFjaW9uZXMgZGVsXG4gICAqIFNXIGVuIGlPUyBQV0EuIFNvbG8gcmVnaXN0cmFtb3MgY29tbyBmYWxsYmFjayBzaSB0b2RhdsOtYSBubyBleGlzdGUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlc29sdmVTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uKCk6IFByb21pc2U8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbj4ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuZ2V0UmVnaXN0cmF0aW9uKCcvZmlyZWJhc2UtbWVzc2FnaW5nLXN3LmpzJyk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gU1cgbm90IHJlZ2lzdGVyZWQgeWV0LCByZWdpc3RlcmluZyBhcyBmYWxsYmFjaycpO1xuICAgIHJldHVybiBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignL2ZpcmViYXNlLW1lc3NhZ2luZy1zdy5qcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVzcGVyYSBhIHF1ZSBlbCBTZXJ2aWNlIFdvcmtlciBxdWVkZSBhY3Rpdm8gKGBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeWApXG4gICAqIHBlcm8gY29uIHVuIHRpbWVvdXQgZHVyby5cbiAgICpcbiAgICogYG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5YCByZXN1ZWx2ZSBjdWFuZG8gaGF5IHVuIFNXICphY3Rpdm8qLiBFbiB1blxuICAgKiBjb2xkIGxvYWQgKHByaW1lcmEgdmlzaXRhLCBTVyByZWNpw6luIHJlZ2lzdHJhZG8sIGlPUyBQV0EgcmVjacOpbiBhYmllcnRhKSBlbFxuICAgKiBTVyBwdWVkZSBxdWVkYXIgZW4gZXN0YWRvIGBpbnN0YWxsaW5nYC9gd2FpdGluZ2AgeSBgcmVhZHlgIG5vIHJlc29sdmVyIG51bmNhXG4gICAqIOKGkiBgZ2V0VG9rZW4oKWAgc2UgY3VlbGdhLiBFbCBgUHJvbWlzZS5yYWNlYCBjb250cmEgdW4gYHNldFRpbWVvdXRgIGdhcmFudGl6YVxuICAgKiBxdWUgZXN0YSBlc3BlcmEgdGVybWluYTogbyBnYW5hIGByZWFkeWAgKGNhc28gbm9ybWFsKSBvIGdhbmEgZWwgdGltZW91dCB5XG4gICAqIGxhbnphbW9zIHVuIGVycm9yIGNsYXJvIHBhcmEgcXVlIGBnZXRUb2tlbigpYCByZWNoYWNlIGVuIHZleiBkZSBjb2xnYXJzZS5cbiAgICpcbiAgICogRWwgdGltZXIgc2UgbGltcGlhIGVuIGFtYmFzIHJhbWFzIHBhcmEgbm8gZGVqYXIgdGltZXJzIGNvbGdhbmRvLlxuICAgKi9cbiAgcHJpdmF0ZSB3YWl0Rm9yU2VydmljZVdvcmtlclJlYWR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCByZWFkeSA9IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5LnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRpbWVyICE9PSB1bmRlZmluZWQpIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gbmV3IFByb21pc2U8bmV2ZXI+KChfLCByZWplY3QpID0+IHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgW01lc3NhZ2luZ10gc2VydmljZSB3b3JrZXIgbm8gcXVlZMOzIGxpc3RvIGVuICR7dGhpcy5TV19SRUFEWV9USU1FT1VUX01TIC8gMTAwMH1zYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0sIHRoaXMuU1dfUkVBRFlfVElNRU9VVF9NUyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtyZWFkeSwgdGltZW91dF0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgaWYgKHRpbWVyICE9PSB1bmRlZmluZWQpIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdGUgZWwgdG9rZW4gRkNNIGVuIGxvY2FsU3RvcmFnZSAobyBsbyBsaW1waWEgc2kgZXMgbnVsbC9lbXB0eSkuXG4gICAqL1xuICBwcml2YXRlIHBlcnNpc3RUb2tlbih0b2tlbjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5UT0tFTl9TVE9SQUdFX0tFWSwgdG9rZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5UT0tFTl9TVE9SQUdFX0tFWSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdbTWVzc2FnaW5nXSB0b2tlbiBwZXJzaXN0ZW5jZSBmYWlsZWQ6JywgZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhpZHJhdGEgZWwgZXN0YWRvIGRlbCB0b2tlbiBkZXNkZSBsb2NhbFN0b3JhZ2UgZW4gZWwgYXJyYW5xdWUgZGVsIHNlcnZpY2lvLlxuICAgKi9cbiAgcHJpdmF0ZSBoeWRyYXRlVG9rZW5Gcm9tU3RvcmFnZSgpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2FjaGVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5UT0tFTl9TVE9SQUdFX0tFWSk7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIHRoaXMuc2V0VG9rZW5Gcm9tU3RvcmFnZShjYWNoZWQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW01lc3NhZ2luZ10gdG9rZW4gaHlkcmF0aW9uIGZhaWxlZDonLCBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSBlbCB0b2tlbiBGQ00gYWN0dWFsICh1bnN1YnNjcmliZSBkZSBub3RpZmljYWNpb25lcykuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgbWVzc2FnaW5nLmRlbGV0ZVRva2VuKCk7XG4gICAqIGNvbnNvbGUubG9nKCdUb2tlbiBlbGltaW5hZG8sIG5vIHJlY2liaXLDoSBtw6FzIG5vdGlmaWNhY2lvbmVzJyk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZGVsZXRlVG9rZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVzc2FnaW5nID0gYXdhaXQgdGhpcy5nZXRNZXNzYWdpbmdJbnN0YW5jZSgpO1xuICAgIGlmICghbWVzc2FnaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVRva2VuKG1lc3NhZ2luZyk7XG5cbiAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoe1xuICAgICAgICAuLi50aGlzLnN0YXRlU3ViamVjdC52YWx1ZSxcbiAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICB9KTtcblxuICAgICAgLy8gTGltcGlhciBlbCB0b2tlbiBwZXJzaXN0aWRvIOKAlCB5YSBubyBlc3RhbW9zIHN1c2NyaXRvcy5cbiAgICAgIHRoaXMucGVyc2lzdFRva2VuKG51bGwpO1xuXG4gICAgICAvLyBMaW1waWFyIGxpc3RlbmVyIGRlIG1lbnNhamVzXG4gICAgICBpZiAodGhpcy51bnN1YnNjcmliZU9uTWVzc2FnZSkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlT25NZXNzYWdlKCk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVPbk1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGVsaW1pbmFuZG8gdG9rZW4gRkNNOicsIGVycm9yKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc2UgcHVkbyBlbGltaW5hciBlbCB0b2tlbiBkZSBub3RpZmljYWNpb25lcycpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNRU5TQUpFU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBkZSBtZW5zYWplcyByZWNpYmlkb3MgZW4gZm9yZWdyb3VuZC5cbiAgICpcbiAgICogSU1QT1JUQU5URTogTG9zIG1lbnNhamVzIGVuIGJhY2tncm91bmQgc29uIG1hbmVqYWRvcyBwb3IgZWwgU2VydmljZSBXb3JrZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgcXVlIGVtaXRlIGN1YW5kbyBsbGVnYSB1biBtZW5zYWplIGVuIGZvcmVncm91bmRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBtZXNzYWdpbmcub25NZXNzYWdlKCkuc3Vic2NyaWJlKHBheWxvYWQgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKCdNZW5zYWplIHJlY2liaWRvOicsIHBheWxvYWQpO1xuICAgKiAgIC8vIE1vc3RyYXIgbm90aWZpY2FjacOzbiBjdXN0b20gbyBhY3R1YWxpemFyIFVJXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIG9uTWVzc2FnZSgpOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvblBheWxvYWQ+IHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmEgZWwgbGlzdGVuZXIgZGUgbWVuc2FqZXMgZW4gZm9yZWdyb3VuZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzZXR1cE1lc3NhZ2VMaXN0ZW5lcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZXNzYWdpbmcgPSBhd2FpdCB0aGlzLmdldE1lc3NhZ2luZ0luc3RhbmNlKCk7XG4gICAgaWYgKCFtZXNzYWdpbmcgfHwgdGhpcy51bnN1YnNjcmliZU9uTWVzc2FnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudW5zdWJzY3JpYmVPbk1lc3NhZ2UgPSBvbk1lc3NhZ2UobWVzc2FnaW5nLCBwYXlsb2FkID0+IHtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uUGF5bG9hZCA9IHtcbiAgICAgICAgdGl0bGU6IHBheWxvYWQubm90aWZpY2F0aW9uPy50aXRsZSxcbiAgICAgICAgYm9keTogcGF5bG9hZC5ub3RpZmljYXRpb24/LmJvZHksXG4gICAgICAgIGltYWdlOiBwYXlsb2FkLm5vdGlmaWNhdGlvbj8uaW1hZ2UsXG4gICAgICAgIGRhdGE6IHBheWxvYWQuZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgICAgICBtZXNzYWdlSWQ6IHBheWxvYWQubWVzc2FnZUlkLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5tZXNzYWdlU3ViamVjdC5uZXh0KG5vdGlmaWNhdGlvbik7XG5cbiAgICAgIC8vIFBlcnNpc3RpciBlbiBsb2NhbFN0b3JhZ2UgcGFyYSBkZWJ1Z2dpbmcgc2kgZXN0w6EgaGFiaWxpdGFkb1xuICAgICAgaWYgKHRoaXMuZGVidWdQZXJzaXN0ZW5jZSkge1xuICAgICAgICB0aGlzLnBlcnNpc3RNZXNzYWdlRm9yRGVidWcobm90aWZpY2F0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0ZSB1biBtZW5zYWplIEZDTSBlbiBsb2NhbFN0b3JhZ2UgcGFyYSBkZWJ1Z2dpbmcuXG4gICAqIFNvbG8gc2UgdXNhIGN1YW5kbyBkZWJ1Z01lc3NhZ2VQZXJzaXN0ZW5jZSBlc3TDoSBoYWJpbGl0YWRvLlxuICAgKiBNYW50aWVuZSBsb3Mgw7psdGltb3MgNTAgbWVuc2FqZXMuXG4gICAqL1xuICBwcml2YXRlIHBlcnNpc3RNZXNzYWdlRm9yRGVidWcobWVzc2FnZTogTm90aWZpY2F0aW9uUGF5bG9hZCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkRFQlVHX1NUT1JBR0VfS0VZKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gc3RvcmVkID8gSlNPTi5wYXJzZShzdG9yZWQpIDogW107XG4gICAgICBtZXNzYWdlcy51bnNoaWZ0KHsgLi4ubWVzc2FnZSwgcmVjZWl2ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0pO1xuICAgICAgLy8gTWFudGVuZXIgc29sbyDDumx0aW1vcyA1MFxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5ERUJVR19TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkobWVzc2FnZXMuc2xpY2UoMCwgNTApKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdbTWVzc2FnaW5nXSBEZWJ1ZyBwZXJzaXN0ZW5jZSBmYWlsZWQ6JywgZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVTVEFETyBZIFVUSUxJREFERVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgZXN0YWRvIGFjdHVhbCBkZWwgcGVybWlzbyBkZSBub3RpZmljYWNpb25lcy5cbiAgICpcbiAgICogQHJldHVybnMgJ2dyYW50ZWQnIHwgJ2RlbmllZCcgfCAnZGVmYXVsdCdcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBwZXJtaXNzaW9uID0gbWVzc2FnaW5nLmdldFBlcm1pc3Npb25TdGF0ZSgpO1xuICAgKiBpZiAocGVybWlzc2lvbiA9PT0gJ2dyYW50ZWQnKSB7XG4gICAqICAgLy8gWWEgdGllbmUgcGVybWlzb1xuICAgKiB9IGVsc2UgaWYgKHBlcm1pc3Npb24gPT09ICdkZWZhdWx0Jykge1xuICAgKiAgIC8vIFB1ZWRlIHNvbGljaXRhciBwZXJtaXNvXG4gICAqIH0gZWxzZSB7XG4gICAqICAgLy8gRGVuZWdhZG8sIGRlYmUgaGFiaWxpdGFyIG1hbnVhbG1lbnRlXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBnZXRQZXJtaXNzaW9uU3RhdGUoKTogTm90aWZpY2F0aW9uUGVybWlzc2lvbiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICAgIH1cblxuICAgIGlmICghKCdOb3RpZmljYXRpb24nIGluIHdpbmRvdykpIHtcbiAgICAgIHJldHVybiAnZGVuaWVkJztcbiAgICB9XG5cbiAgICByZXR1cm4gTm90aWZpY2F0aW9uLnBlcm1pc3Npb24gYXMgTm90aWZpY2F0aW9uUGVybWlzc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBGQ00gZXN0w6Egc29wb3J0YWRvIGVuIGVsIG5hdmVnYWRvciBhY3R1YWwuXG4gICAqIFVzYSBsw7NnaWNhIGludGVsaWdlbnRlIHBhcmEgZXZpdGFyIGZhbHNvcyBuZWdhdGl2b3MgcG9yIHRpbWluZyBkZWwgSW5qZWN0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHRydWUgc2kgRkNNIGVzdMOhIHNvcG9ydGFkb1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGlmIChhd2FpdCBtZXNzYWdpbmcuaXNTdXBwb3J0ZWQoKSkge1xuICAgKiAgIC8vIFB1ZWRlIHVzYXIgbm90aWZpY2FjaW9uZXMgcHVzaFxuICAgKiB9IGVsc2Uge1xuICAgKiAgIC8vIE5hdmVnYWRvciBubyBzb3BvcnRhIG8gbm8gdGllbmUgU2VydmljZSBXb3JrZXJcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGlzU3VwcG9ydGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIFNpIHlhIHRlbmVtb3MgdG9rZW4gZW4gZXN0YWRvLCBjbGFyYW1lbnRlIEZDTSBmdW5jaW9uYVxuICAgIGlmICh0aGlzLnN0YXRlU3ViamVjdC52YWx1ZS50b2tlbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gU2kgeWEgY2FsY3VsYW1vcyBzb3BvcnRlIGV4aXRvc2FtZW50ZSwgdXNhcmxvXG4gICAgaWYgKHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBWZXJpZmljYWNpb25lcyBiw6FzaWNhcyDigJQgQVBJcyBkZWwgYnJvd3NlclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoISgnTm90aWZpY2F0aW9uJyBpbiB3aW5kb3cpIHx8ICEoJ3NlcnZpY2VXb3JrZXInIGluIG5hdmlnYXRvcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBpT1Mg4oCUIHNvbG8gc29wb3J0YSBwdXNoIHdlYiBjdWFuZG8gbGEgUFdBIGVzdMOhIGluc3RhbGFkYSBlbiBob21lIHNjcmVlblxuICAgIC8vIChpT1MgMTYuNCspLiBFZGdlL0Nocm9tZS9GaXJlZm94IGVuIGlPUyBjb21wYXJ0ZW4gZXN0YSBsaW1pdGFjacOzbiBwb3JxdWVcbiAgICAvLyBlc3TDoW4gb2JsaWdhZG9zIGEgdXNhciBXZWJLaXQuIFJldG9ybmFtb3MgZmFsc2UgYXF1w60gcGFyYSBxdWUgbGEgVUkgbXVlc3RyZVxuICAgIC8vIGVsIGZsdWpvIFwiaW5zdGFsYSBsYSBhcHBcIiBlbiBsdWdhciBkZSB1biBDVEEgcXVlIHZhIGEgZmFsbGFyLlxuICAgIGlmICh0aGlzLmlzSU9TV2l0aG91dFN0YW5kYWxvbmUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE5PVEE6IGRlbGliZXJhZGFtZW50ZSBOTyBjaGVxdWVhbW9zIGBnZXRNZXNzYWdpbmdJbnN0YW5jZSgpYCBhcXXDrSBwb3JxdWVcbiAgICAvLyBlbCBmYWN0b3J5IGBwcm92aWRlTWVzc2FnaW5nKCgpID0+IGdldE1lc3NhZ2luZygpKWAgZXMgbGF6eSBlbiBBbmd1bGFyXG4gICAgLy8gRmlyZSB5IHB1ZWRlIG5vIGVzdGFyIHJlc3VlbHRvIGN1YW5kbyBlc3RhIGZ1bmNpw7NuIHNlIGxsYW1hIHRlbXByYW5vXG4gICAgLy8gZW4gZWwgY2ljbG8gZGUgdmlkYS4gRXNvIGNhdXNhYmEgZmFsc29zIG5lZ2F0aXZvcy4gU2kgRkNNIHJlYWxtZW50ZSBub1xuICAgIC8vIGVzdMOhIGRpc3BvbmlibGUgKHByb3llY3RvIHNpbiBNZXNzYWdpbmcgaGFiaWxpdGFkbywgVkFQSUQgaW52w6FsaWRvKSwgZWxcbiAgICAvLyBmbG93IGRvd25zdHJlYW0gKGBnZXRUb2tlbmAvYHJlcXVlc3RQZXJtaXNzaW9uYCkgZmFsbGFyw6EgY29uIGVycm9yIHJlYWwsXG4gICAgLy8gcXVlIGVzIG1lam9yIFVYIHF1ZSB1biBcIm5vIHNvcG9ydGFkb1wiIHByZW1hdHVyby5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBpT1Mgc2luIGVzdGFyIGluc3RhbGFkbyBjb21vIFBXQSBzdGFuZGFsb25lIOKAlCBwdXNoIHdlYiBubyBkaXNwb25pYmxlLlxuICAgKiBBcGxpY2EgYSBTYWZhcmkgeSBhIEVkZ2UvQ2hyb21lL0ZpcmVmb3ggZW4gaU9TICh0b2RvcyBXZWJLaXQgcG9yIG1hbmRhdG8gQXBwbGUpLlxuICAgKi9cbiAgcHJpdmF0ZSBpc0lPU1dpdGhvdXRTdGFuZGFsb25lKCk6IGJvb2xlYW4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHVhID0gKG5hdmlnYXRvciBhcyBOYXZpZ2F0b3IpLnVzZXJBZ2VudCB8fCAnJztcbiAgICBjb25zdCBpc0lPUyA9IC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KHVhKTtcbiAgICBpZiAoIWlzSU9TKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaXNTdGFuZGFsb25lID1cbiAgICAgIHdpbmRvdy5tYXRjaE1lZGlhPy4oJyhkaXNwbGF5LW1vZGU6IHN0YW5kYWxvbmUpJykubWF0Y2hlcyB8fFxuICAgICAgKG5hdmlnYXRvciBhcyB1bmtub3duIGFzIHsgc3RhbmRhbG9uZT86IGJvb2xlYW4gfSkuc3RhbmRhbG9uZSA9PT0gdHJ1ZTtcbiAgICByZXR1cm4gIWlzU3RhbmRhbG9uZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIHRva2VuIGFjdHVhbCBzaW4gaGFjZXIgcmVxdWVzdC5cbiAgICpcbiAgICogQHJldHVybnMgVG9rZW4gYWxtYWNlbmFkbyBvIG51bGxcbiAgICovXG4gIGdldCBjdXJyZW50VG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLnRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgZGVsIGVzdGFkbyBjb21wbGV0byBkZWwgc2VydmljaW8gZGUgbWVzc2FnaW5nLlxuICAgKi9cbiAgZ2V0IHN0YXRlJCgpOiBPYnNlcnZhYmxlPE1lc3NhZ2luZ1N0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8geWEgb3RvcmfDsyBwZXJtaXNvIGRlIG5vdGlmaWNhY2lvbmVzLlxuICAgKi9cbiAgZ2V0IGhhc1Blcm1pc3Npb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLnBlcm1pc3Npb24gPT09ICdncmFudGVkJztcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRyYXRhIGVsIGVzdGFkbyBkZWwgdG9rZW4gZGVzZGUgdW4gdmFsb3IgZXh0ZXJubyAoZWo6IGxvY2FsU3RvcmFnZSkuXG4gICAqIMOadGlsIGN1YW5kbyBlbCB0b2tlbiB5YSBleGlzdGUgcGVybyBlbCBNZXNzYWdpbmdTZXJ2aWNlIG5vIGxvIHRpZW5lIGVuIG1lbW9yaWEuXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiBUb2tlbiBGQ00gYSBzZXRlYXJcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBzdG9yZWRUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdmY21fdG9rZW4nKTtcbiAgICogaWYgKHN0b3JlZFRva2VuKSB7XG4gICAqICAgbWVzc2FnaW5nLnNldFRva2VuRnJvbVN0b3JhZ2Uoc3RvcmVkVG9rZW4pO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgc2V0VG9rZW5Gcm9tU3RvcmFnZSh0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0b2tlbikgcmV0dXJuO1xuXG4gICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7XG4gICAgICAuLi50aGlzLnN0YXRlU3ViamVjdC52YWx1ZSxcbiAgICAgIHRva2VuLFxuICAgICAgaXNTdXBwb3J0ZWQ6IHRydWUsIC8vIFNpIGhheSB0b2tlbiwgY2xhcmFtZW50ZSBGQ00gZnVuY2lvbmFcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBERUVQIExJTktJTkcgLyBOQVZFR0FDScOTTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBkZSBjbGlja3MgZW4gbm90aWZpY2FjaW9uZXMuXG4gICAqXG4gICAqIEVtaXRlIGN1YW5kbyBlbCB1c3VhcmlvIGhhY2UgY2xpY2sgZW4gdW5hIG5vdGlmaWNhY2nDs24gKGZvcmVncm91bmQgbyBiYWNrZ3JvdW5kKS5cbiAgICogVXNhIGVzdGUgb2JzZXJ2YWJsZSBwYXJhIG5hdmVnYXIgYSBsYSBww6FnaW5hIGNvcnJlc3BvbmRpZW50ZS5cbiAgICpcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgTm90aWZpY2F0aW9uQ2xpY2tFdmVudFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIEBDb21wb25lbnQoey4uLn0pXG4gICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgKiAgIHByaXZhdGUgbWVzc2FnaW5nID0gaW5qZWN0KE1lc3NhZ2luZ1NlcnZpY2UpO1xuICAgKiAgIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAqXG4gICAqICAgY29uc3RydWN0b3IoKSB7XG4gICAqICAgICB0aGlzLm1lc3NhZ2luZy5vbk5vdGlmaWNhdGlvbkNsaWNrKCkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICogICAgICAgaWYgKGV2ZW50LmFjdGlvbi5yb3V0ZSkge1xuICAgKiAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtldmVudC5hY3Rpb24ucm91dGVdLCB7XG4gICAqICAgICAgICAgICBxdWVyeVBhcmFtczogZXZlbnQuYWN0aW9uLnF1ZXJ5UGFyYW1zXG4gICAqICAgICAgICAgfSk7XG4gICAqICAgICAgIH1cbiAgICogICAgIH0pO1xuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIG9uTm90aWZpY2F0aW9uQ2xpY2soKTogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25DbGlja0V2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9uQ2xpY2tTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhZSBsYSBhY2Npw7NuIGRlIG5hdmVnYWNpw7NuIGRlIGxvcyBkYXRvcyBkZSB1bmEgbm90aWZpY2FjacOzbi5cbiAgICpcbiAgICogQnVzY2EgY2FtcG9zIGVzcGVjw61maWNvcyBlbiBlbCBwYXlsb2FkIGRlIGRhdG9zOlxuICAgKiAtIGByb3V0ZWA6IFJ1dGEgaW50ZXJuYSBkZSBsYSBhcHAgKGVqOiAnL29yZGVycy8xMjMnKVxuICAgKiAtIGB1cmxgOiBVUkwgZXh0ZXJuYSAoZWo6ICdodHRwczovL2V4YW1wbGUuY29tJylcbiAgICogLSBgYWN0aW9uX3R5cGVgOiBUaXBvIGRlIGFjY2nDs24gcGVyc29uYWxpemFkYVxuICAgKiAtIENhbXBvcyBjb24gcHJlZmlqbyBgYWN0aW9uX2A6IERhdG9zIGFkaWNpb25hbGVzXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0b3MgZGVsIHBheWxvYWQgZGUgbGEgbm90aWZpY2FjacOzblxuICAgKiBAcmV0dXJucyBBY2Npw7NuIGRlIG5hdmVnYWNpw7NuIGV4dHJhw61kYVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFBheWxvYWQgZGVzZGUgZWwgYmFja2VuZDpcbiAgICogLy8geyByb3V0ZTogJy9vcmRlcnMvMTIzJywgYWN0aW9uX3R5cGU6ICd2aWV3X29yZGVyJywgYWN0aW9uX29yZGVySWQ6ICcxMjMnIH1cbiAgICpcbiAgICogY29uc3QgYWN0aW9uID0gbWVzc2FnaW5nLmV4dHJhY3RBY3Rpb25Gcm9tRGF0YShub3RpZmljYXRpb24uZGF0YSk7XG4gICAqIC8vIHsgcm91dGU6ICcvb3JkZXJzLzEyMycsIGFjdGlvblR5cGU6ICd2aWV3X29yZGVyJywgYWN0aW9uRGF0YTogeyBvcmRlcklkOiAnMTIzJyB9IH1cbiAgICogYGBgXG4gICAqL1xuICBleHRyYWN0QWN0aW9uRnJvbURhdGEoZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBOb3RpZmljYXRpb25BY3Rpb24ge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGlvbjogTm90aWZpY2F0aW9uQWN0aW9uID0ge307XG5cbiAgICAvLyBSdXRhIGludGVybmFcbiAgICBpZiAoZGF0YVsncm91dGUnXSkge1xuICAgICAgYWN0aW9uLnJvdXRlID0gZGF0YVsncm91dGUnXTtcbiAgICB9XG5cbiAgICAvLyBVUkwgZXh0ZXJuYVxuICAgIGlmIChkYXRhWyd1cmwnXSkge1xuICAgICAgYWN0aW9uLnVybCA9IGRhdGFbJ3VybCddO1xuICAgIH1cblxuICAgIC8vIFRpcG8gZGUgYWNjacOzblxuICAgIGlmIChkYXRhWydhY3Rpb25fdHlwZSddKSB7XG4gICAgICBhY3Rpb24uYWN0aW9uVHlwZSA9IGRhdGFbJ2FjdGlvbl90eXBlJ107XG4gICAgfVxuXG4gICAgLy8gUXVlcnkgcGFyYW1zIChwdWVkZSB2ZW5pciBjb21vIEpTT04gc3RyaW5nKVxuICAgIGlmIChkYXRhWydxdWVyeV9wYXJhbXMnXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWN0aW9uLnF1ZXJ5UGFyYW1zID0gSlNPTi5wYXJzZShkYXRhWydxdWVyeV9wYXJhbXMnXSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gU2kgbm8gZXMgSlNPTiB2w6FsaWRvLCBpbnRlbnRhciBwYXJzZWFyIGNvbW8ga2V5PXZhbHVlXG4gICAgICAgIGFjdGlvbi5xdWVyeVBhcmFtcyA9IHRoaXMucGFyc2VRdWVyeVN0cmluZyhkYXRhWydxdWVyeV9wYXJhbXMnXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGF0b3MgYWRpY2lvbmFsZXMgY29uIHByZWZpam8gYWN0aW9uX1xuICAgIGNvbnN0IGFjdGlvbkRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aCgnYWN0aW9uXycpICYmIGtleSAhPT0gJ2FjdGlvbl90eXBlJykge1xuICAgICAgICBjb25zdCBjbGVhbktleSA9IGtleS5yZXBsYWNlKCdhY3Rpb25fJywgJycpO1xuICAgICAgICAvLyBJbnRlbnRhciBwYXJzZWFyIEpTT04gc2kgZXMgcG9zaWJsZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGFjdGlvbkRhdGFbY2xlYW5LZXldID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGFjdGlvbkRhdGFbY2xlYW5LZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoYWN0aW9uRGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgYWN0aW9uLmFjdGlvbkRhdGEgPSBhY3Rpb25EYXRhO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogRW1pdGUgbWFudWFsbWVudGUgdW4gZXZlbnRvIGRlIGNsaWNrIGVuIG5vdGlmaWNhY2nDs24uXG4gICAqXG4gICAqIMOadGlsIHBhcmEgbWFuZWphciBjbGlja3MgZW4gbm90aWZpY2FjaW9uZXMgZm9yZWdyb3VuZCBkb25kZVxuICAgKiBsYSBhcHAgZGVjaWRlIG1vc3RyYXIgdW4gYmFubmVyIGN1c3RvbS5cbiAgICpcbiAgICogQHBhcmFtIG5vdGlmaWNhdGlvbiAtIFBheWxvYWQgZGUgbGEgbm90aWZpY2FjacOzblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIG1lc3NhZ2luZy5vbk1lc3NhZ2UoKS5zdWJzY3JpYmUobm90aWZpY2F0aW9uID0+IHtcbiAgICogICAvLyBNb3N0cmFyIGJhbm5lciBjdXN0b21cbiAgICogICB0aGlzLnNob3dCYW5uZXIobm90aWZpY2F0aW9uLCAoKSA9PiB7XG4gICAqICAgICAvLyBVc3VhcmlvIGhpem8gY2xpY2sgZW4gZWwgYmFubmVyXG4gICAqICAgICBtZXNzYWdpbmcuaGFuZGxlTm90aWZpY2F0aW9uQ2xpY2sobm90aWZpY2F0aW9uKTtcbiAgICogICB9KTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgaGFuZGxlTm90aWZpY2F0aW9uQ2xpY2sobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25QYXlsb2FkKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5leHRyYWN0QWN0aW9uRnJvbURhdGEobm90aWZpY2F0aW9uLmRhdGEpO1xuXG4gICAgdGhpcy5ub3RpZmljYXRpb25DbGlja1N1YmplY3QubmV4dCh7XG4gICAgICBub3RpZmljYXRpb24sXG4gICAgICBhY3Rpb24sXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgdW5hIG5vdGlmaWNhY2nDs24gdGllbmUgYWNjacOzbiBkZSBuYXZlZ2FjacOzbi5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBEYXRvcyBkZWwgcGF5bG9hZFxuICAgKiBAcmV0dXJucyB0cnVlIHNpIHRpZW5lIHJvdXRlIG8gdXJsXG4gICAqL1xuICBoYXNOYXZpZ2F0aW9uQWN0aW9uKGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgaWYgKCFkYXRhKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICEhKGRhdGFbJ3JvdXRlJ10gfHwgZGF0YVsndXJsJ10pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlYSB1biBxdWVyeSBzdHJpbmcgZW4gdW4gb2JqZXRvLlxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZVF1ZXJ5U3RyaW5nKHF1ZXJ5U3RyaW5nOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgIGlmICghcXVlcnlTdHJpbmcpIHJldHVybiBwYXJhbXM7XG5cbiAgICAvLyBSZW1vdmVyID8gaW5pY2lhbCBzaSBleGlzdGVcbiAgICBjb25zdCBjbGVhblF1ZXJ5ID0gcXVlcnlTdHJpbmcuc3RhcnRzV2l0aCgnPycpID8gcXVlcnlTdHJpbmcuc2xpY2UoMSkgOiBxdWVyeVN0cmluZztcblxuICAgIGZvciAoY29uc3QgcGFpciBvZiBjbGVhblF1ZXJ5LnNwbGl0KCcmJykpIHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhaXIuc3BsaXQoJz0nKTtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgcGFyYW1zW2RlY29kZVVSSUNvbXBvbmVudChrZXkpXSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSB8fCAnJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuIl19
@@ -72,7 +72,7 @@ export function createRefreshableStream(factory, options) {
72
72
  // sesión NUNCA se establece (token inválido, signInWithFirebase falló), el
73
73
  // gate igual se libera tras `authGateTimeoutMs` y la factory procede: si no
74
74
  // hay permiso terminará en estado `error`, jamás en skeleton infinito.
75
- // Tag los dos inputs del `race` para distinguir en logs cuál ganó: la sesión
75
+ // Tag los dos inputs del `race` para distivdsr en logs cuál ganó: la sesión
76
76
  // de Firebase Auth (`auth-ready`) o el timeout de seguridad (`timeout`).
77
77
  const authGate$ = firebase
78
78
  ? race(firebase.firebaseAuthReady$.pipe(map(() => 'auth-ready')), timer(authGateTimeoutMs).pipe(map(() => 'timeout'))).pipe(take(1), tap(winner => {
@@ -121,4 +121,4 @@ export function createRefreshableStream(factory, options) {
121
121
  reload: () => _reload.update(n => n + 1),
122
122
  };
123
123
  }
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaGFibGUtc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9yZWZyZXNoYWJsZS1zdHJlYW0vcmVmcmVzaGFibGUtc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFnRS9EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE9BQTRCLEVBQzVCLE9BQXFDO0lBRXJDLE1BQU0sUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQWEsQ0FBQztJQUN6RCxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsVUFBVSxJQUFJLENBQUMsQ0FBQztJQUM1QyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxHQUFHLENBQUM7SUFDMUQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLEVBQUUsa0JBQWtCLElBQUksSUFBSSxDQUFDO0lBQy9ELE1BQU0saUJBQWlCLEdBQUcsT0FBTyxFQUFFLGlCQUFpQixJQUFJLEtBQUssQ0FBQztJQUM5RCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sRUFBRSxrQkFBa0IsSUFBSSxLQUFLLENBQUM7SUFFaEUsd0VBQXdFO0lBQ3hFLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBRWpGLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTdCLDRFQUE0RTtJQUM1RSx3RUFBd0U7SUFDeEUsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSx1RUFBdUU7SUFDdkUsNkVBQTZFO0lBQzdFLHlFQUF5RTtJQUN6RSxNQUFNLFNBQVMsR0FBd0IsUUFBUTtRQUM3QyxDQUFDLENBQUMsSUFBSSxDQUNGLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQXFCLENBQUMsQ0FBQyxFQUNsRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQWtCLENBQUMsQ0FBQyxDQUM3RCxDQUFDLElBQUksQ0FDSixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ1gsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQ1YsdURBQXVELGlCQUFpQixLQUFLO29CQUMzRSx5Q0FBeUMsQ0FDNUMsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsR0FBRyxDQUFDLDBFQUEwRSxDQUFDLENBQUM7WUFDMUYsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNIO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUViLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FDbkIsWUFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1AsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUMsQ0FBQztJQUNGLG9FQUFvRTtJQUNwRSxxRUFBcUU7SUFDckUsbUVBQW1FO0lBQ25FLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDYixTQUFTLENBQUMsSUFBSSxDQUNaLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDYixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQ1osR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNQLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7SUFDN0UsQ0FBQyxDQUFDO0lBQ0YsaUVBQWlFO0lBQ2pFLHdEQUF3RDtJQUN4RCxLQUFLLENBQUM7UUFDSixLQUFLLEVBQUUsVUFBVTtRQUNqQixLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQy9ELENBQUM7SUFDRixpRUFBaUU7SUFDakUsNkRBQTZEO0lBQzdELGdFQUFnRTtJQUNoRSwrREFBK0Q7SUFDL0QsOENBQThDO0lBQzlDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQ3RDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNmLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLENBQUMsS0FBSyxDQUNYLDJEQUNFLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQ2pELEVBQUUsQ0FDSCxDQUFDO1FBQ0YsT0FBTyxFQUFFLENBQUMsUUFBYSxDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUNGLENBQ0YsQ0FDRixFQUNELEVBQUUsWUFBWSxFQUFFLElBQWdCLEVBQUUsUUFBUSxFQUFFLENBQzdDLENBQUM7SUFFRixPQUFPO1FBQ0wsSUFBSTtRQUNKLE9BQU8sRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFO1FBQzlCLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFO1FBQzFCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN6QyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVmcmVzaGFibGUgU3RyZWFtXG4gKlxuICogSGVscGVyIGVzdMOhbmRhciBwYXJhIHZpc3RhcyBxdWUgY29uc3VtZW4gZGF0b3MgZGUgRmlyZXN0b3JlLiBTb3BvcnRhIERPU1xuICogbW9kb3Mg4oCUIGVsIGNhbGxlciBkZWNpZGUgY3XDoWwgdsOtYSBsYSBgZmFjdG9yeWA6XG4gKlxuICogIC0gKipvbmUtc2hvdCoqIChyZWNvbWVuZGFkbyBwb3IgZGVmZWN0byk6IGAoKSA9PiBmcm9tKHN2Yy5nZXRBbGxPbmNlKCkpYC5cbiAqICAgIENhcmdhIHVuYSB2ZXogeSBjb21wbGV0YS4gTcOhcyBiYXJhdG8g4oCUIHNpbiBsaXN0ZW5lciB2aXZvLlxuICogIC0gKipyZWFsLXRpbWUqKjogYCgpID0+IHN2Yy5nZXRBbGwoKWAuIExpc3RlbmVyIEZpcmVzdG9yZSBxdWUgYXV0by1hY3R1YWxpemEuXG4gKiAgICBTb2xvIGRvbmRlIGltcG9ydGEgKGluYm94IGRlIG5vdGlmaWNhY2lvbmVzLCBiYWRnZXMpLlxuICpcbiAqIEVuIGFtYm9zIG1vZG9zIGxhIHByaW1lcmEgc3VzY3JpcGNpw7NuIHNlIGdhdGVhIHBvciBgZmlyZWJhc2VBdXRoUmVhZHlgXG4gKiAoc2VzacOzbiBkZSBGaXJlYmFzZSBBdXRoIGxpc3RhKSDigJQgYXPDrSBlbCBsaXN0ZW5lci9sZWN0dXJhIG51bmNhIHNlIGFkanVudGFcbiAqIGFudGVzIGRlIHF1ZSBgcmVxdWVzdC5hdXRoYCBlc3TDqSBkaXNwb25pYmxlIGVuIGxhcyByZWdsYXMgZGUgRmlyZXN0b3JlLCBsb1xuICogcXVlIGNpZXJyYSBsYSB2ZW50YW5hIGRlIGBwZXJtaXNzaW9uLWRlbmllZGAgZW4gY29sZCBzdGFydCBkZSBQV0EuXG4gKlxuICogRWwgYHJldHJ5YCBjb24gYmFja29mZiBjb3J0byBlcyBzb2xvIHJlZCBkZSBzZWd1cmlkYWQgcGFyYSByZWNvbmV4aW9uZXNcbiAqIHRyYW5zaXRvcmlhcyAobm8gcGFyYSBjdWJyaXIgY29sZCBzdGFydCDigJQgZXNvIGxvIGN1YnJlIGVsIGdhdGUgZGUgYXV0aCkuXG4gKi9cblxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RvciwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgcmFjZSwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgcmV0cnksIHN3aXRjaE1hcCwgdGFrZSwgdGFwLCB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGaXJlYmFzZVNlcnZpY2UgfSBmcm9tICcuLi9maXJlYmFzZS9maXJlYmFzZS5zZXJ2aWNlJztcblxuLyoqIE9wY2lvbmVzIGRlIGNvbmZpZ3VyYWNpw7NuIHBhcmEgYGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtYC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaGFibGVTdHJlYW1PcHRpb25zPFQ+IHtcbiAgLyoqXG4gICAqIFZhbG9yIGVtaXRpZG8gY3VhbmRvIGxhIGZhY3RvcnkgZmFsbGEgdHJhcyBhZ290YXIgbG9zIHJlaW50ZW50b3MuXG4gICAqIERlZmF1bHQ6IGBudWxsYC5cbiAgICovXG4gIGZhbGxiYWNrPzogVDtcbiAgLyoqXG4gICAqIE7Dum1lcm8gbcOheGltbyBkZSByZWludGVudG9zIGFudGUgdW4gZXJyb3IgZGUgbGEgZmFjdG9yeS5cbiAgICogQmFja29mZiBjb3J0byDigJQgTk8gY3VicmUgY29sZCBzdGFydCAoZXNvIGxvIGhhY2UgZWwgZ2F0ZSBkZSBhdXRoKSwgc29sb1xuICAgKiByZWNvbmV4aW9uZXMgdHJhbnNpdG9yaWFzLiBEZWZhdWx0OiA0LlxuICAgKi9cbiAgcmV0cnlDb3VudD86IG51bWJlcjtcbiAgLyoqXG4gICAqIERlbGF5IGJhc2UgZGVsIGJhY2tvZmYgKG1zKS4gRWwgZGVsYXkgZWZlY3Rpdm8gY3JlY2UgZXhwb25lbmNpYWxtZW50ZVxuICAgKiBhY290YWRvOiA1MDBtcyDihpIgMXMg4oaSIDJzIC4uLiBEZWZhdWx0OiA1MDAuXG4gICAqL1xuICByZXRyeUJhc2VEZWxheU1zPzogbnVtYmVyO1xuICAvKipcbiAgICogU2kgYGZhbHNlYCwgTk8gZXNwZXJhIGEgYGZpcmViYXNlQXV0aFJlYWR5YCBhbnRlcyBkZSBsYSBwcmltZXJhXG4gICAqIHN1c2NyaXBjacOzbi4gw5p0aWwgcGFyYSBzdHJlYW1zIHF1ZSBubyBsZWVuIEZpcmVzdG9yZS4gRGVmYXVsdDogYHRydWVgLlxuICAgKi9cbiAgZ2F0ZU9uRmlyZWJhc2VBdXRoPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRpbWVvdXQgKG1zKSBkZWwgZ2F0ZSBkZSBGaXJlYmFzZSBBdXRoLiBTaSBsYSBzZXNpw7NuIGRlIEZpcmViYXNlIEF1dGggbm9cbiAgICogc2UgZXN0YWJsZWNlIGVuIGVzdGUgdGllbXBvLCBlbCBzdHJlYW0gcHJvY2VkZSBpZ3VhbCAobGEgZmFjdG9yeSBjb3JyZXLDoVxuICAgKiB5LCBzaSBubyBoYXkgcGVybWlzbywgdGVybWluYXLDoSBlbiBlc3RhZG8gYGVycm9yYCDigJQgTlVOQ0EgZW4gc2tlbGV0b25cbiAgICogaW5maW5pdG8pLiBNdXkgcG9yIGVuY2ltYSBkZSBjdWFscXVpZXIgaGFuZHNoYWtlIHJlYWwuIERlZmF1bHQ6IDIwMDAwLlxuICAgKi9cbiAgYXV0aEdhdGVUaW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaW1lb3V0IChtcykgZGUgbGEgUFJJTUVSQSBlbWlzacOzbiBkZSBsYSBmYWN0b3J5LiBTaSBsYSBmYWN0b3J5IG5vIGVtaXRlXG4gICAqIG5pIHVuIHZhbG9yIG5pIHVuIGVycm9yIGVuIGVzdGUgdGllbXBvIChjYXNvIHTDrXBpY286IHVuIHNlcnZpY2lvIEZpcmVzdG9yZVxuICAgKiBxdWUgbnVuY2Egc2UgaW5pY2lhbGl6w7Mg4oaSIGBFTVBUWWAg4oaSIHNpbGVuY2lvIHRvdGFsKSwgZWwgc3RyZWFtIHBhc2EgYVxuICAgKiBlc3RhZG8gYGVycm9yYCBlbiB2ZXogZGUgcXVlZGFyc2UgZW4gc2tlbGV0b24gcGVycGV0dW8uIERlZmF1bHQ6IDIwMDAwLlxuICAgKi9cbiAgZmlyc3RFbWl0VGltZW91dE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogSW5qZWN0b3IgZXhwbMOtY2l0by4gU29sbyBuZWNlc2FyaW8gc2kgYGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtYCBzZSBsbGFtYVxuICAgKiBmdWVyYSBkZSB1biBpbmplY3Rpb24gY29udGV4dCAocmFybykuIFBvciBkZWZlY3RvIHVzYSBgaW5qZWN0KEluamVjdG9yKWAuXG4gICAqL1xuICBpbmplY3Rvcj86IEluamVjdG9yO1xufVxuXG4vKipcbiAqIFJlc3VsdGFkbyBkZSBgY3JlYXRlUmVmcmVzaGFibGVTdHJlYW1gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hhYmxlU3RyZWFtPFQ+IHtcbiAgLyoqIERhdG9zIGFjdHVhbGVzLiBgbnVsbGAgbWllbnRyYXMgbGEgcHJpbWVyYSBlbWlzacOzbiBubyBoYSBsbGVnYWRvLiAqL1xuICByZWFkb25seSBkYXRhOiBTaWduYWw8VCB8IG51bGw+O1xuICAvKiogYHRydWVgIG1pZW50cmFzIHNlIGVzcGVyYSBsYSBwcmltZXJhIGVtaXNpw7NuIGRlIGxhIHN1c2NyaXBjacOzbiBhY3R1YWwuICovXG4gIHJlYWRvbmx5IGxvYWRpbmc6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqIGB0cnVlYCBzaSBsYSBmYWN0b3J5IGZhbGzDsyB0cmFzIGFnb3RhciBsb3MgcmVpbnRlbnRvcy4gKi9cbiAgcmVhZG9ubHkgZXJyb3I6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqXG4gICAqIFJlLXN1c2NyaWJlIGxhIGZhY3RvcnkgZGVzZGUgY2VybyAobnVldm8gbGlzdGVuZXIgLyBudWV2YSBsZWN0dXJhKS5cbiAgICogRXMgbG8gcXVlIHJlZ2lzdHJhIGVsIGBQYWdlUmVmcmVzaFNlcnZpY2VgIGNvbW8gaGFuZGxlciBkZSBwdWxsLXRvLXJlZnJlc2gsXG4gICAqIHkgdGFtYmnDqW4gZWwgXCJyZWNvbmVjdGFyIG1hbnVhbFwiIHNpIHVuIGxpc3RlbmVyIG11cmnDsy5cbiAgICovXG4gIHJlbG9hZDogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBDcmVhIHVuIHN0cmVhbSByZWZyZXNjYWJsZSBhIHBhcnRpciBkZSB1bmEgZmFjdG9yeSBkZSBPYnNlcnZhYmxlLlxuICpcbiAqIERFQkUgbGxhbWFyc2UgZW4gdW4gaW5qZWN0aW9uIGNvbnRleHQgKGZpZWxkIGluaXRpYWxpemVyIG8gY29uc3RydWN0b3IpIOKAlFxuICogdXNhIGB0b1NpZ25hbGAvYHRvT2JzZXJ2YWJsZWAvYGluamVjdGAgaW50ZXJuYW1lbnRlLlxuICpcbiAqIEBwYXJhbSBmYWN0b3J5IC0gRnVuY2nDs24gcXVlIHByb2R1Y2UgZWwgT2JzZXJ2YWJsZSBhIGNvbnN1bWlyLiBFbCBjYWxsZXJcbiAqICAgZGVjaWRlIGVsIG1vZG86IGAoKSA9PiBmcm9tKHN2Yy5nZXRBbGxPbmNlKCkpYCAob25lLXNob3QpIG9cbiAqICAgYCgpID0+IHN2Yy5nZXRBbGwoKWAgKHJlYWwtdGltZSkuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYWNpw7NuIG9wY2lvbmFsIChmYWxsYmFjaywgcmV0cnksIGdhdGUpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBvbmUtc2hvdCAocmVjb21lbmRhZG8gcG9yIGRlZmVjdG8pXG4gKiBwcml2YXRlIHJlYWRvbmx5IHN0cmVhbSA9IGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtKFxuICogICAoKSA9PiBmcm9tKHRoaXMuc3ZjLmdldEFsbE9uY2UoKSksXG4gKiApO1xuICpcbiAqIC8vIHJlYWwtdGltZSAoaW5ib3gpXG4gKiBwcml2YXRlIHJlYWRvbmx5IHN0cmVhbSA9IGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtKFxuICogICAoKSA9PiB0aGlzLm5vdGlmcy5nZXRBbGwoNTApLFxuICogKTtcbiAqXG4gKiByZWFkb25seSBpdGVtcyA9IHRoaXMuc3RyZWFtLmRhdGE7XG4gKiByZWFkb25seSBsb2FkaW5nID0gdGhpcy5zdHJlYW0ubG9hZGluZztcbiAqXG4gKiBpb25WaWV3V2lsbEVudGVyKCkge1xuICogICB0aGlzLnBhZ2VSZWZyZXNoLnJlZ2lzdGVyKCgpID0+IHRoaXMuc3RyZWFtLnJlbG9hZCgpKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVmcmVzaGFibGVTdHJlYW08VD4oXG4gIGZhY3Rvcnk6ICgpID0+IE9ic2VydmFibGU8VD4sXG4gIG9wdGlvbnM/OiBSZWZyZXNoYWJsZVN0cmVhbU9wdGlvbnM8VD5cbik6IFJlZnJlc2hhYmxlU3RyZWFtPFQ+IHtcbiAgY29uc3QgaW5qZWN0b3IgPSBvcHRpb25zPy5pbmplY3RvciA/PyBpbmplY3QoSW5qZWN0b3IpO1xuICBjb25zdCBmYWxsYmFjayA9IChvcHRpb25zPy5mYWxsYmFjayA/PyBudWxsKSBhcyBUIHwgbnVsbDtcbiAgY29uc3QgcmV0cnlDb3VudCA9IG9wdGlvbnM/LnJldHJ5Q291bnQgPz8gNDtcbiAgY29uc3QgcmV0cnlCYXNlRGVsYXlNcyA9IG9wdGlvbnM/LnJldHJ5QmFzZURlbGF5TXMgPz8gNTAwO1xuICBjb25zdCBnYXRlT25GaXJlYmFzZUF1dGggPSBvcHRpb25zPy5nYXRlT25GaXJlYmFzZUF1dGggPz8gdHJ1ZTtcbiAgY29uc3QgYXV0aEdhdGVUaW1lb3V0TXMgPSBvcHRpb25zPy5hdXRoR2F0ZVRpbWVvdXRNcyA/PyAyMDAwMDtcbiAgY29uc3QgZmlyc3RFbWl0VGltZW91dE1zID0gb3B0aW9ucz8uZmlyc3RFbWl0VGltZW91dE1zID8/IDIwMDAwO1xuXG4gIC8vIEZpcmViYXNlU2VydmljZSBlcyBvcGNpb25hbCDigJQgc2luIMOpbCAoYXBwcyBzaW4gRmlyZWJhc2UpIG5vIHNlIGdhdGVhLlxuICBjb25zdCBmaXJlYmFzZSA9IGdhdGVPbkZpcmViYXNlQXV0aCA/IGluamVjdG9yLmdldChGaXJlYmFzZVNlcnZpY2UsIG51bGwpIDogbnVsbDtcblxuICBjb25zdCBfcmVsb2FkID0gc2lnbmFsKDApO1xuICBjb25zdCBfbG9hZGluZyA9IHNpZ25hbCh0cnVlKTtcbiAgY29uc3QgX2Vycm9yID0gc2lnbmFsKGZhbHNlKTtcblxuICAvLyBHYXRlIGRlIEZpcmViYXNlIEF1dGg6IGVsIHN0cmVhbSBubyBhYnJlIGxhIHByaW1lcmEgc3VzY3JpcGNpw7NuIGhhc3RhIHF1ZVxuICAvLyBsYSBzZXNpw7NuIGVzdMOpIGNvbmZpcm1hZGEuIGByYWNlYCBjb24gdW4gYHRpbWVyYCBkZSBzZWd1cmlkYWQg4oCUIHNpIGxhXG4gIC8vIHNlc2nDs24gTlVOQ0Egc2UgZXN0YWJsZWNlICh0b2tlbiBpbnbDoWxpZG8sIHNpZ25JbldpdGhGaXJlYmFzZSBmYWxsw7MpLCBlbFxuICAvLyBnYXRlIGlndWFsIHNlIGxpYmVyYSB0cmFzIGBhdXRoR2F0ZVRpbWVvdXRNc2AgeSBsYSBmYWN0b3J5IHByb2NlZGU6IHNpIG5vXG4gIC8vIGhheSBwZXJtaXNvIHRlcm1pbmFyw6EgZW4gZXN0YWRvIGBlcnJvcmAsIGphbcOhcyBlbiBza2VsZXRvbiBpbmZpbml0by5cbiAgLy8gVGFnIGxvcyBkb3MgaW5wdXRzIGRlbCBgcmFjZWAgcGFyYSBkaXN0aW5ndWlyIGVuIGxvZ3MgY3XDoWwgZ2Fuw7M6IGxhIHNlc2nDs25cbiAgLy8gZGUgRmlyZWJhc2UgQXV0aCAoYGF1dGgtcmVhZHlgKSBvIGVsIHRpbWVvdXQgZGUgc2VndXJpZGFkIChgdGltZW91dGApLlxuICBjb25zdCBhdXRoR2F0ZSQ6IE9ic2VydmFibGU8dW5rbm93bj4gPSBmaXJlYmFzZVxuICAgID8gcmFjZShcbiAgICAgICAgZmlyZWJhc2UuZmlyZWJhc2VBdXRoUmVhZHkkLnBpcGUobWFwKCgpID0+ICdhdXRoLXJlYWR5JyBhcyBjb25zdCkpLFxuICAgICAgICB0aW1lcihhdXRoR2F0ZVRpbWVvdXRNcykucGlwZShtYXAoKCkgPT4gJ3RpbWVvdXQnIGFzIGNvbnN0KSlcbiAgICAgICkucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFwKHdpbm5lciA9PiB7XG4gICAgICAgICAgaWYgKHdpbm5lciA9PT0gJ3RpbWVvdXQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgIGBbUmVmcmVzaFN0cmVhbV0gYXV0aCBnYXRlIHJlc29sdmVkIGJ5IFRJTUVPVVQgYWZ0ZXIgJHthdXRoR2F0ZVRpbWVvdXRNc31tcyBgICtcbiAgICAgICAgICAgICAgICAnKEZpcmViYXNlIEF1dGggc2Vzc2lvbiBuZXZlciBjb25maXJtZWQpJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tSZWZyZXNoU3RyZWFtXSBhdXRoIGdhdGUgcmVzb2x2ZWQgYnkgZmlyZWJhc2VBdXRoUmVhZHkkIChzZXNzaW9uIHJlYWR5KScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICA6IG9mKHRydWUpO1xuXG4gIGNvbnN0IGRhdGEgPSB0b1NpZ25hbChcbiAgICB0b09ic2VydmFibGUoX3JlbG9hZCwgeyBpbmplY3RvciB9KS5waXBlKFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgX2xvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICBfZXJyb3Iuc2V0KGZhbHNlKTtcbiAgICAgIH0pLFxuICAgICAgLy8gRXNwZXJhciBhIEZpcmViYXNlIEF1dGggbGlzdG8gYW50ZXMgZGUgY2FkYSAocmUpc3VzY3JpcGNpw7NuLiBDb21vXG4gICAgICAvLyBgZmlyZWJhc2VBdXRoUmVhZHkkYCBjb21wbGV0YSB0cmFzIGxhIHByaW1lcmEgZW1pc2nDs24sIGxhcyByZWxvYWRzXG4gICAgICAvLyBwb3N0ZXJpb3JlcyByZXN1ZWx2ZW4gZWwgZ2F0ZSBkZSBpbm1lZGlhdG8gKGF1dGggeWEgZXN0w6EgbGlzdG8pLlxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIGF1dGhHYXRlJC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgZmFjdG9yeSgpLnBpcGUoXG4gICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgX2xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBfZXJyb3Iuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1JlZnJlc2hTdHJlYW1dIGZhY3RvcnkgZW1pdHRlZCBmaXJzdCB2YWx1ZSDigJQgbG9hZGluZz1mYWxzZScpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgLy8gQmFja29mZiBjb3J0byBleHBvbmVuY2lhbCBhY290YWRvIOKAlCBzb2xvIHJlZCBkZSBzZWd1cmlkYWQgcGFyYVxuICAgICAgICAgICAgICAvLyByZWNvbmV4aW9uZXMgdHJhbnNpdG9yaWFzLCBOTyBwYXJhIGN1YnJpciBjb2xkIHN0YXJ0LlxuICAgICAgICAgICAgICByZXRyeSh7XG4gICAgICAgICAgICAgICAgY291bnQ6IHJldHJ5Q291bnQsXG4gICAgICAgICAgICAgICAgZGVsYXk6IChfZXJyLCBhdHRlbXB0KSA9PlxuICAgICAgICAgICAgICAgICAgdGltZXIoTWF0aC5taW4ocmV0cnlCYXNlRGVsYXlNcyAqIDIgKiogKGF0dGVtcHQgLSAxKSwgNDAwMCkpLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgLy8gVGVjaG8gYWJzb2x1dG8gcGFyYSBsYSBQUklNRVJBIGVtaXNpw7NuLiBTaSBsYSBmYWN0b3J5IG5vIGVtaXRlXG4gICAgICAgICAgICAgIC8vIG5pIHZhbG9yIG5pIGVycm9yIChzZXJ2aWNpbyBudW5jYSBpbmljaWFsaXphZG8g4oaSIGBFTVBUWWAg4oaSXG4gICAgICAgICAgICAgIC8vIHNpbGVuY2lvKSwgYHRpbWVvdXRgIGRpc3BhcmEgdW4gZXJyb3Ig4oaSIGBjYXRjaEVycm9yYCDihpIgZXN0YWRvXG4gICAgICAgICAgICAgIC8vIGBlcnJvcmAuIE51bmNhIHNrZWxldG9uIHBlcnBldHVvLiBWYSBERVNQVcOJUyBkZSBgcmV0cnlgIHBhcmFcbiAgICAgICAgICAgICAgLy8gcXVlIGN1ZW50ZSBlbCB0aWVtcG8gdG90YWwsIG5vIHBvciBpbnRlbnRvLlxuICAgICAgICAgICAgICB0aW1lb3V0KHsgZmlyc3Q6IGZpcnN0RW1pdFRpbWVvdXRNcyB9KSxcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIF9sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgX2Vycm9yLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgYFtSZWZyZXNoU3RyZWFtXSBmYWN0b3J5IGZhaWxlZC90aW1lZCBvdXQg4oaSIGVycm9yIHN0YXRlOiAke1xuICAgICAgICAgICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycilcbiAgICAgICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsbGJhY2sgYXMgVCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICB7IGluaXRpYWxWYWx1ZTogbnVsbCBhcyBUIHwgbnVsbCwgaW5qZWN0b3IgfVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgZGF0YSxcbiAgICBsb2FkaW5nOiBfbG9hZGluZy5hc1JlYWRvbmx5KCksXG4gICAgZXJyb3I6IF9lcnJvci5hc1JlYWRvbmx5KCksXG4gICAgcmVsb2FkOiAoKSA9PiBfcmVsb2FkLnVwZGF0ZShuID0+IG4gKyAxKSxcbiAgfTtcbn1cbiJdfQ==
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaGFibGUtc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9yZWZyZXNoYWJsZS1zdHJlYW0vcmVmcmVzaGFibGUtc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFnRS9EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE9BQTRCLEVBQzVCLE9BQXFDO0lBRXJDLE1BQU0sUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQWEsQ0FBQztJQUN6RCxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsVUFBVSxJQUFJLENBQUMsQ0FBQztJQUM1QyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxHQUFHLENBQUM7SUFDMUQsTUFBTSxrQkFBa0IsR0FBRyxPQUFP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QzlDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQ3RDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNmLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLENBQUMsS0FBSyxDQUNYLDJEQUNFLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQ2pELEVBQUUsQ0FDSCxDQUFDO1FBQ0YsT0FBTyxFQUFFLENBQUMsUUFBYSxDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUNGLENBQ0YsQ0FDRixFQUNELEVBQUUsWUFBWSxFQUFFLElBQWdCLEVBQUUsUUFBUSxFQUFFLENBQzdDLENBQUM7SUFFRixPQUFPO1FBQ0wsSUFBSTtRQUNKLE9BQU8sRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFO1FBQzlCLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFO1FBQzFCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN6QyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVmcmVzaGFibGUgU3RyZWFtXG4gKlxuICogSGVscGVyIGVzdMOhbmRhciBwYXJhIHZpc3RhcyBxdWUgY29uc3VtZW4gZGF0b3MgZGUgRmlyZXN0b3JlLiBTb3BvcnRhIERPU1xuICogbW9kb3Mg4oCUIGVsIGNhbGxlciBkZWNpZGUgY3XDoWwgdsOtYSBsYSBgZmFjdG9yeWA6XG4gKlxuICogIC0gKipvbmUtc2hvdCoqIChyZWNvbWVuZGFkbyBwb3IgZGVmZWN0byk6IGAoKSA9PiBmcm9tKHN2Yy5nZXRBbGxPbmNlKCkpYC5cbiAqICAgIENhcmdhIHVuYSB2ZXogeSBjb21wbGV0YS4gTcOhcyBiYXJhdG8g4oCUIHNpbiBsaXN0ZW5lciB2aXZvLlxuICogIC0gKipyZWFsLXRpbWUqKjogYCgpID0+IHN2Yy5nZXRBbGwoKWAuIExpc3RlbmVyIEZpcmVzdG9yZSBxdWUgYXV0by1hY3R1YWxpemEuXG4gKiAgICBTb2xvIGRvbmRlIGltcG9ydGEgKGluYm94IGRlIG5vdGlmaWNhY2lvbmVzLCBiYWRnZXMpLlxuICpcbiAqIEVuIGFtYm9zIG1vZG9zIGxhIHByaW1lcmEgc3VzY3JpcGNpw7NuIHNlIGdhdGVhIHBvciBgZmlyZWJhc2VBdXRoUmVhZHlgXG4gKiAoc2VzacOzbiBkZSBGaXJlYmFzZSBBdXRoIGxpc3RhKSDigJQgYXPDrSBlbCBsaXN0ZW5lci9sZWN0dXJhIG51bmNhIHNlIGFkanVudGFcbiAqIGFudGVzIGRlIHF1ZSBgcmVxdWVzdC5hdXRoYCBlc3TDqSBkaXNwb25pYmxlIGVuIGxhcyByZWdsYXMgZGUgRmlyZXN0b3JlLCBsb1xuICogcXVlIGNpZXJyYSBsYSB2ZW50YW5hIGRlIGBwZXJtaXNzaW9uLWRlbmllZGAgZW4gY29sZCBzdGFydCBkZSBQV0EuXG4gKlxuICogRWwgYHJldHJ5YCBjb24gYmFja29mZiBjb3J0byBlcyBzb2xvIHJlZCBkZSBzZWd1cmlkYWQgcGFyYSByZWNvbmV4aW9uZXNcbiAqIHRyYW5zaXRvcmlhcyAobm8gcGFyYSBjdWJyaXIgY29sZCBzdGFydCDigJQgZXNvIGxvIGN1YnJlIGVsIGdhdGUgZGUgYXV0aCkuXG4gKi9cblxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RvciwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgcmFjZSwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgcmV0cnksIHN3aXRjaE1hcCwgdGFrZSwgdGFwLCB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGaXJlYmFzZVNlcnZpY2UgfSBmcm9tICcuLi9maXJlYmFzZS9maXJlYmFzZS5zZXJ2aWNlJztcblxuLyoqIE9wY2lvbmVzIGRlIGNvbmZpZ3VyYWNpw7NuIHBhcmEgYGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtYC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaGFibGVTdHJlYW1PcHRpb25zPFQ+IHtcbiAgLyoqXG4gICAqIFZhbG9yIGVtaXRpZG8gY3VhbmRvIGxhIGZhY3RvcnkgZmFsbGEgdHJhcyBhZ290YXIgbG9zIHJlaW50ZW50b3MuXG4gICAqIERlZmF1bHQ6IGBudWxsYC5cbiAgICovXG4gIGZhbGxiYWNrPzogVDtcbiAgLyoqXG4gICAqIE7Dum1lcm8gbcOheGltbyBkZSByZWludGVudG9zIGFudGUgdW4gZXJyb3IgZGUgbGEgZmFjdG9yeS5cbiAgICogQmFja29mZiBjb3J0byDigJQgTk8gY3VicmUgY29sZCBzdGFydCAoZXNvIGxvIGhhY2UgZWwgZ2F0ZSBkZSBhdXRoKSwgc29sb1xuICAgKiByZWNvbmV4aW9uZXMgdHJhbnNpdG9yaWFzLiBEZWZhdWx0OiA0LlxuICAgKi9cbiAgcmV0cnlDb3VudD86IG51bWJlcjtcbiAgLyoqXG4gICAqIERlbGF5IGJhc2UgZGVsIGJhY2tvZmYgKG1zKS4gRWwgZGVsYXkgZWZlY3Rpdm8gY3JlY2UgZXhwb25lbmNpYWxtZW50ZVxuICAgKiBhY290YWRvOiA1MDBtcyDihpIgMXMg4oaSIDJzIC4uLiBEZWZhdWx0OiA1MDAuXG4gICAqL1xuICByZXRyeUJhc2VEZWxheU1zPzogbnVtYmVyO1xuICAvKipcbiAgICogU2kgYGZhbHNlYCwgTk8gZXNwZXJhIGEgYGZpcmViYXNlQXV0aFJlYWR5YCBhbnRlcyBkZSBsYSBwcmltZXJhXG4gICAqIHN1c2NyaXBjacOzbi4gw5p0aWwgcGFyYSBzdHJlYW1zIHF1ZSBubyBsZWVuIEZpcmVzdG9yZS4gRGVmYXVsdDogYHRydWVgLlxuICAgKi9cbiAgZ2F0ZU9uRmlyZWJhc2VBdXRoPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRpbWVvdXQgKG1zKSBkZWwgZ2F0ZSBkZSBGaXJlYmFzZSBBdXRoLiBTaSBsYSBzZXNpw7NuIGRlIEZpcmViYXNlIEF1dGggbm9cbiAgICogc2UgZXN0YWJsZWNlIGVuIGVzdGUgdGllbXBvLCBlbCBzdHJlYW0gcHJvY2VkZSBpZ3VhbCAobGEgZmFjdG9yeSBjb3JyZXLDoVxuICAgKiB5LCBzaSBubyBoYXkgcGVybWlzbywgdGVybWluYXLDoSBlbiBlc3RhZG8gYGVycm9yYCDigJQgTlVOQ0EgZW4gc2tlbGV0b25cbiAgICogaW5maW5pdG8pLiBNdXkgcG9yIGVuY2ltYSBkZSBjdWFscXVpZXIgaGFuZHNoYWtlIHJlYWwuIERlZmF1bHQ6IDIwMDAwLlxuICAgKi9cbiAgYXV0aEdhdGVUaW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaW1lb3V0IChtcykgZGUgbGEgUFJJTUVSQSBlbWlzacOzbiBkZSBsYSBmYWN0b3J5LiBTaSBsYSBmYWN0b3J5IG5vIGVtaXRlXG4gICAqIG5pIHVuIHZhbG9yIG5pIHVuIGVycm9yIGVuIGVzdGUgdGllbXBvIChjYXNvIHTDrXBpY286IHVuIHNlcnZpY2lvIEZpcmVzdG9yZVxuICAgKiBxdWUgbnVuY2Egc2UgaW5pY2lhbGl6w7Mg4oaSIGBFTVBUWWAg4oaSIHNpbGVuY2lvIHRvdGFsKSwgZWwgc3RyZWFtIHBhc2EgYVxuICAgKiBlc3RhZG8gYGVycm9yYCBlbiB2ZXogZGUgcXVlZGFyc2UgZW4gc2tlbGV0b24gcGVycGV0dW8uIERlZmF1bHQ6IDIwMDAwLlxuICAgKi9cbiAgZmlyc3RFbWl0VGltZW91dE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogSW5qZWN0b3IgZXhwbMOtY2l0by4gU29sbyBuZWNlc2FyaW8gc2kgYGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtYCBzZSBsbGFtYVxuICAgKiBmdWVyYSBkZSB1biBpbmplY3Rpb24gY29udGV4dCAocmFybykuIFBvciBkZWZlY3RvIHVzYSBgaW5qZWN0KEluamVjdG9yKWAuXG4gICAqL1xuICBpbmplY3Rvcj86IEluamVjdG9yO1xufVxuXG4vKipcbiAqIFJlc3VsdGFkbyBkZSBgY3JlYXRlUmVmcmVzaGFibGVTdHJlYW1gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hhYmxlU3RyZWFtPFQ+IHtcbiAgLyoqIERhdG9zIGFjdHVhbGVzLiBgbnVsbGAgbWllbnRyYXMgbGEgcHJpbWVyYSBlbWlzacOzbiBubyBoYSBsbGVnYWRvLiAqL1xuICByZWFkb25seSBkYXRhOiBTaWduYWw8VCB8IG51bGw+O1xuICAvKiogYHRydWVgIG1pZW50cmFzIHNlIGVzcGVyYSBsYSBwcmltZXJhIGVtaXNpw7NuIGRlIGxhIHN1c2NyaXBjacOzbiBhY3R1YWwuICovXG4gIHJlYWRvbmx5IGxvYWRpbmc6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqIGB0cnVlYCBzaSBsYSBmYWN0b3J5IGZhbGzDsyB0cmFzIGFnb3RhciBsb3MgcmVpbnRlbnRvcy4gKi9cbiAgcmVhZG9ubHkgZXJyb3I6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqXG4gICAqIFJlLXN1c2NyaWJlIGxhIGZhY3RvcnkgZGVzZGUgY2VybyAobnVldm8gbGlzdGVuZXIgLyBudWV2YSBsZWN0dXJhKS5cbiAgICogRXMgbG8gcXVlIHJlZ2lzdHJhIGVsIGBQYWdlUmVmcmVzaFNlcnZpY2VgIGNvbW8gaGFuZGxlciBkZSBwdWxsLXRvLXJlZnJlc2gsXG4gICAqIHkgdGFtYmnDqW4gZWwgXCJyZWNvbmVjdGFyIG1hbnVhbFwiIHNpIHVuIGxpc3RlbmVyIG11cmnDsy5cbiAgICovXG4gIHJlbG9hZDogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBDcmVhIHVuIHN0cmVhbSByZWZyZXNjYWJsZSBhIHBhcnRpciBkZSB1bmEgZmFjdG9yeSBkZSBPYnNlcnZhYmxlLlxuICpcbiAqIERFQkUgbGxhbWFyc2UgZW4gdW4gaW5qZWN0aW9uIGNvbnRleHQgKGZpZWxkIGluaXRpYWxpemVyIG8gY29uc3RydWN0b3IpIOKAlFxuICogdXNhIGB0b1NpZ25hbGAvYHRvT2JzZXJ2YWJsZWAvYGluamVjdGAgaW50ZXJuYW1lbnRlLlxuICpcbiAqIEBwYXJhbSBmYWN0b3J5IC0gRnVuY2nDs24gcXVlIHByb2R1Y2UgZWwgT2JzZXJ2YWJsZSBhIGNvbnN1bWlyLiBFbCBjYWxsZXJcbiAqICAgZGVjaWRlIGVsIG1vZG86IGAoKSA9PiBmcm9tKHN2Yy5nZXRBbGxPbmNlKCkpYCAob25lLXNob3QpIG9cbiAqICAgYCgpID0+IHN2Yy5nZXRBbGwoKWAgKHJlYWwtdGltZSkuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYWNpw7NuIG9wY2lvbmFsIChmYWxsYmFjaywgcmV0cnksIGdhdGUpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBvbmUtc2hvdCAocmVjb21lbmRhZG8gcG9yIGRlZmVjdG8pXG4gKiBwcml2YXRlIHJlYWRvbmx5IHN0cmVhbSA9IGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtKFxuICogICAoKSA9PiBmcm9tKHRoaXMuc3ZjLmdldEFsbE9uY2UoKSksXG4gKiApO1xuICpcbiAqIC8vIHJlYWwtdGltZSAoaW5ib3gpXG4gKiBwcml2YXRlIHJlYWRvbmx5IHN0cmVhbSA9IGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtKFxuICogICAoKSA9PiB0aGlzLm5vdGlmcy5nZXRBbGwoNTApLFxuICogKTtcbiAqXG4gKiByZWFkb25seSBpdGVtcyA9IHRoaXMuc3RyZWFtLmRhdGE7XG4gKiByZWFkb25seSBsb2FkaW5nID0gdGhpcy5zdHJlYW0ubG9hZGluZztcbiAqXG4gKiBpb25WaWV3V2lsbEVudGVyKCkge1xuICogICB0aGlzLnBhZ2VSZWZyZXNoLnJlZ2lzdGVyKCgpID0+IHRoaXMuc3RyZWFtLnJlbG9hZCgpKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVmcmVzaGFibGVTdHJlYW08VD4oXG4gIGZhY3Rvcnk6ICgpID0+IE9ic2VydmFibGU8VD4sXG4gIG9wdGlvbnM/OiBSZWZyZXNoYWJsZVN0cmVhbU9wdGlvbnM8VD5cbik6IFJlZnJlc2hhYmxlU3RyZWFtPFQ+IHtcbiAgY29uc3QgaW5qZWN0b3IgPSBvcHRpb25zPy5pbmplY3RvciA/PyBpbmplY3QoSW5qZWN0b3IpO1xuICBjb25zdCBmYWxsYmFjayA9IChvcHRpb25zPy5mYWxsYmFjayA/PyBudWxsKSBhcyBUIHwgbnVsbDtcbiAgY29uc3QgcmV0cnlDb3VudCA9IG9wdGlvbnM/LnJldHJ5Q291bnQgPz8gNDtcbiAgY29uc3QgcmV0cnlCYXNlRGVsYXlNcyA9IG9wdGlvbnM/LnJldHJ5QmFzZURlbGF5TXMgPz8gNTAwO1xuICBjb25zdCBnYXRlT25GaXJlYmFzZUF1dGggPSBvcHRpb25zPy5nYXRlT25GaXJlYmFzZUF1dGggPz8gdHJ1ZTtcbiAgY29uc3QgYXV0aEdhdGVUaW1lb3V0TXMgPSBvcHRpb25zPy5hdXRoR2F0ZVRpbWVvdXRNcyA/PyAyMDAwMDtcbiAgY29uc3QgZmlyc3RFbWl0VGltZW91dE1zID0gb3B0aW9ucz8uZmlyc3RFbWl0VGltZW91dE1zID8/IDIwMDAwO1xuXG4gIC8vIEZpcmViYXNlU2VydmljZSBlcyBvcGNpb25hbCDigJQgc2luIMOpbCAoYXBwcyBzaW4gRmlyZWJhc2UpIG5vIHNlIGdhdGVhLlxuICBjb25zdCBmaXJlYmFzZSA9IGdhdGVPbkZpcmViYXNlQXV0aCA/IGluamVjdG9yLmdldChGaXJlYmFzZVNlcnZpY2UsIG51bGwpIDogbnVsbDtcblxuICBjb25zdCBfcmVsb2FkID0gc2lnbmFsKDApO1xuICBjb25zdCBfbG9hZGluZyA9IHNpZ25hbCh0cnVlKTtcbiAgY29uc3QgX2Vycm9yID0gc2lnbmFsKGZhbHNlKTtcblxuICAvLyBHYXRlIGRlIEZpcmViYXNlIEF1dGg6IGVsIHN0cmVhbSBubyBhYnJlIGxhIHByaW1lcmEgc3VzY3JpcGNpw7NuIGhhc3RhIHF1ZVxuICAvLyBsYSBzZXNpw7NuIGVzdMOpIGNvbmZpcm1hZGEuIGByYWNlYCBjb24gdW4gYHRpbWVyYCBkZSBzZWd1cmlkYWQg4oCUIHNpIGxhXG4gIC8vIHNlc2nDs24gTlVOQ0Egc2UgZXN0YWJsZWNlICh0b2tlbiBpbnbDoWxpZG8sIHNpZ25JbldpdGhGaXJlYmFzZSBmYWxsw7MpLCBlbFxuICAvLyBnYXRlIGlndWFsIHNlIGxpYmVyYSB0cmFzIGBhdXRoR2F0ZVRpbWVvdXRNc2AgeSBsYSBmYWN0b3J5IHByb2NlZGU6IHNpIG5vXG4gIC8vIGhheSBwZXJtaXNvIHRlcm1pbmFyw6EgZW4gZXN0YWRvIGBlcnJvcmAsIGphbcOhcyBlbiBza2VsZXRvbiBpbmZpbml0by5cbiAgLy8gVGFnIGxvcyBkb3MgaW5wdXRzIGRlbCBgcmFjZWAgcGFyYSBkaXN0aXZkc3IgZW4gbG9ncyBjdcOhbCBnYW7DszogbGEgc2VzacOzblxuICAvLyBkZSBGaXJlYmFzZSBBdXRoIChgYXV0aC1yZWFkeWApIG8gZWwgdGltZW91dCBkZSBzZWd1cmlkYWQgKGB0aW1lb3V0YCkuXG4gIGNvbnN0IGF1dGhHYXRlJDogT2JzZXJ2YWJsZTx1bmtub3duPiA9IGZpcmViYXNlXG4gICAgPyByYWNlKFxuICAgICAgICBmaXJlYmFzZS5maXJlYmFzZUF1dGhSZWFkeSQucGlwZShtYXAoKCkgPT4gJ2F1dGgtcmVhZHknIGFzIGNvbnN0KSksXG4gICAgICAgIHRpbWVyKGF1dGhHYXRlVGltZW91dE1zKS5waXBlKG1hcCgoKSA9PiAndGltZW91dCcgYXMgY29uc3QpKVxuICAgICAgKS5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YXAod2lubmVyID0+IHtcbiAgICAgICAgICBpZiAod2lubmVyID09PSAndGltZW91dCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgYFtSZWZyZXNoU3RyZWFtXSBhdXRoIGdhdGUgcmVzb2x2ZWQgYnkgVElNRU9VVCBhZnRlciAke2F1dGhHYXRlVGltZW91dE1zfW1zIGAgK1xuICAgICAgICAgICAgICAgICcoRmlyZWJhc2UgQXV0aCBzZXNzaW9uIG5ldmVyIGNvbmZpcm1lZCknXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW1JlZnJlc2hTdHJlYW1dIGF1dGggZ2F0ZSByZXNvbHZlZCBieSBmaXJlYmFzZUF1dGhSZWFkeSQgKHNlc3Npb24gcmVhZHkpJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIDogb2YodHJ1ZSk7XG5cbiAgY29uc3QgZGF0YSA9IHRvU2lnbmFsKFxuICAgIHRvT2JzZXJ2YWJsZShfcmVsb2FkLCB7IGluamVjdG9yIH0pLnBpcGUoXG4gICAgICB0YXAoKCkgPT4ge1xuICAgICAgICBfbG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICAgIF9lcnJvci5zZXQoZmFsc2UpO1xuICAgICAgfSksXG4gICAgICAvLyBFc3BlcmFyIGEgRmlyZWJhc2UgQXV0aCBsaXN0byBhbnRlcyBkZSBjYWRhIChyZSlzdXNjcmlwY2nDs24uIENvbW9cbiAgICAgIC8vIGBmaXJlYmFzZUF1dGhSZWFkeSRgIGNvbXBsZXRhIHRyYXMgbGEgcHJpbWVyYSBlbWlzacOzbiwgbGFzIHJlbG9hZHNcbiAgICAgIC8vIHBvc3RlcmlvcmVzIHJlc3VlbHZlbiBlbCBnYXRlIGRlIGlubWVkaWF0byAoYXV0aCB5YSBlc3TDoSBsaXN0bykuXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgYXV0aEdhdGUkLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgICBmYWN0b3J5KCkucGlwZShcbiAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBfbG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIF9lcnJvci5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbUmVmcmVzaFN0cmVhbV0gZmFjdG9yeSBlbWl0dGVkIGZpcnN0IHZhbHVlIOKAlCBsb2FkaW5nPWZhbHNlJyk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAvLyBCYWNrb2ZmIGNvcnRvIGV4cG9uZW5jaWFsIGFjb3RhZG8g4oCUIHNvbG8gcmVkIGRlIHNlZ3VyaWRhZCBwYXJhXG4gICAgICAgICAgICAgIC8vIHJlY29uZXhpb25lcyB0cmFuc2l0b3JpYXMsIE5PIHBhcmEgY3VicmlyIGNvbGQgc3RhcnQuXG4gICAgICAgICAgICAgIHJldHJ5KHtcbiAgICAgICAgICAgICAgICBjb3VudDogcmV0cnlDb3VudCxcbiAgICAgICAgICAgICAgICBkZWxheTogKF9lcnIsIGF0dGVtcHQpID0+XG4gICAgICAgICAgICAgICAgICB0aW1lcihNYXRoLm1pbihyZXRyeUJhc2VEZWxheU1zICogMiAqKiAoYXR0ZW1wdCAtIDEpLCA0MDAwKSksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAvLyBUZWNobyBhYnNvbHV0byBwYXJhIGxhIFBSSU1FUkEgZW1pc2nDs24uIFNpIGxhIGZhY3Rvcnkgbm8gZW1pdGVcbiAgICAgICAgICAgICAgLy8gbmkgdmFsb3IgbmkgZXJyb3IgKHNlcnZpY2lvIG51bmNhIGluaWNpYWxpemFkbyDihpIgYEVNUFRZYCDihpJcbiAgICAgICAgICAgICAgLy8gc2lsZW5jaW8pLCBgdGltZW91dGAgZGlzcGFyYSB1biBlcnJvciDihpIgYGNhdGNoRXJyb3JgIOKGkiBlc3RhZG9cbiAgICAgICAgICAgICAgLy8gYGVycm9yYC4gTnVuY2Egc2tlbGV0b24gcGVycGV0dW8uIFZhIERFU1BVw4lTIGRlIGByZXRyeWAgcGFyYVxuICAgICAgICAgICAgICAvLyBxdWUgY3VlbnRlIGVsIHRpZW1wbyB0b3RhbCwgbm8gcG9yIGludGVudG8uXG4gICAgICAgICAgICAgIHRpbWVvdXQoeyBmaXJzdDogZmlyc3RFbWl0VGltZW91dE1zIH0pLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgX2xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBfZXJyb3Iuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICBgW1JlZnJlc2hTdHJlYW1dIGZhY3RvcnkgZmFpbGVkL3RpbWVkIG91dCDihpIgZXJyb3Igc3RhdGU6ICR7XG4gICAgICAgICAgICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKVxuICAgICAgICAgICAgICAgICAgfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxsYmFjayBhcyBUKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIHsgaW5pdGlhbFZhbHVlOiBudWxsIGFzIFQgfCBudWxsLCBpbmplY3RvciB9XG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBkYXRhLFxuICAgIGxvYWRpbmc6IF9sb2FkaW5nLmFzUmVhZG9ubHkoKSxcbiAgICBlcnJvcjogX2Vycm9yLmFzUmVhZG9ubHkoKSxcbiAgICByZWxvYWQ6ICgpID0+IF9yZWxvYWQudXBkYXRlKG4gPT4gbiArIDEpLFxuICB9O1xufVxuIl19
@@ -2,5 +2,5 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export const VERSION = '4.0.25';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4yNSc7XG4iXX0=
5
+ export const VERSION = '4.0.27';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4yNyc7XG4iXX0=