@sbb-esta/lyne-elements-experimental 0.53.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{constants-ClrwyPF-.js → constants-DSR8hPvP.js} +10 -6
- package/core/datetime.js +65 -72
- package/core/timetable/timetable-helper.d.ts +7 -3
- package/core/timetable/timetable-helper.d.ts.map +1 -1
- package/custom-elements.json +8 -26
- package/development/{constants-D72r1E-c.js → constants-BMGwMkN3.js} +10 -2
- package/development/core/datetime.js +4 -11
- package/development/core/timetable/timetable-helper.d.ts +7 -3
- package/development/core/timetable/timetable-helper.d.ts.map +1 -1
- package/development/differenceInMinutes-DHtPDiUE.js +30 -0
- package/development/{format-BOXfsJCN.js → format-DkbylFCM.js} +3 -3
- package/development/{isValid-YTpbhEHG.js → isValid-BVccOlli.js} +2 -10
- package/development/journey-summary.js +9 -3
- package/development/pearl-chain/pearl-chain.d.ts.map +1 -1
- package/development/pearl-chain/pearl-chain.sample-data.d.ts +21 -3
- package/development/pearl-chain/pearl-chain.sample-data.d.ts.map +1 -1
- package/development/pearl-chain-time.js +8 -2
- package/development/pearl-chain-vertical-item.js +7 -1
- package/development/pearl-chain-vertical.js +7 -1
- package/development/pearl-chain.js +42 -20
- package/development/teaser-hero.js +7 -1
- package/development/teaser-paid.js +7 -1
- package/development/timetable-duration.js +7 -1
- package/development/timetable-row/timetable-row.d.ts +0 -1
- package/development/timetable-row/timetable-row.d.ts.map +1 -1
- package/development/timetable-row/timetable-row.sample-data.d.ts.map +1 -1
- package/development/timetable-row.js +16 -22
- package/differenceInMinutes-BhHyuJc4.js +28 -0
- package/{format-qHhIvnY8.js → format-fWxoS2xH.js} +2 -2
- package/{isValid-Df_caLp4.js → isValid-DSjxf8eh.js} +9 -13
- package/journey-summary.js +2 -2
- package/package.json +2 -2
- package/pearl-chain/pearl-chain.d.ts.map +1 -1
- package/pearl-chain/pearl-chain.sample-data.d.ts +21 -3
- package/pearl-chain/pearl-chain.sample-data.d.ts.map +1 -1
- package/pearl-chain-time.js +1 -1
- package/pearl-chain.js +106 -99
- package/timetable-row/timetable-row.d.ts +0 -1
- package/timetable-row/timetable-row.d.ts.map +1 -1
- package/timetable-row/timetable-row.sample-data.d.ts.map +1 -1
- package/timetable-row.js +124 -138
- package/development/differenceInMinutes-D47vcSvy.js +0 -21
- package/differenceInMinutes-CDpgJIgL.js +0 -19
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { i18nDurationDay, i18nDurationHour, i18nDurationMinute } from "@sbb-esta/lyne-elements/core/i18n.js";
|
|
2
|
-
import { t as toDate, a as millisecondsInHour, b as millisecondsInMinute } from "../constants-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { t as toDate, c as constructFrom, a as millisecondsInHour, b as millisecondsInMinute } from "../constants-BMGwMkN3.js";
|
|
3
|
+
import { d as differenceInCalendarDays, i as isValid } from "../isValid-BVccOlli.js";
|
|
4
|
+
import { b as addMilliseconds, c as differenceInMilliseconds, g as getRoundingMethod, a as addMinutes, d as differenceInMinutes } from "../differenceInMinutes-DHtPDiUE.js";
|
|
5
5
|
function addDays(date, amount) {
|
|
6
6
|
const _date = toDate(date);
|
|
7
7
|
if (isNaN(amount)) return constructFrom(date, NaN);
|
|
@@ -11,16 +11,9 @@ function addDays(date, amount) {
|
|
|
11
11
|
_date.setDate(_date.getDate() + amount);
|
|
12
12
|
return _date;
|
|
13
13
|
}
|
|
14
|
-
function addMilliseconds(date, amount) {
|
|
15
|
-
const timestamp = +toDate(date);
|
|
16
|
-
return constructFrom(date, timestamp + amount);
|
|
17
|
-
}
|
|
18
14
|
function addHours(date, amount) {
|
|
19
15
|
return addMilliseconds(date, amount * millisecondsInHour);
|
|
20
16
|
}
|
|
21
|
-
function addMinutes(date, amount) {
|
|
22
|
-
return addMilliseconds(date, amount * millisecondsInMinute);
|
|
23
|
-
}
|
|
24
17
|
function differenceInDays(dateLeft, dateRight) {
|
|
25
18
|
const _dateLeft = toDate(dateLeft);
|
|
26
19
|
const _dateRight = toDate(dateRight);
|
|
@@ -287,4 +280,4 @@ export {
|
|
|
287
280
|
durationToTime,
|
|
288
281
|
removeTimezoneFromISOTimeString
|
|
289
282
|
};
|
|
290
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGREYXlzLm1qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRNaWxsaXNlY29uZHMubWpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZEhvdXJzLm1qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRNaW51dGVzLm1qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5EYXlzLm1qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5Ib3Vycy5tanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViRGF5cy5tanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2VJU08ubWpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1YkhvdXJzLm1qcyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvY29yZS9kYXRldGltZS9kYXRlLWhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUubWpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5tanNcIjtcblxuLyoqXG4gKiBAbmFtZSBhZGREYXlzXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkYXlzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRheXMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCBvZiBkYXlzIHRvIGJlIGFkZGVkLlxuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBkYXlzIGFkZGVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCAxMCBkYXlzIHRvIDEgU2VwdGVtYmVyIDIwMTQ6XG4gKiBjb25zdCByZXN1bHQgPSBhZGREYXlzKG5ldyBEYXRlKDIwMTQsIDgsIDEpLCAxMClcbiAqIC8vPT4gVGh1IFNlcCAxMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREYXlzKGRhdGUsIGFtb3VudCkge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlKTtcbiAgaWYgKGlzTmFOKGFtb3VudCkpIHJldHVybiBjb25zdHJ1Y3RGcm9tKGRhdGUsIE5hTik7XG4gIGlmICghYW1vdW50KSB7XG4gICAgLy8gSWYgMCBkYXlzLCBuby1vcCB0byBhdm9pZCBjaGFuZ2luZyB0aW1lcyBpbiB0aGUgaG91ciBiZWZvcmUgZW5kIG9mIERTVFxuICAgIHJldHVybiBfZGF0ZTtcbiAgfVxuICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSArIGFtb3VudCk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBhZGREYXlzO1xuIiwiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLm1qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20ubWpzXCI7XG5cbi8qKlxuICogQG5hbWUgYWRkTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBhZGRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNzUwIG1pbGxpc2Vjb25kcyB0byAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MzAuNzUwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGF0ZSwgYW1vdW50KSB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9ICt0b0RhdGUoZGF0ZSk7XG4gIHJldHVybiBjb25zdHJ1Y3RGcm9tKGRhdGUsIHRpbWVzdGFtcCArIGFtb3VudCk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgYWRkTWlsbGlzZWNvbmRzO1xuIiwiaW1wb3J0IHsgYWRkTWlsbGlzZWNvbmRzIH0gZnJvbSBcIi4vYWRkTWlsbGlzZWNvbmRzLm1qc1wiO1xuaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5Ib3VyIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGFkZEhvdXJzXG4gKiBAY2F0ZWdvcnkgSG91ciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgaG91cnMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgaG91cnMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCBvZiBob3VycyB0byBiZSBhZGRlZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgaG91cnMgYWRkZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDIgaG91cnMgdG8gMTAgSnVseSAyMDE0IDIzOjAwOjAwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkSG91cnMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDIzLCAwKSwgMilcbiAqIC8vPT4gRnJpIEp1bCAxMSAyMDE0IDAxOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRIb3VycyhkYXRlLCBhbW91bnQpIHtcbiAgcmV0dXJuIGFkZE1pbGxpc2Vjb25kcyhkYXRlLCBhbW91bnQgKiBtaWxsaXNlY29uZHNJbkhvdXIpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGFkZEhvdXJzO1xuIiwiaW1wb3J0IHsgYWRkTWlsbGlzZWNvbmRzIH0gZnJvbSBcIi4vYWRkTWlsbGlzZWNvbmRzLm1qc1wiO1xuaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5NaW51dGUgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5cbi8qKlxuICogQG5hbWUgYWRkTWludXRlc1xuICogQGNhdGVnb3J5IE1pbnV0ZSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWludXRlcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaW51dGVzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIGFtb3VudCAtIFRoZSBhbW91bnQgb2YgbWludXRlcyB0byBiZSBhZGRlZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgbWludXRlcyBhZGRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgMzAgbWludXRlcyB0byAxMCBKdWx5IDIwMTQgMTI6MDA6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaW51dGVzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgMCksIDMwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6MzA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZE1pbnV0ZXMoZGF0ZSwgYW1vdW50KSB7XG4gIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGF0ZSwgYW1vdW50ICogbWlsbGlzZWNvbmRzSW5NaW51dGUpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGFkZE1pbnV0ZXM7XG4iLCJpbXBvcnQgeyBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMubWpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUubWpzXCI7XG5cbi8qKlxuICogQG5hbWUgZGlmZmVyZW5jZUluRGF5c1xuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBmdWxsIGRheXMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiBmdWxsIGRheSBwZXJpb2RzIGJldHdlZW4gdHdvIGRhdGVzLiBGcmFjdGlvbmFsIGRheXMgYXJlXG4gKiB0cnVuY2F0ZWQgdG93YXJkcyB6ZXJvLlxuICpcbiAqIE9uZSBcImZ1bGwgZGF5XCIgaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBsb2NhbCB0aW1lIGluIG9uZSBkYXkgdG8gdGhlIHNhbWVcbiAqIGxvY2FsIHRpbWUgb24gdGhlIG5leHQgb3IgcHJldmlvdXMgZGF5LiBBIGZ1bGwgZGF5IGNhbiBzb21ldGltZXMgYmUgbGVzcyB0aGFuXG4gKiBvciBtb3JlIHRoYW4gMjQgaG91cnMgaWYgYSBkYXlsaWdodCBzYXZpbmdzIGNoYW5nZSBoYXBwZW5zIGJldHdlZW4gdHdvIGRhdGVzLlxuICpcbiAqIFRvIGlnbm9yZSBEU1QgYW5kIG9ubHkgbWVhc3VyZSBleGFjdCAyNC1ob3VyIHBlcmlvZHMsIHVzZSB0aGlzIGluc3RlYWQ6XG4gKiBgTWF0aC50cnVuYyhkaWZmZXJlbmNlSW5Ib3VycyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KS8yNCl8MGAuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGVMZWZ0IC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBkYXRlUmlnaHQgLSBUaGUgZWFybGllciBkYXRlXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBmdWxsIGRheXMgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbCB0aW1lem9uZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBmdWxsIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDExIDIzOjAwOjAwIGFuZCAyIEp1bHkgMjAxMiAwMDowMDowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkRheXMoXG4gKiAgIG5ldyBEYXRlKDIwMTIsIDYsIDIsIDAsIDApLFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAyLCAyMywgMClcbiAqIClcbiAqIC8vPT4gMzY1XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGZ1bGwgZGF5cyBhcmUgYmV0d2VlblxuICogLy8gMiBKdWx5IDIwMTEgMjM6NTk6MDAgYW5kIDMgSnVseSAyMDExIDAwOjAxOjAwP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluRGF5cyhcbiAqICAgbmV3IERhdGUoMjAxMSwgNiwgMywgMCwgMSksXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDIsIDIzLCA1OSlcbiAqIClcbiAqIC8vPT4gMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBmdWxsIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDEgTWFyY2ggMjAyMCAwOjAwIGFuZCAxIEp1bmUgMjAyMCAwOjAwID9cbiAqIC8vIE5vdGU6IGJlY2F1c2UgbG9jYWwgdGltZSBpcyB1c2VkLCB0aGVcbiAqIC8vIHJlc3VsdCB3aWxsIGFsd2F5cyBiZSA5MiBkYXlzLCBldmVuIGluXG4gKiAvLyB0aW1lIHpvbmVzIHdoZXJlIERTVCBzdGFydHMgYW5kIHRoZVxuICogLy8gcGVyaW9kIGhhcyBvbmx5IDkyKjI0LTEgaG91cnMuXG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5EYXlzKFxuICogICBuZXcgRGF0ZSgyMDIwLCA1LCAxKSxcbiAqICAgbmV3IERhdGUoMjAyMCwgMiwgMSlcbiAqIClcbiAqIC8vPT4gOTJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbkRheXMoZGF0ZUxlZnQsIGRhdGVSaWdodCkge1xuICBjb25zdCBfZGF0ZUxlZnQgPSB0b0RhdGUoZGF0ZUxlZnQpO1xuICBjb25zdCBfZGF0ZVJpZ2h0ID0gdG9EYXRlKGRhdGVSaWdodCk7XG5cbiAgY29uc3Qgc2lnbiA9IGNvbXBhcmVMb2NhbEFzYyhfZGF0ZUxlZnQsIF9kYXRlUmlnaHQpO1xuICBjb25zdCBkaWZmZXJlbmNlID0gTWF0aC5hYnMoZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKF9kYXRlTGVmdCwgX2RhdGVSaWdodCkpO1xuXG4gIF9kYXRlTGVmdC5zZXREYXRlKF9kYXRlTGVmdC5nZXREYXRlKCkgLSBzaWduICogZGlmZmVyZW5jZSk7XG5cbiAgLy8gTWF0aC5hYnMoZGlmZiBpbiBmdWxsIGRheXMgLSBkaWZmIGluIGNhbGVuZGFyIGRheXMpID09PSAxIGlmIGxhc3QgY2FsZW5kYXIgZGF5IGlzIG5vdCBmdWxsXG4gIC8vIElmIHNvLCByZXN1bHQgbXVzdCBiZSBkZWNyZWFzZWQgYnkgMSBpbiBhYnNvbHV0ZSB2YWx1ZVxuICBjb25zdCBpc0xhc3REYXlOb3RGdWxsID0gTnVtYmVyKFxuICAgIGNvbXBhcmVMb2NhbEFzYyhfZGF0ZUxlZnQsIF9kYXRlUmlnaHQpID09PSAtc2lnbixcbiAgKTtcbiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmZXJlbmNlIC0gaXNMYXN0RGF5Tm90RnVsbCk7XG4gIC8vIFByZXZlbnQgbmVnYXRpdmUgemVyb1xuICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDtcbn1cblxuLy8gTGlrZSBgY29tcGFyZUFzY2AgYnV0IHVzZXMgbG9jYWwgdGltZSBub3QgVVRDLCB3aGljaCBpcyBuZWVkZWRcbi8vIGZvciBhY2N1cmF0ZSBlcXVhbGl0eSBjb21wYXJpc29ucyBvZiBVVEMgdGltZXN0YW1wcyB0aGF0IGVuZCB1cFxuLy8gaGF2aW5nIHRoZSBzYW1lIHJlcHJlc2VudGF0aW9uIGluIGxvY2FsIHRpbWUsIGUuZy4gb25lIGhvdXIgYmVmb3JlXG4vLyBEU1QgZW5kcyB2cy4gdGhlIGluc3RhbnQgdGhhdCBEU1QgZW5kcy5cbmZ1bmN0aW9uIGNvbXBhcmVMb2NhbEFzYyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KSB7XG4gIGNvbnN0IGRpZmYgPVxuICAgIGRhdGVMZWZ0LmdldEZ1bGxZZWFyKCkgLSBkYXRlUmlnaHQuZ2V0RnVsbFllYXIoKSB8fFxuICAgIGRhdGVMZWZ0LmdldE1vbnRoKCkgLSBkYXRlUmlnaHQuZ2V0TW9udGgoKSB8fFxuICAgIGRhdGVMZWZ0LmdldERhdGUoKSAtIGRhdGVSaWdodC5nZXREYXRlKCkgfHxcbiAgICBkYXRlTGVmdC5nZXRIb3VycygpIC0gZGF0ZVJpZ2h0LmdldEhvdXJzKCkgfHxcbiAgICBkYXRlTGVmdC5nZXRNaW51dGVzKCkgLSBkYXRlUmlnaHQuZ2V0TWludXRlcygpIHx8XG4gICAgZGF0ZUxlZnQuZ2V0U2Vjb25kcygpIC0gZGF0ZVJpZ2h0LmdldFNlY29uZHMoKSB8fFxuICAgIGRhdGVMZWZ0LmdldE1pbGxpc2Vjb25kcygpIC0gZGF0ZVJpZ2h0LmdldE1pbGxpc2Vjb25kcygpO1xuXG4gIGlmIChkaWZmIDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfSBlbHNlIGlmIChkaWZmID4gMCkge1xuICAgIHJldHVybiAxO1xuICAgIC8vIFJldHVybiAwIGlmIGRpZmYgaXMgMDsgcmV0dXJuIE5hTiBpZiBkaWZmIGlzIE5hTlxuICB9IGVsc2Uge1xuICAgIHJldHVybiBkaWZmO1xuICB9XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZUluRGF5cztcbiIsImltcG9ydCB7IGdldFJvdW5kaW5nTWV0aG9kIH0gZnJvbSBcIi4vX2xpYi9nZXRSb3VuZGluZ01ldGhvZC5tanNcIjtcbmltcG9ydCB7IG1pbGxpc2Vjb25kc0luSG91ciB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcy5tanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGRpZmZlcmVuY2VJbkhvdXJzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZGlmZmVyZW5jZUluSG91cnNcbiAqIEBjYXRlZ29yeSBIb3VyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGhvdXJzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgaG91cnMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGVMZWZ0IC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBkYXRlUmlnaHQgLSBUaGUgZWFybGllciBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBob3Vyc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBob3VycyBhcmUgYmV0d2VlbiAyIEp1bHkgMjAxNCAwNjo1MDowMCBhbmQgMiBKdWx5IDIwMTQgMTk6MDA6MDA/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5Ib3VycyhcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgMTksIDApLFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyLCA2LCA1MClcbiAqIClcbiAqIC8vPT4gMTJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbkhvdXJzKGRhdGVMZWZ0LCBkYXRlUmlnaHQsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGlmZiA9XG4gICAgZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIC8gbWlsbGlzZWNvbmRzSW5Ib3VyO1xuICByZXR1cm4gZ2V0Um91bmRpbmdNZXRob2Qob3B0aW9ucz8ucm91bmRpbmdNZXRob2QpKGRpZmYpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2VJbkhvdXJzO1xuIiwiaW1wb3J0IHsgYWRkRGF5cyB9IGZyb20gXCIuL2FkZERheXMubWpzXCI7XG5cbi8qKlxuICogQG5hbWUgc3ViRGF5c1xuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkYXlzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkYXlzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCBvZiBkYXlzIHRvIGJlIHN1YnRyYWN0ZWQuXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIGRheXMgc3VidHJhY3RlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCAxMCBkYXlzIGZyb20gMSBTZXB0ZW1iZXIgMjAxNDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN1YkRheXMobmV3IERhdGUoMjAxNCwgOCwgMSksIDEwKVxuICogLy89PiBGcmkgQXVnIDIyIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YkRheXMoZGF0ZSwgYW1vdW50KSB7XG4gIHJldHVybiBhZGREYXlzKGRhdGUsIC1hbW91bnQpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN1YkRheXM7XG4iLCJpbXBvcnQgeyBtaWxsaXNlY29uZHNJbkhvdXIsIG1pbGxpc2Vjb25kc0luTWludXRlIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgcGFyc2VJU099IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBwYXJzZUlTT1xuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBQYXJzZSBJU08gc3RyaW5nXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gc3RyaW5nIGluIElTTyA4NjAxIGZvcm1hdCBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogRnVuY3Rpb24gYWNjZXB0cyBjb21wbGV0ZSBJU08gODYwMSBmb3JtYXRzIGFzIHdlbGwgYXMgcGFydGlhbCBpbXBsZW1lbnRhdGlvbnMuXG4gKiBJU08gODYwMTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMVxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpc24ndCBhIHN0cmluZywgdGhlIGZ1bmN0aW9uIGNhbm5vdCBwYXJzZSB0aGUgc3RyaW5nIG9yXG4gKiB0aGUgdmFsdWVzIGFyZSBpbnZhbGlkLCBpdCByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqXG4gKiBAcGFyYW0gYXJndW1lbnQgLSBUaGUgdmFsdWUgdG8gY29udmVydFxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJzIwMTQtMDItMTFUMTE6MzA6MzAnIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBwYXJzZUlTTygnMjAxNC0wMi0xMVQxMTozMDozMCcpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHN0cmluZyAnKzAyMDE0MTAxJyB0byBkYXRlLFxuICogLy8gaWYgdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgZXh0ZW5kZWQgeWVhciBmb3JtYXQgaXMgMTpcbiAqIGNvbnN0IHJlc3VsdCA9IHBhcnNlSVNPKCcrMDIwMTQxMDEnLCB7IGFkZGl0aW9uYWxEaWdpdHM6IDEgfSlcbiAqIC8vPT4gRnJpIEFwciAxMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlTTyhhcmd1bWVudCwgb3B0aW9ucykge1xuICBjb25zdCBhZGRpdGlvbmFsRGlnaXRzID0gb3B0aW9ucz8uYWRkaXRpb25hbERpZ2l0cyA/PyAyO1xuICBjb25zdCBkYXRlU3RyaW5ncyA9IHNwbGl0RGF0ZVN0cmluZyhhcmd1bWVudCk7XG5cbiAgbGV0IGRhdGU7XG4gIGlmIChkYXRlU3RyaW5ncy5kYXRlKSB7XG4gICAgY29uc3QgcGFyc2VZZWFyUmVzdWx0ID0gcGFyc2VZZWFyKGRhdGVTdHJpbmdzLmRhdGUsIGFkZGl0aW9uYWxEaWdpdHMpO1xuICAgIGRhdGUgPSBwYXJzZURhdGUocGFyc2VZZWFyUmVzdWx0LnJlc3REYXRlU3RyaW5nLCBwYXJzZVllYXJSZXN1bHQueWVhcik7XG4gIH1cblxuICBpZiAoIWRhdGUgfHwgaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cblxuICBjb25zdCB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgbGV0IHRpbWUgPSAwO1xuICBsZXQgb2Zmc2V0O1xuXG4gIGlmIChkYXRlU3RyaW5ncy50aW1lKSB7XG4gICAgdGltZSA9IHBhcnNlVGltZShkYXRlU3RyaW5ncy50aW1lKTtcbiAgICBpZiAoaXNOYU4odGltZSkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkYXRlU3RyaW5ncy50aW1lem9uZSkge1xuICAgIG9mZnNldCA9IHBhcnNlVGltZXpvbmUoZGF0ZVN0cmluZ3MudGltZXpvbmUpO1xuICAgIGlmIChpc05hTihvZmZzZXQpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGlydHlEYXRlID0gbmV3IERhdGUodGltZXN0YW1wICsgdGltZSk7XG4gICAgLy8gSlMgcGFyc2VkIHN0cmluZyBhc3N1bWluZyBpdCdzIGluIFVUQyB0aW1lem9uZVxuICAgIC8vIGJ1dCB3ZSBuZWVkIGl0IHRvIGJlIHBhcnNlZCBpbiBvdXIgdGltZXpvbmVcbiAgICAvLyBzbyB3ZSB1c2UgdXRjIHZhbHVlcyB0byBidWlsZCBkYXRlIGluIG91ciB0aW1lem9uZS5cbiAgICAvLyBZZWFyIHZhbHVlcyBmcm9tIDAgdG8gOTkgbWFwIHRvIHRoZSB5ZWFycyAxOTAwIHRvIDE5OTlcbiAgICAvLyBzbyBzZXQgeWVhciBleHBsaWNpdGx5IHdpdGggc2V0RnVsbFllYXIuXG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IERhdGUoMCk7XG4gICAgcmVzdWx0LnNldEZ1bGxZZWFyKFxuICAgICAgZGlydHlEYXRlLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgICBkaXJ0eURhdGUuZ2V0VVRDTW9udGgoKSxcbiAgICAgIGRpcnR5RGF0ZS5nZXRVVENEYXRlKCksXG4gICAgKTtcbiAgICByZXN1bHQuc2V0SG91cnMoXG4gICAgICBkaXJ0eURhdGUuZ2V0VVRDSG91cnMoKSxcbiAgICAgIGRpcnR5RGF0ZS5nZXRVVENNaW51dGVzKCksXG4gICAgICBkaXJ0eURhdGUuZ2V0VVRDU2Vjb25kcygpLFxuICAgICAgZGlydHlEYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpLFxuICAgICk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KTtcbn1cblxuY29uc3QgcGF0dGVybnMgPSB7XG4gIGRhdGVUaW1lRGVsaW1pdGVyOiAvW1QgXS8sXG4gIHRpbWVab25lRGVsaW1pdGVyOiAvW1ogXS9pLFxuICB0aW1lem9uZTogLyhbWistXS4qKSQvLFxufTtcblxuY29uc3QgZGF0ZVJlZ2V4ID1cbiAgL14tPyg/OihcXGR7M30pfChcXGR7Mn0pKD86LT8oXFxkezJ9KSk/fFcoXFxkezJ9KSg/Oi0/KFxcZHsxfSkpP3wpJC87XG5jb25zdCB0aW1lUmVnZXggPVxuICAvXihcXGR7Mn0oPzpbLixdXFxkKik/KSg/Ojo/KFxcZHsyfSg/OlsuLF1cXGQqKT8pKT8oPzo6PyhcXGR7Mn0oPzpbLixdXFxkKik/KSk/JC87XG5jb25zdCB0aW1lem9uZVJlZ2V4ID0gL14oWystXSkoXFxkezJ9KSg/Ojo/KFxcZHsyfSkpPyQvO1xuXG5mdW5jdGlvbiBzcGxpdERhdGVTdHJpbmcoZGF0ZVN0cmluZykge1xuICBjb25zdCBkYXRlU3RyaW5ncyA9IHt9O1xuICBjb25zdCBhcnJheSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMuZGF0ZVRpbWVEZWxpbWl0ZXIpO1xuICBsZXQgdGltZVN0cmluZztcblxuICAvLyBUaGUgcmVnZXggbWF0Y2ggc2hvdWxkIG9ubHkgcmV0dXJuIGF0IG1heGltdW0gdHdvIGFycmF5IGVsZW1lbnRzLlxuICAvLyBbZGF0ZV0sIFt0aW1lXSwgb3IgW2RhdGUsIHRpbWVdLlxuICBpZiAoYXJyYXkubGVuZ3RoID4gMikge1xuICAgIHJldHVybiBkYXRlU3RyaW5ncztcbiAgfVxuXG4gIGlmICgvOi8udGVzdChhcnJheVswXSkpIHtcbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMF07XG4gIH0gZWxzZSB7XG4gICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGFycmF5WzBdO1xuICAgIHRpbWVTdHJpbmcgPSBhcnJheVsxXTtcbiAgICBpZiAocGF0dGVybnMudGltZVpvbmVEZWxpbWl0ZXIudGVzdChkYXRlU3RyaW5ncy5kYXRlKSkge1xuICAgICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMudGltZVpvbmVEZWxpbWl0ZXIpWzBdO1xuICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKFxuICAgICAgICBkYXRlU3RyaW5ncy5kYXRlLmxlbmd0aCxcbiAgICAgICAgZGF0ZVN0cmluZy5sZW5ndGgsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aW1lU3RyaW5nKSB7XG4gICAgY29uc3QgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZS5leGVjKHRpbWVTdHJpbmcpO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmcucmVwbGFjZSh0b2tlblsxXSwgXCJcIik7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IHRva2VuWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0ZVN0cmluZ3M7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkYXRlU3RyaW5nLCBhZGRpdGlvbmFsRGlnaXRzKSB7XG4gIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICBcIl4oPzooXFxcXGR7NH18WystXVxcXFxke1wiICtcbiAgICAgICg0ICsgYWRkaXRpb25hbERpZ2l0cykgK1xuICAgICAgXCJ9KXwoXFxcXGR7Mn18WystXVxcXFxke1wiICtcbiAgICAgICgyICsgYWRkaXRpb25hbERpZ2l0cykgK1xuICAgICAgXCJ9KSQpXCIsXG4gICk7XG5cbiAgY29uc3QgY2FwdHVyZXMgPSBkYXRlU3RyaW5nLm1hdGNoKHJlZ2V4KTtcbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIHsgeWVhcjogTmFOLCByZXN0RGF0ZVN0cmluZzogXCJcIiB9O1xuXG4gIGNvbnN0IHllYXIgPSBjYXB0dXJlc1sxXSA/IHBhcnNlSW50KGNhcHR1cmVzWzFdKSA6IG51bGw7XG4gIGNvbnN0IGNlbnR1cnkgPSBjYXB0dXJlc1syXSA/IHBhcnNlSW50KGNhcHR1cmVzWzJdKSA6IG51bGw7XG5cbiAgLy8gZWl0aGVyIHllYXIgb3IgY2VudHVyeSBpcyBudWxsLCBub3QgYm90aFxuICByZXR1cm4ge1xuICAgIHllYXI6IGNlbnR1cnkgPT09IG51bGwgPyB5ZWFyIDogY2VudHVyeSAqIDEwMCxcbiAgICByZXN0RGF0ZVN0cmluZzogZGF0ZVN0cmluZy5zbGljZSgoY2FwdHVyZXNbMV0gfHwgY2FwdHVyZXNbMl0pLmxlbmd0aCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF0ZShkYXRlU3RyaW5nLCB5ZWFyKSB7XG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB5ZWFyXG4gIGlmICh5ZWFyID09PSBudWxsKSByZXR1cm4gbmV3IERhdGUoTmFOKTtcblxuICBjb25zdCBjYXB0dXJlcyA9IGRhdGVTdHJpbmcubWF0Y2goZGF0ZVJlZ2V4KTtcbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHN0cmluZ1xuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4gbmV3IERhdGUoTmFOKTtcblxuICBjb25zdCBpc1dlZWtEYXRlID0gISFjYXB0dXJlc1s0XTtcbiAgY29uc3QgZGF5T2ZZZWFyID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1sxXSk7XG4gIGNvbnN0IG1vbnRoID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1syXSkgLSAxO1xuICBjb25zdCBkYXkgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzNdKTtcbiAgY29uc3Qgd2VlayA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbNF0pO1xuICBjb25zdCBkYXlPZldlZWsgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzVdKSAtIDE7XG5cbiAgaWYgKGlzV2Vla0RhdGUpIHtcbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaywgZGF5T2ZXZWVrKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuICAgIHJldHVybiBkYXlPZklTT1dlZWtZZWFyKHllYXIsIHdlZWssIGRheU9mV2Vlayk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDApO1xuICAgIGlmIChcbiAgICAgICF2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRheSkgfHxcbiAgICAgICF2YWxpZGF0ZURheU9mWWVhckRhdGUoeWVhciwgZGF5T2ZZZWFyKVxuICAgICkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgbW9udGgsIE1hdGgubWF4KGRheU9mWWVhciwgZGF5KSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VEYXRlVW5pdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBwYXJzZUludCh2YWx1ZSkgOiAxO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykge1xuICBjb25zdCBjYXB0dXJlcyA9IHRpbWVTdHJpbmcubWF0Y2godGltZVJlZ2V4KTtcbiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIE5hTjsgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHRpbWVcblxuICBjb25zdCBob3VycyA9IHBhcnNlVGltZVVuaXQoY2FwdHVyZXNbMV0pO1xuICBjb25zdCBtaW51dGVzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1syXSk7XG4gIGNvbnN0IHNlY29uZHMgPSBwYXJzZVRpbWVVbml0KGNhcHR1cmVzWzNdKTtcblxuICBpZiAoIXZhbGlkYXRlVGltZShob3VycywgbWludXRlcywgc2Vjb25kcykpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBob3VycyAqIG1pbGxpc2Vjb25kc0luSG91ciArIG1pbnV0ZXMgKiBtaWxsaXNlY29uZHNJbk1pbnV0ZSArIHNlY29uZHMgKiAxMDAwXG4gICk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVGltZVVuaXQodmFsdWUpIHtcbiAgcmV0dXJuICh2YWx1ZSAmJiBwYXJzZUZsb2F0KHZhbHVlLnJlcGxhY2UoXCIsXCIsIFwiLlwiKSkpIHx8IDA7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVGltZXpvbmUodGltZXpvbmVTdHJpbmcpIHtcbiAgaWYgKHRpbWV6b25lU3RyaW5nID09PSBcIlpcIikgcmV0dXJuIDA7XG5cbiAgY29uc3QgY2FwdHVyZXMgPSB0aW1lem9uZVN0cmluZy5tYXRjaCh0aW1lem9uZVJlZ2V4KTtcbiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIDA7XG5cbiAgY29uc3Qgc2lnbiA9IGNhcHR1cmVzWzFdID09PSBcIitcIiA/IC0xIDogMTtcbiAgY29uc3QgaG91cnMgPSBwYXJzZUludChjYXB0dXJlc1syXSk7XG4gIGNvbnN0IG1pbnV0ZXMgPSAoY2FwdHVyZXNbM10gJiYgcGFyc2VJbnQoY2FwdHVyZXNbM10pKSB8fCAwO1xuXG4gIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgcmV0dXJuIHNpZ24gKiAoaG91cnMgKiBtaWxsaXNlY29uZHNJbkhvdXIgKyBtaW51dGVzICogbWlsbGlzZWNvbmRzSW5NaW51dGUpO1xufVxuXG5mdW5jdGlvbiBkYXlPZklTT1dlZWtZZWFyKGlzb1dlZWtZZWFyLCB3ZWVrLCBkYXkpIHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDApO1xuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGlzb1dlZWtZZWFyLCAwLCA0KTtcbiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5RGF5ID0gZGF0ZS5nZXRVVENEYXkoKSB8fCA3O1xuICBjb25zdCBkaWZmID0gKHdlZWsgLSAxKSAqIDcgKyBkYXkgKyAxIC0gZm91cnRoT2ZKYW51YXJ5RGF5O1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBkaWZmKTtcbiAgcmV0dXJuIGRhdGU7XG59XG5cbi8vIFZhbGlkYXRpb24gZnVuY3Rpb25zXG5cbi8vIEZlYnJ1YXJ5IGlzIG51bGwgdG8gaGFuZGxlIHRoZSBsZWFwIHllYXIgKHVzaW5nIHx8KVxuY29uc3QgZGF5c0luTW9udGhzID0gWzMxLCBudWxsLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07XG5cbmZ1bmN0aW9uIGlzTGVhcFllYXJJbmRleCh5ZWFyKSB7XG4gIHJldHVybiB5ZWFyICUgNDAwID09PSAwIHx8ICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKSB7XG4gIHJldHVybiAoXG4gICAgbW9udGggPj0gMCAmJlxuICAgIG1vbnRoIDw9IDExICYmXG4gICAgZGF0ZSA+PSAxICYmXG4gICAgZGF0ZSA8PSAoZGF5c0luTW9udGhzW21vbnRoXSB8fCAoaXNMZWFwWWVhckluZGV4KHllYXIpID8gMjkgOiAyOCkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpIHtcbiAgcmV0dXJuIGRheU9mWWVhciA+PSAxICYmIGRheU9mWWVhciA8PSAoaXNMZWFwWWVhckluZGV4KHllYXIpID8gMzY2IDogMzY1KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXZWVrRGF0ZShfeWVhciwgd2VlaywgZGF5KSB7XG4gIHJldHVybiB3ZWVrID49IDEgJiYgd2VlayA8PSA1MyAmJiBkYXkgPj0gMCAmJiBkYXkgPD0gNjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gIGlmIChob3VycyA9PT0gMjQpIHtcbiAgICByZXR1cm4gbWludXRlcyA9PT0gMCAmJiBzZWNvbmRzID09PSAwO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBzZWNvbmRzID49IDAgJiZcbiAgICBzZWNvbmRzIDwgNjAgJiZcbiAgICBtaW51dGVzID49IDAgJiZcbiAgICBtaW51dGVzIDwgNjAgJiZcbiAgICBob3VycyA+PSAwICYmXG4gICAgaG91cnMgPCAyNVxuICApO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRpbWV6b25lKF9ob3VycywgbWludXRlcykge1xuICByZXR1cm4gbWludXRlcyA+PSAwICYmIG1pbnV0ZXMgPD0gNTk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgcGFyc2VJU087XG4iLCJpbXBvcnQgeyBhZGRIb3VycyB9IGZyb20gXCIuL2FkZEhvdXJzLm1qc1wiO1xuXG4vKipcbiAqIEBuYW1lIHN1YkhvdXJzXG4gKiBAY2F0ZWdvcnkgSG91ciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBob3VycyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgaG91cnMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIGhvdXJzIHRvIGJlIHN1YnRyYWN0ZWQuXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIGhvdXJzIHN1YnRyYWN0ZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgMiBob3VycyBmcm9tIDExIEp1bHkgMjAxNCAwMTowMDowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN1YkhvdXJzKG5ldyBEYXRlKDIwMTQsIDYsIDExLCAxLCAwKSwgMilcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDIzOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJIb3VycyhkYXRlLCBhbW91bnQpIHtcbiAgcmV0dXJuIGFkZEhvdXJzKGRhdGUsIC1hbW91bnQpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN1YkhvdXJzO1xuIiwiaW1wb3J0IHtcbiAgaTE4bkR1cmF0aW9uSG91cixcbiAgaTE4bkR1cmF0aW9uTWludXRlLFxuICBpMThuRHVyYXRpb25EYXksXG59IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvaTE4bi5qcyc7XG5pbXBvcnQge1xuICBpc1ZhbGlkLFxuICBwYXJzZUlTTyxcbiAgZGlmZmVyZW5jZUluRGF5cyxcbiAgZGlmZmVyZW5jZUluSG91cnMsXG4gIGRpZmZlcmVuY2VJbk1pbnV0ZXMsXG4gIGFkZE1pbnV0ZXMsXG4gIHN1YkhvdXJzLFxuICBzdWJEYXlzLFxufSBmcm9tICdkYXRlLWZucyc7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSBvZmZzZXQgb2YgYSBJU08gZGF0ZSBzdHJpbmcuIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgb2Zmc2V0IGlzIGlnbm9yZWQuXG4gKiBJZiBpdCBpcyBub3QgcmVtb3ZlZCB0aGUgdGltZSB3b3VsZCBiZSBjb252ZXJ0ZWQgdG8gdGhlIGJyb3dzZXJzIGxvY2FsIHRpbWUuXG4gKiBFeGFtcGxlOiBcIjIwMjItMDgtMjlUMDk6MzA6MDArMDM6MDBcIiB3b3VsZCBiZSBjaGFuZ2VkIHRvIFwiMjAyMi0wOC0yOVQwODozMDowMCswMjowMFwiIC0tPiBub3QgdGhlIGRlc2lyZWQgb3V0Y29tZSwgYXMgd2Ugd2FudCB0byB1c2UgdGhlIHRpbWUgaW4gdGhlIHRpbWV6b25lIGFuZCBub3QgdGhlIGxvY2FsIHRpbWUuXG4gKlxuICogQWZ0ZXIgdGhlIG9mZnNldCBpcyByZW1vdmVkIGEgbmV3IGRhdGUgaXMgY3JlYXRlZCBpbiB0aGUgYnJvd3NlcnMgbG9jYWwgdGltZS4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHRpbWUgb2YgdGhlIElTTyBkYXRlIHN0cmluZyBpcyBkaXNwbGF5ZWQgYW5kIG5vdCBhIGNvbnZlcnRlZCB0aW1lLlxuICogRXhhbXBsZTogXCIyMDIyLTA4LTI5VDA5OjMwOjAwKzAzOjAwXCIgd291bGQgYmUgY2hhbmdlZCB0byBcIjIwMjItMDgtMjlUMDk6MzA6MDArMDI6MDBcIiAtLT4gZGVzaXJlZCBvdXRjb21lXG4gKiBBdHRlbnRpb246IFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY29udmVydCB0aGUgdGltZSB0byB0aGUgY29ycmVjdCB0aW1lIGluIHRoZSBsb2NhbCB0aW1lem9uZS4gSXQgaXMgYSB3b3JrYXJvdW5kIHRvIG1ha2Ugc3VyZSwgdGhhdCB0aGUgZ2l2ZW4gdGltZSBpcyBkaXNwbGF5ZWQgd2l0aG91dCBiZWluZyBjb252ZXJ0ZWQuXG4gKlxuICogT2Zmc2V0OiBEaWZmZXJlbmNlIGJldHdlZW4gdGhlIHRpbWV6b25lIGFuZCBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZS5cbiAqXG4gKiBAcGFyYW0gaXNvVGltZSAtIHRoZSBpc28gdGltZSB3aXRoIHRoZSB0aW1lem9uZSBvZmZzZXRcbiAqIEByZXR1cm5zIGEgbmV3IGRhdGUgd2l0aCB0aGUgbG9jYWwgdGltZXpvbmUgd2l0aCB0aGUgbG9jYWwgb2Zmc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGlzb1RpbWU/OiBzdHJpbmcpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFpc29UaW1lKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBwYXJzZWREYXRlID0gcGFyc2VJU08oaXNvVGltZSk7XG5cbiAgaWYgKCFpc1ZhbGlkKHBhcnNlZERhdGUpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChpc29UaW1lLmluY2x1ZGVzKCdaJykpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoaXNvVGltZS5yZXBsYWNlKCdaJywgJycpKTtcbiAgfVxuXG4gIGlmIChpc29UaW1lLmluY2x1ZGVzKCdUJykpIHtcbiAgICBjb25zdCBkYXRlVGltZSA9IGlzb1RpbWUuc3BsaXQoJ1QnKTtcblxuICAgIGlmIChkYXRlVGltZVsxXSAmJiAoZGF0ZVRpbWVbMV0uaW5jbHVkZXMoJysnKSB8fCBkYXRlVGltZVsxXS5pbmNsdWRlcygnLScpKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKGAke2RhdGVUaW1lWzBdfVQke2RhdGVUaW1lWzFdLnNwbGl0KC9bKy1dLylbMF19YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgRGF0ZShpc29UaW1lKTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGEgZHVyYXRpb24gbnVtYmVyIHRvIGRhdGUgc3RyaW5nIHdpdGggc3BlY2lmaWMgZm9ybWF0XG4gKlxuICogQHBhcmFtIGR1cmF0aW9uIC0gZHVyYXRpb24gaW4gbWludXRlc1xuICogQHBhcmFtIGN1cnJlbnRMYW5ndWFnZSAtIGN1cnJlbnRMYW5ndWFnZVxuICogQHJldHVybnMgYW4gT2JqZWN0IHdpdGggdHdvIHN0cmluZ3MgaW4gdGhlIGZvcm1hdCBcImRkIGhoIG1tXCIgKHNob3J0KSBhbiBcInggRGF5KHMpIHggSG91cihzKSB4IE1pbnV0ZShzKSAobG9uZylcIlxuICogKi9cblxuZXhwb3J0IGNvbnN0IGR1cmF0aW9uVG9UaW1lID0gKFxuICBkdXJhdGlvbjogbnVtYmVyLFxuICBjdXJyZW50TGFuZ3VhZ2U/OiBzdHJpbmcsXG4pOiB7IHNob3J0OiBzdHJpbmc7IGxvbmc6IHN0cmluZyB9ID0+IHtcbiAgY29uc3Qgc2hvcnQgPSBbXTtcbiAgY29uc3QgbG9uZyA9IFtdO1xuXG4gIGNvbnN0IG5vdyA9IDA7XG4gIGxldCBmdXR1cmUgPSBhZGRNaW51dGVzKG5vdywgZHVyYXRpb24pO1xuXG4gIGNvbnN0IGRheXMgPSBkaWZmZXJlbmNlSW5EYXlzKGZ1dHVyZSwgbm93KTtcbiAgaWYgKGRheXMgPiAwKSB7XG4gICAgc2hvcnQucHVzaChgJHtkYXlzfSBkYCk7XG4gICAgY3VycmVudExhbmd1YWdlICYmXG4gICAgICBsb25nLnB1c2goXG4gICAgICAgIGAke2RheXN9ICR7XG4gICAgICAgICAgZGF5cyA+IDFcbiAgICAgICAgICAgID8gaTE4bkR1cmF0aW9uRGF5Lm11bHRpcGxlLmxvbmdbY3VycmVudExhbmd1YWdlXVxuICAgICAgICAgICAgOiBpMThuRHVyYXRpb25EYXkuc2luZ2xlLmxvbmdbY3VycmVudExhbmd1YWdlXVxuICAgICAgICB9YCxcbiAgICAgICk7XG4gICAgZnV0dXJlID0gc3ViRGF5cyhmdXR1cmUsIGRheXMpO1xuICB9XG5cbiAgY29uc3QgaG91cnMgPSBkaWZmZXJlbmNlSW5Ib3VycyhmdXR1cmUsIG5vdyk7XG4gIGlmIChob3VycyA+IDApIHtcbiAgICBzaG9ydC5wdXNoKGAke2hvdXJzfSBoYCk7XG4gICAgY3VycmVudExhbmd1YWdlICYmXG4gICAgICBsb25nLnB1c2goXG4gICAgICAgIGAke2hvdXJzfSAke1xuICAgICAgICAgIGhvdXJzID4gMVxuICAgICAgICAgICAgPyBpMThuRHVyYXRpb25Ib3VyLm11bHRpcGxlLmxvbmdbY3VycmVudExhbmd1YWdlXVxuICAgICAgICAgICAgOiBpMThuRHVyYXRpb25Ib3VyLnNpbmdsZS5sb25nW2N1cnJlbnRMYW5ndWFnZV1cbiAgICAgICAgfWAsXG4gICAgICApO1xuICAgIGZ1dHVyZSA9IHN1YkhvdXJzKGZ1dHVyZSwgaG91cnMpO1xuICB9XG5cbiAgY29uc3QgbWludXRlcyA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMoZnV0dXJlLCBub3cpO1xuICBpZiAobWludXRlcyA+IDApIHtcbiAgICBzaG9ydC5wdXNoKGAke21pbnV0ZXN9IG1pbmApO1xuICAgIGN1cnJlbnRMYW5ndWFnZSAmJlxuICAgICAgbG9uZy5wdXNoKFxuICAgICAgICBgJHttaW51dGVzfSAke1xuICAgICAgICAgIG1pbnV0ZXMgPiAxXG4gICAgICAgICAgICA/IGkxOG5EdXJhdGlvbk1pbnV0ZS5tdWx0aXBsZS5sb25nW2N1cnJlbnRMYW5ndWFnZV1cbiAgICAgICAgICAgIDogaTE4bkR1cmF0aW9uTWludXRlLnNpbmdsZS5sb25nW2N1cnJlbnRMYW5ndWFnZV1cbiAgICAgICAgfWAsXG4gICAgICApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzaG9ydDogc2hvcnQuam9pbignICcpLFxuICAgIGxvbmc6IGxvbmcuam9pbignICcpLFxuICB9O1xufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBdUJPLFNBQVMsUUFBUSxNQUFNLFFBQVE7QUFDcEMsUUFBTSxRQUFRLE9BQU8sSUFBSTtBQUN6QixNQUFJLE1BQU0sTUFBTSxFQUFHLFFBQU8sY0FBYyxNQUFNLEdBQUc7QUFDakQsTUFBSSxDQUFDLFFBQVE7QUFFWCxXQUFPO0FBQUEsRUFDUjtBQUNELFFBQU0sUUFBUSxNQUFNLFFBQVMsSUFBRyxNQUFNO0FBQ3RDLFNBQU87QUFDVDtBQ1RPLFNBQVMsZ0JBQWdCLE1BQU0sUUFBUTtBQUM1QyxRQUFNLFlBQVksQ0FBQyxPQUFPLElBQUk7QUFDOUIsU0FBTyxjQUFjLE1BQU0sWUFBWSxNQUFNO0FBQy9DO0FDSE8sU0FBUyxTQUFTLE1BQU0sUUFBUTtBQUNyQyxTQUFPLGdCQUFnQixNQUFNLFNBQVMsa0JBQWtCO0FBQzFEO0FDRk8sU0FBUyxXQUFXLE1BQU0sUUFBUTtBQUN2QyxTQUFPLGdCQUFnQixNQUFNLFNBQVMsb0JBQW9CO0FBQzVEO0FDZ0NPLFNBQVMsaUJBQWlCLFVBQVUsV0FBVztBQUNwRCxRQUFNLFlBQVksT0FBTyxRQUFRO0FBQ2pDLFFBQU0sYUFBYSxPQUFPLFNBQVM7QUFFbkMsUUFBTSxPQUFPLGdCQUFnQixXQUFXLFVBQVU7QUFDbEQsUUFBTSxhQUFhLEtBQUssSUFBSSx5QkFBeUIsV0FBVyxVQUFVLENBQUM7QUFFM0UsWUFBVSxRQUFRLFVBQVUsUUFBTyxJQUFLLE9BQU8sVUFBVTtBQUl6RCxRQUFNLG1CQUFtQjtBQUFBLElBQ3ZCLGdCQUFnQixXQUFXLFVBQVUsTUFBTSxDQUFDO0FBQUEsRUFDaEQ7QUFDRSxRQUFNLFNBQVMsUUFBUSxhQUFhO0FBRXBDLFNBQU8sV0FBVyxJQUFJLElBQUk7QUFDNUI7QUFNQSxTQUFTLGdCQUFnQixVQUFVLFdBQVc7QUFDNUMsUUFBTSxPQUNKLFNBQVMsWUFBVyxJQUFLLFVBQVUsWUFBYSxLQUNoRCxTQUFTLFNBQVEsSUFBSyxVQUFVLFNBQVUsS0FDMUMsU0FBUyxRQUFPLElBQUssVUFBVSxRQUFTLEtBQ3hDLFNBQVMsU0FBUSxJQUFLLFVBQVUsU0FBVSxLQUMxQyxTQUFTLFdBQVUsSUFBSyxVQUFVLFdBQVksS0FDOUMsU0FBUyxXQUFVLElBQUssVUFBVSxXQUFZLEtBQzlDLFNBQVMsZ0JBQWUsSUFBSyxVQUFVLGdCQUFlO0FBRXhELE1BQUksT0FBTyxHQUFHO0FBQ1osV0FBTztBQUFBLEVBQ1gsV0FBYSxPQUFPLEdBQUc7QUFDbkIsV0FBTztBQUFBLEVBRVgsT0FBUztBQUNMLFdBQU87QUFBQSxFQUNSO0FBQ0g7QUNsRU8sU0FBUyxrQkFBa0IsVUFBVSxXQUFXLFNBQVM7QUFDOUQsUUFBTSxPQUNKLHlCQUF5QixVQUFVLFNBQVMsSUFBSTtBQUNsRCxTQUFPLGtCQUFrQixtQ0FBUyxjQUFjLEVBQUUsSUFBSTtBQUN4RDtBQ2RPLFNBQVMsUUFBUSxNQUFNLFFBQVE7QUFDcEMsU0FBTyxRQUFRLE1BQU0sQ0FBQyxNQUFNO0FBQzlCO0FDY08sU0FBUyxTQUFTLFVBQVUsU0FBUztBQUMxQyxRQUFNLG1CQUFnRDtBQUN0RCxRQUFNLGNBQWMsZ0JBQWdCLFFBQVE7QUFFNUMsTUFBSTtBQUNKLE1BQUksWUFBWSxNQUFNO0FBQ3BCLFVBQU0sa0JBQWtCLFVBQVUsWUFBWSxNQUFNLGdCQUFnQjtBQUNwRSxXQUFPLFVBQVUsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsSUFBSTtBQUFBLEVBQ3RFO0FBRUQsTUFBSSxDQUFDLFFBQVEsTUFBTSxLQUFLLFFBQVMsQ0FBQSxHQUFHO0FBQ2xDLFdBQU8sb0JBQUksS0FBSyxHQUFHO0FBQUEsRUFDcEI7QUFFRCxRQUFNLFlBQVksS0FBSztBQUN2QixNQUFJLE9BQU87QUFDWCxNQUFJO0FBRUosTUFBSSxZQUFZLE1BQU07QUFDcEIsV0FBTyxVQUFVLFlBQVksSUFBSTtBQUNqQyxRQUFJLE1BQU0sSUFBSSxHQUFHO0FBQ2YsYUFBTyxvQkFBSSxLQUFLLEdBQUc7QUFBQSxJQUNwQjtBQUFBLEVBQ0Y7QUFFRCxNQUFJLFlBQVksVUFBVTtBQUN4QixhQUFTLGNBQWMsWUFBWSxRQUFRO0FBQzNDLFFBQUksTUFBTSxNQUFNLEdBQUc7QUFDakIsYUFBTyxvQkFBSSxLQUFLLEdBQUc7QUFBQSxJQUNwQjtBQUFBLEVBQ0wsT0FBUztBQUNMLFVBQU0sWUFBWSxJQUFJLEtBQUssWUFBWSxJQUFJO0FBTTNDLFVBQU0sU0FBUyxvQkFBSSxLQUFLLENBQUM7QUFDekIsV0FBTztBQUFBLE1BQ0wsVUFBVSxlQUFnQjtBQUFBLE1BQzFCLFVBQVUsWUFBYTtBQUFBLE1BQ3ZCLFVBQVUsV0FBWTtBQUFBLElBQzVCO0FBQ0ksV0FBTztBQUFBLE1BQ0wsVUFBVSxZQUFhO0FBQUEsTUFDdkIsVUFBVSxjQUFlO0FBQUEsTUFDekIsVUFBVSxjQUFlO0FBQUEsTUFDekIsVUFBVSxtQkFBb0I7QUFBQSxJQUNwQztBQUNJLFdBQU87QUFBQSxFQUNSO0FBRUQsU0FBTyxJQUFJLEtBQUssWUFBWSxPQUFPLE1BQU07QUFDM0M7QUFFQSxNQUFNLFdBQVc7QUFBQSxFQUNmLG1CQUFtQjtBQUFBLEVBQ25CLG1CQUFtQjtBQUFBLEVBQ25CLFVBQVU7QUFDWjtBQUVBLE1BQU0sWUFDSjtBQUNGLE1BQU0sWUFDSjtBQUNGLE1BQU0sZ0JBQWdCO0FBRXRCLFNBQVMsZ0JBQWdCLFlBQVk7QUFDbkMsUUFBTSxjQUFjLENBQUE7QUFDcEIsUUFBTSxRQUFRLFdBQVcsTUFBTSxTQUFTLGlCQUFpQjtBQUN6RCxNQUFJO0FBSUosTUFBSSxNQUFNLFNBQVMsR0FBRztBQUNwQixXQUFPO0FBQUEsRUFDUjtBQUVELE1BQUksSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLEdBQUc7QUFDdEIsaUJBQWEsTUFBTSxDQUFDO0FBQUEsRUFDeEIsT0FBUztBQUNMLGdCQUFZLE9BQU8sTUFBTSxDQUFDO0FBQzFCLGlCQUFhLE1BQU0sQ0FBQztBQUNwQixRQUFJLFNBQVMsa0JBQWtCLEtBQUssWUFBWSxJQUFJLEdBQUc7QUFDckQsa0JBQVksT0FBTyxXQUFXLE1BQU0sU0FBUyxpQkFBaUIsRUFBRSxDQUFDO0FBQ2pFLG1CQUFhLFdBQVc7QUFBQSxRQUN0QixZQUFZLEtBQUs7QUFBQSxRQUNqQixXQUFXO0FBQUEsTUFDbkI7QUFBQSxJQUNLO0FBQUEsRUFDRjtBQUVELE1BQUksWUFBWTtBQUNkLFVBQU0sUUFBUSxTQUFTLFNBQVMsS0FBSyxVQUFVO0FBQy9DLFFBQUksT0FBTztBQUNULGtCQUFZLE9BQU8sV0FBVyxRQUFRLE1BQU0sQ0FBQyxHQUFHLEVBQUU7QUFDbEQsa0JBQVksV0FBVyxNQUFNLENBQUM7QUFBQSxJQUNwQyxPQUFXO0FBQ0wsa0JBQVksT0FBTztBQUFBLElBQ3BCO0FBQUEsRUFDRjtBQUVELFNBQU87QUFDVDtBQUVBLFNBQVMsVUFBVSxZQUFZLGtCQUFrQjtBQUMvQyxRQUFNLFFBQVEsSUFBSTtBQUFBLElBQ2hCLDBCQUNHLElBQUksb0JBQ0wseUJBQ0MsSUFBSSxvQkFDTDtBQUFBLEVBQ047QUFFRSxRQUFNLFdBQVcsV0FBVyxNQUFNLEtBQUs7QUFFdkMsTUFBSSxDQUFDLFNBQVUsUUFBTyxFQUFFLE1BQU0sS0FBSyxnQkFBZ0I7QUFFbkQsUUFBTSxPQUFPLFNBQVMsQ0FBQyxJQUFJLFNBQVMsU0FBUyxDQUFDLENBQUMsSUFBSTtBQUNuRCxRQUFNLFVBQVUsU0FBUyxDQUFDLElBQUksU0FBUyxTQUFTLENBQUMsQ0FBQyxJQUFJO0FBR3RELFNBQU87QUFBQSxJQUNMLE1BQU0sWUFBWSxPQUFPLE9BQU8sVUFBVTtBQUFBLElBQzFDLGdCQUFnQixXQUFXLE9BQU8sU0FBUyxDQUFDLEtBQUssU0FBUyxDQUFDLEdBQUcsTUFBTTtBQUFBLEVBQ3hFO0FBQ0E7QUFFQSxTQUFTLFVBQVUsWUFBWSxNQUFNO0FBRW5DLE1BQUksU0FBUyxLQUFNLFFBQU8sb0JBQUksS0FBSyxHQUFHO0FBRXRDLFFBQU0sV0FBVyxXQUFXLE1BQU0sU0FBUztBQUUzQyxNQUFJLENBQUMsU0FBVSxRQUFPLG9CQUFJLEtBQUssR0FBRztBQUVsQyxRQUFNLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUMvQixRQUFNLFlBQVksY0FBYyxTQUFTLENBQUMsQ0FBQztBQUMzQyxRQUFNLFFBQVEsY0FBYyxTQUFTLENBQUMsQ0FBQyxJQUFJO0FBQzNDLFFBQU0sTUFBTSxjQUFjLFNBQVMsQ0FBQyxDQUFDO0FBQ3JDLFFBQU0sT0FBTyxjQUFjLFNBQVMsQ0FBQyxDQUFDO0FBQ3RDLFFBQU0sWUFBWSxjQUFjLFNBQVMsQ0FBQyxDQUFDLElBQUk7QUFFL0MsTUFBSSxZQUFZO0FBQ2QsUUFBSSxDQUFDLGlCQUFpQixNQUFNLE1BQU0sU0FBUyxHQUFHO0FBQzVDLGFBQU8sb0JBQUksS0FBSyxHQUFHO0FBQUEsSUFDcEI7QUFDRCxXQUFPLGlCQUFpQixNQUFNLE1BQU0sU0FBUztBQUFBLEVBQ2pELE9BQVM7QUFDTCxVQUFNLE9BQU8sb0JBQUksS0FBSyxDQUFDO0FBQ3ZCLFFBQ0UsQ0FBQyxhQUFhLE1BQU0sT0FBTyxHQUFHLEtBQzlCLENBQUMsc0JBQXNCLE1BQU0sU0FBUyxHQUN0QztBQUNBLGFBQU8sb0JBQUksS0FBSyxHQUFHO0FBQUEsSUFDcEI7QUFDRCxTQUFLLGVBQWUsTUFBTSxPQUFPLEtBQUssSUFBSSxXQUFXLEdBQUcsQ0FBQztBQUN6RCxXQUFPO0FBQUEsRUFDUjtBQUNIO0FBRUEsU0FBUyxjQUFjLE9BQU87QUFDNUIsU0FBTyxRQUFRLFNBQVMsS0FBSyxJQUFJO0FBQ25DO0FBRUEsU0FBUyxVQUFVLFlBQVk7QUFDN0IsUUFBTSxXQUFXLFdBQVcsTUFBTSxTQUFTO0FBQzNDLE1BQUksQ0FBQyxTQUFVLFFBQU87QUFFdEIsUUFBTSxRQUFRLGNBQWMsU0FBUyxDQUFDLENBQUM7QUFDdkMsUUFBTSxVQUFVLGNBQWMsU0FBUyxDQUFDLENBQUM7QUFDekMsUUFBTSxVQUFVLGNBQWMsU0FBUyxDQUFDLENBQUM7QUFFekMsTUFBSSxDQUFDLGFBQWEsT0FBTyxTQUFTLE9BQU8sR0FBRztBQUMxQyxXQUFPO0FBQUEsRUFDUjtBQUVELFNBQ0UsUUFBUSxxQkFBcUIsVUFBVSx1QkFBdUIsVUFBVTtBQUU1RTtBQUVBLFNBQVMsY0FBYyxPQUFPO0FBQzVCLFNBQVEsU0FBUyxXQUFXLE1BQU0sUUFBUSxLQUFLLEdBQUcsQ0FBQyxLQUFNO0FBQzNEO0FBRUEsU0FBUyxjQUFjLGdCQUFnQjtBQUNyQyxNQUFJLG1CQUFtQixJQUFLLFFBQU87QUFFbkMsUUFBTSxXQUFXLGVBQWUsTUFBTSxhQUFhO0FBQ25ELE1BQUksQ0FBQyxTQUFVLFFBQU87QUFFdEIsUUFBTSxPQUFPLFNBQVMsQ0FBQyxNQUFNLE1BQU0sS0FBSztBQUN4QyxRQUFNLFFBQVEsU0FBUyxTQUFTLENBQUMsQ0FBQztBQUNsQyxRQUFNLFVBQVcsU0FBUyxDQUFDLEtBQUssU0FBUyxTQUFTLENBQUMsQ0FBQyxLQUFNO0FBRTFELE1BQUksQ0FBQyxpQkFBaUIsT0FBTyxPQUFPLEdBQUc7QUFDckMsV0FBTztBQUFBLEVBQ1I7QUFFRCxTQUFPLFFBQVEsUUFBUSxxQkFBcUIsVUFBVTtBQUN4RDtBQUVBLFNBQVMsaUJBQWlCLGFBQWEsTUFBTSxLQUFLO0FBQ2hELFFBQU0sT0FBTyxvQkFBSSxLQUFLLENBQUM7QUFDdkIsT0FBSyxlQUFlLGFBQWEsR0FBRyxDQUFDO0FBQ3JDLFFBQU0scUJBQXFCLEtBQUssVUFBUyxLQUFNO0FBQy9DLFFBQU0sUUFBUSxPQUFPLEtBQUssSUFBSSxNQUFNLElBQUk7QUFDeEMsT0FBSyxXQUFXLEtBQUssV0FBWSxJQUFHLElBQUk7QUFDeEMsU0FBTztBQUNUO0FBS0EsTUFBTSxlQUFlLENBQUMsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7QUFFdEUsU0FBUyxnQkFBZ0IsTUFBTTtBQUM3QixTQUFPLE9BQU8sUUFBUSxLQUFNLE9BQU8sTUFBTSxLQUFLLE9BQU8sUUFBUTtBQUMvRDtBQUVBLFNBQVMsYUFBYSxNQUFNLE9BQU8sTUFBTTtBQUN2QyxTQUNFLFNBQVMsS0FDVCxTQUFTLE1BQ1QsUUFBUSxLQUNSLFNBQVMsYUFBYSxLQUFLLE1BQU0sZ0JBQWdCLElBQUksSUFBSSxLQUFLO0FBRWxFO0FBRUEsU0FBUyxzQkFBc0IsTUFBTSxXQUFXO0FBQzlDLFNBQU8sYUFBYSxLQUFLLGNBQWMsZ0JBQWdCLElBQUksSUFBSSxNQUFNO0FBQ3ZFO0FBRUEsU0FBUyxpQkFBaUIsT0FBTyxNQUFNLEtBQUs7QUFDMUMsU0FBTyxRQUFRLEtBQUssUUFBUSxNQUFNLE9BQU8sS0FBSyxPQUFPO0FBQ3ZEO0FBRUEsU0FBUyxhQUFhLE9BQU8sU0FBUyxTQUFTO0FBQzdDLE1BQUksVUFBVSxJQUFJO0FBQ2hCLFdBQU8sWUFBWSxLQUFLLFlBQVk7QUFBQSxFQUNyQztBQUVELFNBQ0UsV0FBVyxLQUNYLFVBQVUsTUFDVixXQUFXLEtBQ1gsVUFBVSxNQUNWLFNBQVMsS0FDVCxRQUFRO0FBRVo7QUFFQSxTQUFTLGlCQUFpQixRQUFRLFNBQVM7QUFDekMsU0FBTyxXQUFXLEtBQUssV0FBVztBQUNwQztBQy9RTyxTQUFTLFNBQVMsTUFBTSxRQUFRO0FBQ3JDLFNBQU8sU0FBUyxNQUFNLENBQUMsTUFBTTtBQUMvQjtBQ01PLFNBQVMsZ0NBQWdDLFNBQW9DO0FBQ2xGLE1BQUksQ0FBQyxTQUFTO0FBQ0wsV0FBQTtBQUFBLEVBQ1Q7QUFDTSxRQUFBLGFBQWEsU0FBUyxPQUFPO0FBRS9CLE1BQUEsQ0FBQyxRQUFRLFVBQVUsR0FBRztBQUNqQixXQUFBO0FBQUEsRUFDVDtBQUVJLE1BQUEsUUFBUSxTQUFTLEdBQUcsR0FBRztBQUN6QixXQUFPLElBQUksS0FBSyxRQUFRLFFBQVEsS0FBSyxFQUFFLENBQUM7QUFBQSxFQUMxQztBQUVJLE1BQUEsUUFBUSxTQUFTLEdBQUcsR0FBRztBQUNuQixVQUFBLFdBQVcsUUFBUSxNQUFNLEdBQUc7QUFFbEMsUUFBSSxTQUFTLENBQUMsTUFBTSxTQUFTLENBQUMsRUFBRSxTQUFTLEdBQUcsS0FBSyxTQUFTLENBQUMsRUFBRSxTQUFTLEdBQUcsSUFBSTtBQUMzRSxhQUFXLG9CQUFBLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLE1BQU0sTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQUEsSUFDbEU7QUFBQSxFQUNGO0FBQ08sU0FBQSxJQUFJLEtBQUssT0FBTztBQUN6QjtBQVVhLE1BQUEsaUJBQWlCLENBQzVCLFVBQ0Esb0JBQ29DO0FBQ3BDLFFBQU0sUUFBUSxDQUFBO0FBQ2QsUUFBTSxPQUFPLENBQUE7QUFFYixRQUFNLE1BQU07QUFDUixNQUFBLFNBQVMsV0FBVyxLQUFLLFFBQVE7QUFFL0IsUUFBQSxPQUFPLGlCQUFpQixRQUFRLEdBQUc7QUFDekMsTUFBSSxPQUFPLEdBQUc7QUFDTixVQUFBLEtBQUssR0FBRyxJQUFJLElBQUk7QUFDdEIsdUJBQ0UsS0FBSztBQUFBLE1BQ0gsR0FBRyxJQUFJLElBQ0wsT0FBTyxJQUNILGdCQUFnQixTQUFTLEtBQUssZUFBZSxJQUM3QyxnQkFBZ0IsT0FBTyxLQUFLLGVBQWUsQ0FDakQ7QUFBQSxJQUFBO0FBRUssYUFBQSxRQUFRLFFBQVEsSUFBSTtBQUFBLEVBQy9CO0FBRU0sUUFBQSxRQUFRLGtCQUFrQixRQUFRLEdBQUc7QUFDM0MsTUFBSSxRQUFRLEdBQUc7QUFDUCxVQUFBLEtBQUssR0FBRyxLQUFLLElBQUk7QUFDdkIsdUJBQ0UsS0FBSztBQUFBLE1BQ0gsR0FBRyxLQUFLLElBQ04sUUFBUSxJQUNKLGlCQUFpQixTQUFTLEtBQUssZUFBZSxJQUM5QyxpQkFBaUIsT0FBTyxLQUFLLGVBQWUsQ0FDbEQ7QUFBQSxJQUFBO0FBRUssYUFBQSxTQUFTLFFBQVEsS0FBSztBQUFBLEVBQ2pDO0FBRU0sUUFBQSxVQUFVLG9CQUFvQixRQUFRLEdBQUc7QUFDL0MsTUFBSSxVQUFVLEdBQUc7QUFDVCxVQUFBLEtBQUssR0FBRyxPQUFPLE1BQU07QUFDM0IsdUJBQ0UsS0FBSztBQUFBLE1BQ0gsR0FBRyxPQUFPLElBQ1IsVUFBVSxJQUNOLG1CQUFtQixTQUFTLEtBQUssZUFBZSxJQUNoRCxtQkFBbUIsT0FBTyxLQUFLLGVBQWUsQ0FDcEQ7QUFBQSxJQUFBO0FBQUEsRUFFTjtBQUVPLFNBQUE7QUFBQSxJQUNMLE9BQU8sTUFBTSxLQUFLLEdBQUc7QUFBQSxJQUNyQixNQUFNLEtBQUssS0FBSyxHQUFHO0FBQUEsRUFBQTtBQUV2QjsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDhdfQ==
|
|
283
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGREYXlzLm1qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRIb3Vycy5tanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluRGF5cy5tanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluSG91cnMubWpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1YkRheXMubWpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlSVNPLm1qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJIb3Vycy5tanMiLCIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMtZXhwZXJpbWVudGFsL2NvcmUvZGF0ZXRpbWUvZGF0ZS1oZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLm1qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20ubWpzXCI7XG5cbi8qKlxuICogQG5hbWUgYWRkRGF5c1xuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZGF5cyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkYXlzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIGFtb3VudCAtIFRoZSBhbW91bnQgb2YgZGF5cyB0byBiZSBhZGRlZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgZGF5cyBhZGRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgMTAgZGF5cyB0byAxIFNlcHRlbWJlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gYWRkRGF5cyhuZXcgRGF0ZSgyMDE0LCA4LCAxKSwgMTApXG4gKiAvLz0+IFRodSBTZXAgMTEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGF5cyhkYXRlLCBhbW91bnQpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSk7XG4gIGlmIChpc05hTihhbW91bnQpKSByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCBOYU4pO1xuICBpZiAoIWFtb3VudCkge1xuICAgIC8vIElmIDAgZGF5cywgbm8tb3AgdG8gYXZvaWQgY2hhbmdpbmcgdGltZXMgaW4gdGhlIGhvdXIgYmVmb3JlIGVuZCBvZiBEU1RcbiAgICByZXR1cm4gX2RhdGU7XG4gIH1cbiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBhbW91bnQpO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgYWRkRGF5cztcbiIsImltcG9ydCB7IGFkZE1pbGxpc2Vjb25kcyB9IGZyb20gXCIuL2FkZE1pbGxpc2Vjb25kcy5tanNcIjtcbmltcG9ydCB7IG1pbGxpc2Vjb25kc0luSG91ciB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcblxuLyoqXG4gKiBAbmFtZSBhZGRIb3Vyc1xuICogQGNhdGVnb3J5IEhvdXIgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGhvdXJzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGhvdXJzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIGFtb3VudCAtIFRoZSBhbW91bnQgb2YgaG91cnMgdG8gYmUgYWRkZWQuXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyBkYXRlIHdpdGggdGhlIGhvdXJzIGFkZGVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCAyIGhvdXJzIHRvIDEwIEp1bHkgMjAxNCAyMzowMDowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IGFkZEhvdXJzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAyMywgMCksIDIpXG4gKiAvLz0+IEZyaSBKdWwgMTEgMjAxNCAwMTowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkSG91cnMoZGF0ZSwgYW1vdW50KSB7XG4gIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGF0ZSwgYW1vdW50ICogbWlsbGlzZWNvbmRzSW5Ib3VyKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBhZGRIb3VycztcbiIsImltcG9ydCB7IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cy5tanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5tanNcIjtcblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5EYXlzXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGZ1bGwgZGF5cyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGZ1bGwgZGF5IHBlcmlvZHMgYmV0d2VlbiB0d28gZGF0ZXMuIEZyYWN0aW9uYWwgZGF5cyBhcmVcbiAqIHRydW5jYXRlZCB0b3dhcmRzIHplcm8uXG4gKlxuICogT25lIFwiZnVsbCBkYXlcIiBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBhIGxvY2FsIHRpbWUgaW4gb25lIGRheSB0byB0aGUgc2FtZVxuICogbG9jYWwgdGltZSBvbiB0aGUgbmV4dCBvciBwcmV2aW91cyBkYXkuIEEgZnVsbCBkYXkgY2FuIHNvbWV0aW1lcyBiZSBsZXNzIHRoYW5cbiAqIG9yIG1vcmUgdGhhbiAyNCBob3VycyBpZiBhIGRheWxpZ2h0IHNhdmluZ3MgY2hhbmdlIGhhcHBlbnMgYmV0d2VlbiB0d28gZGF0ZXMuXG4gKlxuICogVG8gaWdub3JlIERTVCBhbmQgb25seSBtZWFzdXJlIGV4YWN0IDI0LWhvdXIgcGVyaW9kcywgdXNlIHRoaXMgaW5zdGVhZDpcbiAqIGBNYXRoLnRydW5jKGRpZmZlcmVuY2VJbkhvdXJzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpLzI0KXwwYC5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqXG4gKiBAcGFyYW0gZGF0ZUxlZnQgLSBUaGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIGRhdGVSaWdodCAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGZ1bGwgZGF5cyBhY2NvcmRpbmcgdG8gdGhlIGxvY2FsIHRpbWV6b25lXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGZ1bGwgZGF5cyBhcmUgYmV0d2VlblxuICogLy8gMiBKdWx5IDIwMTEgMjM6MDA6MDAgYW5kIDIgSnVseSAyMDEyIDAwOjAwOjAwP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluRGF5cyhcbiAqICAgbmV3IERhdGUoMjAxMiwgNiwgMiwgMCwgMCksXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDIsIDIzLCAwKVxuICogKVxuICogLy89PiAzNjVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgZnVsbCBkYXlzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxMSAyMzo1OTowMCBhbmQgMyBKdWx5IDIwMTEgMDA6MDE6MDA/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5EYXlzKFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAzLCAwLCAxKSxcbiAqICAgbmV3IERhdGUoMjAxMSwgNiwgMiwgMjMsIDU5KVxuICogKVxuICogLy89PiAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGZ1bGwgZGF5cyBhcmUgYmV0d2VlblxuICogLy8gMSBNYXJjaCAyMDIwIDA6MDAgYW5kIDEgSnVuZSAyMDIwIDA6MDAgP1xuICogLy8gTm90ZTogYmVjYXVzZSBsb2NhbCB0aW1lIGlzIHVzZWQsIHRoZVxuICogLy8gcmVzdWx0IHdpbGwgYWx3YXlzIGJlIDkyIGRheXMsIGV2ZW4gaW5cbiAqIC8vIHRpbWUgem9uZXMgd2hlcmUgRFNUIHN0YXJ0cyBhbmQgdGhlXG4gKiAvLyBwZXJpb2QgaGFzIG9ubHkgOTIqMjQtMSBob3Vycy5cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkRheXMoXG4gKiAgIG5ldyBEYXRlKDIwMjAsIDUsIDEpLFxuICogICBuZXcgRGF0ZSgyMDIwLCAyLCAxKVxuICogKVxuICogLy89PiA5MlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZmVyZW5jZUluRGF5cyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KSB7XG4gIGNvbnN0IF9kYXRlTGVmdCA9IHRvRGF0ZShkYXRlTGVmdCk7XG4gIGNvbnN0IF9kYXRlUmlnaHQgPSB0b0RhdGUoZGF0ZVJpZ2h0KTtcblxuICBjb25zdCBzaWduID0gY29tcGFyZUxvY2FsQXNjKF9kYXRlTGVmdCwgX2RhdGVSaWdodCk7XG4gIGNvbnN0IGRpZmZlcmVuY2UgPSBNYXRoLmFicyhkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoX2RhdGVMZWZ0LCBfZGF0ZVJpZ2h0KSk7XG5cbiAgX2RhdGVMZWZ0LnNldERhdGUoX2RhdGVMZWZ0LmdldERhdGUoKSAtIHNpZ24gKiBkaWZmZXJlbmNlKTtcblxuICAvLyBNYXRoLmFicyhkaWZmIGluIGZ1bGwgZGF5cyAtIGRpZmYgaW4gY2FsZW5kYXIgZGF5cykgPT09IDEgaWYgbGFzdCBjYWxlbmRhciBkYXkgaXMgbm90IGZ1bGxcbiAgLy8gSWYgc28sIHJlc3VsdCBtdXN0IGJlIGRlY3JlYXNlZCBieSAxIGluIGFic29sdXRlIHZhbHVlXG4gIGNvbnN0IGlzTGFzdERheU5vdEZ1bGwgPSBOdW1iZXIoXG4gICAgY29tcGFyZUxvY2FsQXNjKF9kYXRlTGVmdCwgX2RhdGVSaWdodCkgPT09IC1zaWduLFxuICApO1xuICBjb25zdCByZXN1bHQgPSBzaWduICogKGRpZmZlcmVuY2UgLSBpc0xhc3REYXlOb3RGdWxsKTtcbiAgLy8gUHJldmVudCBuZWdhdGl2ZSB6ZXJvXG4gIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0O1xufVxuXG4vLyBMaWtlIGBjb21wYXJlQXNjYCBidXQgdXNlcyBsb2NhbCB0aW1lIG5vdCBVVEMsIHdoaWNoIGlzIG5lZWRlZFxuLy8gZm9yIGFjY3VyYXRlIGVxdWFsaXR5IGNvbXBhcmlzb25zIG9mIFVUQyB0aW1lc3RhbXBzIHRoYXQgZW5kIHVwXG4vLyBoYXZpbmcgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24gaW4gbG9jYWwgdGltZSwgZS5nLiBvbmUgaG91ciBiZWZvcmVcbi8vIERTVCBlbmRzIHZzLiB0aGUgaW5zdGFudCB0aGF0IERTVCBlbmRzLlxuZnVuY3Rpb24gY29tcGFyZUxvY2FsQXNjKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIHtcbiAgY29uc3QgZGlmZiA9XG4gICAgZGF0ZUxlZnQuZ2V0RnVsbFllYXIoKSAtIGRhdGVSaWdodC5nZXRGdWxsWWVhcigpIHx8XG4gICAgZGF0ZUxlZnQuZ2V0TW9udGgoKSAtIGRhdGVSaWdodC5nZXRNb250aCgpIHx8XG4gICAgZGF0ZUxlZnQuZ2V0RGF0ZSgpIC0gZGF0ZVJpZ2h0LmdldERhdGUoKSB8fFxuICAgIGRhdGVMZWZ0LmdldEhvdXJzKCkgLSBkYXRlUmlnaHQuZ2V0SG91cnMoKSB8fFxuICAgIGRhdGVMZWZ0LmdldE1pbnV0ZXMoKSAtIGRhdGVSaWdodC5nZXRNaW51dGVzKCkgfHxcbiAgICBkYXRlTGVmdC5nZXRTZWNvbmRzKCkgLSBkYXRlUmlnaHQuZ2V0U2Vjb25kcygpIHx8XG4gICAgZGF0ZUxlZnQuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlUmlnaHQuZ2V0TWlsbGlzZWNvbmRzKCk7XG5cbiAgaWYgKGRpZmYgPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IGVsc2UgaWYgKGRpZmYgPiAwKSB7XG4gICAgcmV0dXJuIDE7XG4gICAgLy8gUmV0dXJuIDAgaWYgZGlmZiBpcyAwOyByZXR1cm4gTmFOIGlmIGRpZmYgaXMgTmFOXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRpZmY7XG4gIH1cbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBkaWZmZXJlbmNlSW5EYXlzO1xuIiwiaW1wb3J0IHsgZ2V0Um91bmRpbmdNZXRob2QgfSBmcm9tIFwiLi9fbGliL2dldFJvdW5kaW5nTWV0aG9kLm1qc1wiO1xuaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5Ib3VyIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzIH0gZnJvbSBcIi4vZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzLm1qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZGlmZmVyZW5jZUluSG91cnN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5Ib3Vyc1xuICogQGNhdGVnb3J5IEhvdXIgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2YgaG91cnMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiBob3VycyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqXG4gKiBAcGFyYW0gZGF0ZUxlZnQgLSBUaGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIGRhdGVSaWdodCAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGhvdXJzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGhvdXJzIGFyZSBiZXR3ZWVuIDIgSnVseSAyMDE0IDA2OjUwOjAwIGFuZCAyIEp1bHkgMjAxNCAxOTowMDowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkhvdXJzKFxuICogICBuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxOSwgMCksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDYsIDUwKVxuICogKVxuICogLy89PiAxMlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZmVyZW5jZUluSG91cnMoZGF0ZUxlZnQsIGRhdGVSaWdodCwgb3B0aW9ucykge1xuICBjb25zdCBkaWZmID1cbiAgICBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMoZGF0ZUxlZnQsIGRhdGVSaWdodCkgLyBtaWxsaXNlY29uZHNJbkhvdXI7XG4gIHJldHVybiBnZXRSb3VuZGluZ01ldGhvZChvcHRpb25zPy5yb3VuZGluZ01ldGhvZCkoZGlmZik7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZUluSG91cnM7XG4iLCJpbXBvcnQgeyBhZGREYXlzIH0gZnJvbSBcIi4vYWRkRGF5cy5tanNcIjtcblxuLyoqXG4gKiBAbmFtZSBzdWJEYXlzXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRheXMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRheXMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIGRheXMgdG8gYmUgc3VidHJhY3RlZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgZGF5cyBzdWJ0cmFjdGVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDEwIGRheXMgZnJvbSAxIFNlcHRlbWJlciAyMDE0OlxuICogY29uc3QgcmVzdWx0ID0gc3ViRGF5cyhuZXcgRGF0ZSgyMDE0LCA4LCAxKSwgMTApXG4gKiAvLz0+IEZyaSBBdWcgMjIgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViRGF5cyhkYXRlLCBhbW91bnQpIHtcbiAgcmV0dXJuIGFkZERheXMoZGF0ZSwgLWFtb3VudCk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3ViRGF5cztcbiIsImltcG9ydCB7IG1pbGxpc2Vjb25kc0luSG91ciwgbWlsbGlzZWNvbmRzSW5NaW51dGUgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBwYXJzZUlTT30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHBhcnNlSVNPXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFBhcnNlIElTTyBzdHJpbmdcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFBhcnNlIHRoZSBnaXZlbiBzdHJpbmcgaW4gSVNPIDg2MDEgZm9ybWF0IGFuZCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBGdW5jdGlvbiBhY2NlcHRzIGNvbXBsZXRlIElTTyA4NjAxIGZvcm1hdHMgYXMgd2VsbCBhcyBwYXJ0aWFsIGltcGxlbWVudGF0aW9ucy5cbiAqIElTTyA4NjAxOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzbid0IGEgc3RyaW5nLCB0aGUgZnVuY3Rpb24gY2Fubm90IHBhcnNlIHRoZSBzdHJpbmcgb3JcbiAqIHRoZSB2YWx1ZXMgYXJlIGludmFsaWQsIGl0IHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICpcbiAqIEBwYXJhbSBhcmd1bWVudCAtIFRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHN0cmluZyAnMjAxNC0wMi0xMVQxMTozMDozMCcgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHBhcnNlSVNPKCcyMDE0LTAyLTExVDExOjMwOjMwJylcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgc3RyaW5nICcrMDIwMTQxMDEnIHRvIGRhdGUsXG4gKiAvLyBpZiB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBleHRlbmRlZCB5ZWFyIGZvcm1hdCBpcyAxOlxuICogY29uc3QgcmVzdWx0ID0gcGFyc2VJU08oJyswMjAxNDEwMScsIHsgYWRkaXRpb25hbERpZ2l0czogMSB9KVxuICogLy89PiBGcmkgQXByIDExIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSVNPKGFyZ3VtZW50LCBvcHRpb25zKSB7XG4gIGNvbnN0IGFkZGl0aW9uYWxEaWdpdHMgPSBvcHRpb25zPy5hZGRpdGlvbmFsRGlnaXRzID8/IDI7XG4gIGNvbnN0IGRhdGVTdHJpbmdzID0gc3BsaXREYXRlU3RyaW5nKGFyZ3VtZW50KTtcblxuICBsZXQgZGF0ZTtcbiAgaWYgKGRhdGVTdHJpbmdzLmRhdGUpIHtcbiAgICBjb25zdCBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cyk7XG4gICAgZGF0ZSA9IHBhcnNlRGF0ZShwYXJzZVllYXJSZXN1bHQucmVzdERhdGVTdHJpbmcsIHBhcnNlWWVhclJlc3VsdC55ZWFyKTtcbiAgfVxuXG4gIGlmICghZGF0ZSB8fCBpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxuXG4gIGNvbnN0IHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBsZXQgdGltZSA9IDA7XG4gIGxldCBvZmZzZXQ7XG5cbiAgaWYgKGRhdGVTdHJpbmdzLnRpbWUpIHtcbiAgICB0aW1lID0gcGFyc2VUaW1lKGRhdGVTdHJpbmdzLnRpbWUpO1xuICAgIGlmIChpc05hTih0aW1lKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRhdGVTdHJpbmdzLnRpbWV6b25lKSB7XG4gICAgb2Zmc2V0ID0gcGFyc2VUaW1lem9uZShkYXRlU3RyaW5ncy50aW1lem9uZSk7XG4gICAgaWYgKGlzTmFOKG9mZnNldCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkaXJ0eURhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lKTtcbiAgICAvLyBKUyBwYXJzZWQgc3RyaW5nIGFzc3VtaW5nIGl0J3MgaW4gVVRDIHRpbWV6b25lXG4gICAgLy8gYnV0IHdlIG5lZWQgaXQgdG8gYmUgcGFyc2VkIGluIG91ciB0aW1lem9uZVxuICAgIC8vIHNvIHdlIHVzZSB1dGMgdmFsdWVzIHRvIGJ1aWxkIGRhdGUgaW4gb3VyIHRpbWV6b25lLlxuICAgIC8vIFllYXIgdmFsdWVzIGZyb20gMCB0byA5OSBtYXAgdG8gdGhlIHllYXJzIDE5MDAgdG8gMTk5OVxuICAgIC8vIHNvIHNldCB5ZWFyIGV4cGxpY2l0bHkgd2l0aCBzZXRGdWxsWWVhci5cbiAgICBjb25zdCByZXN1bHQgPSBuZXcgRGF0ZSgwKTtcbiAgICByZXN1bHQuc2V0RnVsbFllYXIoXG4gICAgICBkaXJ0eURhdGUuZ2V0VVRDRnVsbFllYXIoKSxcbiAgICAgIGRpcnR5RGF0ZS5nZXRVVENNb250aCgpLFxuICAgICAgZGlydHlEYXRlLmdldFVUQ0RhdGUoKSxcbiAgICApO1xuICAgIHJlc3VsdC5zZXRIb3VycyhcbiAgICAgIGRpcnR5RGF0ZS5nZXRVVENIb3VycygpLFxuICAgICAgZGlydHlEYXRlLmdldFVUQ01pbnV0ZXMoKSxcbiAgICAgIGRpcnR5RGF0ZS5nZXRVVENTZWNvbmRzKCksXG4gICAgICBkaXJ0eURhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCksXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUgKyBvZmZzZXQpO1xufVxuXG5jb25zdCBwYXR0ZXJucyA9IHtcbiAgZGF0ZVRpbWVEZWxpbWl0ZXI6IC9bVCBdLyxcbiAgdGltZVpvbmVEZWxpbWl0ZXI6IC9bWiBdL2ksXG4gIHRpbWV6b25lOiAvKFtaKy1dLiopJC8sXG59O1xuXG5jb25zdCBkYXRlUmVnZXggPVxuICAvXi0/KD86KFxcZHszfSl8KFxcZHsyfSkoPzotPyhcXGR7Mn0pKT98VyhcXGR7Mn0pKD86LT8oXFxkezF9KSk/fCkkLztcbmNvbnN0IHRpbWVSZWdleCA9XG4gIC9eKFxcZHsyfSg/OlsuLF1cXGQqKT8pKD86Oj8oXFxkezJ9KD86Wy4sXVxcZCopPykpPyg/Ojo/KFxcZHsyfSg/OlsuLF1cXGQqKT8pKT8kLztcbmNvbnN0IHRpbWV6b25lUmVnZXggPSAvXihbKy1dKShcXGR7Mn0pKD86Oj8oXFxkezJ9KSk/JC87XG5cbmZ1bmN0aW9uIHNwbGl0RGF0ZVN0cmluZyhkYXRlU3RyaW5nKSB7XG4gIGNvbnN0IGRhdGVTdHJpbmdzID0ge307XG4gIGNvbnN0IGFycmF5ID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy5kYXRlVGltZURlbGltaXRlcik7XG4gIGxldCB0aW1lU3RyaW5nO1xuXG4gIC8vIFRoZSByZWdleCBtYXRjaCBzaG91bGQgb25seSByZXR1cm4gYXQgbWF4aW11bSB0d28gYXJyYXkgZWxlbWVudHMuXG4gIC8vIFtkYXRlXSwgW3RpbWVdLCBvciBbZGF0ZSwgdGltZV0uXG4gIGlmIChhcnJheS5sZW5ndGggPiAyKSB7XG4gICAgcmV0dXJuIGRhdGVTdHJpbmdzO1xuICB9XG5cbiAgaWYgKC86Ly50ZXN0KGFycmF5WzBdKSkge1xuICAgIHRpbWVTdHJpbmcgPSBhcnJheVswXTtcbiAgfSBlbHNlIHtcbiAgICBkYXRlU3RyaW5ncy5kYXRlID0gYXJyYXlbMF07XG4gICAgdGltZVN0cmluZyA9IGFycmF5WzFdO1xuICAgIGlmIChwYXR0ZXJucy50aW1lWm9uZURlbGltaXRlci50ZXN0KGRhdGVTdHJpbmdzLmRhdGUpKSB7XG4gICAgICBkYXRlU3RyaW5ncy5kYXRlID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy50aW1lWm9uZURlbGltaXRlcilbMF07XG4gICAgICB0aW1lU3RyaW5nID0gZGF0ZVN0cmluZy5zdWJzdHIoXG4gICAgICAgIGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLFxuICAgICAgICBkYXRlU3RyaW5nLmxlbmd0aCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRpbWVTdHJpbmcpIHtcbiAgICBjb25zdCB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lLmV4ZWModGltZVN0cmluZyk7XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZy5yZXBsYWNlKHRva2VuWzFdLCBcIlwiKTtcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWV6b25lID0gdG9rZW5bMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWUgPSB0aW1lU3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRlU3RyaW5ncztcbn1cblxuZnVuY3Rpb24gcGFyc2VZZWFyKGRhdGVTdHJpbmcsIGFkZGl0aW9uYWxEaWdpdHMpIHtcbiAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFxuICAgIFwiXig/OihcXFxcZHs0fXxbKy1dXFxcXGR7XCIgK1xuICAgICAgKDQgKyBhZGRpdGlvbmFsRGlnaXRzKSArXG4gICAgICBcIn0pfChcXFxcZHsyfXxbKy1dXFxcXGR7XCIgK1xuICAgICAgKDIgKyBhZGRpdGlvbmFsRGlnaXRzKSArXG4gICAgICBcIn0pJClcIixcbiAgKTtcblxuICBjb25zdCBjYXB0dXJlcyA9IGRhdGVTdHJpbmcubWF0Y2gocmVnZXgpO1xuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgeWVhclxuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4geyB5ZWFyOiBOYU4sIHJlc3REYXRlU3RyaW5nOiBcIlwiIH07XG5cbiAgY29uc3QgeWVhciA9IGNhcHR1cmVzWzFdID8gcGFyc2VJbnQoY2FwdHVyZXNbMV0pIDogbnVsbDtcbiAgY29uc3QgY2VudHVyeSA9IGNhcHR1cmVzWzJdID8gcGFyc2VJbnQoY2FwdHVyZXNbMl0pIDogbnVsbDtcblxuICAvLyBlaXRoZXIgeWVhciBvciBjZW50dXJ5IGlzIG51bGwsIG5vdCBib3RoXG4gIHJldHVybiB7XG4gICAgeWVhcjogY2VudHVyeSA9PT0gbnVsbCA/IHllYXIgOiBjZW50dXJ5ICogMTAwLFxuICAgIHJlc3REYXRlU3RyaW5nOiBkYXRlU3RyaW5nLnNsaWNlKChjYXB0dXJlc1sxXSB8fCBjYXB0dXJlc1syXSkubGVuZ3RoKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXRlKGRhdGVTdHJpbmcsIHllYXIpIHtcbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgaWYgKHllYXIgPT09IG51bGwpIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuXG4gIGNvbnN0IGNhcHR1cmVzID0gZGF0ZVN0cmluZy5tYXRjaChkYXRlUmVnZXgpO1xuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgc3RyaW5nXG4gIGlmICghY2FwdHVyZXMpIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuXG4gIGNvbnN0IGlzV2Vla0RhdGUgPSAhIWNhcHR1cmVzWzRdO1xuICBjb25zdCBkYXlPZlllYXIgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzFdKTtcbiAgY29uc3QgbW9udGggPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzJdKSAtIDE7XG4gIGNvbnN0IGRheSA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbM10pO1xuICBjb25zdCB3ZWVrID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1s0XSk7XG4gIGNvbnN0IGRheU9mV2VlayA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbNV0pIC0gMTtcblxuICBpZiAoaXNXZWVrRGF0ZSkge1xuICAgIGlmICghdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXlPZldlZWspKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG4gICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2VlaywgZGF5T2ZXZWVrKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCk7XG4gICAgaWYgKFxuICAgICAgIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF5KSB8fFxuICAgICAgIXZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgTWF0aC5tYXgoZGF5T2ZZZWFyLCBkYXkpKTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZURhdGVVbml0KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IHBhcnNlSW50KHZhbHVlKSA6IDE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVGltZSh0aW1lU3RyaW5nKSB7XG4gIGNvbnN0IGNhcHR1cmVzID0gdGltZVN0cmluZy5tYXRjaCh0aW1lUmVnZXgpO1xuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4gTmFOOyAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgdGltZVxuXG4gIGNvbnN0IGhvdXJzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1sxXSk7XG4gIGNvbnN0IG1pbnV0ZXMgPSBwYXJzZVRpbWVVbml0KGNhcHR1cmVzWzJdKTtcbiAgY29uc3Qgc2Vjb25kcyA9IHBhcnNlVGltZVVuaXQoY2FwdHVyZXNbM10pO1xuXG4gIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGhvdXJzICogbWlsbGlzZWNvbmRzSW5Ib3VyICsgbWludXRlcyAqIG1pbGxpc2Vjb25kc0luTWludXRlICsgc2Vjb25kcyAqIDEwMDBcbiAgKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lVW5pdCh2YWx1ZSkge1xuICByZXR1cm4gKHZhbHVlICYmIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZShcIixcIiwgXCIuXCIpKSkgfHwgMDtcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lem9uZSh0aW1lem9uZVN0cmluZykge1xuICBpZiAodGltZXpvbmVTdHJpbmcgPT09IFwiWlwiKSByZXR1cm4gMDtcblxuICBjb25zdCBjYXB0dXJlcyA9IHRpbWV6b25lU3RyaW5nLm1hdGNoKHRpbWV6b25lUmVnZXgpO1xuICBpZiAoIWNhcHR1cmVzKSByZXR1cm4gMDtcblxuICBjb25zdCBzaWduID0gY2FwdHVyZXNbMV0gPT09IFwiK1wiID8gLTEgOiAxO1xuICBjb25zdCBob3VycyA9IHBhcnNlSW50KGNhcHR1cmVzWzJdKTtcbiAgY29uc3QgbWludXRlcyA9IChjYXB0dXJlc1szXSAmJiBwYXJzZUludChjYXB0dXJlc1szXSkpIHx8IDA7XG5cbiAgaWYgKCF2YWxpZGF0ZVRpbWV6b25lKGhvdXJzLCBtaW51dGVzKSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICByZXR1cm4gc2lnbiAqIChob3VycyAqIG1pbGxpc2Vjb25kc0luSG91ciArIG1pbnV0ZXMgKiBtaWxsaXNlY29uZHNJbk1pbnV0ZSk7XG59XG5cbmZ1bmN0aW9uIGRheU9mSVNPV2Vla1llYXIoaXNvV2Vla1llYXIsIHdlZWssIGRheSkge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCk7XG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoaXNvV2Vla1llYXIsIDAsIDQpO1xuICBjb25zdCBmb3VydGhPZkphbnVhcnlEYXkgPSBkYXRlLmdldFVUQ0RheSgpIHx8IDc7XG4gIGNvbnN0IGRpZmYgPSAod2VlayAtIDEpICogNyArIGRheSArIDEgLSBmb3VydGhPZkphbnVhcnlEYXk7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIGRpZmYpO1xuICByZXR1cm4gZGF0ZTtcbn1cblxuLy8gVmFsaWRhdGlvbiBmdW5jdGlvbnNcblxuLy8gRmVicnVhcnkgaXMgbnVsbCB0byBoYW5kbGUgdGhlIGxlYXAgeWVhciAodXNpbmcgfHwpXG5jb25zdCBkYXlzSW5Nb250aHMgPSBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcblxuZnVuY3Rpb24gaXNMZWFwWWVhckluZGV4KHllYXIpIHtcbiAgcmV0dXJuIHllYXIgJSA0MDAgPT09IDAgfHwgKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRhdGUpIHtcbiAgcmV0dXJuIChcbiAgICBtb250aCA+PSAwICYmXG4gICAgbW9udGggPD0gMTEgJiZcbiAgICBkYXRlID49IDEgJiZcbiAgICBkYXRlIDw9IChkYXlzSW5Nb250aHNbbW9udGhdIHx8IChpc0xlYXBZZWFySW5kZXgoeWVhcikgPyAyOSA6IDI4KSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikge1xuICByZXR1cm4gZGF5T2ZZZWFyID49IDEgJiYgZGF5T2ZZZWFyIDw9IChpc0xlYXBZZWFySW5kZXgoeWVhcikgPyAzNjYgOiAzNjUpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdlZWtEYXRlKF95ZWFyLCB3ZWVrLCBkYXkpIHtcbiAgcmV0dXJuIHdlZWsgPj0gMSAmJiB3ZWVrIDw9IDUzICYmIGRheSA+PSAwICYmIGRheSA8PSA2O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHtcbiAgaWYgKGhvdXJzID09PSAyNCkge1xuICAgIHJldHVybiBtaW51dGVzID09PSAwICYmIHNlY29uZHMgPT09IDA7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHNlY29uZHMgPj0gMCAmJlxuICAgIHNlY29uZHMgPCA2MCAmJlxuICAgIG1pbnV0ZXMgPj0gMCAmJlxuICAgIG1pbnV0ZXMgPCA2MCAmJlxuICAgIGhvdXJzID49IDAgJiZcbiAgICBob3VycyA8IDI1XG4gICk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGltZXpvbmUoX2hvdXJzLCBtaW51dGVzKSB7XG4gIHJldHVybiBtaW51dGVzID49IDAgJiYgbWludXRlcyA8PSA1OTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBwYXJzZUlTTztcbiIsImltcG9ydCB7IGFkZEhvdXJzIH0gZnJvbSBcIi4vYWRkSG91cnMubWpzXCI7XG5cbi8qKlxuICogQG5hbWUgc3ViSG91cnNcbiAqIEBjYXRlZ29yeSBIb3VyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGhvdXJzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBob3VycyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIGFtb3VudCAtIFRoZSBhbW91bnQgb2YgaG91cnMgdG8gYmUgc3VidHJhY3RlZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgaG91cnMgc3VidHJhY3RlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCAyIGhvdXJzIGZyb20gMTEgSnVseSAyMDE0IDAxOjAwOjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3ViSG91cnMobmV3IERhdGUoMjAxNCwgNiwgMTEsIDEsIDApLCAyKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMjM6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YkhvdXJzKGRhdGUsIGFtb3VudCkge1xuICByZXR1cm4gYWRkSG91cnMoZGF0ZSwgLWFtb3VudCk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3ViSG91cnM7XG4iLCJpbXBvcnQge1xuICBpMThuRHVyYXRpb25Ib3VyLFxuICBpMThuRHVyYXRpb25NaW51dGUsXG4gIGkxOG5EdXJhdGlvbkRheSxcbn0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9pMThuLmpzJztcbmltcG9ydCB7XG4gIGlzVmFsaWQsXG4gIHBhcnNlSVNPLFxuICBkaWZmZXJlbmNlSW5EYXlzLFxuICBkaWZmZXJlbmNlSW5Ib3VycyxcbiAgZGlmZmVyZW5jZUluTWludXRlcyxcbiAgYWRkTWludXRlcyxcbiAgc3ViSG91cnMsXG4gIHN1YkRheXMsXG59IGZyb20gJ2RhdGUtZm5zJztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIG9mZnNldCBvZiBhIElTTyBkYXRlIHN0cmluZy4gVGhpcyBuZWVkcyB0byBiZSBkb25lIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBvZmZzZXQgaXMgaWdub3JlZC5cbiAqIElmIGl0IGlzIG5vdCByZW1vdmVkIHRoZSB0aW1lIHdvdWxkIGJlIGNvbnZlcnRlZCB0byB0aGUgYnJvd3NlcnMgbG9jYWwgdGltZS5cbiAqIEV4YW1wbGU6IFwiMjAyMi0wOC0yOVQwOTozMDowMCswMzowMFwiIHdvdWxkIGJlIGNoYW5nZWQgdG8gXCIyMDIyLTA4LTI5VDA4OjMwOjAwKzAyOjAwXCIgLS0+IG5vdCB0aGUgZGVzaXJlZCBvdXRjb21lLCBhcyB3ZSB3YW50IHRvIHVzZSB0aGUgdGltZSBpbiB0aGUgdGltZXpvbmUgYW5kIG5vdCB0aGUgbG9jYWwgdGltZS5cbiAqXG4gKiBBZnRlciB0aGUgb2Zmc2V0IGlzIHJlbW92ZWQgYSBuZXcgZGF0ZSBpcyBjcmVhdGVkIGluIHRoZSBicm93c2VycyBsb2NhbCB0aW1lLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgdGltZSBvZiB0aGUgSVNPIGRhdGUgc3RyaW5nIGlzIGRpc3BsYXllZCBhbmQgbm90IGEgY29udmVydGVkIHRpbWUuXG4gKiBFeGFtcGxlOiBcIjIwMjItMDgtMjlUMDk6MzA6MDArMDM6MDBcIiB3b3VsZCBiZSBjaGFuZ2VkIHRvIFwiMjAyMi0wOC0yOVQwOTozMDowMCswMjowMFwiIC0tPiBkZXNpcmVkIG91dGNvbWVcbiAqIEF0dGVudGlvbjogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjb252ZXJ0IHRoZSB0aW1lIHRvIHRoZSBjb3JyZWN0IHRpbWUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLiBJdCBpcyBhIHdvcmthcm91bmQgdG8gbWFrZSBzdXJlLCB0aGF0IHRoZSBnaXZlbiB0aW1lIGlzIGRpc3BsYXllZCB3aXRob3V0IGJlaW5nIGNvbnZlcnRlZC5cbiAqXG4gKiBPZmZzZXQ6IERpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdGltZXpvbmUgYW5kIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lLlxuICpcbiAqIEBwYXJhbSBpc29UaW1lIC0gdGhlIGlzbyB0aW1lIHdpdGggdGhlIHRpbWV6b25lIG9mZnNldFxuICogQHJldHVybnMgYSBuZXcgZGF0ZSB3aXRoIHRoZSBsb2NhbCB0aW1lem9uZSB3aXRoIHRoZSBsb2NhbCBvZmZzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcoaXNvVGltZT86IHN0cmluZyk6IERhdGUgfCB1bmRlZmluZWQge1xuICBpZiAoIWlzb1RpbWUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHBhcnNlZERhdGUgPSBwYXJzZUlTTyhpc29UaW1lKTtcblxuICBpZiAoIWlzVmFsaWQocGFyc2VkRGF0ZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGlzb1RpbWUuaW5jbHVkZXMoJ1onKSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShpc29UaW1lLnJlcGxhY2UoJ1onLCAnJykpO1xuICB9XG5cbiAgaWYgKGlzb1RpbWUuaW5jbHVkZXMoJ1QnKSkge1xuICAgIGNvbnN0IGRhdGVUaW1lID0gaXNvVGltZS5zcGxpdCgnVCcpO1xuXG4gICAgaWYgKGRhdGVUaW1lWzFdICYmIChkYXRlVGltZVsxXS5pbmNsdWRlcygnKycpIHx8IGRhdGVUaW1lWzFdLmluY2x1ZGVzKCctJykpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoYCR7ZGF0ZVRpbWVbMF19VCR7ZGF0ZVRpbWVbMV0uc3BsaXQoL1srLV0vKVswXX1gKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKGlzb1RpbWUpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY29udmVydHMgYSBkdXJhdGlvbiBudW1iZXIgdG8gZGF0ZSBzdHJpbmcgd2l0aCBzcGVjaWZpYyBmb3JtYXRcbiAqXG4gKiBAcGFyYW0gZHVyYXRpb24gLSBkdXJhdGlvbiBpbiBtaW51dGVzXG4gKiBAcGFyYW0gY3VycmVudExhbmd1YWdlIC0gY3VycmVudExhbmd1YWdlXG4gKiBAcmV0dXJucyBhbiBPYmplY3Qgd2l0aCB0d28gc3RyaW5ncyBpbiB0aGUgZm9ybWF0IFwiZGQgaGggbW1cIiAoc2hvcnQpIGFuIFwieCBEYXkocykgeCBIb3VyKHMpIHggTWludXRlKHMpIChsb25nKVwiXG4gKiAqL1xuXG5leHBvcnQgY29uc3QgZHVyYXRpb25Ub1RpbWUgPSAoXG4gIGR1cmF0aW9uOiBudW1iZXIsXG4gIGN1cnJlbnRMYW5ndWFnZT86IHN0cmluZyxcbik6IHsgc2hvcnQ6IHN0cmluZzsgbG9uZzogc3RyaW5nIH0gPT4ge1xuICBjb25zdCBzaG9ydCA9IFtdO1xuICBjb25zdCBsb25nID0gW107XG5cbiAgY29uc3Qgbm93ID0gMDtcbiAgbGV0IGZ1dHVyZSA9IGFkZE1pbnV0ZXMobm93LCBkdXJhdGlvbik7XG5cbiAgY29uc3QgZGF5cyA9IGRpZmZlcmVuY2VJbkRheXMoZnV0dXJlLCBub3cpO1xuICBpZiAoZGF5cyA+IDApIHtcbiAgICBzaG9ydC5wdXNoKGAke2RheXN9IGRgKTtcbiAgICBjdXJyZW50TGFuZ3VhZ2UgJiZcbiAgICAgIGxvbmcucHVzaChcbiAgICAgICAgYCR7ZGF5c30gJHtcbiAgICAgICAgICBkYXlzID4gMVxuICAgICAgICAgICAgPyBpMThuRHVyYXRpb25EYXkubXVsdGlwbGUubG9uZ1tjdXJyZW50TGFuZ3VhZ2VdXG4gICAgICAgICAgICA6IGkxOG5EdXJhdGlvbkRheS5zaW5nbGUubG9uZ1tjdXJyZW50TGFuZ3VhZ2VdXG4gICAgICAgIH1gLFxuICAgICAgKTtcbiAgICBmdXR1cmUgPSBzdWJEYXlzKGZ1dHVyZSwgZGF5cyk7XG4gIH1cblxuICBjb25zdCBob3VycyA9IGRpZmZlcmVuY2VJbkhvdXJzKGZ1dHVyZSwgbm93KTtcbiAgaWYgKGhvdXJzID4gMCkge1xuICAgIHNob3J0LnB1c2goYCR7aG91cnN9IGhgKTtcbiAgICBjdXJyZW50TGFuZ3VhZ2UgJiZcbiAgICAgIGxvbmcucHVzaChcbiAgICAgICAgYCR7aG91cnN9ICR7XG4gICAgICAgICAgaG91cnMgPiAxXG4gICAgICAgICAgICA/IGkxOG5EdXJhdGlvbkhvdXIubXVsdGlwbGUubG9uZ1tjdXJyZW50TGFuZ3VhZ2VdXG4gICAgICAgICAgICA6IGkxOG5EdXJhdGlvbkhvdXIuc2luZ2xlLmxvbmdbY3VycmVudExhbmd1YWdlXVxuICAgICAgICB9YCxcbiAgICAgICk7XG4gICAgZnV0dXJlID0gc3ViSG91cnMoZnV0dXJlLCBob3Vycyk7XG4gIH1cblxuICBjb25zdCBtaW51dGVzID0gZGlmZmVyZW5jZUluTWludXRlcyhmdXR1cmUsIG5vdyk7XG4gIGlmIChtaW51dGVzID4gMCkge1xuICAgIHNob3J0LnB1c2goYCR7bWludXRlc30gbWluYCk7XG4gICAgY3VycmVudExhbmd1YWdlICYmXG4gICAgICBsb25nLnB1c2goXG4gICAgICAgIGAke21pbnV0ZXN9ICR7XG4gICAgICAgICAgbWludXRlcyA+IDFcbiAgICAgICAgICAgID8gaTE4bkR1cmF0aW9uTWludXRlLm11bHRpcGxlLmxvbmdbY3VycmVudExhbmd1YWdlXVxuICAgICAgICAgICAgOiBpMThuRHVyYXRpb25NaW51dGUuc2luZ2xlLmxvbmdbY3VycmVudExhbmd1YWdlXVxuICAgICAgICB9YCxcbiAgICAgICk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNob3J0OiBzaG9ydC5qb2luKCcgJyksXG4gICAgbG9uZzogbG9uZy5qb2luKCcgJyksXG4gIH07XG59O1xuIl0sIm5hbWVz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
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import { Notice } from './timetable-properties.js';
|
|
1
|
+
import { Leg, Notice } from './timetable-properties.js';
|
|
2
2
|
|
|
3
|
-
export declare const isRideLeg: (leg: any) => leg is
|
|
4
|
-
|
|
3
|
+
export declare const isRideLeg: (leg: any) => leg is Extract<Leg, {
|
|
4
|
+
__typename: "PTRideLeg";
|
|
5
|
+
}>;
|
|
6
|
+
export declare const isConnectionLeg: (leg: any) => leg is Extract<Leg, {
|
|
7
|
+
__typename: "PTConnectionLeg";
|
|
8
|
+
}>;
|
|
5
9
|
export declare const extractTimeAndStringFromNoticeText: (notice?: Notice) => {
|
|
6
10
|
duration: number;
|
|
7
11
|
text: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timetable-helper.d.ts","sourceRoot":"","sources":["../../../../../src/elements-experimental/core/timetable/timetable-helper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"timetable-helper.d.ts","sourceRoot":"","sources":["../../../../../src/elements-experimental/core/timetable/timetable-helper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAE7D,eAAO,MAAM,SAAS,QAAS,GAAG,KAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;IAAE,UAAU,EAAE,WAAW,CAAA;CAAE,CAEnF,CAAC;AAEF,eAAO,MAAM,eAAe,QACrB,GAAG,KACP,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;IAAE,UAAU,EAAE,iBAAiB,CAAA;CAAE,CAEvD,CAAC;AAEF,eAAO,MAAM,kCAAkC,YACpC,MAAM,KACd;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAWlC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { t as toDate, c as constructFrom, b as millisecondsInMinute } from "./constants-BMGwMkN3.js";
|
|
2
|
+
function addMilliseconds(date, amount) {
|
|
3
|
+
const timestamp = +toDate(date);
|
|
4
|
+
return constructFrom(date, timestamp + amount);
|
|
5
|
+
}
|
|
6
|
+
function addMinutes(date, amount) {
|
|
7
|
+
return addMilliseconds(date, amount * millisecondsInMinute);
|
|
8
|
+
}
|
|
9
|
+
function getRoundingMethod(method) {
|
|
10
|
+
return (number) => {
|
|
11
|
+
const round = method ? Math[method] : Math.trunc;
|
|
12
|
+
const result = round(number);
|
|
13
|
+
return result === 0 ? 0 : result;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function differenceInMilliseconds(dateLeft, dateRight) {
|
|
17
|
+
return +toDate(dateLeft) - +toDate(dateRight);
|
|
18
|
+
}
|
|
19
|
+
function differenceInMinutes(dateLeft, dateRight, options) {
|
|
20
|
+
const diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInMinute;
|
|
21
|
+
return getRoundingMethod(options == null ? void 0 : options.roundingMethod)(diff);
|
|
22
|
+
}
|
|
23
|
+
export {
|
|
24
|
+
addMinutes as a,
|
|
25
|
+
addMilliseconds as b,
|
|
26
|
+
differenceInMilliseconds as c,
|
|
27
|
+
differenceInMinutes as d,
|
|
28
|
+
getRoundingMethod as g
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZmVyZW5jZUluTWludXRlcy1ESHRQRGlVRS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZE1pbGxpc2Vjb25kcy5tanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTWludXRlcy5tanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9nZXRSb3VuZGluZ01ldGhvZC5tanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzLm1qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5NaW51dGVzLm1qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUubWpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5tanNcIjtcblxuLyoqXG4gKiBAbmFtZSBhZGRNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSBhbW91bnQgLSBUaGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZE1pbGxpc2Vjb25kcyhkYXRlLCBhbW91bnQpIHtcbiAgY29uc3QgdGltZXN0YW1wID0gK3RvRGF0ZShkYXRlKTtcbiAgcmV0dXJuIGNvbnN0cnVjdEZyb20oZGF0ZSwgdGltZXN0YW1wICsgYW1vdW50KTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBhZGRNaWxsaXNlY29uZHM7XG4iLCJpbXBvcnQgeyBhZGRNaWxsaXNlY29uZHMgfSBmcm9tIFwiLi9hZGRNaWxsaXNlY29uZHMubWpzXCI7XG5pbXBvcnQgeyBtaWxsaXNlY29uZHNJbk1pbnV0ZSB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcblxuLyoqXG4gKiBAbmFtZSBhZGRNaW51dGVzXG4gKiBAY2F0ZWdvcnkgTWludXRlIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaW51dGVzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbnV0ZXMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCBvZiBtaW51dGVzIHRvIGJlIGFkZGVkLlxuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaW51dGVzIGFkZGVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCAzMCBtaW51dGVzIHRvIDEwIEp1bHkgMjAxNCAxMjowMDowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IGFkZE1pbnV0ZXMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCAwKSwgMzApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjozMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkTWludXRlcyhkYXRlLCBhbW91bnQpIHtcbiAgcmV0dXJuIGFkZE1pbGxpc2Vjb25kcyhkYXRlLCBhbW91bnQgKiBtaWxsaXNlY29uZHNJbk1pbnV0ZSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgYWRkTWludXRlcztcbiIsImV4cG9ydCBmdW5jdGlvbiBnZXRSb3VuZGluZ01ldGhvZChtZXRob2QpIHtcbiAgcmV0dXJuIChudW1iZXIpID0+IHtcbiAgICBjb25zdCByb3VuZCA9IG1ldGhvZCA/IE1hdGhbbWV0aG9kXSA6IE1hdGgudHJ1bmM7XG4gICAgY29uc3QgcmVzdWx0ID0gcm91bmQobnVtYmVyKTtcbiAgICAvLyBQcmV2ZW50IG5lZ2F0aXZlIHplcm9cbiAgICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDtcbiAgfTtcbn1cbiIsImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5tanNcIjtcblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGVMZWZ0IC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBkYXRlUmlnaHQgLSBUaGUgZWFybGllciBkYXRlXG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgbWlsbGlzZWNvbmRzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxNCAxMjozMDoyMC42MDAgYW5kIDIgSnVseSAyMDE0IDEyOjMwOjIxLjcwMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyhcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgMTIsIDMwLCAyMSwgNzAwKSxcbiAqICAgbmV3IERhdGUoMjAxNCwgNiwgMiwgMTIsIDMwLCAyMCwgNjAwKVxuICogKVxuICogLy89PiAxMTAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMoZGF0ZUxlZnQsIGRhdGVSaWdodCkge1xuICByZXR1cm4gK3RvRGF0ZShkYXRlTGVmdCkgLSArdG9EYXRlKGRhdGVSaWdodCk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzO1xuIiwiaW1wb3J0IHsgZ2V0Um91bmRpbmdNZXRob2QgfSBmcm9tIFwiLi9fbGliL2dldFJvdW5kaW5nTWV0aG9kLm1qc1wiO1xuaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5NaW51dGUgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMubWpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBkaWZmZXJlbmNlSW5NaW51dGVzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZGlmZmVyZW5jZUluTWludXRlc1xuICogQGNhdGVnb3J5IE1pbnV0ZSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBtaW51dGVzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBzaWduZWQgbnVtYmVyIG9mIGZ1bGwgKHJvdW5kZWQgdG93YXJkcyAwKSBtaW51dGVzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICpcbiAqIEBwYXJhbSBkYXRlTGVmdCAtIFRoZSBsYXRlciBkYXRlXG4gKiBAcGFyYW0gZGF0ZVJpZ2h0IC0gVGhlIGVhcmxpZXIgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgbWludXRlc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBtaW51dGVzIGFyZSBiZXR3ZWVuIDIgSnVseSAyMDE0IDEyOjA3OjU5IGFuZCAyIEp1bHkgMjAxNCAxMjoyMDowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMoXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDEyLCAyMCwgMCksXG4gKiAgIG5ldyBEYXRlKDIwMTQsIDYsIDIsIDEyLCA3LCA1OSlcbiAqIClcbiAqIC8vPT4gMTJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgbWludXRlcyBhcmUgYmV0d2VlbiAxMDowMTo1OSBhbmQgMTA6MDA6MDBcbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMoXG4gKiAgIG5ldyBEYXRlKDIwMDAsIDAsIDEsIDEwLCAwLCAwKSxcbiAqICAgbmV3IERhdGUoMjAwMCwgMCwgMSwgMTAsIDEsIDU5KVxuICogKVxuICogLy89PiAtMVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZmVyZW5jZUluTWludXRlcyhkYXRlTGVmdCwgZGF0ZVJpZ2h0LCBvcHRpb25zKSB7XG4gIGNvbnN0IGRpZmYgPVxuICAgIGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KSAvIG1pbGxpc2Vjb25kc0luTWludXRlO1xuICByZXR1cm4gZ2V0Um91bmRpbmdNZXRob2Qob3B0aW9ucz8ucm91bmRpbmdNZXRob2QpKGRpZmYpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2VJbk1pbnV0ZXM7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQXVCTyxTQUFTLGdCQUFnQixNQUFNLFFBQVE7QUFDNUMsUUFBTSxZQUFZLENBQUMsT0FBTyxJQUFJO0FBQzlCLFNBQU8sY0FBYyxNQUFNLFlBQVksTUFBTTtBQUMvQztBQ0hPLFNBQVMsV0FBVyxNQUFNLFFBQVE7QUFDdkMsU0FBTyxnQkFBZ0IsTUFBTSxTQUFTLG9CQUFvQjtBQUM1RDtBQ3pCTyxTQUFTLGtCQUFrQixRQUFRO0FBQ3hDLFNBQU8sQ0FBQyxXQUFXO0FBQ2pCLFVBQU0sUUFBUSxTQUFTLEtBQUssTUFBTSxJQUFJLEtBQUs7QUFDM0MsVUFBTSxTQUFTLE1BQU0sTUFBTTtBQUUzQixXQUFPLFdBQVcsSUFBSSxJQUFJO0FBQUEsRUFDOUI7QUFDQTtBQ21CTyxTQUFTLHlCQUF5QixVQUFVLFdBQVc7QUFDNUQsU0FBTyxDQUFDLE9BQU8sUUFBUSxJQUFJLENBQUMsT0FBTyxTQUFTO0FBQzlDO0FDWU8sU0FBUyxvQkFBb0IsVUFBVSxXQUFXLFNBQVM7QUFDaEUsUUFBTSxPQUNKLHlCQUF5QixVQUFVLFNBQVMsSUFBSTtBQUNsRCxTQUFPLGtCQUFrQixtQ0FBUyxjQUFjLEVBQUUsSUFBSTtBQUN4RDsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0XX0=
|