ngx-edu-sharing-ui 10.0.20 → 10.0.22

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 (131) hide show
  1. package/assets/scss/material-theme.scss +3 -3
  2. package/assets/scss/mixins.scss +1 -1
  3. package/assets/scss/variables-root.scss +2 -0
  4. package/assets/scss/variables-scss.scss +3 -4
  5. package/assets/scss/variables.scss +1 -1
  6. package/fesm2022/ngx-edu-sharing-ui.mjs +376 -319
  7. package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -1
  8. package/lib/index.d.ts +1 -0
  9. package/lib/list-items/list-widget.d.ts +1 -1
  10. package/lib/mds-viewer/mds-editor-instance-service.abstract.d.ts +14 -0
  11. package/lib/mds-viewer/widget/mds-widget.component.d.ts +6 -4
  12. package/package.json +8 -9
  13. package/esm2022/lib/actionbar/actionbar.component.mjs +0 -206
  14. package/esm2022/lib/common/edu-sharing-ui-common.module.mjs +0 -170
  15. package/esm2022/lib/directives/border-box-observer.directive.mjs +0 -71
  16. package/esm2022/lib/directives/check-text-overflow.directive.mjs +0 -71
  17. package/esm2022/lib/directives/drag-nodes/drag-nodes.mjs +0 -14
  18. package/esm2022/lib/directives/drag-nodes/nodes-drag-source.directive.mjs +0 -79
  19. package/esm2022/lib/directives/drag-nodes/nodes-drag.directive.mjs +0 -49
  20. package/esm2022/lib/directives/drag-nodes/nodes-drop-target.directive.mjs +0 -105
  21. package/esm2022/lib/directives/focus-state.directive.mjs +0 -44
  22. package/esm2022/lib/directives/icon.directive.mjs +0 -184
  23. package/esm2022/lib/directives/infinite-scroll.directive.mjs +0 -85
  24. package/esm2022/lib/dropdown/dropdown.component.mjs +0 -83
  25. package/esm2022/lib/edu-sharing-ui-configuration.mjs +0 -48
  26. package/esm2022/lib/edu-sharing-ui.module.mjs +0 -82
  27. package/esm2022/lib/index.mjs +0 -96
  28. package/esm2022/lib/list-items/available-widgets.mjs +0 -27
  29. package/esm2022/lib/list-items/format-duration.pipe.mjs +0 -20
  30. package/esm2022/lib/list-items/list-base/list-base.component.mjs +0 -46
  31. package/esm2022/lib/list-items/list-collection-info/list-collection-info.component.mjs +0 -29
  32. package/esm2022/lib/list-items/list-counts/list-counts.component.mjs +0 -56
  33. package/esm2022/lib/list-items/list-items.module.mjs +0 -50
  34. package/esm2022/lib/list-items/list-node-license/list-node-license.component.mjs +0 -41
  35. package/esm2022/lib/list-items/list-node-replication-source/list-node-replication-source.component.mjs +0 -47
  36. package/esm2022/lib/list-items/list-node-workflow/list-node-workflow.component.mjs +0 -24
  37. package/esm2022/lib/list-items/list-text/list-text.component.mjs +0 -106
  38. package/esm2022/lib/list-items/list-widget.mjs +0 -49
  39. package/esm2022/lib/list-items/node-row/node-row.component.mjs +0 -24
  40. package/esm2022/lib/list-items/node-source.pipe.mjs +0 -49
  41. package/esm2022/lib/mds/mds-helper.service.mjs +0 -167
  42. package/esm2022/lib/mds/mds.module.mjs +0 -16
  43. package/esm2022/lib/mds-viewer/mds-viewer.component.mjs +0 -170
  44. package/esm2022/lib/mds-viewer/mds-viewer.service.mjs +0 -18
  45. package/esm2022/lib/mds-viewer/replace-element-with-div.mjs +0 -47
  46. package/esm2022/lib/mds-viewer/view-instance.service.mjs +0 -27
  47. package/esm2022/lib/mds-viewer/widget/mds-widget.component.mjs +0 -379
  48. package/esm2022/lib/node-entries/combined-data-source.mjs +0 -41
  49. package/esm2022/lib/node-entries/custom-templates-data-source.mjs +0 -7
  50. package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +0 -21
  51. package/esm2022/lib/node-entries/entries-model.mjs +0 -24
  52. package/esm2022/lib/node-entries/items-cap.mjs +0 -47
  53. package/esm2022/lib/node-entries/list-item-label.pipe.mjs +0 -37
  54. package/esm2022/lib/node-entries/node-cache.mjs +0 -73
  55. package/esm2022/lib/node-entries/node-data-source-remote.mjs +0 -4
  56. package/esm2022/lib/node-entries/node-data-source.mjs +0 -117
  57. package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +0 -117
  58. package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs +0 -329
  59. package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +0 -44
  60. package/esm2022/lib/node-entries/node-entries-global-options/node-entries-global-options.component.mjs +0 -27
  61. package/esm2022/lib/node-entries/node-entries-global.service.mjs +0 -71
  62. package/esm2022/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.mjs +0 -42
  63. package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +0 -294
  64. package/esm2022/lib/node-entries/node-entries-templates.service.mjs +0 -11
  65. package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +0 -369
  66. package/esm2022/lib/node-entries/node-entries.component.mjs +0 -132
  67. package/esm2022/lib/node-entries/node-entries.module.mjs +0 -161
  68. package/esm2022/lib/node-entries/node-rating/node-rating.component.mjs +0 -125
  69. package/esm2022/lib/node-entries/node-stats-badges/node-stats-badges.component.mjs +0 -48
  70. package/esm2022/lib/node-entries/node-type-badge/node-type-badge.component.mjs +0 -36
  71. package/esm2022/lib/node-entries/option-button/option-button.component.mjs +0 -75
  72. package/esm2022/lib/node-entries/preview-image/preview-image.component.mjs +0 -53
  73. package/esm2022/lib/node-entries/sort-select-panel/sort-select-panel.component.mjs +0 -41
  74. package/esm2022/lib/node-url/node-url.component.mjs +0 -132
  75. package/esm2022/lib/pipes/file-size.pipe.mjs +0 -32
  76. package/esm2022/lib/pipes/format-date.pipe.mjs +0 -38
  77. package/esm2022/lib/pipes/mds-duration.pipe.mjs +0 -25
  78. package/esm2022/lib/pipes/node-icon.pipe.mjs +0 -18
  79. package/esm2022/lib/pipes/node-image-size.pipe.mjs +0 -24
  80. package/esm2022/lib/pipes/node-image.pipe.mjs +0 -55
  81. package/esm2022/lib/pipes/node-license.pipe.mjs +0 -24
  82. package/esm2022/lib/pipes/node-person-name.pipe.mjs +0 -50
  83. package/esm2022/lib/pipes/node-title.pipe.mjs +0 -35
  84. package/esm2022/lib/pipes/option-tooltip.pipe.mjs +0 -33
  85. package/esm2022/lib/pipes/property-slug.pipe.mjs +0 -16
  86. package/esm2022/lib/pipes/replace-chars.pipe.mjs +0 -29
  87. package/esm2022/lib/pipes/vcard-name.pipe.mjs +0 -25
  88. package/esm2022/lib/services/abstract/app.service.mjs +0 -3
  89. package/esm2022/lib/services/abstract/keyboard-shortcuts.service.mjs +0 -10
  90. package/esm2022/lib/services/abstract/options-helper.service.mjs +0 -3
  91. package/esm2022/lib/services/abstract/toast.service.mjs +0 -3
  92. package/esm2022/lib/services/accessibility.service.mjs +0 -73
  93. package/esm2022/lib/services/app-container.service.mjs +0 -69
  94. package/esm2022/lib/services/local-events.service.mjs +0 -43
  95. package/esm2022/lib/services/node-entries.service.mjs +0 -201
  96. package/esm2022/lib/services/node-helper.service.mjs +0 -330
  97. package/esm2022/lib/services/nodes-drag-drop.service.mjs +0 -155
  98. package/esm2022/lib/services/options-helper-data.service.mjs +0 -142
  99. package/esm2022/lib/services/render-helper.service.mjs +0 -114
  100. package/esm2022/lib/services/repo-url.service.mjs +0 -50
  101. package/esm2022/lib/services/search-helper.service.mjs +0 -52
  102. package/esm2022/lib/services/temporary-storage.service.mjs +0 -48
  103. package/esm2022/lib/services/ui.service.mjs +0 -327
  104. package/esm2022/lib/sort-dropdown/sort-dropdown.component.mjs +0 -50
  105. package/esm2022/lib/spinner/spinner.component.mjs +0 -19
  106. package/esm2022/lib/spinner-small/spinner-small.component.mjs +0 -18
  107. package/esm2022/lib/translations/fallback-translation-handler.mjs +0 -6
  108. package/esm2022/lib/translations/translation-loader.mjs +0 -219
  109. package/esm2022/lib/translations/translation-source.mjs +0 -11
  110. package/esm2022/lib/translations/translations.module.mjs +0 -82
  111. package/esm2022/lib/translations/translations.service.mjs +0 -238
  112. package/esm2022/lib/types/accessibillity.mjs +0 -19
  113. package/esm2022/lib/types/api-models.mjs +0 -2
  114. package/esm2022/lib/types/drag-drop.mjs +0 -2
  115. package/esm2022/lib/types/injection-tokens.mjs +0 -31
  116. package/esm2022/lib/types/keyboard-shortcuts.mjs +0 -11
  117. package/esm2022/lib/types/list-item.mjs +0 -41
  118. package/esm2022/lib/types/option-item.mjs +0 -192
  119. package/esm2022/lib/types/workflow.mjs +0 -25
  120. package/esm2022/lib/util/DateHelper.mjs +0 -200
  121. package/esm2022/lib/util/VCard.mjs +0 -278
  122. package/esm2022/lib/util/color-helper.mjs +0 -124
  123. package/esm2022/lib/util/duration-helper.mjs +0 -102
  124. package/esm2022/lib/util/functions.mjs +0 -13
  125. package/esm2022/lib/util/helper.mjs +0 -64
  126. package/esm2022/lib/util/isNumeric.mjs +0 -11
  127. package/esm2022/lib/util/rest-helper.mjs +0 -42
  128. package/esm2022/lib/util/ui-animation.mjs +0 -146
  129. package/esm2022/lib/util/ui-constants.mjs +0 -21
  130. package/esm2022/ngx-edu-sharing-ui.mjs +0 -5
  131. package/esm2022/public-api.mjs +0 -2
@@ -1,25 +0,0 @@
1
- export const WORKFLOW_STATUS_UNCHECKED = {
2
- id: '100_unchecked',
3
- color: '#539DD5',
4
- hasReceiver: true,
5
- next: null,
6
- };
7
- export const WORKFLOW_STATUS_TO_CHECK = {
8
- id: '200_tocheck',
9
- color: '#3CB0B0',
10
- hasReceiver: true,
11
- next: null,
12
- };
13
- export const WORKFLOW_STATUS_HASFLAWS = {
14
- id: '300_hasflaws',
15
- color: '#D58553',
16
- hasReceiver: true,
17
- next: null,
18
- };
19
- export const WORKFLOW_STATUS_CHECKED = {
20
- id: '400_checked',
21
- color: '#42A053',
22
- hasReceiver: false,
23
- next: null,
24
- };
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3R5cGVzL3dvcmtmbG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUF1QjtJQUN6RCxFQUFFLEVBQUUsZUFBZTtJQUNuQixLQUFLLEVBQUUsU0FBUztJQUNoQixXQUFXLEVBQUUsSUFBSTtJQUNqQixJQUFJLEVBQUUsSUFBSTtDQUNiLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBdUI7SUFDeEQsRUFBRSxFQUFFLGFBQWE7SUFDakIsS0FBSyxFQUFFLFNBQVM7SUFDaEIsV0FBVyxFQUFFLElBQUk7SUFDakIsSUFBSSxFQUFFLElBQUk7Q0FDYixDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQXVCO0lBQ3hELEVBQUUsRUFBRSxjQUFjO0lBQ2xCLEtBQUssRUFBRSxTQUFTO0lBQ2hCLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLElBQUksRUFBRSxJQUFJO0NBQ2IsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUF1QjtJQUN2RCxFQUFFLEVBQUUsYUFBYTtJQUNqQixLQUFLLEVBQUUsU0FBUztJQUNoQixXQUFXLEVBQUUsS0FBSztJQUNsQixJQUFJLEVBQUUsSUFBSTtDQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93RGVmaW5pdGlvbiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb2xvcjogc3RyaW5nO1xuICAgIGhhc1JlY2VpdmVyOiBib29sZWFuO1xuICAgIG5leHQ6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY29uc3QgV09SS0ZMT1dfU1RBVFVTX1VOQ0hFQ0tFRDogV29ya2Zsb3dEZWZpbml0aW9uID0ge1xuICAgIGlkOiAnMTAwX3VuY2hlY2tlZCcsXG4gICAgY29sb3I6ICcjNTM5REQ1JyxcbiAgICBoYXNSZWNlaXZlcjogdHJ1ZSxcbiAgICBuZXh0OiBudWxsLFxufTtcbmV4cG9ydCBjb25zdCBXT1JLRkxPV19TVEFUVVNfVE9fQ0hFQ0s6IFdvcmtmbG93RGVmaW5pdGlvbiA9IHtcbiAgICBpZDogJzIwMF90b2NoZWNrJyxcbiAgICBjb2xvcjogJyMzQ0IwQjAnLFxuICAgIGhhc1JlY2VpdmVyOiB0cnVlLFxuICAgIG5leHQ6IG51bGwsXG59O1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1NUQVRVU19IQVNGTEFXUzogV29ya2Zsb3dEZWZpbml0aW9uID0ge1xuICAgIGlkOiAnMzAwX2hhc2ZsYXdzJyxcbiAgICBjb2xvcjogJyNENTg1NTMnLFxuICAgIGhhc1JlY2VpdmVyOiB0cnVlLFxuICAgIG5leHQ6IG51bGwsXG59O1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1NUQVRVU19DSEVDS0VEOiBXb3JrZmxvd0RlZmluaXRpb24gPSB7XG4gICAgaWQ6ICc0MDBfY2hlY2tlZCcsXG4gICAgY29sb3I6ICcjNDJBMDUzJyxcbiAgICBoYXNSZWNlaXZlcjogZmFsc2UsXG4gICAgbmV4dDogbnVsbCxcbn07XG5leHBvcnQgdHlwZSBXb3JrZmxvd0RlZmluaXRpb25TdGF0dXMgPSB7XG4gICAgY3VycmVudDogV29ya2Zsb3dEZWZpbml0aW9uO1xuICAgIGluaXRpYWw6IFdvcmtmbG93RGVmaW5pdGlvbjtcbn07XG4iXX0=
@@ -1,200 +0,0 @@
1
- import { isNumeric } from './isNumeric';
2
- export var RelativeMode;
3
- (function (RelativeMode) {
4
- RelativeMode[RelativeMode["off"] = 0] = "off";
5
- RelativeMode[RelativeMode["short"] = 1] = "short";
6
- RelativeMode[RelativeMode["medium"] = 2] = "medium";
7
- RelativeMode[RelativeMode["large"] = 3] = "large";
8
- RelativeMode[RelativeMode["all"] = 4] = "all";
9
- })(RelativeMode || (RelativeMode = {}));
10
- export class FormatOptions {
11
- constructor() {
12
- this.showDate = true;
13
- this.showAlwaysTime = false;
14
- this.showSeconds = false;
15
- // @Deprecated
16
- // this will be mapped to relativeLabels = MEDIUM
17
- // use relativeLabels instead
18
- this.useRelativeLabels = true;
19
- }
20
- }
21
- export class DateHelper {
22
- /**
23
- * Fill a date (day + month) string, e.g. 2 -> 02
24
- * @param date
25
- * @returns {string}
26
- */
27
- static fillDate(date) {
28
- if (date < 10)
29
- return '0' + date;
30
- return date + '';
31
- }
32
- /**
33
- * Convert date to a unix timestamp
34
- * @param date
35
- * @returns {number}
36
- */
37
- static convertDate(date) {
38
- return new Date(date).getTime();
39
- }
40
- /**
41
- * format a date with a given, fixed string
42
- * For consistency, we use the patterns from
43
- * https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
44
- * @param date
45
- * @param {string} format
46
- * @returns {string}
47
- */
48
- static formatDateByPattern(date, format) {
49
- if (!isNumeric(date)) {
50
- return date;
51
- }
52
- let dateObject = new Date(date * 1);
53
- format = format.replace('y', '' + dateObject.getFullYear());
54
- format = format.replace('M', '' + DateHelper.fillDate(dateObject.getMonth() + 1));
55
- format = format.replace('d', '' + DateHelper.fillDate(dateObject.getDate()));
56
- return format;
57
- }
58
- /**
59
- * Format a date for the current language
60
- */
61
- static formatDate(translation, date, options = new FormatOptions()) {
62
- try {
63
- if (options.useRelativeLabels && !options.relativeLabels) {
64
- options.relativeLabels = RelativeMode.medium;
65
- }
66
- if (date == null) {
67
- return null;
68
- }
69
- if (!isNumeric(date)) {
70
- date = Date.parse(date);
71
- }
72
- let dateObject = new Date(date * 1);
73
- let dateToday = new Date();
74
- let dateYesterday = new Date();
75
- dateYesterday.setDate(dateYesterday.getDate() - 1);
76
- let isToday = dateObject.toDateString() == dateToday.toDateString();
77
- let isYesterday = dateObject.toDateString() == dateYesterday.toDateString();
78
- let prefix = '';
79
- let timeDiff = (dateToday.getTime() - dateObject.getTime()) / 1000;
80
- let diffDays = Math.floor(timeDiff / (3600 * 24));
81
- let diffMonths = new Date(timeDiff * 1000).getMonth();
82
- let diffYears = new Date(timeDiff * 1000).getFullYear() - 1970;
83
- let addDate = true;
84
- let timeFormat = 'HH:mm';
85
- if (options.showSeconds) {
86
- timeFormat += ':ss';
87
- }
88
- if (timeDiff < 3600 * 6 && options.relativeLabels >= RelativeMode.short) {
89
- if (timeDiff < 90) {
90
- prefix = translation.instant('JUST_NOW', { seconds: timeDiff });
91
- }
92
- else if (timeDiff < 60 * 100) {
93
- prefix = translation.instant('MINUTES_AGO', {
94
- minutes: Math.round(timeDiff / 60),
95
- });
96
- }
97
- else {
98
- prefix = translation.instant('HOURS_AGO', {
99
- hours: Math.round(timeDiff / (60 * 60)),
100
- });
101
- }
102
- addDate = false;
103
- timeFormat = '';
104
- }
105
- else if (isToday && options.relativeLabels >= RelativeMode.short) {
106
- prefix = translation.instant('TODAY');
107
- addDate = false;
108
- }
109
- else if (isYesterday && options.relativeLabels >= RelativeMode.medium) {
110
- prefix = translation.instant('YESTERDAY');
111
- addDate = false;
112
- }
113
- else if ((diffDays < 6 && options.relativeLabels >= RelativeMode.medium) ||
114
- (diffDays < 45 && options.relativeLabels >= RelativeMode.large)) {
115
- prefix = translation.instant('DAYS_AGO', { days: diffDays });
116
- addDate = false;
117
- if (!options.showAlwaysTime)
118
- timeFormat = '';
119
- }
120
- else if (diffYears === 0 &&
121
- diffMonths < 12 &&
122
- options.relativeLabels >= RelativeMode.large) {
123
- prefix = translation.instant('MONTHS_AGO', { months: diffMonths });
124
- addDate = false;
125
- if (!options.showAlwaysTime)
126
- timeFormat = '';
127
- }
128
- else if (options.relativeLabels === RelativeMode.all) {
129
- prefix = translation.instant('YEARS_AGO', { years: diffYears });
130
- addDate = false;
131
- if (!options.showAlwaysTime)
132
- timeFormat = '';
133
- }
134
- else {
135
- if (!options.showAlwaysTime)
136
- timeFormat = '';
137
- }
138
- // ng2's dateformatter is super slow, but it doesn't matter, we just iterate it once :)
139
- //return dateFormat+time;
140
- let str = prefix;
141
- if (addDate) {
142
- if (translation.currentLang === 'en') {
143
- str +=
144
- dateObject.getFullYear() +
145
- '-' +
146
- DateHelper.fillDate(dateObject.getMonth() + 1) +
147
- '-' +
148
- DateHelper.fillDate(dateObject.getDate());
149
- }
150
- else {
151
- str +=
152
- DateHelper.fillDate(dateObject.getDate()) +
153
- '.' +
154
- DateHelper.fillDate(dateObject.getMonth() + 1) +
155
- '.' +
156
- dateObject.getFullYear();
157
- }
158
- //str += DateFormatter.format(dateObject, Translation.getLanguage(), dateFormat).trim();
159
- }
160
- if (options.showDate == false) {
161
- str = '';
162
- }
163
- // ie fixes, timeFormat not working
164
- if (timeFormat) {
165
- if (str)
166
- str += ', ';
167
- //let timeValue=dateObject.toLocaleTimeString(Translation.getLanguage());
168
- //let times=timeValue.split(":");
169
- str += timeFormat
170
- .replace('HH', DateHelper.fillDate(dateObject.getHours()))
171
- .replace('mm', DateHelper.fillDate(dateObject.getMinutes()))
172
- .replace('ss', DateHelper.fillDate(dateObject.getSeconds()));
173
- }
174
- return str;
175
- /*
176
- let dateString=prefix+" ";
177
- if(dateFormat!=""){
178
- dateString+=dateObject.toLocaleDateString(Translation.getLanguage())+" ";
179
- }
180
- if(time!=""){
181
- dateString+=dateObject.toLocaleTimeString(Translation.getLanguage());
182
- }
183
- return dateString;
184
- */
185
- }
186
- catch (e) {
187
- return date;
188
- }
189
- }
190
- static getDateFromDatepicker(date) {
191
- return new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000);
192
- }
193
- static getDateForNewFile() {
194
- return DateHelper.formatDate(null, new Date().getTime(), {
195
- showAlwaysTime: true,
196
- useRelativeLabels: false,
197
- });
198
- }
199
- }
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZUhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvdXRpbC9EYXRlSGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsTUFBTSxDQUFOLElBQVksWUFNWDtBQU5ELFdBQVksWUFBWTtJQUNwQiw2Q0FBRyxDQUFBO0lBQ0gsaURBQUssQ0FBQTtJQUNMLG1EQUFNLENBQUE7SUFDTixpREFBSyxDQUFBO0lBQ0wsNkNBQUcsQ0FBQTtBQUNQLENBQUMsRUFOVyxZQUFZLEtBQVosWUFBWSxRQU12QjtBQUNELE1BQU0sT0FBTyxhQUFhO0lBQTFCO1FBQ0ksYUFBUSxHQUFJLElBQUksQ0FBQztRQUNqQixtQkFBYyxHQUFJLEtBQUssQ0FBQztRQUN4QixnQkFBVyxHQUFJLEtBQUssQ0FBQztRQUNyQixjQUFjO1FBQ2QsaURBQWlEO1FBQ2pELDZCQUE2QjtRQUM3QixzQkFBaUIsR0FBSSxJQUFJLENBQUM7SUFFOUIsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLFVBQVU7SUFDbkI7Ozs7T0FJRztJQUNLLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBWTtRQUNoQyxJQUFJLElBQUksR0FBRyxFQUFFO1lBQUUsT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBUztRQUMvQixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQWtCLEVBQUUsTUFBYztRQUNoRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbkIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELElBQUksVUFBVSxHQUFHLElBQUksSUFBSSxDQUFFLElBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRCxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRixNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RSxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUNwQixXQUE2QixFQUM3QixJQUFrQixFQUNsQixVQUF5QixJQUFJLGFBQWEsRUFBRTtRQUU1QyxJQUFJLENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkQsT0FBTyxDQUFDLGNBQWMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO1lBQ2pELENBQUM7WUFDRCxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDZixPQUFPLElBQUksQ0FBQztZQUNoQixDQUFDO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNuQixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixDQUFDO1lBQ0QsSUFBSSxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUUsSUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hELElBQUksU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0IsSUFBSSxhQUFhLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMvQixhQUFhLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNuRCxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BFLElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDNUUsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksUUFBUSxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNuRSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xELElBQUksVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0RCxJQUFJLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQy9ELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztZQUNuQixJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUM7WUFDekIsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3RCLFVBQVUsSUFBSSxLQUFLLENBQUM7WUFDeEIsQ0FBQztZQUNELElBQUksUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLGNBQWMsSUFBSSxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3RFLElBQUksUUFBUSxHQUFHLEVBQUUsRUFBRSxDQUFDO29CQUNoQixNQUFNLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDcEUsQ0FBQztxQkFBTSxJQUFJLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUM7b0JBQzdCLE1BQU0sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTt3QkFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztxQkFDckMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7cUJBQU0sQ0FBQztvQkFDSixNQUFNLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7d0JBQ3RDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztxQkFDMUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDaEIsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNwQixDQUFDO2lCQUFNLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxjQUFjLElBQUksWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNqRSxNQUFNLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdEMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNwQixDQUFDO2lCQUFNLElBQUksV0FBVyxJQUFJLE9BQU8sQ0FBQyxjQUFjLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN0RSxNQUFNLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDMUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNwQixDQUFDO2lCQUFNLElBQ0gsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxjQUFjLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQztnQkFDL0QsQ0FBQyxRQUFRLEdBQUcsRUFBRSxJQUFJLE9BQU8sQ0FBQyxjQUFjLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUNqRSxDQUFDO2dCQUNDLE1BQU0sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RCxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWM7b0JBQUUsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNqRCxDQUFDO2lCQUFNLElBQ0gsU0FBUyxLQUFLLENBQUM7Z0JBQ2YsVUFBVSxHQUFHLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLGNBQWMsSUFBSSxZQUFZLENBQUMsS0FBSyxFQUM5QyxDQUFDO2dCQUNDLE1BQU0sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRSxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWM7b0JBQUUsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNqRCxDQUFDO2lCQUFNLElBQUksT0FBTyxDQUFDLGNBQWMsS0FBSyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3JELE1BQU0sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRSxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWM7b0JBQUUsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNqRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjO29CQUFFLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDakQsQ0FBQztZQUVELHVGQUF1RjtZQUN2Rix5QkFBeUI7WUFDekIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBQ2pCLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1YsSUFBSSxXQUFXLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNuQyxHQUFHO3dCQUNDLFVBQVUsQ0FBQyxXQUFXLEVBQUU7NEJBQ3hCLEdBQUc7NEJBQ0gsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDOzRCQUM5QyxHQUFHOzRCQUNILFVBQVUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ2xELENBQUM7cUJBQU0sQ0FBQztvQkFDSixHQUFHO3dCQUNDLFVBQVUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDOzRCQUN6QyxHQUFHOzRCQUNILFVBQVUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQzs0QkFDOUMsR0FBRzs0QkFDSCxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2pDLENBQUM7Z0JBQ0Qsd0ZBQXdGO1lBQzVGLENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQzVCLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDYixDQUFDO1lBQ0QsbUNBQW1DO1lBQ25DLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxHQUFHO29CQUFFLEdBQUcsSUFBSSxJQUFJLENBQUM7Z0JBRXJCLHlFQUF5RTtnQkFDekUsaUNBQWlDO2dCQUNqQyxHQUFHLElBQUksVUFBVTtxQkFDWixPQUFPLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7cUJBQ3pELE9BQU8sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztxQkFDM0QsT0FBTyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckUsQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDO1lBQ1g7Ozs7Ozs7OztRQVNKO1FBQ0EsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDVCxPQUFPLElBQVcsQ0FBQztRQUN2QixDQUFDO0lBQ0wsQ0FBQztJQUNELE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFVO1FBQ25DLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQjtRQUNwQixPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDckQsY0FBYyxFQUFFLElBQUk7WUFDcEIsaUJBQWlCLEVBQUUsS0FBSztTQUMzQixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBpc051bWVyaWMgfSBmcm9tICcuL2lzTnVtZXJpYyc7XG5leHBvcnQgZW51bSBSZWxhdGl2ZU1vZGUge1xuICAgIG9mZixcbiAgICBzaG9ydCxcbiAgICBtZWRpdW0sXG4gICAgbGFyZ2UsXG4gICAgYWxsLFxufVxuZXhwb3J0IGNsYXNzIEZvcm1hdE9wdGlvbnMge1xuICAgIHNob3dEYXRlPyA9IHRydWU7XG4gICAgc2hvd0Fsd2F5c1RpbWU/ID0gZmFsc2U7XG4gICAgc2hvd1NlY29uZHM/ID0gZmFsc2U7XG4gICAgLy8gQERlcHJlY2F0ZWRcbiAgICAvLyB0aGlzIHdpbGwgYmUgbWFwcGVkIHRvIHJlbGF0aXZlTGFiZWxzID0gTUVESVVNXG4gICAgLy8gdXNlIHJlbGF0aXZlTGFiZWxzIGluc3RlYWRcbiAgICB1c2VSZWxhdGl2ZUxhYmVscz8gPSB0cnVlO1xuICAgIHJlbGF0aXZlTGFiZWxzPzogUmVsYXRpdmVNb2RlO1xufVxuXG5leHBvcnQgY2xhc3MgRGF0ZUhlbHBlciB7XG4gICAgLyoqXG4gICAgICogRmlsbCBhIGRhdGUgKGRheSArIG1vbnRoKSBzdHJpbmcsIGUuZy4gMiAtPiAwMlxuICAgICAqIEBwYXJhbSBkYXRlXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBmaWxsRGF0ZShkYXRlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZGF0ZSA8IDEwKSByZXR1cm4gJzAnICsgZGF0ZTtcbiAgICAgICAgcmV0dXJuIGRhdGUgKyAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGRhdGUgdG8gYSB1bml4IHRpbWVzdGFtcFxuICAgICAqIEBwYXJhbSBkYXRlXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNvbnZlcnREYXRlKGRhdGU6IGFueSkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZSkuZ2V0VGltZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGZvcm1hdCBhIGRhdGUgd2l0aCBhIGdpdmVuLCBmaXhlZCBzdHJpbmdcbiAgICAgKiBGb3IgY29uc2lzdGVuY3ksIHdlIHVzZSB0aGUgcGF0dGVybnMgZnJvbVxuICAgICAqIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS83L2RvY3MvYXBpL2phdmEvdGV4dC9TaW1wbGVEYXRlRm9ybWF0Lmh0bWxcbiAgICAgKiBAcGFyYW0gZGF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZm9ybWF0RGF0ZUJ5UGF0dGVybihkYXRlOiBudW1iZXIgfCBhbnksIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFpc051bWVyaWMoZGF0ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkYXRlT2JqZWN0ID0gbmV3IERhdGUoKGRhdGUgYXMgbnVtYmVyKSAqIDEpO1xuICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgneScsICcnICsgZGF0ZU9iamVjdC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoJ00nLCAnJyArIERhdGVIZWxwZXIuZmlsbERhdGUoZGF0ZU9iamVjdC5nZXRNb250aCgpICsgMSkpO1xuICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgnZCcsICcnICsgRGF0ZUhlbHBlci5maWxsRGF0ZShkYXRlT2JqZWN0LmdldERhdGUoKSkpO1xuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcm1hdCBhIGRhdGUgZm9yIHRoZSBjdXJyZW50IGxhbmd1YWdlXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmb3JtYXREYXRlKFxuICAgICAgICB0cmFuc2xhdGlvbjogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgZGF0ZTogbnVtYmVyIHwgYW55LFxuICAgICAgICBvcHRpb25zOiBGb3JtYXRPcHRpb25zID0gbmV3IEZvcm1hdE9wdGlvbnMoKSxcbiAgICApOiBzdHJpbmcge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudXNlUmVsYXRpdmVMYWJlbHMgJiYgIW9wdGlvbnMucmVsYXRpdmVMYWJlbHMpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnJlbGF0aXZlTGFiZWxzID0gUmVsYXRpdmVNb2RlLm1lZGl1bTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNOdW1lcmljKGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IERhdGUucGFyc2UoZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZGF0ZU9iamVjdCA9IG5ldyBEYXRlKChkYXRlIGFzIG51bWJlcikgKiAxKTtcbiAgICAgICAgICAgIGxldCBkYXRlVG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgbGV0IGRhdGVZZXN0ZXJkYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgZGF0ZVllc3RlcmRheS5zZXREYXRlKGRhdGVZZXN0ZXJkYXkuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICBsZXQgaXNUb2RheSA9IGRhdGVPYmplY3QudG9EYXRlU3RyaW5nKCkgPT0gZGF0ZVRvZGF5LnRvRGF0ZVN0cmluZygpO1xuICAgICAgICAgICAgbGV0IGlzWWVzdGVyZGF5ID0gZGF0ZU9iamVjdC50b0RhdGVTdHJpbmcoKSA9PSBkYXRlWWVzdGVyZGF5LnRvRGF0ZVN0cmluZygpO1xuICAgICAgICAgICAgbGV0IHByZWZpeCA9ICcnO1xuICAgICAgICAgICAgbGV0IHRpbWVEaWZmID0gKGRhdGVUb2RheS5nZXRUaW1lKCkgLSBkYXRlT2JqZWN0LmdldFRpbWUoKSkgLyAxMDAwO1xuICAgICAgICAgICAgbGV0IGRpZmZEYXlzID0gTWF0aC5mbG9vcih0aW1lRGlmZiAvICgzNjAwICogMjQpKTtcbiAgICAgICAgICAgIGxldCBkaWZmTW9udGhzID0gbmV3IERhdGUodGltZURpZmYgKiAxMDAwKS5nZXRNb250aCgpO1xuICAgICAgICAgICAgbGV0IGRpZmZZZWFycyA9IG5ldyBEYXRlKHRpbWVEaWZmICogMTAwMCkuZ2V0RnVsbFllYXIoKSAtIDE5NzA7XG4gICAgICAgICAgICBsZXQgYWRkRGF0ZSA9IHRydWU7XG4gICAgICAgICAgICBsZXQgdGltZUZvcm1hdCA9ICdISDptbSc7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zaG93U2Vjb25kcykge1xuICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgKz0gJzpzcyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGltZURpZmYgPCAzNjAwICogNiAmJiBvcHRpb25zLnJlbGF0aXZlTGFiZWxzID49IFJlbGF0aXZlTW9kZS5zaG9ydCkge1xuICAgICAgICAgICAgICAgIGlmICh0aW1lRGlmZiA8IDkwKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHRyYW5zbGF0aW9uLmluc3RhbnQoJ0pVU1RfTk9XJywgeyBzZWNvbmRzOiB0aW1lRGlmZiB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVEaWZmIDwgNjAgKiAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gdHJhbnNsYXRpb24uaW5zdGFudCgnTUlOVVRFU19BR08nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW51dGVzOiBNYXRoLnJvdW5kKHRpbWVEaWZmIC8gNjApLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSB0cmFuc2xhdGlvbi5pbnN0YW50KCdIT1VSU19BR08nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBob3VyczogTWF0aC5yb3VuZCh0aW1lRGlmZiAvICg2MCAqIDYwKSksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGREYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGltZUZvcm1hdCA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1RvZGF5ICYmIG9wdGlvbnMucmVsYXRpdmVMYWJlbHMgPj0gUmVsYXRpdmVNb2RlLnNob3J0KSB7XG4gICAgICAgICAgICAgICAgcHJlZml4ID0gdHJhbnNsYXRpb24uaW5zdGFudCgnVE9EQVknKTtcbiAgICAgICAgICAgICAgICBhZGREYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzWWVzdGVyZGF5ICYmIG9wdGlvbnMucmVsYXRpdmVMYWJlbHMgPj0gUmVsYXRpdmVNb2RlLm1lZGl1bSkge1xuICAgICAgICAgICAgICAgIHByZWZpeCA9IHRyYW5zbGF0aW9uLmluc3RhbnQoJ1lFU1RFUkRBWScpO1xuICAgICAgICAgICAgICAgIGFkZERhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgKGRpZmZEYXlzIDwgNiAmJiBvcHRpb25zLnJlbGF0aXZlTGFiZWxzID49IFJlbGF0aXZlTW9kZS5tZWRpdW0pIHx8XG4gICAgICAgICAgICAgICAgKGRpZmZEYXlzIDwgNDUgJiYgb3B0aW9ucy5yZWxhdGl2ZUxhYmVscyA+PSBSZWxhdGl2ZU1vZGUubGFyZ2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBwcmVmaXggPSB0cmFuc2xhdGlvbi5pbnN0YW50KCdEQVlTX0FHTycsIHsgZGF5czogZGlmZkRheXMgfSk7XG4gICAgICAgICAgICAgICAgYWRkRGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5zaG93QWx3YXlzVGltZSkgdGltZUZvcm1hdCA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBkaWZmWWVhcnMgPT09IDAgJiZcbiAgICAgICAgICAgICAgICBkaWZmTW9udGhzIDwgMTIgJiZcbiAgICAgICAgICAgICAgICBvcHRpb25zLnJlbGF0aXZlTGFiZWxzID49IFJlbGF0aXZlTW9kZS5sYXJnZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcHJlZml4ID0gdHJhbnNsYXRpb24uaW5zdGFudCgnTU9OVEhTX0FHTycsIHsgbW9udGhzOiBkaWZmTW9udGhzIH0pO1xuICAgICAgICAgICAgICAgIGFkZERhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuc2hvd0Fsd2F5c1RpbWUpIHRpbWVGb3JtYXQgPSAnJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5yZWxhdGl2ZUxhYmVscyA9PT0gUmVsYXRpdmVNb2RlLmFsbCkge1xuICAgICAgICAgICAgICAgIHByZWZpeCA9IHRyYW5zbGF0aW9uLmluc3RhbnQoJ1lFQVJTX0FHTycsIHsgeWVhcnM6IGRpZmZZZWFycyB9KTtcbiAgICAgICAgICAgICAgICBhZGREYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnNob3dBbHdheXNUaW1lKSB0aW1lRm9ybWF0ID0gJyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5zaG93QWx3YXlzVGltZSkgdGltZUZvcm1hdCA9ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBuZzIncyBkYXRlZm9ybWF0dGVyIGlzIHN1cGVyIHNsb3csIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciwgd2UganVzdCBpdGVyYXRlIGl0IG9uY2UgOilcbiAgICAgICAgICAgIC8vcmV0dXJuIGRhdGVGb3JtYXQrdGltZTtcbiAgICAgICAgICAgIGxldCBzdHIgPSBwcmVmaXg7XG4gICAgICAgICAgICBpZiAoYWRkRGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGlvbi5jdXJyZW50TGFuZyA9PT0gJ2VuJykge1xuICAgICAgICAgICAgICAgICAgICBzdHIgKz1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVPYmplY3QuZ2V0RnVsbFllYXIoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnLScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZUhlbHBlci5maWxsRGF0ZShkYXRlT2JqZWN0LmdldE1vbnRoKCkgKyAxKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnLScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZUhlbHBlci5maWxsRGF0ZShkYXRlT2JqZWN0LmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9XG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRlSGVscGVyLmZpbGxEYXRlKGRhdGVPYmplY3QuZ2V0RGF0ZSgpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZUhlbHBlci5maWxsRGF0ZShkYXRlT2JqZWN0LmdldE1vbnRoKCkgKyAxKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZU9iamVjdC5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvL3N0ciArPSBEYXRlRm9ybWF0dGVyLmZvcm1hdChkYXRlT2JqZWN0LCBUcmFuc2xhdGlvbi5nZXRMYW5ndWFnZSgpLCBkYXRlRm9ybWF0KS50cmltKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zaG93RGF0ZSA9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHN0ciA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWUgZml4ZXMsIHRpbWVGb3JtYXQgbm90IHdvcmtpbmdcbiAgICAgICAgICAgIGlmICh0aW1lRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0cikgc3RyICs9ICcsICc7XG5cbiAgICAgICAgICAgICAgICAvL2xldCB0aW1lVmFsdWU9ZGF0ZU9iamVjdC50b0xvY2FsZVRpbWVTdHJpbmcoVHJhbnNsYXRpb24uZ2V0TGFuZ3VhZ2UoKSk7XG4gICAgICAgICAgICAgICAgLy9sZXQgdGltZXM9dGltZVZhbHVlLnNwbGl0KFwiOlwiKTtcbiAgICAgICAgICAgICAgICBzdHIgKz0gdGltZUZvcm1hdFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnSEgnLCBEYXRlSGVscGVyLmZpbGxEYXRlKGRhdGVPYmplY3QuZ2V0SG91cnMoKSkpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdtbScsIERhdGVIZWxwZXIuZmlsbERhdGUoZGF0ZU9iamVjdC5nZXRNaW51dGVzKCkpKVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnc3MnLCBEYXRlSGVscGVyLmZpbGxEYXRlKGRhdGVPYmplY3QuZ2V0U2Vjb25kcygpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICAgICAgLypcbiAgICAgIGxldCBkYXRlU3RyaW5nPXByZWZpeCtcIiBcIjtcbiAgICAgIGlmKGRhdGVGb3JtYXQhPVwiXCIpe1xuICAgICAgICBkYXRlU3RyaW5nKz1kYXRlT2JqZWN0LnRvTG9jYWxlRGF0ZVN0cmluZyhUcmFuc2xhdGlvbi5nZXRMYW5ndWFnZSgpKStcIiBcIjtcbiAgICAgIH1cbiAgICAgIGlmKHRpbWUhPVwiXCIpe1xuICAgICAgICBkYXRlU3RyaW5nKz1kYXRlT2JqZWN0LnRvTG9jYWxlVGltZVN0cmluZyhUcmFuc2xhdGlvbi5nZXRMYW5ndWFnZSgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRlU3RyaW5nO1xuICAgICAgKi9cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGUgYXMgYW55O1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBnZXREYXRlRnJvbURhdGVwaWNrZXIoZGF0ZTogRGF0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MCAqIDEwMDApO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREYXRlRm9yTmV3RmlsZSgpIHtcbiAgICAgICAgcmV0dXJuIERhdGVIZWxwZXIuZm9ybWF0RGF0ZShudWxsLCBuZXcgRGF0ZSgpLmdldFRpbWUoKSwge1xuICAgICAgICAgICAgc2hvd0Fsd2F5c1RpbWU6IHRydWUsXG4gICAgICAgICAgICB1c2VSZWxhdGl2ZUxhYmVsczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,278 +0,0 @@
1
- /**
2
- * Created by Torsten on 28.02.2017.
3
- */
4
- export class VCard {
5
- static { this.TYPE_PERSON = 0; }
6
- static { this.TYPE_ORG = 1; }
7
- constructor(vcard = null) {
8
- // was the vcard altered
9
- this.isDirty = false;
10
- if (vcard) {
11
- this.lines = vcard.split('\n');
12
- // this.remove("FN");
13
- if (!this.get('BEGIN')) {
14
- this.lines.splice(0, 0, 'BEGIN:VCARD');
15
- }
16
- if (!this.get('VERSION')) {
17
- this.lines.splice(1, 0, 'VERSION:3.0');
18
- }
19
- if (!this.get('END')) {
20
- this.lines.splice(this.lines.length, 0, 'END:VCARD');
21
- }
22
- this.isDirty = true;
23
- }
24
- else {
25
- this.lines = [];
26
- this.lines.push('BEGIN:VCARD');
27
- this.lines.push('VERSION:3.0');
28
- this.lines.push('END:VCARD');
29
- this.isDirty = false;
30
- }
31
- }
32
- /**
33
- * returns true if this vcard seems to have valid data
34
- * @param {string} data
35
- */
36
- isValid() {
37
- // return this.lines!=null && this.lines.length;
38
- return (this.givenname ||
39
- this.surname ||
40
- this.org ||
41
- this.street ||
42
- this.city ||
43
- this.zip ||
44
- this.country);
45
- }
46
- set givenname(data) {
47
- this.set('Givenname', data);
48
- }
49
- set surname(data) {
50
- this.set('Surname', data);
51
- }
52
- set title(data) {
53
- this.set('TITLE', data);
54
- }
55
- set org(data) {
56
- this.set('ORG', data);
57
- }
58
- set orgPhone(data) {
59
- this.set('TEL;TYPE=WORK,VOICE', data);
60
- }
61
- set url(data) {
62
- this.set('URL', data);
63
- }
64
- set email(data) {
65
- this.set('EMAIL;TYPE=PREF,INTERNET', data);
66
- }
67
- set uid(data) {
68
- this.set('UID:urn:uuid', data);
69
- }
70
- set orcid(data) {
71
- this.set('X-ORCID', data);
72
- }
73
- set gnduri(data) {
74
- this.set('X-GND-URI', data);
75
- }
76
- set ror(data) {
77
- this.set('X-ROR', data);
78
- }
79
- set wikidata(data) {
80
- this.set('X-Wikidata', data);
81
- }
82
- set street(data) {
83
- this.set('ADR;TYPE=intl,postal,parcel,work', data, 2);
84
- }
85
- set city(data) {
86
- this.set('ADR;TYPE=intl,postal,parcel,work', data, 3);
87
- }
88
- set region(data) {
89
- this.set('ADR;TYPE=intl,postal,parcel,work', data, 4);
90
- }
91
- set zip(data) {
92
- this.set('ADR;TYPE=intl,postal,parcel,work', data, 5);
93
- }
94
- set country(data) {
95
- this.set('ADR;TYPE=intl,postal,parcel,work', data, 6);
96
- }
97
- set contributeDate(data) {
98
- this.set('X-ES-LOM-CONTRIBUTE-DATE', data);
99
- }
100
- get givenname() {
101
- return this.get('Givenname');
102
- }
103
- get surname() {
104
- return this.get('Surname');
105
- }
106
- get orcid() {
107
- return this.get('X-ORCID');
108
- }
109
- get gnduri() {
110
- return this.get('X-GND-URI');
111
- }
112
- get ror() {
113
- return this.get('X-ROR');
114
- }
115
- get wikidata() {
116
- return this.get('X-Wikidata');
117
- }
118
- get title() {
119
- return this.get('TITLE');
120
- }
121
- get org() {
122
- return this.get('ORG');
123
- }
124
- get contributeDate() {
125
- const string = this.get('X-ES-LOM-CONTRIBUTE-DATE');
126
- if (string)
127
- return string.split('T')[0];
128
- return string;
129
- }
130
- get url() {
131
- return this.get('URL');
132
- }
133
- get orgPhone() {
134
- return this.get('TEL;TYPE=WORK,VOICE');
135
- }
136
- get email() {
137
- return this.get('EMAIL;TYPE=PREF,INTERNET');
138
- }
139
- get uid() {
140
- return this.get('UID:urn:uuid');
141
- }
142
- get street() {
143
- return this.get('ADR;TYPE=intl,postal,parcel,work', 2);
144
- }
145
- get city() {
146
- return this.get('ADR;TYPE=intl,postal,parcel,work', 3);
147
- }
148
- get region() {
149
- return this.get('ADR;TYPE=intl,postal,parcel,work', 4);
150
- }
151
- get zip() {
152
- return this.get('ADR;TYPE=intl,postal,parcel,work', 5);
153
- }
154
- get country() {
155
- return this.get('ADR;TYPE=intl,postal,parcel,work', 6);
156
- }
157
- toVCardString() {
158
- // unaltered -> so return a null value
159
- if (!this.isDirty)
160
- return null;
161
- if (this.get('Givenname') || this.get('Surname'))
162
- this.set('FN', this.get('Givenname', -1, '') + ' ' + this.get('Surname', -1, ''));
163
- return this.lines.join('\n');
164
- }
165
- getDisplayName() {
166
- const string = (this.title ?? '') + ' ' + (this.givenname ?? '') + ' ' + (this.surname ?? '');
167
- if (string.trim() === '') {
168
- return this.org || this.get('FN') || '';
169
- }
170
- return string;
171
- }
172
- get(key, splitIndex = -1, fallback = null) {
173
- if (key == 'Surname') {
174
- splitIndex = 0;
175
- key = 'N';
176
- }
177
- if (key == 'Givenname') {
178
- splitIndex = 1;
179
- key = 'N';
180
- }
181
- for (let line of this.lines) {
182
- line = line.trim();
183
- if (line.startsWith(key + ':')) {
184
- const value = line.substring(key.length + 1).trim();
185
- if (splitIndex != -1)
186
- return this.deEscape(value.split(';')[splitIndex]);
187
- return this.deEscape(value);
188
- }
189
- }
190
- return fallback;
191
- }
192
- remove(key) {
193
- for (let i = 0; i < this.lines.length; i++) {
194
- if (this.lines[i].startsWith(key + ':')) {
195
- this.lines.splice(i, 1);
196
- return true;
197
- }
198
- }
199
- return false;
200
- }
201
- set(key, value, splitIndex = -1) {
202
- // no value and empty vcard -> do nothing
203
- if (!this.isDirty && !value)
204
- return;
205
- if (key == 'Surname') {
206
- splitIndex = 0;
207
- key = 'N';
208
- }
209
- if (key == 'Givenname') {
210
- splitIndex = 1;
211
- key = 'N';
212
- }
213
- let i = 0;
214
- for (let line of this.lines) {
215
- line = line.trim();
216
- if (line.startsWith(key + ':')) {
217
- let lineValue = line.substring(key.length + 1).trim();
218
- if (splitIndex != -1) {
219
- const split = lineValue.split(';');
220
- split[splitIndex] = this.escape(value);
221
- lineValue = split.join(';');
222
- }
223
- else {
224
- lineValue = this.escape(value);
225
- }
226
- this.lines[i] = line.substring(0, key.length + 1) + lineValue;
227
- return;
228
- }
229
- i++;
230
- }
231
- let lineValue = this.escape(value);
232
- if (splitIndex >= 0) {
233
- lineValue = '';
234
- while (lineValue.length < splitIndex)
235
- lineValue += ';';
236
- lineValue += this.escape(value);
237
- }
238
- this.lines.splice(this.getNextLine(), 0, key + ':' + lineValue);
239
- this.isDirty = true;
240
- }
241
- getNextLine() {
242
- let i = 0;
243
- for (const line of this.lines) {
244
- if (line.trim() == 'END:VCARD')
245
- return i - 1;
246
- i++;
247
- }
248
- return this.lines.length - 1;
249
- }
250
- deEscape(value) {
251
- if (value == null)
252
- return '';
253
- return value.replace(/\\\\/g, '\\').replace(/\\,/g, ',');
254
- }
255
- escape(value) {
256
- if (value == null)
257
- return '';
258
- return value.replace(/\\/g, '\\\\').replace(/,/g, '\\,').replace(/;/g, ' ');
259
- }
260
- copy() {
261
- return new VCard(this.toVCardString());
262
- }
263
- /**
264
- * Apply all data from an other vcard to this object
265
- * @param other
266
- */
267
- apply(other) {
268
- this.lines = other.lines;
269
- }
270
- getType() {
271
- return this.isValid()
272
- ? this.givenname || this.surname
273
- ? VCard.TYPE_PERSON
274
- : VCard.TYPE_ORG
275
- : VCard.TYPE_PERSON;
276
- }
277
- }
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVkNhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3V0aWwvVkNhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxNQUFNLE9BQU8sS0FBSzthQUNBLGdCQUFXLEdBQUcsQ0FBQyxBQUFKLENBQUs7YUFDaEIsYUFBUSxHQUFHLENBQUMsQUFBSixDQUFLO0lBSTNCLFlBQVksUUFBZ0IsSUFBSTtRQUhoQyx3QkFBd0I7UUFDaEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUdwQixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLHFCQUFxQjtZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDekQsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxD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YTtRQUN4QixJQUFJLEtBQUssSUFBSSxJQUFJO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDN0IsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVNLElBQUk7UUFDUCxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsS0FBWTtRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU87Z0JBQzVCLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVztnQkFDbkIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQ3BCLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZWQgYnkgVG9yc3RlbiBvbiAyOC4wMi4yMDE3LlxuICovXG5cbmV4cG9ydCBjbGFzcyBWQ2FyZCB7XG4gICAgcHVibGljIHN0YXRpYyBUWVBFX1BFUlNPTiA9IDA7XG4gICAgcHVibGljIHN0YXRpYyBUWVBFX09SRyA9IDE7XG4gICAgLy8gd2FzIHRoZSB2Y2FyZCBhbHRlcmVkXG4gICAgcHJpdmF0ZSBpc0RpcnR5ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBsaW5lczogc3RyaW5nW107XG4gICAgY29uc3RydWN0b3IodmNhcmQ6IHN0cmluZyA9IG51bGwpIHtcbiAgICAgICAgaWYgKHZjYXJkKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmVzID0gdmNhcmQuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgLy8gdGhpcy5yZW1vdmUoXCJGTlwiKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5nZXQoJ0JFR0lOJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVzLnNwbGljZSgwLCAwLCAnQkVHSU46VkNBUkQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5nZXQoJ1ZFUlNJT04nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGluZXMuc3BsaWNlKDEsIDAsICdWRVJTSU9OOjMuMCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmdldCgnRU5EJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVzLnNwbGljZSh0aGlzLmxpbmVzLmxlbmd0aCwgMCwgJ0VORDpWQ0FSRCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGluZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMubGluZXMucHVzaCgnQkVHSU46VkNBUkQnKTtcbiAgICAgICAgICAgIHRoaXMubGluZXMucHVzaCgnVkVSU0lPTjozLjAnKTtcbiAgICAgICAgICAgIHRoaXMubGluZXMucHVzaCgnRU5EOlZDQVJEJyk7XG4gICAgICAgICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgdHJ1ZSBpZiB0aGlzIHZjYXJkIHNlZW1zIHRvIGhhdmUgdmFsaWQgZGF0YVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhXG4gICAgICovXG4gICAgcHVibGljIGlzVmFsaWQoKSB7XG4gICAgICAgIC8vIHJldHVybiB0aGlzLmxpbmVzIT1udWxsICYmIHRoaXMubGluZXMubGVuZ3RoO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5naXZlbm5hbWUgfHxcbiAgICAgICAgICAgIHRoaXMuc3VybmFtZSB8fFxuICAgICAgICAgICAgdGhpcy5vcmcgfHxcbiAgICAgICAgICAgIHRoaXMuc3RyZWV0IHx8XG4gICAgICAgICAgICB0aGlzLmNpdHkgfHxcbiAgICAgICAgICAgIHRoaXMuemlwIHx8XG4gICAgICAgICAgICB0aGlzLmNvdW50cnlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcHVibGljIHNldCBnaXZlbm5hbWUoZGF0YTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KCdHaXZlbm5hbWUnLCBkYXRhKTtcbiAgICB9XG4gICAgcHVibGljIHNldCBzdXJuYW1lKGRhdGE6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCgnU3VybmFtZScsIGRhdGEpO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHRpdGxlKGRhdGE6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCgnVElUTEUnLCBkYXRhKTtcbiAgICB9XG4gICAgcHVibGljIHNldCBvcmcoZGF0YTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KCdPUkcnLCBkYXRhKTtcbiAgICB9XG4gICAgcHVibGljIHNldCBvcmdQaG9uZShkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoJ1RFTDtUWVBFPVdPUkssVk9JQ0UnLCBkYXRhKTtcbiAgICB9XG4gICAgcHVibGljIHNldCB1cmwoZGF0YTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KCdVUkwnLCBkYXRhKTtcbiAgICB9XG4gICAgcHVibGljIHNldCBlbWFpbChkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoJ0VNQUlMO1RZUEU9UFJFRixJTlRFUk5FVCcsIGRhdGEpO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHVpZChkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoJ1VJRDp1cm46dXVpZCcsIGRhdGEpO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IG9yY2lkKGRhdGE6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCgnWC1PUkNJRCcsIGRhdGEpO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGduZHVyaShkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoJ1gtR05ELVVSSScsIGRhdGEpO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHJvcihkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoJ1gtUk9SJywgZGF0YSk7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgd2lraWRhdGEoZGF0YTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KCdYLVdpa2lkYXRhJywgZGF0YSk7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgc3RyZWV0KGRhdGE6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCgnQURSO1RZUEU9aW50bCxwb3N0YWwscGFyY2VsLHdvcmsnLCBkYXRhLCAyKTtcbiAgICB9XG4gICAgcHVibGljIHNldCBjaXR5KGRhdGE6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCgnQURSO1RZUEU9aW50bCxwb3N0YWwscGFyY2VsLHdvcmsnLCBkYXRhLCAzKTtcbiAgICB9XG4gICAgcHVibGljIHNldCByZWdpb24oZGF0YTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KCdBRFI7VFlQRT1pbnRsLHBvc3RhbCxwYXJjZWwsd29yaycsIGRhdGEsIDQpO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHppcChkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoJ0FEUjtUWVBFPWludGwscG9zdGFsLHBhcmNlbCx3b3JrJywgZGF0YSwgNSk7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgY291bnRyeShkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoJ0FEUjtUWVBFPWludGwscG9zdGFsLHBhcmNlbCx3b3JrJywgZGF0YSwgNik7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgY29udHJpYnV0ZURhdGUoZGF0YTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KCdYLUVTLUxPTS1DT05UUklCVVRFLURBVEUnLCBkYXRhKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBnaXZlbm5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnR2l2ZW5uYW1lJyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgc3VybmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdTdXJuYW1lJyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgb3JjaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnWC1PUkNJRCcpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGduZHVyaSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdYLUdORC1VUkknKTtcbiAgICB9XG4gICAgcHVibGljIGdldCByb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnWC1ST1InKTtcbiAgICB9XG4gICAgcHVibGljIGdldCB3aWtpZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdYLVdpa2lkYXRhJyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnVElUTEUnKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBvcmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnT1JHJyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgY29udHJpYnV0ZURhdGUoKSB7XG4gICAgICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0KCdYLUVTLUxPTS1DT05UUklCVVRFLURBVEUnKTtcbiAgICAgICAgaWYgKHN0cmluZykgcmV0dXJuIHN0cmluZy5zcGxpdCgnVCcpWzBdO1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHVybCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdVUkwnKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBvcmdQaG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdURUw7VFlQRT1XT1JLLFZPSUNFJyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgZW1haWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnRU1BSUw7VFlQRT1QUkVGLElOVEVSTkVUJyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgdWlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ1VJRDp1cm46dXVpZCcpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHN0cmVldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdBRFI7VFlQRT1pbnRsLHBvc3RhbCxwYXJjZWwsd29yaycsIDIpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGNpdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnQURSO1RZUEU9aW50bCxwb3N0YWwscGFyY2VsLHdvcmsnLCAzKTtcbiAgICB9XG4gICAgcHVibGljIGdldCByZWdpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnQURSO1RZUEU9aW50bCxwb3N0YWwscGFyY2VsLHdvcmsnLCA0KTtcbiAgICB9XG4gICAgcHVibGljIGdldCB6aXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnQURSO1RZUEU9aW50bCxwb3N0YWwscGFyY2VsLHdvcmsnLCA1KTtcbiAgICB9XG4gICAgcHVibGljIGdldCBjb3VudHJ5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ0FEUjtUWVBFPWludGwscG9zdGFsLHBhcmNlbCx3b3JrJywgNik7XG4gICAgfVxuICAgIHB1YmxpYyB0b1ZDYXJkU3RyaW5nKCkge1xuICAgICAgICAvLyB1bmFsdGVyZWQgLT4gc28gcmV0dXJuIGEgbnVsbCB2YWx1ZVxuICAgICAgICBpZiAoIXRoaXMuaXNEaXJ0eSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICh0aGlzLmdldCgnR2l2ZW5uYW1lJykgfHwgdGhpcy5nZXQoJ1N1cm5hbWUnKSlcbiAgICAgICAgICAgIHRoaXMuc2V0KCdGTicsIHRoaXMuZ2V0KCdHaXZlbm5hbWUnLCAtMSwgJycpICsgJyAnICsgdGhpcy5nZXQoJ1N1cm5hbWUnLCAtMSwgJycpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubGluZXMuam9pbignXFxuJyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXREaXNwbGF5TmFtZSgpIHtcbiAgICAgICAgY29uc3Qgc3RyaW5nID1cbiAgICAgICAgICAgICh0aGlzLnRpdGxlID8/ICcnKSArICcgJyArICh0aGlzLmdpdmVubmFtZSA/PyAnJykgKyAnICcgKyAodGhpcy5zdXJuYW1lID8/ICcnKTtcbiAgICAgICAgaWYgKHN0cmluZy50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcmcgfHwgdGhpcy5nZXQoJ0ZOJykgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9XG4gICAgcHVibGljIGdldChrZXk6IHN0cmluZywgc3BsaXRJbmRleCA9IC0xLCBmYWxsYmFjazogc3RyaW5nID0gbnVsbCkge1xuICAgICAgICBpZiAoa2V5ID09ICdTdXJuYW1lJykge1xuICAgICAgICAgICAgc3BsaXRJbmRleCA9IDA7XG4gICAgICAgICAgICBrZXkgPSAnTic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PSAnR2l2ZW5uYW1lJykge1xuICAgICAgICAgICAgc3BsaXRJbmRleCA9IDE7XG4gICAgICAgICAgICBrZXkgPSAnTic7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgbGluZSBvZiB0aGlzLmxpbmVzKSB7XG4gICAgICAgICAgICBsaW5lID0gbGluZS50cmltKCk7XG4gICAgICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKGtleSArICc6JykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGxpbmUuc3Vic3RyaW5nKGtleS5sZW5ndGggKyAxKS50cmltKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNwbGl0SW5kZXggIT0gLTEpIHJldHVybiB0aGlzLmRlRXNjYXBlKHZhbHVlLnNwbGl0KCc7Jylbc3BsaXRJbmRleF0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlRXNjYXBlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfVxuICAgIHB1YmxpYyByZW1vdmUoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5saW5lc1tpXS5zdGFydHNXaXRoKGtleSArICc6JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHNwbGl0SW5kZXggPSAtMSkge1xuICAgICAgICAvLyBubyB2YWx1ZSBhbmQgZW1wdHkgdmNhcmQgLT4gZG8gbm90aGluZ1xuICAgICAgICBpZiAoIXRoaXMuaXNEaXJ0eSAmJiAhdmFsdWUpIHJldHVybjtcbiAgICAgICAgaWYgKGtleSA9PSAnU3VybmFtZScpIHtcbiAgICAgICAgICAgIHNwbGl0SW5kZXggPSAwO1xuICAgICAgICAgICAga2V5ID0gJ04nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT0gJ0dpdmVubmFtZScpIHtcbiAgICAgICAgICAgIHNwbGl0SW5kZXggPSAxO1xuICAgICAgICAgICAga2V5ID0gJ04nO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgZm9yIChsZXQgbGluZSBvZiB0aGlzLmxpbmVzKSB7XG4gICAgICAgICAgICBsaW5lID0gbGluZS50cmltKCk7XG4gICAgICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKGtleSArICc6JykpIHtcbiAgICAgICAgICAgICAgICBsZXQgbGluZVZhbHVlID0gbGluZS5zdWJzdHJpbmcoa2V5Lmxlbmd0aCArIDEpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBpZiAoc3BsaXRJbmRleCAhPSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGxpdCA9IGxpbmVWYWx1ZS5zcGxpdCgnOycpO1xuICAgICAgICAgICAgICAgICAgICBzcGxpdFtzcGxpdEluZGV4XSA9IHRoaXMuZXNjYXBlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgbGluZVZhbHVlID0gc3BsaXQuam9pbignOycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVWYWx1ZSA9IHRoaXMuZXNjYXBlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lc1tpXSA9IGxpbmUuc3Vic3RyaW5nKDAsIGtleS5sZW5ndGggKyAxKSArIGxpbmVWYWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxpbmVWYWx1ZSA9IHRoaXMuZXNjYXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHNwbGl0SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgbGluZVZhbHVlID0gJyc7XG4gICAgICAgICAgICB3aGlsZSAobGluZVZhbHVlLmxlbmd0aCA8IHNwbGl0SW5kZXgpIGxpbmVWYWx1ZSArPSAnOyc7XG4gICAgICAgICAgICBsaW5lVmFsdWUgKz0gdGhpcy5lc2NhcGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGluZXMuc3BsaWNlKHRoaXMuZ2V0TmV4dExpbmUoKSwgMCwga2V5ICsgJzonICsgbGluZVZhbHVlKTtcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5leHRMaW5lKCkge1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiB0aGlzLmxpbmVzKSB7XG4gICAgICAgICAgICBpZiAobGluZS50cmltKCkgPT0gJ0VORDpWQ0FSRCcpIHJldHVybiBpIC0gMTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5saW5lcy5sZW5ndGggLSAxO1xuICAgIH1cbiAgICBwcml2YXRlIGRlRXNjYXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiAnJztcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1xcXFxcXFxcL2csICdcXFxcJykucmVwbGFjZSgvXFxcXCwvZywgJywnKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBlc2NhcGUodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKS5yZXBsYWNlKC8sL2csICdcXFxcLCcpLnJlcGxhY2UoLzsvZywgJyAnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWQ2FyZCh0aGlzLnRvVkNhcmRTdHJpbmcoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbHkgYWxsIGRhdGEgZnJvbSBhbiBvdGhlciB2Y2FyZCB0byB0aGlzIG9iamVjdFxuICAgICAqIEBwYXJhbSBvdGhlclxuICAgICAqL1xuICAgIHB1YmxpYyBhcHBseShvdGhlcjogVkNhcmQpIHtcbiAgICAgICAgdGhpcy5saW5lcyA9IG90aGVyLmxpbmVzO1xuICAgIH1cblxuICAgIGdldFR5cGUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpXG4gICAgICAgICAgICA/IHRoaXMuZ2l2ZW5uYW1lIHx8IHRoaXMuc3VybmFtZVxuICAgICAgICAgICAgICAgID8gVkNhcmQuVFlQRV9QRVJTT05cbiAgICAgICAgICAgICAgICA6IFZDYXJkLlRZUEVfT1JHXG4gICAgICAgICAgICA6IFZDYXJkLlRZUEVfUEVSU09OO1xuICAgIH1cbn1cbiJdfQ==