haya-select 1.0.121 → 1.0.123

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.
@@ -0,0 +1,5 @@
1
+ /** @returns {void} */
2
+ export function acquireBodyScrollLock(): void;
3
+ /** @returns {void} */
4
+ export function releaseBodyScrollLock(): void;
5
+ //# sourceMappingURL=body-scroll-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"body-scroll-lock.d.ts","sourceRoot":"","sources":["../../src/select/body-scroll-lock.js"],"names":[],"mappings":"AAkBA,sBAAsB;AACtB,yCADc,IAAI,CAajB;AAED,sBAAsB;AACtB,yCADc,IAAI,CAcjB"}
@@ -0,0 +1,43 @@
1
+ import { Platform } from "react-native";
2
+ /**
3
+ * Reference-counted body-scroll lock shared by every HayaSelect in the bundle.
4
+ * Body scroll is a single global browser resource, so overlapping mobile sheets
5
+ * must not each save/restore the overflow independently: the first lock records
6
+ * the previous overflow and the last unlock restores it.
7
+ */
8
+ let lockCount = 0;
9
+ let previousBodyOverflow = undefined;
10
+ let previousDocumentOverflow = undefined;
11
+ /** @returns {boolean} */
12
+ function canManageBodyScroll() {
13
+ return Platform.OS === "web" && typeof document !== "undefined" && Boolean(document.body);
14
+ }
15
+ /** @returns {void} */
16
+ export function acquireBodyScrollLock() {
17
+ if (!canManageBodyScroll())
18
+ return;
19
+ if (lockCount === 0) {
20
+ previousBodyOverflow = document.body.style.overflow;
21
+ previousDocumentOverflow = document.documentElement?.style.overflow;
22
+ document.body.style.overflow = "hidden";
23
+ if (document.documentElement)
24
+ document.documentElement.style.overflow = "hidden";
25
+ }
26
+ lockCount += 1;
27
+ }
28
+ /** @returns {void} */
29
+ export function releaseBodyScrollLock() {
30
+ if (!canManageBodyScroll())
31
+ return;
32
+ if (lockCount === 0)
33
+ return;
34
+ lockCount -= 1;
35
+ if (lockCount > 0)
36
+ return;
37
+ document.body.style.overflow = previousBodyOverflow || "";
38
+ if (document.documentElement)
39
+ document.documentElement.style.overflow = previousDocumentOverflow || "";
40
+ previousBodyOverflow = undefined;
41
+ previousDocumentOverflow = undefined;
42
+ }
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS1zY3JvbGwtbG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWxlY3QvYm9keS1zY3JvbGwtbG9jay5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBRXJDOzs7OztHQUtHO0FBRUgsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFBO0FBQ2pCLElBQUksb0JBQW9CLEdBQUcsU0FBUyxDQUFBO0FBQ3BDLElBQUksd0JBQXdCLEdBQUcsU0FBUyxDQUFBO0FBRXhDLHlCQUF5QjtBQUN6QixTQUFTLG1CQUFtQjtJQUMxQixPQUFPLFFBQVEsQ0FBQyxFQUFFLEtBQUssS0FBSyxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQzNGLENBQUM7QUFFRCxzQkFBc0I7QUFDdEIsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7UUFBRSxPQUFNO0lBRWxDLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BCLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQTtRQUNuRCx3QkFBd0IsR0FBRyxRQUFRLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUE7UUFFbkUsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN2QyxJQUFJLFFBQVEsQ0FBQyxlQUFlO1lBQUUsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtJQUNsRixDQUFDO0lBRUQsU0FBUyxJQUFJLENBQUMsQ0FBQTtBQUNoQixDQUFDO0FBRUQsc0JBQXNCO0FBQ3RCLE1BQU0sVUFBVSxxQkFBcUI7SUFDbkMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1FBQUUsT0FBTTtJQUNsQyxJQUFJLFNBQVMsS0FBSyxDQUFDO1FBQUUsT0FBTTtJQUUzQixTQUFTLElBQUksQ0FBQyxDQUFBO0lBRWQsSUFBSSxTQUFTLEdBQUcsQ0FBQztRQUFFLE9BQU07SUFFekIsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLG9CQUFvQixJQUFJLEVBQUUsQ0FBQTtJQUN6RCxJQUFJLFFBQVEsQ0FBQyxlQUFlO1FBQUUsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLHdCQUF3QixJQUFJLEVBQUUsQ0FBQTtJQUV0RyxvQkFBb0IsR0FBRyxTQUFTLENBQUE7SUFDaEMsd0JBQXdCLEdBQUcsU0FBUyxDQUFBO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BsYXRmb3JtfSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcblxuLyoqXG4gKiBSZWZlcmVuY2UtY291bnRlZCBib2R5LXNjcm9sbCBsb2NrIHNoYXJlZCBieSBldmVyeSBIYXlhU2VsZWN0IGluIHRoZSBidW5kbGUuXG4gKiBCb2R5IHNjcm9sbCBpcyBhIHNpbmdsZSBnbG9iYWwgYnJvd3NlciByZXNvdXJjZSwgc28gb3ZlcmxhcHBpbmcgbW9iaWxlIHNoZWV0c1xuICogbXVzdCBub3QgZWFjaCBzYXZlL3Jlc3RvcmUgdGhlIG92ZXJmbG93IGluZGVwZW5kZW50bHk6IHRoZSBmaXJzdCBsb2NrIHJlY29yZHNcbiAqIHRoZSBwcmV2aW91cyBvdmVyZmxvdyBhbmQgdGhlIGxhc3QgdW5sb2NrIHJlc3RvcmVzIGl0LlxuICovXG5cbmxldCBsb2NrQ291bnQgPSAwXG5sZXQgcHJldmlvdXNCb2R5T3ZlcmZsb3cgPSB1bmRlZmluZWRcbmxldCBwcmV2aW91c0RvY3VtZW50T3ZlcmZsb3cgPSB1bmRlZmluZWRcblxuLyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuZnVuY3Rpb24gY2FuTWFuYWdlQm9keVNjcm9sbCgpIHtcbiAgcmV0dXJuIFBsYXRmb3JtLk9TID09PSBcIndlYlwiICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBCb29sZWFuKGRvY3VtZW50LmJvZHkpXG59XG5cbi8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbmV4cG9ydCBmdW5jdGlvbiBhY3F1aXJlQm9keVNjcm9sbExvY2soKSB7XG4gIGlmICghY2FuTWFuYWdlQm9keVNjcm9sbCgpKSByZXR1cm5cblxuICBpZiAobG9ja0NvdW50ID09PSAwKSB7XG4gICAgcHJldmlvdXNCb2R5T3ZlcmZsb3cgPSBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93XG4gICAgcHJldmlvdXNEb2N1bWVudE92ZXJmbG93ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Py5zdHlsZS5vdmVyZmxvd1xuXG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCJcbiAgICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiXG4gIH1cblxuICBsb2NrQ291bnQgKz0gMVxufVxuXG4vKiogQHJldHVybnMge3ZvaWR9ICovXG5leHBvcnQgZnVuY3Rpb24gcmVsZWFzZUJvZHlTY3JvbGxMb2NrKCkge1xuICBpZiAoIWNhbk1hbmFnZUJvZHlTY3JvbGwoKSkgcmV0dXJuXG4gIGlmIChsb2NrQ291bnQgPT09IDApIHJldHVyblxuXG4gIGxvY2tDb3VudCAtPSAxXG5cbiAgaWYgKGxvY2tDb3VudCA+IDApIHJldHVyblxuXG4gIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBwcmV2aW91c0JvZHlPdmVyZmxvdyB8fCBcIlwiXG4gIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IHByZXZpb3VzRG9jdW1lbnRPdmVyZmxvdyB8fCBcIlwiXG5cbiAgcHJldmlvdXNCb2R5T3ZlcmZsb3cgPSB1bmRlZmluZWRcbiAgcHJldmlvdXNEb2N1bWVudE92ZXJmbG93ID0gdW5kZWZpbmVkXG59XG4iXX0=
@@ -0,0 +1,23 @@
1
+ export namespace selectCoordination {
2
+ /** @returns {string|null} */
3
+ function getOpenSelectId(): string | null;
4
+ /**
5
+ * Marks a select as the open one, notifying any other open select to close.
6
+ * @param {string} selectId
7
+ * @returns {void}
8
+ */
9
+ function openSelect(selectId: string): void;
10
+ /**
11
+ * Clears the open select when the given select is the one currently open.
12
+ * @param {string} selectId
13
+ * @returns {void}
14
+ */
15
+ function closeSelect(selectId: string): void;
16
+ /**
17
+ * Subscribe to open-select changes.
18
+ * @param {function(string|null): void} listener
19
+ * @returns {function(): void} Unsubscribe.
20
+ */
21
+ function subscribe(listener: (arg0: string | null) => void): () => void;
22
+ }
23
+ //# sourceMappingURL=coordination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordination.d.ts","sourceRoot":"","sources":["../../src/select/coordination.js"],"names":[],"mappings":";IAiBE,6BAA6B;IAC7B,4BADc,MAAM,GAAC,IAAI,CAGxB;IAED;;;;OAIG;IACH,8BAHW,MAAM,GACJ,IAAI,CAOhB;IAED;;;;OAIG;IACH,+BAHW,MAAM,GACJ,IAAI,CAOhB;IAED;;;;OAIG;IACH,6BAHW,CAAS,IAAW,EAAX,MAAM,GAAC,IAAI,KAAG,IAAI,GACzB,MAAY,IAAI,CAQ5B"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Module-level coordination so only one HayaSelect options container is open
3
+ * at a time across all instances in the bundle. No provider is required, which
4
+ * means published consumers get the behavior from the default select import.
5
+ */
6
+ let openSelectId = null;
7
+ const listeners = new Set();
8
+ /** @returns {void} */
9
+ function emitOpenSelectChange() {
10
+ for (const listener of [...listeners]) {
11
+ listener(openSelectId);
12
+ }
13
+ }
14
+ export const selectCoordination = {
15
+ /** @returns {string|null} */
16
+ getOpenSelectId() {
17
+ return openSelectId;
18
+ },
19
+ /**
20
+ * Marks a select as the open one, notifying any other open select to close.
21
+ * @param {string} selectId
22
+ * @returns {void}
23
+ */
24
+ openSelect(selectId) {
25
+ if (openSelectId === selectId)
26
+ return;
27
+ openSelectId = selectId;
28
+ emitOpenSelectChange();
29
+ },
30
+ /**
31
+ * Clears the open select when the given select is the one currently open.
32
+ * @param {string} selectId
33
+ * @returns {void}
34
+ */
35
+ closeSelect(selectId) {
36
+ if (openSelectId !== selectId)
37
+ return;
38
+ openSelectId = null;
39
+ emitOpenSelectChange();
40
+ },
41
+ /**
42
+ * Subscribe to open-select changes.
43
+ * @param {function(string|null): void} listener
44
+ * @returns {function(): void} Unsubscribe.
45
+ */
46
+ subscribe(listener) {
47
+ listeners.add(listener);
48
+ return () => {
49
+ listeners.delete(listener);
50
+ };
51
+ }
52
+ };
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29vcmRpbmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlbGVjdC9jb29yZGluYXRpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILElBQUksWUFBWSxHQUFHLElBQUksQ0FBQTtBQUN2QixNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0FBRTNCLHNCQUFzQjtBQUN0QixTQUFTLG9CQUFvQjtJQUMzQixLQUFLLE1BQU0sUUFBUSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3RDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUN4QixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDLDZCQUE2QjtJQUM3QixlQUFlO1FBQ2IsT0FBTyxZQUFZLENBQUE7SUFDckIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsUUFBUTtRQUNqQixJQUFJLFlBQVksS0FBSyxRQUFRO1lBQUUsT0FBTTtRQUVyQyxZQUFZLEdBQUcsUUFBUSxDQUFBO1FBQ3ZCLG9CQUFvQixFQUFFLENBQUE7SUFDeEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsUUFBUTtRQUNsQixJQUFJLFlBQVksS0FBSyxRQUFRO1lBQUUsT0FBTTtRQUVyQyxZQUFZLEdBQUcsSUFBSSxDQUFBO1FBQ25CLG9CQUFvQixFQUFFLENBQUE7SUFDeEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxTQUFTLENBQUMsUUFBUTtRQUNoQixTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXZCLE9BQU8sR0FBRyxFQUFFO1lBQ1YsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM1QixDQUFDLENBQUE7SUFDSCxDQUFDO0NBQ0YsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlLWxldmVsIGNvb3JkaW5hdGlvbiBzbyBvbmx5IG9uZSBIYXlhU2VsZWN0IG9wdGlvbnMgY29udGFpbmVyIGlzIG9wZW5cbiAqIGF0IGEgdGltZSBhY3Jvc3MgYWxsIGluc3RhbmNlcyBpbiB0aGUgYnVuZGxlLiBObyBwcm92aWRlciBpcyByZXF1aXJlZCwgd2hpY2hcbiAqIG1lYW5zIHB1Ymxpc2hlZCBjb25zdW1lcnMgZ2V0IHRoZSBiZWhhdmlvciBmcm9tIHRoZSBkZWZhdWx0IHNlbGVjdCBpbXBvcnQuXG4gKi9cblxubGV0IG9wZW5TZWxlY3RJZCA9IG51bGxcbmNvbnN0IGxpc3RlbmVycyA9IG5ldyBTZXQoKVxuXG4vKiogQHJldHVybnMge3ZvaWR9ICovXG5mdW5jdGlvbiBlbWl0T3BlblNlbGVjdENoYW5nZSgpIHtcbiAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBbLi4ubGlzdGVuZXJzXSkge1xuICAgIGxpc3RlbmVyKG9wZW5TZWxlY3RJZClcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc2VsZWN0Q29vcmRpbmF0aW9uID0ge1xuICAvKiogQHJldHVybnMge3N0cmluZ3xudWxsfSAqL1xuICBnZXRPcGVuU2VsZWN0SWQoKSB7XG4gICAgcmV0dXJuIG9wZW5TZWxlY3RJZFxuICB9LFxuXG4gIC8qKlxuICAgKiBNYXJrcyBhIHNlbGVjdCBhcyB0aGUgb3BlbiBvbmUsIG5vdGlmeWluZyBhbnkgb3RoZXIgb3BlbiBzZWxlY3QgdG8gY2xvc2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RJZFxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9wZW5TZWxlY3Qoc2VsZWN0SWQpIHtcbiAgICBpZiAob3BlblNlbGVjdElkID09PSBzZWxlY3RJZCkgcmV0dXJuXG5cbiAgICBvcGVuU2VsZWN0SWQgPSBzZWxlY3RJZFxuICAgIGVtaXRPcGVuU2VsZWN0Q2hhbmdlKClcbiAgfSxcblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBvcGVuIHNlbGVjdCB3aGVuIHRoZSBnaXZlbiBzZWxlY3QgaXMgdGhlIG9uZSBjdXJyZW50bHkgb3Blbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdElkXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xvc2VTZWxlY3Qoc2VsZWN0SWQpIHtcbiAgICBpZiAob3BlblNlbGVjdElkICE9PSBzZWxlY3RJZCkgcmV0dXJuXG5cbiAgICBvcGVuU2VsZWN0SWQgPSBudWxsXG4gICAgZW1pdE9wZW5TZWxlY3RDaGFuZ2UoKVxuICB9LFxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gb3Blbi1zZWxlY3QgY2hhbmdlcy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmd8bnVsbCk6IHZvaWR9IGxpc3RlbmVyXG4gICAqIEByZXR1cm5zIHtmdW5jdGlvbigpOiB2b2lkfSBVbnN1YnNjcmliZS5cbiAgICovXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcilcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/select/index.jsx"],"names":[],"mappings":";;;UA0Bc,MAAM;WACN,MAAM;WACN,MAAM;;;WAKN,MAAM,GAAC,MAAM;WACb,OAAO,OAAO,EAAE,SAAS;qBACb,OAAO,OAAO,EAAE,SAAS;4BACzB,OAAO,OAAO,EAAE,SAAS;;;;;;YAGrC,OAAO,OAAO,EAAE,SAAS;;;aAOzB,KAAK,CAAC,gBAAgB,CAAC;;;;;;;;;qBAWvB,MAAM;;;;;SAKN,OAAO,OAAO,EAAE,SAAS;YACzB,MAAM;;;;2BAIM,OAAO,OAAO,EAAE,SAAS;sBAC5B,OAAO,OAAO,EAAE,cAAc,YAAC,KAAG,IAAI;wBACtC,OAAO,OAAO,EAAE,cAAc,YAAC,KAAG,IAAI;6BACtC,KAAK,CAAC,MAAM,GAAC,MAAM,CAAC,YAAC,KAAG,IAAI;uBAC5B,OAAO,OAAO,EAAE,cAAc,YAAC,KAAG,IAAI;8BACtC;QAAC,OAAO,QAAO;KAAC,KAAG,IAAI;8BACvB;QAAC,OAAO,QAAO;KAAC,KAAG,IAAI;4BACvB,MAAM,KAAG,OAAO,OAAO,EAAE,SAAS;aAC3C,KAAK,CAAC,gBAAgB,CAAC,IAAC,MAAY,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAC,uBAAuB,CAAC,CAAA;;;;kBAIrF,OAAO,OAAO,EAAE,SAAS;;;;;aAKzB,MAAM;cACN,MAAM;;;;;;oBAQN,KAAK,CAAC,gBAAgB,CAAC;2BACvB,gBAAgB,GAAC,IAAI;uBACrB,gBAAgB,GAAC,IAAI;YACrB,MAAM,GAAC,IAAI;mBACX,KAAK,CAAC,gBAAgB,CAAC,GAAC,SAAS;iCACjC,MAAM;0BACN,MAAM;UACN,MAAM;sBACN,OAAO;oBACP,MAAM;cACN,MAAM,GAAC,IAAI;YACX,OAAO;4BACP,gBAAgB,GAAC,IAAI;sBACrB,OAAO,GAAC,OAAO,GAAC,OAAO,GAAC,SAAS;gBACjC,MAAM,GAAC,SAAS;uBAChB,QAAQ,GAAC,SAAS,GAAC,SAAS;kBAC5B,MAAM,GAAC,SAAS,GAAC,IAAI;gBACrB,MAAM,GAAC,IAAI;eACX,MAAM,GAAC,IAAI;gBACX,MAAM,GAAC,IAAI;aACX,MAAM,CAAC,MAAM,GAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;;;;;UAwD7B,MAAM,GAAC,SAAS;UAChB,SAAS,GAAC,QAAQ;YAClB,gBAAgB;cAChB,OAAO;kBACP,sBAAsB,GAAC,SAAS;iBAChC,MAAM,GAAC,SAAS;aAChB,MAAM,CAAC,MAAM,GAAC,MAAM,EAAE,MAAM,CAAC;;;WAK7B,OAAO,OAAO,EAAE,cAAc;aAC9B,KAAK,CAAC,gBAAgB,CAAC;aACvB,MAAM,CAAC,MAAM,GAAC,MAAM,EAAE,MAAM,CAAC;;;YAK7B,OAAO;sBACP,OAAO,GAAC,OAAO,GAAC,OAAO,GAAC,SAAS;WACjC,eAAe;WACf,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;kBA1Le,OAAO"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/select/index.jsx"],"names":[],"mappings":";;;UA4Bc,MAAM;WACN,MAAM;WACN,MAAM;;;WAKN,MAAM,GAAC,MAAM;WACb,OAAO,OAAO,EAAE,SAAS;qBACb,OAAO,OAAO,EAAE,SAAS;4BACzB,OAAO,OAAO,EAAE,SAAS;;;;;;YAGrC,OAAO,OAAO,EAAE,SAAS;;;aAOzB,KAAK,CAAC,gBAAgB,CAAC;;;;;;;;;qBAWvB,MAAM;;;;;SAKN,OAAO,OAAO,EAAE,SAAS;YACzB,MAAM;;;;2BAIM,OAAO,OAAO,EAAE,SAAS;sBAC5B,OAAO,OAAO,EAAE,cAAc,YAAC,KAAG,IAAI;wBACtC,OAAO,OAAO,EAAE,cAAc,YAAC,KAAG,IAAI;6BACtC,KAAK,CAAC,MAAM,GAAC,MAAM,CAAC,YAAC,KAAG,IAAI;uBAC5B,OAAO,OAAO,EAAE,cAAc,YAAC,KAAG,IAAI;8BACtC;QAAC,OAAO,QAAO;KAAC,KAAG,IAAI;8BACvB;QAAC,OAAO,QAAO;KAAC,KAAG,IAAI;4BACvB,MAAM,KAAG,OAAO,OAAO,EAAE,SAAS;aAC3C,KAAK,CAAC,gBAAgB,CAAC,IAAC,MAAY,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAC,uBAAuB,CAAC,CAAA;;;;kBAIrF,OAAO,OAAO,EAAE,SAAS;;;;;aAKzB,MAAM;cACN,MAAM;;;;;;oBAQN,KAAK,CAAC,gBAAgB,CAAC;2BACvB,gBAAgB,GAAC,IAAI;uBACrB,gBAAgB,GAAC,IAAI;YACrB,MAAM,GAAC,IAAI;mBACX,KAAK,CAAC,gBAAgB,CAAC,GAAC,SAAS;iCACjC,MAAM;0BACN,MAAM;UACN,MAAM;sBACN,OAAO;oBACP,MAAM;cACN,MAAM,GAAC,IAAI;YACX,OAAO;4BACP,gBAAgB,GAAC,IAAI;sBACrB,OAAO,GAAC,OAAO,GAAC,OAAO,GAAC,SAAS;gBACjC,MAAM,GAAC,SAAS;uBAChB,QAAQ,GAAC,SAAS,GAAC,SAAS;kBAC5B,MAAM,GAAC,SAAS,GAAC,IAAI;gBACrB,MAAM,GAAC,IAAI;eACX,MAAM,GAAC,IAAI;gBACX,MAAM,GAAC,IAAI;aACX,MAAM,CAAC,MAAM,GAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;;;;;UAwD7B,MAAM,GAAC,SAAS;UAChB,SAAS,GAAC,QAAQ;YAClB,gBAAgB;cAChB,OAAO;kBACP,sBAAsB,GAAC,SAAS;iBAChC,MAAM,GAAC,SAAS;aAChB,MAAM,CAAC,MAAM,GAAC,MAAM,EAAE,MAAM,CAAC;;;WAK7B,OAAO,OAAO,EAAE,cAAc;aAC9B,KAAK,CAAC,gBAAgB,CAAC;aACvB,MAAM,CAAC,MAAM,GAAC,MAAM,EAAE,MAAM,CAAC;;;YAK7B,OAAO;sBACP,OAAO,GAAC,OAAO,GAAC,OAAO,GAAC,SAAS;WACjC,eAAe;WACf,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;kBA5Le,OAAO"}
@@ -18,6 +18,8 @@ import RenderHtml from "react-native-render-html";
18
18
  import { Portal } from "conjointment";
19
19
  import useEventListener from "ya-use-event-listener";
20
20
  import usePressOutside from "outside-eye/build/use-press-outside";
21
+ import { acquireBodyScrollLock, releaseBodyScrollLock } from "./body-scroll-lock";
22
+ import { selectCoordination } from "./coordination";
21
23
  const styles = {};
22
24
  const MOBILE_OPTIONS_MAX_WIDTH = 768;
23
25
  /**
@@ -264,8 +266,6 @@ class HayaSelect extends ShapeComponent {
264
266
  mobileOptionsBackdropOpacity = new Animated.Value(0);
265
267
  optionsContainerRef = createRef();
266
268
  pageInputRef = createRef();
267
- previousBodyOverflow = undefined;
268
- previousDocumentOverflow = undefined;
269
269
  mobileOptionsContainerProgress = new Animated.Value(0);
270
270
  mobileOptionsContainerScale = this.mobileOptionsContainerProgress.interpolate({
271
271
  inputRange: [0, 1],
@@ -541,6 +541,7 @@ class HayaSelect extends ShapeComponent {
541
541
  }
542
542
  componentDidMount() {
543
543
  const { attribute, defaultValue, defaultValues, defaultValuesFromOptions, model, options } = this.props;
544
+ this.unsubscribeSelectCoordination = selectCoordination.subscribe(this.onSelectCoordinationChanged);
544
545
  if (this.isDebugEnabled())
545
546
  this.debugLog("componentDidMount", {
546
547
  hasAttributeModel: Boolean(attribute && model),
@@ -568,10 +569,23 @@ class HayaSelect extends ShapeComponent {
568
569
  }
569
570
  /** @returns {void} */
570
571
  componentWillUnmount() {
572
+ if (this.unsubscribeSelectCoordination)
573
+ this.unsubscribeSelectCoordination();
574
+ selectCoordination.closeSelect(idForComponent(this));
571
575
  this.mobileOptionsBackdropOpacity.stopAnimation();
572
576
  this.mobileOptionsContainerProgress.stopAnimation();
573
577
  this.unlockBodyScroll();
574
578
  }
579
+ /**
580
+ * Closes this select when a different select becomes the open one.
581
+ * @param {string|null} openSelectId
582
+ * @returns {void}
583
+ */
584
+ onSelectCoordinationChanged = (openSelectId) => {
585
+ if (openSelectId && openSelectId !== idForComponent(this) && this.s.opened) {
586
+ this.closeOptions();
587
+ }
588
+ };
575
589
  /** @returns {import("react").ReactNode} */
576
590
  render() {
577
591
  const { endOfSelectRef } = this.tt;
@@ -905,8 +919,11 @@ class HayaSelect extends ShapeComponent {
905
919
  */
906
920
  closeOptions({ options } = {}) {
907
921
  const closedOptions = options || this.getCurrentOptions();
922
+ const selectId = idForComponent(this);
908
923
  if (this.isDebugEnabled())
909
924
  this.debugLog("closeOptions", { closedOptionsCount: closedOptions?.length || 0 });
925
+ // Clear the shared open-select slot if this is the select currently open
926
+ selectCoordination.closeSelect(selectId);
910
927
  if (this.s.opened && this.s.optionsPlacement == "sheet") {
911
928
  this.closeMobileOptionsWithAnimation({ closedOptions });
912
929
  return;
@@ -1033,6 +1050,7 @@ class HayaSelect extends ShapeComponent {
1033
1050
  /** @returns {void} */
1034
1051
  openOptions() {
1035
1052
  const mobileOptionsSheet = this.isMobileOptionsSheet();
1053
+ const selectId = idForComponent(this);
1036
1054
  if (this.isDebugEnabled())
1037
1055
  this.debugLog("openOptions", {
1038
1056
  currentOptionsCount: this.getCurrentOptions()?.length || 0,
@@ -1041,6 +1059,8 @@ class HayaSelect extends ShapeComponent {
1041
1059
  });
1042
1060
  this.searchTextValue = "";
1043
1061
  this.callOptionsPositionAboveIfOutsideScreen = !mobileOptionsSheet;
1062
+ // Claim the shared open-select slot, which closes any other open select
1063
+ selectCoordination.openSelect(selectId);
1044
1064
  if (mobileOptionsSheet) {
1045
1065
  this.prepareMobileOptionsAnimation();
1046
1066
  }
@@ -1074,27 +1094,17 @@ class HayaSelect extends ShapeComponent {
1074
1094
  focusTextInput = () => digg(this.tt.searchTextInputRef, "current")?.focus();
1075
1095
  /** @returns {void} */
1076
1096
  lockBodyScroll() {
1077
- if (Platform.OS != "web" || typeof document == "undefined" || this.bodyScrollLocked)
1097
+ if (this.bodyScrollLocked)
1078
1098
  return;
1079
- this.previousBodyOverflow = document.body?.style.overflow;
1080
- this.previousDocumentOverflow = document.documentElement?.style.overflow;
1081
- if (document.body)
1082
- document.body.style.overflow = "hidden";
1083
- if (document.documentElement)
1084
- document.documentElement.style.overflow = "hidden";
1085
1099
  this.bodyScrollLocked = true;
1100
+ acquireBodyScrollLock();
1086
1101
  }
1087
1102
  /** @returns {void} */
1088
1103
  unlockBodyScroll() {
1089
- if (Platform.OS != "web" || typeof document == "undefined" || !this.bodyScrollLocked)
1104
+ if (!this.bodyScrollLocked)
1090
1105
  return;
1091
- if (document.body)
1092
- document.body.style.overflow = this.previousBodyOverflow || "";
1093
- if (document.documentElement)
1094
- document.documentElement.style.overflow = this.previousDocumentOverflow || "";
1095
- this.previousBodyOverflow = undefined;
1096
- this.previousDocumentOverflow = undefined;
1097
1106
  this.bodyScrollLocked = false;
1107
+ releaseBodyScrollLock();
1098
1108
  }
1099
1109
  /** @returns {void} */
1100
1110
  setOptionsPosition() {
@@ -1883,4 +1893,4 @@ class HayaSelect extends ShapeComponent {
1883
1893
  }
1884
1894
  const HayaSelectShapeComponent = shapeComponent(HayaSelect);
1885
1895
  export default memo(HayaSelectShapeComponent);
1886
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VsZWN0L2luZGV4LmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNwRSxPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDbkMsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ3pILE9BQU8sS0FBSyxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDdkQsT0FBTyxFQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQTtBQUN6RixPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUE7QUFDL0IsT0FBTyxlQUFlLE1BQU0sdUNBQXVDLENBQUE7QUFDbkUsT0FBTyxjQUFjLE1BQU0sbURBQW1ELENBQUE7QUFDOUUsT0FBTyxnQkFBZ0IsTUFBTSxxREFBcUQsQ0FBQTtBQUNsRixPQUFPLElBQUksTUFBTSxzQ0FBc0MsQ0FBQTtBQUN2RCxPQUFPLE1BQU0sTUFBTSxVQUFVLENBQUE7QUFDN0IsT0FBTyxXQUFXLE1BQU0sZ0JBQWdCLENBQUE7QUFDeEMsT0FBTyxvQkFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUMzRCxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUE7QUFDbEMsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUE7QUFDN0MsT0FBTyxVQUFVLE1BQU0sMEJBQTBCLENBQUE7QUFDakQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUNuQyxPQUFPLGdCQUFnQixNQUFNLHVCQUF1QixDQUFBO0FBQ3BELE9BQU8sZUFBZSxNQUFNLHFDQUFxQyxDQUFBO0FBRWpFLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtBQUNqQixNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQTtBQUVwQzs7Ozs7R0FLRztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSDs7Ozs7Ozs7R0FRRztBQUVIOzs7O0dBSUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxNQUFNO0lBQzdCLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFbEQsSUFBSSxPQUFPLGdCQUFnQixDQUFDLElBQUksSUFBSSxRQUFRLElBQUksT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLENBQUM7UUFDdEYsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBRUQsSUFBSSxPQUFPLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxRQUFRLElBQUksT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLENBQUM7UUFDckYsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQTtBQUN6QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsaUJBQWlCLENBQUMsTUFBTTtJQUMvQixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBQ3RFLENBQUM7QUFFRCwyRUFBMkU7QUFDM0UsU0FBUyxpQkFBaUI7SUFDeEIsSUFBSSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUs7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUNyQyxJQUFJLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxJQUFJLE9BQU8sU0FBUyxJQUFJLFdBQVc7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUV6RSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQTtJQUN6QyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQTtJQUUzQyxPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdEMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNsQyxDQUFDLFFBQVEsSUFBSSxVQUFVLElBQUksU0FBUyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUM1RCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7O0dBR0c7QUFDSCxNQUFNLDRCQUE0QixHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUU7SUFDakQsSUFBSSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFdEMsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUE7SUFDcEQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBRXBDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtJQUVwRSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztRQUN6RixJQUFJLElBQUksSUFBSSxDQUFBO0lBQ2QsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyxDQUFBO0FBRUQsbUVBQW1FO0FBQ25FLE1BQU0sVUFBVyxTQUFRLGNBQWM7SUFDckMsTUFBTSxDQUFDLFlBQVksR0FBRztRQUNwQixhQUFhLEVBQUUsS0FBSztRQUNwQixLQUFLLEVBQUUsS0FBSztRQUNaLGlCQUFpQixFQUFFLE1BQU07UUFDekIsUUFBUSxFQUFFLEtBQUs7UUFDZixhQUFhLEVBQUUsSUFBSTtRQUNuQixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxJQUFJO1FBQ2IsZUFBZSxFQUFFLElBQUk7UUFDckIsYUFBYSxFQUFFLElBQUk7UUFDbkIsWUFBWSxFQUFFLElBQUk7UUFDbEIsTUFBTSxFQUFFLEtBQUs7UUFDYixvQkFBb0IsRUFBRSxTQUFTO1FBQy9CLFdBQVcsRUFBRSxLQUFLO0tBQ25CLENBQUE7SUFFRCxNQUFNLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQztRQUNoQyxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDM0IsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQzNCLGFBQWEsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVU7UUFDeEMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQ2hDLFlBQVksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxLQUFLO1FBQzlCLHdCQUF3QixFQUFFLFNBQVMsQ0FBQyxLQUFLO1FBQ3pDLEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVU7UUFDaEMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQ2xCLEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTTtRQUN2QixpQkFBaUIsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvRCxRQUFRLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVO1FBQ25DLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTtRQUN0QixhQUFhLEVBQUUsU0FBUyxDQUFDLElBQUk7UUFDN0IsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQ3RCLFFBQVEsRUFBRSxTQUFTLENBQUMsSUFBSTtRQUN4QixhQUFhLEVBQUUsU0FBUyxDQUFDLElBQUk7UUFDN0IsT0FBTyxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQ3ZCLGVBQWUsRUFBRSxTQUFTLENBQUMsSUFBSTtRQUMvQixlQUFlLEVBQUUsU0FBUyxDQUFDLElBQUk7UUFDL0IsYUFBYSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQzdCLE9BQU8sRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDO1lBQzNCLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDaEMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxJQUFJO2dCQUN2QixjQUFjLEVBQUUsU0FBUyxDQUFDLElBQUk7Z0JBQzlCLFFBQVEsRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDeEIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN0QixLQUFLLEVBQUUsU0FBUyxDQUFDLElBQUk7Z0JBQ3JCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDcEIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVU7YUFDNUUsQ0FBQyxDQUFDO1lBQ0gsU0FBUyxDQUFDLElBQUk7U0FDZixDQUFDLENBQUMsVUFBVTtRQUNiLGVBQWUsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVU7UUFDMUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVTtRQUN4QyxZQUFZLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDOUIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQzNCLHVCQUF1QixFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQ3pDLDRCQUE0QixFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQzlDLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVU7UUFDakMsb0JBQW9CLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDdEMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQ3hCLE9BQU8sRUFBRSxTQUFTLENBQUMsTUFBTTtRQUN6QixhQUFhLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQy9DLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVU7WUFDakMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVTtZQUNsQyxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1NBQ25DLENBQUMsQ0FBQztRQUNILFdBQVcsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVU7UUFDdEMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLO0tBQ3hCLENBQUMsQ0FBQTtJQUVGLHVDQUF1QyxHQUFHLEtBQUssQ0FBQTtJQUMvQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7SUFDeEIsY0FBYyxHQUFHLFNBQVMsRUFBRSxDQUFBO0lBQzVCLDBCQUEwQixHQUFHLENBQUMsQ0FBQTtJQUM5Qiw0QkFBNEIsR0FBRyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDcEQsbUJBQW1CLEdBQUcsU0FBUyxFQUFFLENBQUE7SUFDakMsWUFBWSxHQUFHLFNBQVMsRUFBRSxDQUFBO0lBQzFCLG9CQUFvQixHQUFHLFNBQVMsQ0FBQTtJQUNoQyx3QkFBd0IsR0FBRyxTQUFTLENBQUE7SUFDcEMsOEJBQThCLEdBQUcsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3RELDJCQUEyQixHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxXQUFXLENBQUM7UUFDNUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQixXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZCLENBQUMsQ0FBQTtJQUNGLGdDQUFnQyxHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxXQUFXLENBQUM7UUFDakYsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQixXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ3JCLENBQUMsQ0FBQTtJQUNGLCtCQUErQixHQUFHO1FBQ2hDLEVBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxnQ0FBZ0MsRUFBQztRQUNuRCxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsMkJBQTJCLEVBQUM7S0FDMUMsQ0FBQTtJQUNELG9CQUFvQixHQUFHLEtBQUssQ0FBQTtJQUM1Qix1QkFBdUIsR0FBRyxHQUFHLEVBQUU7UUFDN0IsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQy9ELE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO1FBRXZFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxFQUFDLFdBQVcsRUFBRSxlQUFlLEVBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFBO0lBQzlHLENBQUMsQ0FBQTtJQUNELDRCQUE0QixHQUFHLEdBQUcsRUFBRTtRQUNsQyxNQUFNLEVBQUMsV0FBVyxFQUFFLGVBQWUsRUFBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsQ0FBQTtRQUN4RSxJQUFJLE9BQU8sV0FBVyxJQUFJLFVBQVUsSUFBSSxPQUFPLGVBQWUsSUFBSSxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFekYsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLEVBQUUsRUFBRTtZQUNwRCxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWM7WUFDckIsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7WUFDeEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNO1lBQ2IsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhO1lBQ3BCLElBQUksQ0FBQyxDQUFDLENBQUMsMkJBQTJCO1lBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CO1lBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsc0JBQXNCO1lBQzdCLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO1lBQ3ZCLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVTtZQUNqQixJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQjtZQUN4QixJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVk7WUFDbkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ1gsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7WUFDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjO1lBQ3JCLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUTtZQUNmLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVTtZQUNqQixJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7WUFDNUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVO1NBQ2xCLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQTtJQUNELHFCQUFxQixHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNoSCxlQUFlLEdBQUcsRUFBRSxDQUFBO0lBQ3BCLGtCQUFrQixHQUFHLFNBQVMsRUFBRSxDQUFBO0lBQ2hDLGtCQUFrQixHQUFHLFNBQVMsRUFBRSxDQUFBO0lBQ2hDLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDMUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQzVDLFlBQVksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtJQUM5Qyw4QkFBOEI7SUFDOUIsS0FBSyxHQUFHO1FBQ04sY0FBYyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtRQUM1QyxxQkFBcUIsRUFBRSxJQUFJO1FBQzNCLGlCQUFpQixFQUFFLElBQUk7UUFDdkIsTUFBTSxFQUFFLElBQUk7UUFDWixhQUFhLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1FBQzFDLDJCQUEyQixFQUFFLENBQUM7UUFDOUIsb0JBQW9CLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsQ0FBQztRQUNQLGdCQUFnQixFQUFFLEtBQUs7UUFDdkIsY0FBYyxFQUFFLEdBQUc7UUFDbkIsUUFBUSxFQUFFLElBQUk7UUFDZCxNQUFNLEVBQUUsS0FBSztRQUNiLHNCQUFzQixFQUFFLElBQUk7UUFDNUIsZ0JBQWdCLEVBQUUsU0FBUztRQUMzQixVQUFVLEVBQUUsU0FBUztRQUNyQixpQkFBaUIsRUFBRSxTQUFTO1FBQzVCLFlBQVksRUFBRSxTQUFTO1FBQ3ZCLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDN0UsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUMzRSxVQUFVLEVBQUUsSUFBSTtRQUNoQixPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRTtLQUMvQixDQUFBO0lBRUQseUJBQXlCO0lBQ3pCLGNBQWMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUU1Qzs7OztPQUlHO0lBQ0gsUUFBUSxHQUFHLENBQUMsWUFBWSxFQUFFLE9BQU8sR0FBRyxTQUFTLEVBQUUsRUFBRTtRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLE9BQU07UUFFbEMsTUFBTSxXQUFXLEdBQUc7WUFDbEIsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNiLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDbEIsQ0FBQTtRQUVELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUE7UUFFckYsSUFBSSxhQUFhLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsWUFBWSxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDNUQsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixZQUFZLEVBQUUsQ0FBQyxDQUFBO1FBQzdDLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCxLQUFLO1FBQ0gsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFBO1FBRWhELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRVYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksT0FBTyxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQTtnQkFDekQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLElBQUksT0FBTyxNQUFNLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUV6RixnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUNsRSxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUE7UUFDM0UsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLDBCQUEwQixDQUFDLENBQUE7UUFDNUUsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLDJCQUEyQixDQUFDLENBQUE7UUFFN0UsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hELG1CQUFtQixFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSztnQkFDM0Msb0JBQW9CLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUM3QyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhO2dCQUNuQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRO2dCQUN6QixXQUFXLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO2FBQ3JGLENBQUMsQ0FBQTtRQUVGLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsdUNBQXVDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUNyRixJQUFJLENBQUMsdUNBQXVDLEdBQUcsS0FBSyxDQUFBO2dCQUNwRCxJQUFJLENBQUMsc0NBQXNDLEVBQUUsQ0FBQTtZQUMvQyxDQUFDO1FBQ0gsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQTtRQUVwRixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUUzRixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQzFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFBO1lBQ2xDLENBQUM7UUFDSCxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTztRQUN0QixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxLQUFLLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUMvQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCx5Q0FBeUM7SUFDekMscUJBQXFCO1FBQ25CLE1BQU0sRUFBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUE7UUFDeEQsTUFBTSxFQUFDLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFFeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUE7UUFDdEMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUU1RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxFQUFFLEVBQUUsQ0FDaEMsQ0FBQyxZQUFZLElBQUksS0FBSyxJQUFJLFlBQVksQ0FBQztZQUNyQyxDQUFDLGFBQWEsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hELGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDbkMsQ0FBQTtJQUNILENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsb0JBQW9CO1FBQ2xCLE1BQU0sRUFBQyxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRXhCLElBQUksT0FBTyxPQUFPLElBQUksVUFBVSxFQUFFLENBQUM7WUFDakMsT0FBTyxTQUFTLENBQUE7UUFDbEIsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sT0FBTyxDQUFBO1FBQ2hCLENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixPQUFPLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDL0QsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixhQUFhLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFBO0lBRXRDLHlCQUF5QjtJQUN6QixvQkFBb0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixJQUFJLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQTtRQUNyRCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLElBQUksT0FBTztZQUFFLE9BQU8sS0FBSyxDQUFBO1FBRXJELE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUksd0JBQXdCLENBQUE7SUFDbkUsQ0FBQztJQUVEOzs7T0FHRztJQUNILGtCQUFrQixDQUFDLE1BQU07UUFDdkIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFDLENBQUE7UUFFbkQsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPO2dCQUNMLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztnQkFDdkIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO2dCQUM3QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTthQUMxQixDQUFBO1FBQ0gsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3RFLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsZUFBZSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFDO1FBQ25ELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQztZQUFFLE9BQU8sUUFBUSxDQUFBO1FBRTlELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtRQUN4QixDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoRixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUE7UUFDdkIsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUN6RixDQUFDO0lBRUQsK0NBQStDO0lBQy9DLGNBQWM7UUFDWixPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQTtJQUNyRixDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLFVBQVU7UUFDUixPQUFPLDRCQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLGVBQWUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDNUYsQ0FBQztJQUVELCtDQUErQztJQUMvQyxVQUFVLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7SUFFOUUsc0NBQXNDO0lBQ3RDLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVuSCxnRUFBZ0U7SUFDaEUsaUJBQWlCLEdBQUcsR0FBRyxFQUFFO1FBQ3ZCLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUN0RSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFBRSxPQUFPLEVBQUUsQ0FBQTtZQUV6RSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDdEUsc0NBQXNDO2dCQUN0QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUE7Z0JBRWpCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFBO29CQUVyRSxJQUFJLE1BQU07d0JBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDakMsQ0FBQztnQkFFRCxPQUFPLE1BQU0sQ0FBQTtZQUNmLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDaEUsc0NBQXNDO2dCQUN0QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUE7Z0JBRWpCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDbEMsTUFBTSxNQUFNLEdBQ1YsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQzt3QkFDNUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFBO29CQUUvRCxJQUFJLE1BQU07d0JBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDakMsQ0FBQztnQkFFRCxPQUFPLE1BQU0sQ0FBQTtZQUNmLENBQUM7aUJBQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNuRCxtQ0FBbUM7WUFDckMsQ0FBQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQTtZQUNoRCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUE7SUFDOUIsQ0FBQyxDQUFBO0lBRUQsc0NBQXNDO0lBQ3RDLHNCQUFzQjtRQUNwQixJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0IsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDMUQsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1FBRS9DLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTyxFQUFFLENBQUE7UUFFOUIsT0FBTyxjQUFjO2FBQ2xCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQzthQUM5QixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxJQUFJLFdBQVcsQ0FBQyxDQUFBO0lBQ25ELENBQUM7SUFFRCxpQkFBaUI7UUFDZixNQUFNLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsd0JBQXdCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUE7UUFFckcsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtnQkFDNUQsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7Z0JBQzlDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxZQUFZLElBQUksYUFBYSxJQUFJLHdCQUF3QixDQUFDO2dCQUNwRixXQUFXLEVBQUUsT0FBTyxPQUFPO2FBQzVCLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxDQUFDLFlBQVksSUFBSSxhQUFhLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLE9BQU8sT0FBTyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzFILElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxDQUFBO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUVuQixJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7WUFFakMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxRQUFRLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQTtZQUMvQixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsRUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxDQUFDLENBQUE7WUFDcEcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQTtRQUNuQyxDQUFDO1FBRUQsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUE7SUFDckMsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ2pELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNuRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtJQUN6QixDQUFDO0lBRUQsMkNBQTJDO0lBQzNDLE1BQU07UUFDSixNQUFNLEVBQUMsY0FBYyxFQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQTtRQUNoQyxNQUFNLEVBQUMsV0FBVyxFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUM1QixNQUFNLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBQzFELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUN4RSxNQUFNLEVBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN6QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUMvQyxNQUFNLEVBQUUsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDL0IsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtRQUV0RCxNQUFNLDBCQUEwQixHQUFHLEVBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFO2dCQUN4RSxhQUFhLEVBQUUsS0FBSztnQkFDcEIsVUFBVSxFQUFFLFFBQVE7Z0JBQ3BCLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDakQsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNO2dCQUM3QyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ3BELFVBQVUsRUFBRSxDQUFDO2dCQUNiLGFBQWEsRUFBRSxDQUFDO2dCQUNoQixXQUFXLEVBQUUsQ0FBQzthQUNmLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFDLENBQUE7UUFFbEIsSUFBSSxNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2xDLDhGQUE4RjtZQUM5RiwwQkFBMEIsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7WUFFakQsTUFBTSxnQkFBZ0IsR0FBRywwQkFBMEIsQ0FBQyxZQUFZLENBQUE7WUFFaEUsSUFBSSxnQkFBZ0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDaEMsMEJBQTBCLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFBO2dCQUNsRCwwQkFBMEIsQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUE7Z0JBQ25ELDBCQUEwQixDQUFDLHVCQUF1QixHQUFHLGdCQUFnQixDQUFBO2dCQUNyRSwwQkFBMEIsQ0FBQyxzQkFBc0IsR0FBRyxnQkFBZ0IsQ0FBQTtnQkFFcEUsT0FBTywwQkFBMEIsQ0FBQyxZQUFZLENBQUE7WUFDaEQsQ0FBQztpQkFBTSxJQUFJLGdCQUFnQixJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUN2QywwQkFBMEIsQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQTtnQkFDakUsMEJBQTBCLENBQUMsb0JBQW9CLEdBQUcsZ0JBQWdCLENBQUE7Z0JBQ2xFLDBCQUEwQixDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FBQTtnQkFDdEQsMEJBQTBCLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxDQUFBO2dCQUVyRCxPQUFPLDBCQUEwQixDQUFDLFlBQVksQ0FBQTtZQUNoRCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sQ0FDTCxvQkFBQyxJQUFJLElBQ0gsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3JDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsMkJBQTJCO2dCQUNwRCxLQUFLLEVBQUUsU0FBUztnQkFDaEIsU0FBUyxFQUFFLGFBQWE7Z0JBQ3hCLEVBQUU7Z0JBQ0YsTUFBTTtnQkFDTixnQkFBZ0I7Z0JBQ2hCLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtnQkFDdEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDaEMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsMkJBQTJCLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUN0SSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFDOUIsTUFBTSxFQUFDLGFBQWE7WUFFcEIsb0JBQUMsU0FBUyxJQUNSLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUN6QyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQ2hDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUMvQixLQUFLLEVBQUUsMEJBQTBCLEVBQ2pDLE1BQU0sRUFBQyw4QkFBOEI7Z0JBRXJDLG9CQUFDLElBQUksSUFDSCxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEtBQUssRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxDQUFDLEVBQ3hILE1BQU0sRUFBQyw4QkFBOEI7b0JBRXBDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQjt3QkFDNUIsSUFBSSxDQUFDLGVBQWUsRUFBRTtvQkFFdkIsQ0FBQyxDQUFDLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQzt3QkFDOUI7NEJBQ0csY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDO2dDQUN6QixvQkFBQyxJQUFJLElBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEtBQUssRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUMsSUFDN0csV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FDOUM7NEJBRVIsY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLO2dDQUNqRDtvQ0FDRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7d0NBQ2hCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FDdEQsK0JBQ0UsRUFBRSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFDeEIsR0FBRyxFQUFFLGlCQUFpQixLQUFLLEVBQUUsRUFDN0IsSUFBSSxFQUFFLDRCQUE0QixDQUFDLElBQUksQ0FBQyxFQUN4QyxJQUFJLEVBQUMsUUFBUSxFQUNiLEtBQUssRUFBRSxLQUFLLEdBQ1osQ0FDSCxDQUFDO29DQUVILE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQzt3Q0FDakIsK0JBQ0UsRUFBRSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFDeEIsSUFBSSxFQUFFLDRCQUE0QixDQUFDLElBQUksQ0FBQyxFQUN4QyxJQUFJLEVBQUMsUUFBUSxFQUNiLEtBQUssRUFBQyxFQUFFLEdBQ1IsQ0FFSDs0QkFFSixjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FDcEMsb0JBQUMsSUFBSSxJQUNILEdBQUcsRUFBRSxhQUFhLENBQUMsR0FBRyxJQUFJLGlCQUFpQixhQUFhLENBQUMsS0FBSyxFQUFFLEVBQ2hFLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxFQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUMsQ0FBQyxFQUN6RCxNQUFNLEVBQUMsNEJBQTRCO2dDQUVsQyxhQUFhLENBQUMsSUFBSSxJQUFJLE9BQU87b0NBQzVCLG9CQUFDLElBQUksSUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsdUJBQXVCLEtBQUssRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLENBQUM7d0NBQ3ZHLG9CQUFDLElBQUksSUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUNuRCxhQUFhLENBQUMsSUFBSSxDQUNkLENBQ0Y7Z0NBRVIsYUFBYSxDQUFDLElBQUksSUFBSSxPQUFPO29DQUM1Qjt3Q0FDRyxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssSUFBSSw0QkFBNEIsQ0FBQyxJQUFJLENBQUM7NENBQ3pELCtCQUNFLEVBQUUsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQ3hCLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsRUFDeEMsSUFBSSxFQUFDLFFBQVEsRUFDYixLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsR0FDbkM7d0NBRUgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQzVDLENBRUEsQ0FDUixDQUNBLENBRUE7Z0JBQ1Asb0JBQUMsSUFBSSxJQUNILEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsS0FBSzt3QkFDeEUsVUFBVSxFQUFFLFFBQVE7d0JBQ3BCLGNBQWMsRUFBRSxRQUFRO3dCQUN4QixNQUFNLEVBQUUsTUFBTTt3QkFDZCxVQUFVLEVBQUUsTUFBTTt3QkFDbEIsV0FBVyxFQUFFLENBQUM7cUJBQ2YsQ0FBQyxFQUNGLE1BQU0sRUFBQywrQkFBK0I7b0JBRXRDLG9CQUFDLGVBQWUsSUFBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUMsQ0FBQyxHQUFJLENBQ3JJLENBQ0c7WUFDWixvQkFBQyxJQUFJLElBQ0gsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQ3JDLEdBQUcsRUFBRSxjQUFjLEVBQ25CLE1BQU0sRUFBQywyQkFBMkIsR0FDbEM7WUFDRCxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhO2dCQUM3QixvQkFBQyxNQUFNLElBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFDNUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQ2pCO1lBRVYsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhO2dCQUM5QixvQkFBQyxJQUFJLFFBQ0YsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQ25CLENBRUosQ0FDUixDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxFQUFDLGtCQUFrQixHQUFHLEtBQUssRUFBQyxHQUFHLEVBQUU7UUFDL0MsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsSUFBSSxpQkFBaUIsRUFBRSxDQUFBO1FBRXBFLE9BQU8sQ0FDTCxvQkFBQyxTQUFTLElBQ1IsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQ2xDLFlBQVksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUN4QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUNsRCxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixrQkFBa0IsRUFBRSxDQUFDLEtBQUs7Z0JBQzVGLEtBQUssRUFBRSxNQUFNO2dCQUNiLFdBQVcsRUFBRSxDQUFDO2dCQUNkLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUM3QyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDbEQsT0FBTyxFQUFFLENBQUM7YUFDWCxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUN4QixNQUFNLEVBQUMsMEJBQTBCLEtBQzdCLElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEdBQy9CLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsYUFBYTtRQUNYLE1BQU0sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBRTVGLElBQUksd0JBQXdCO1lBQUUsT0FBTyx3QkFBd0IsQ0FBQTtRQUM3RCxJQUFJLFlBQVk7WUFBRSxPQUFPLFlBQVksQ0FBQTtRQUNyQyxJQUFJLGFBQWE7WUFBRSxPQUFPLGFBQWEsQ0FBQTtRQUV2QyxJQUFJLFNBQVMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQTtZQUUvRyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFBO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQseUJBQXlCO0lBQ3pCLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25DLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELCtCQUErQjtJQUMvQixLQUFLLENBQUMsb0NBQW9DO1FBQ3hDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUUxQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU07UUFFMUIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQ0FBc0MsRUFBRSxFQUFDLGFBQWEsRUFBQyxDQUFDLENBQUE7UUFFakcsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN0QyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNqQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMxQixNQUFNLEVBQUUsYUFBYTtTQUN0QixDQUFDLENBQUE7UUFFRixNQUFNLEVBQUMsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2pELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsNkNBQTZDLEVBQUUsRUFBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUE7UUFFbkksSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ25FLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLEdBQUcsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUU7UUFDbEMsTUFBTSxFQUFDLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDeEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFBO1FBQ25ELElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFBO1FBQ3ZDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUN0RCxJQUFJO2dCQUNKLFNBQVM7Z0JBQ1QsV0FBVztnQkFDWCxXQUFXLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLE9BQU87YUFDL0QsQ0FBQyxDQUFBO1FBRUYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUNuRSxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDekUsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBQyxDQUFDLENBQUE7UUFDaEUsTUFBTSxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRXhHLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2pELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGtDQUFrQyxFQUFFO29CQUMzRSxTQUFTO29CQUNULDBCQUEwQixFQUFFLElBQUksQ0FBQywwQkFBMEI7b0JBQzNELGFBQWE7b0JBQ2IsV0FBVztpQkFDWixDQUFDLENBQUE7WUFFRixPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFBO1FBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtRQUNqSCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDO1lBQ3pHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQztZQUMxQyxDQUFDLENBQUMsSUFBSSxDQUFBO1FBRVIsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNaLGFBQWE7WUFDYiwyQkFBMkIsRUFBRSxTQUFTO1lBQ3RDLElBQUksRUFBRSxZQUFZO1lBQ2xCLGNBQWMsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDO1lBQ3BDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUMvRCxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQzVELEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUMsQ0FBQyxDQUFDLENBQUE7UUFFaEUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtnQkFDN0Qsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLE1BQU0sSUFBSSxDQUFDO2dCQUM5QyxZQUFZO2dCQUNaLGdCQUFnQjtnQkFDaEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTthQUM1RCxDQUFDLENBQUE7SUFDSixDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxFQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUM7UUFDbEMsSUFBSSxZQUFZLENBQUMsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLE9BQU8sQ0FDTCxvQkFBQyxXQUFXLElBQ1YsR0FBRyxFQUFFLEdBQUcsRUFDUixNQUFNLEVBQUUsWUFBWSxFQUNwQixZQUFZLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxFQUMvQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLDRCQUE0QixFQUFFLEVBQ3pELFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLHFCQUFxQixHQUN6QyxDQUNILENBQUE7UUFDSCxDQUFDO1FBRUQsT0FBTyxDQUNMLG9CQUFDLE1BQU0sSUFDTCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFDbEQsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQ3RDLEdBQUcsRUFBRSxHQUFHLEVBQ1IsTUFBTSxFQUFFLFlBQVksRUFDcEIsZUFBZSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUN4QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUN6QyxhQUFhLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQ3BDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQzNELDRCQUE0QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEdBQ3JFLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG9CQUFvQixDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxHQUFHLElBQUksQ0FBQywwQkFBMEI7UUFDcEYsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUE7UUFDbkQsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLElBQUksSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUE7UUFDdEgsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRTtnQkFDL0QsU0FBUztnQkFDVCxpQkFBaUIsRUFBRSxPQUFPLENBQUMsTUFBTTtnQkFDakMsV0FBVztnQkFDWCxrQkFBa0IsRUFBRSxhQUFhLENBQUMsTUFBTTthQUN6QyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFDcEMsSUFBSSxDQUFDLENBQUMsQ0FBQywyQkFBMkIsR0FBRyxTQUFTLENBQUE7UUFDOUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBO1FBQ2YsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFBO1FBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtRQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7SUFDMUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGtCQUFrQixHQUFHLENBQUMsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFFO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQTtRQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUE7UUFFakMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFBO1FBQ3JDLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCx1QkFBdUIsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzlCLElBQUksQ0FBQyxDQUFDLENBQUMscUJBQXFCLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7UUFDaEYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLENBQUMsQ0FBQTtJQUMvRSxDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUIsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzFCLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7UUFDM0UsTUFBTSxRQUFRLEdBQUcsRUFBQyxpQkFBaUIsRUFBQyxDQUFBO1FBRXBDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksaUJBQWlCLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDOUMsUUFBUSxDQUFDLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUE7UUFDakQsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUMzQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtZQUVyRSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLENBQUE7WUFDL0MsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBQ25GLENBQUMsQ0FBQTtJQUVELHNCQUFzQjtJQUN0QiwwQkFBMEI7UUFDeEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLENBQUMsQ0FBQTtRQUM3RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtJQUN2RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsUUFBUTtRQUMvQixJQUFJLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSztZQUFFLE9BQU07UUFFaEMsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQTtRQUMzQixJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sT0FBTyxDQUFDLGVBQWUsSUFBSSxVQUFVO1lBQUUsT0FBTTtRQUVwRSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbkQsTUFBTSxjQUFjLEdBQUcsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUMsQ0FBQTtZQUVqRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDO2dCQUFFLE9BQU07WUFFOUMsdUNBQXVDO1lBQ3ZDLE1BQU0sUUFBUSxHQUFHO2dCQUNmLENBQUMsUUFBUSxDQUFDLEVBQUUsY0FBYzthQUMzQixDQUFBO1lBRUQsSUFBSSxRQUFRLElBQUksbUJBQW1CLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQzlELFFBQVEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFBO1lBQy9CLENBQUM7WUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxPQUFNO1lBQ1IsQ0FBQztZQUVELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUM7b0JBQ25ELElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxDQUFBO2dCQUMvQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUN0QixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDbEIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFBO1FBRW5CLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBRXJFLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDckIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDcEIsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELGlDQUFpQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUV0RTs7O09BR0c7SUFDSCxZQUFZLENBQUMsRUFBQyxPQUFPLEVBQUMsR0FBRyxFQUFFO1FBQ3pCLE1BQU0sYUFBYSxHQUFHLE9BQU8sSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUN6RCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxFQUFDLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQTtRQUUxRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLCtCQUErQixDQUFDLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQTtZQUNyRCxPQUFNO1FBQ1IsQ0FBQztRQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFDLGFBQWEsRUFBQyxDQUFDLENBQUE7SUFDMUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILCtCQUErQixDQUFDLEVBQUMsYUFBYSxFQUFDO1FBQzdDLElBQUksSUFBSSxDQUFDLG9CQUFvQjtZQUFFLE9BQU07UUFFckMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQTtRQUNoQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDakQsSUFBSSxDQUFDLDhCQUE4QixDQUFDLGFBQWEsRUFBRSxDQUFBO1FBRW5ELFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDaEIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUU7Z0JBQ2pELFFBQVEsRUFBRSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ2hDLE9BQU8sRUFBRSxDQUFDO2dCQUNWLGVBQWUsRUFBRSxJQUFJO2FBQ3RCLENBQUM7WUFDRixRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRTtnQkFDbkQsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDL0IsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsZUFBZSxFQUFFLElBQUk7YUFDdEIsQ0FBQztTQUNILENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQTtZQUNqQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBQyxhQUFhLEVBQUMsQ0FBQyxDQUFBO1FBQzFDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILGtCQUFrQixDQUFDLEVBQUMsYUFBYSxFQUFDO1FBQ2hDLElBQUksQ0FBQyx1Q0FBdUMsR0FBRyxLQUFLLENBQUE7UUFDcEQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7UUFFdkIsSUFBSSxDQUFDLFFBQVEsQ0FDWDtZQUNFLE1BQU0sRUFBRSxJQUFJO1lBQ1osYUFBYSxFQUFFLFNBQVM7WUFDeEIsTUFBTSxFQUFFLEtBQUs7WUFDYixzQkFBc0IsRUFBRSxJQUFJO1lBQzVCLGlCQUFpQixFQUFFLFFBQVE7WUFDM0IsSUFBSSxFQUFFLENBQUM7WUFDUCxnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLGNBQWMsRUFBRSxHQUFHO1lBQ25CLFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLElBQUk7U0FDakIsRUFDRCxHQUFHLEVBQUU7WUFDSCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFDLENBQUMsQ0FBQTtRQUNySSxDQUFDLENBQ0YsQ0FBQTtRQUVELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUMsQ0FBQyxDQUFBO1FBQ3RELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7SUFDcEMsQ0FBQztJQUVELHNCQUFzQjtJQUN0Qiw2QkFBNkI7UUFDM0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQTtRQUNqQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDakQsSUFBSSxDQUFDLDhCQUE4QixDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ25ELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDN0MsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqRCxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLCtCQUErQjtRQUM3QixRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ2hCLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFO2dCQUNqRCxRQUFRLEVBQUUsRUFBRTtnQkFDWixNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNoQyxPQUFPLEVBQUUsQ0FBQztnQkFDVixlQUFlLEVBQUUsSUFBSTthQUN0QixDQUFDO1lBQ0YsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLEVBQUU7Z0JBQ25ELFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JDLE9BQU8sRUFBRSxDQUFDO2dCQUNWLGVBQWUsRUFBRSxJQUFJO2FBQ3RCLENBQUM7U0FDSCxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDWixDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLGFBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQTtJQUVoRCxzQkFBc0I7SUFDdEIsb0JBQW9CLEdBQUcsR0FBRyxFQUFFO1FBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFBO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFBO1FBRWhELElBQUksS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNmLENBQUM7YUFBTSxJQUFJLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUNqQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUE7UUFDbEMsQ0FBQzthQUFNLElBQUksS0FBSyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDO2dCQUNILEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFBO1lBQ2xCLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLDZEQUE2RDtZQUMvRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVEOzs7T0FHRztJQUNILGtCQUFrQixHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUU7UUFDbEMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxFQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ3RHLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFBO1FBRWpDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsaUNBQWlDLENBQUMsQ0FBQTtRQUMxRixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxFQUFFLENBQUMsaUNBQWlDLEVBQUUsQ0FBQTtRQUM3QyxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsc0JBQXNCO0lBQ3RCLFdBQVc7UUFDVCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO1FBRXRELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUN0RCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQztnQkFDMUQsa0JBQWtCO2dCQUNsQixhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNO2FBQzdCLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFBO1FBQ3pCLElBQUksQ0FBQyx1Q0FBdUMsR0FBRyxDQUFDLGtCQUFrQixDQUFBO1FBRWxFLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQTtRQUN0QyxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FDWDtZQUNFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLE1BQU07WUFDeEUsTUFBTSxFQUFFLElBQUk7WUFDWixnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQ3hELGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVE7WUFDNUQsWUFBWSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsS0FBSztZQUM5RSxJQUFJLEVBQUUsQ0FBQztZQUNQLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsY0FBYyxFQUFFLEdBQUc7WUFDbkIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUM3RSxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQzVFLEVBQ0QsR0FBRyxFQUFFO1lBQ0gsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7Z0JBQ3JCLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFBO1lBQ3hDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQTtnQkFDakMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO1lBQ3ZCLENBQUM7WUFFRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtZQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUE7UUFDN0IsQ0FBQyxDQUNGLENBQUE7UUFFRCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTztZQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDdEMsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixjQUFjLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUE7SUFFM0Usc0JBQXNCO0lBQ3RCLGNBQWM7UUFDWixJQUFJLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxJQUFJLE9BQU8sUUFBUSxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsT0FBTTtRQUUzRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFBO1FBQ3pELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxRQUFRLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUE7UUFFeEUsSUFBSSxRQUFRLENBQUMsSUFBSTtZQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDMUQsSUFBSSxRQUFRLENBQUMsZUFBZTtZQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFFaEYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQTtJQUM5QixDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLGdCQUFnQjtRQUNkLElBQUksUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLElBQUksT0FBTyxRQUFRLElBQUksV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE9BQU07UUFFNUYsSUFBSSxRQUFRLENBQUMsSUFBSTtZQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFBO1FBQ2pGLElBQUksUUFBUSxDQUFDLGVBQWU7WUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixJQUFJLEVBQUUsQ0FBQTtRQUUzRyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFBO1FBQ3JDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxTQUFTLENBQUE7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQTtJQUMvQixDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLGtCQUFrQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDckIsT0FBTSxDQUFDLHFDQUFxQztRQUM5QyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1lBQzlCLE9BQU07UUFDUixDQUFDO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7UUFFdkIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO1FBQzlELElBQUksQ0FBQyx1Q0FBdUMsR0FBRyxJQUFJLENBQUE7UUFDbkQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7SUFDaEMsQ0FBQztJQUVELHNCQUFzQjtJQUN0Qiw0QkFBNEI7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUFFLE9BQU07UUFFMUIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxPQUFPO2dCQUFFLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1lBQ3RFLE9BQU07UUFDUixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1lBQzlCLE9BQU07UUFDUixDQUFDO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7UUFDdkIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUE7SUFDbkMsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixzQ0FBc0M7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUFFLE9BQU07UUFDMUIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1lBQzlCLE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxFQUFDLFlBQVksRUFBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUE7UUFDOUIsTUFBTSxFQUFDLHNCQUFzQixFQUFFLHFCQUFxQixFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUM5RCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUE7UUFFbEQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLO1lBQ3JDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHO1lBQ3hCLENBQUMsQ0FBQyxPQUFPLHFCQUFxQixFQUFFLEdBQUcsSUFBSSxRQUFRLElBQUksT0FBTyxxQkFBcUIsRUFBRSxNQUFNLElBQUksUUFBUTtnQkFDakcsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDOUQsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUVmLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsd0NBQXdDLEVBQUUsRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBQyxDQUFDLENBQUE7WUFDdkksSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUE7WUFDakMsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLDBCQUEwQixHQUFHLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUE7UUFDN0UsTUFBTSxzQkFBc0IsR0FBRyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUVyRSxJQUFJLHNCQUFzQixHQUFHLDBCQUEwQixFQUFFLENBQUM7WUFDeEQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsd0NBQXdDLEVBQUUsRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQTtZQUN4RyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQTtRQUNoQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxFQUFFLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7WUFDeEcsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUE7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsdUJBQXVCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFBRSxPQUFNO1FBRTFCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxPQUFPLENBQUE7UUFFM0QsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFBO1FBQ3RDLENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7UUFFckIsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNaLE1BQU0sRUFBRSxJQUFJO1lBQ1osTUFBTSxFQUFFLElBQUk7WUFDWixnQkFBZ0IsRUFBRSxPQUFPO1lBQ3pCLGlCQUFpQixFQUFFLFNBQVM7WUFDNUIsWUFBWSxFQUFFLFNBQVM7U0FDeEIsRUFBRSxHQUFHLEVBQUU7WUFDTixJQUFJLGdCQUFnQjtnQkFBRSxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQTtRQUM5RCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsdUJBQXVCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFBRSxPQUFNO1FBRTFCLE1BQU0sRUFBQyxpQkFBaUIsRUFBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDbEMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO1FBQ25FLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBRXZCLElBQUksQ0FBQyxRQUFRLENBQ1g7WUFDRSxNQUFNLEVBQUUsSUFBSTtZQUNaLGdCQUFnQixFQUFFLE9BQU87WUFDekIsaUJBQWlCLEVBQUUsU0FBUztZQUM1QixZQUFZLEVBQUUsaUJBQWlCLEVBQUUsS0FBSztTQUN2QyxFQUNELEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FDNUIsQ0FBQTtJQUNILENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsdUJBQXVCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFBRSxPQUFNO1FBRTFCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQTtRQUNuRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUN2QixJQUFJLENBQUMsUUFBUSxDQUNYO1lBQ0UsTUFBTSxFQUFFLElBQUk7WUFDWixnQkFBZ0IsRUFBRSxPQUFPO1lBQ3pCLGlCQUFpQixFQUFFLFFBQVE7WUFDM0IsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsS0FBSztTQUM5QyxFQUNELEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FDNUIsQ0FBQTtJQUNILENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsaUJBQWlCLEdBQUcsR0FBRyxFQUFFO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQ3RGLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQTtRQUMzQixDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsMEJBQTBCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFFcEUsc0JBQXNCO0lBQ3RCLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtRQUN4QixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUN2RixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7WUFDckYsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7WUFDbkYsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQUUsT0FBTTtZQUV2QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQTtRQUMzQixDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsMkJBQTJCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFFdEUsc0JBQXNCO0lBQ3RCLHFCQUFxQixHQUFHLEdBQUcsRUFBRTtRQUMzQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUMxRiwyRUFBMkU7UUFDM0UsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUNyQixDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsOEJBQThCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN6QyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQTtRQUN4QixLQUFLLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQTtRQUV6QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7SUFDckIsQ0FBQyxDQUFBO0lBRUQsaUNBQWlDLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUN0RCw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJO1FBQ3hDLDJCQUEyQixFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUs7UUFDeEMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyw4QkFBOEI7UUFDN0QsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyw4QkFBOEI7S0FDaEUsQ0FBQyxDQUFBO0lBRUYsNkJBQTZCO0lBQzdCLG9CQUFvQjtRQUNsQixNQUFNLEVBQUMsVUFBVSxFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUUzQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRWhFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDcEMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLEVBQUU7WUFDbkMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDMUIsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUTtZQUN6QixVQUFVO1NBQ1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQTtRQUU1RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUIsQ0FBQyxVQUFVO1FBQzVCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUN4QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUE7UUFDaEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ3RGLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO1FBRWhFLElBQUksVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BCLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDZixDQUFDO1lBRUQsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDO1FBRUQsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRVYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFBO1FBQ3BCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQTtRQUNqRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFBO1FBRTVELElBQUksV0FBVyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JCLEtBQUssR0FBRyxDQUFDLENBQUE7WUFDVCxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ25DLENBQUM7YUFBTSxJQUFJLFdBQVcsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekMsR0FBRyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUE7WUFDcEIsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUNyQyxDQUFDO1FBRUQsSUFBSSxLQUFLLEdBQUcsQ0FBQztZQUFFLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBRTVDLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNmLENBQUM7UUFFRCxJQUFJLEdBQUcsR0FBRyxVQUFVLEdBQUcsQ0FBQztZQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUVyRCxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFbkIsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsc0JBQXNCLENBQUMsVUFBVTtRQUMvQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDdkMsTUFBTSxZQUFZLEdBQUcsUUFBUSxVQUFVLE9BQU8sVUFBVSxFQUFFLENBQUE7UUFFMUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLDJCQUEyQixFQUFFO1lBQ2pELFlBQVksRUFBRSxZQUFZO1lBQzFCLElBQUksRUFBRSxVQUFVO1lBQ2hCLFVBQVU7U0FDWCxDQUFDLElBQUksWUFBWSxDQUFBO0lBQ3BCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxvQkFBb0IsQ0FBQyxVQUFVO1FBQzdCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFBO1FBRXpELE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2hELENBQUM7SUFFRCwyQkFBMkI7SUFDM0IsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUMzQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtRQUM5QyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEVBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO1FBRWhHLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTTtRQUV2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUVwRSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUE7WUFDcEQsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUNYLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFDLEVBQ2xELEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQzVDLENBQUE7SUFDSCxDQUFDLENBQUE7SUFFRCxvREFBb0Q7SUFDcEQsdUJBQXVCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNsQyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQTtRQUN4QixLQUFLLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQTtRQUV6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQ2xELENBQUMsQ0FBQTtJQUVELG9EQUFvRDtJQUNwRCx1QkFBdUIsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2xDLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFBO1FBQ3hCLEtBQUssQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFBO1FBRXpCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDbEQsQ0FBQyxDQUFBO0lBRUQsc0JBQXNCO0lBQ3RCLHNCQUFzQixHQUFHLEdBQUcsRUFBRTtRQUM1QixJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQTtRQUM5QixJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUE7SUFDdEQsQ0FBQyxDQUFBO0lBRUQsNEJBQTRCO0lBQzVCLHVCQUF1QixHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFBO0lBQy9CLENBQUMsQ0FBQTtJQUVELG9EQUFvRDtJQUNwRCxxQkFBcUIsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFBO1FBQ3hCLEtBQUssQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFBO1FBRXpCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO1FBQzlDLE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFBO1FBQzlELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUE7UUFDL0UsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUUzRixJQUFJLFVBQVUsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO1lBQ2hGLE9BQU07UUFDUixDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNaLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsY0FBYyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDN0MsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFBO0lBRUQsb0RBQW9EO0lBQ3BELHVCQUF1QixHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDbEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUE7UUFDeEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUE7UUFFekIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUE7UUFFOUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFBO1lBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtZQUNwRCxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBRTlDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7WUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO1lBQ3BELE9BQU07UUFDUixDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBQ2xGLENBQUMsQ0FBQTtJQUVELG9EQUFvRDtJQUNwRCx3QkFBd0IsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ25DLElBQUksS0FBSyxFQUFFLEdBQUcsS0FBSyxPQUFPO1lBQUUsT0FBTTtRQUVsQyxJQUFJLENBQUMsRUFBRSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3hDLENBQUMsQ0FBQTtJQUVELGdEQUFnRDtJQUNoRCxrQkFBa0I7UUFDaEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUE7UUFFOUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRS9DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUN4QyxNQUFNLFlBQVksR0FBRyxXQUFXLElBQUksQ0FBQyxDQUFBO1FBQ3JDLE1BQU0sWUFBWSxHQUFHLFdBQVcsSUFBSSxVQUFVLENBQUE7UUFFOUMsT0FBTyxDQUNMLG9CQUFDLElBQUksSUFDSCxLQUFLLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixLQUFLO2dCQUNwQyxjQUFjLEVBQUUsU0FBUztnQkFDekIsY0FBYyxFQUFFLENBQUM7Z0JBQ2pCLE9BQU8sRUFBRSxDQUFDO2FBQ1gsRUFDRCxNQUFNLEVBQUMsZ0NBQWdDO1lBRXZDLG9CQUFDLElBQUksSUFDSCxLQUFLLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixLQUFLLEVBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUMsRUFDaEgsTUFBTSxFQUFDLCtCQUErQjtnQkFFdEMsb0JBQUMsU0FBUyxJQUNSLFFBQVEsRUFBRSxZQUFZLEVBQ3RCLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUN4QyxLQUFLLEVBQUUsTUFBTSxDQUFDLHVCQUF1QixZQUFZLEVBQUUsQ0FBQyxLQUFLO3dCQUN2RCxVQUFVLEVBQUUsUUFBUTt3QkFDcEIsZUFBZSxFQUFFLFNBQVM7d0JBQzFCLFdBQVcsRUFBRSxTQUFTO3dCQUN0QixZQUFZLEVBQUUsQ0FBQzt3QkFDZixXQUFXLEVBQUUsQ0FBQzt3QkFDZCxNQUFNLEVBQUUsRUFBRTt3QkFDVixjQUFjLEVBQUUsUUFBUTt3QkFDeEIsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMvQixLQUFLLEVBQUUsRUFBRTtxQkFDVixFQUNELE1BQU0sRUFBQyw2QkFBNkI7b0JBRXBDLG9CQUFDLGVBQWUsSUFDZCxJQUFJLEVBQUMsY0FBYyxFQUNuQixLQUFLLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixLQUFLLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFDLEdBQ3BFLENBQ1E7Z0JBQ1osb0JBQUMsSUFBSSxJQUNILE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFO3dCQUM1QyxJQUFJLEVBQUUsV0FBVztxQkFDbEIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQ2pCLEtBQUssRUFBRSxNQUFNLENBQUMscUJBQXFCLEtBQUs7d0JBQ3RDLFVBQVUsRUFBRSxRQUFRO3dCQUNwQixlQUFlLEVBQUUsU0FBUzt3QkFDMUIsV0FBVyxFQUFFLFNBQVM7d0JBQ3RCLFlBQVksRUFBRSxFQUFFO3dCQUNoQixXQUFXLEVBQUUsQ0FBQzt3QkFDZCxjQUFjLEVBQUUsUUFBUTt3QkFDeEIsUUFBUSxFQUFFLEdBQUc7d0JBQ2IsaUJBQWlCLEVBQUUsRUFBRTt3QkFDckIsZUFBZSxFQUFFLENBQUM7cUJBQ25CLEVBQ0QsTUFBTSxFQUFDLDhCQUE4QjtvQkFFckMsb0JBQUMsU0FBUyxJQUNSLFlBQVksRUFBQyxZQUFZLEVBQ3pCLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLHFCQUFxQixFQUNyQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsRUFDN0MsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsc0JBQXNCLEVBQ3ZDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLHNCQUFzQixFQUN6QyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsRUFDM0MsZUFBZSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLEVBQ2hELEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFDekIsaUJBQWlCLFFBQ2pCLEtBQUssRUFBRSxNQUFNLENBQUMsb0JBQW9CLEtBQUs7NEJBQ3JDLFdBQVcsRUFBRSxDQUFDOzRCQUNkLEtBQUssRUFBRSxTQUFTOzRCQUNoQixRQUFRLEVBQUUsRUFBRTs0QkFDWixPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUzs0QkFDbEQsT0FBTyxFQUFFLENBQUM7NEJBQ1YsU0FBUyxFQUFFLFFBQVE7NEJBQ25CLEtBQUssRUFBRSxHQUFHO3lCQUNYLEVBQ0QsTUFBTSxFQUFDLDhCQUE4QixFQUNyQyxLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxHQUM1QyxDQUNHO2dCQUNQLG9CQUFDLFNBQVMsSUFDUixRQUFRLEVBQUUsWUFBWSxFQUN0QixPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsRUFDeEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyx1QkFBdUIsWUFBWSxFQUFFLENBQUMsS0FBSzt3QkFDdkQsVUFBVSxFQUFFLFFBQVE7d0JBQ3BCLGVBQWUsRUFBRSxTQUFTO3dCQUMxQixXQUFXLEVBQUUsU0FBUzt3QkFDdEIsWUFBWSxFQUFFLENBQUM7d0JBQ2YsV0FBVyxFQUFFLENBQUM7d0JBQ2QsTUFBTSxFQUFFLEVBQUU7d0JBQ1YsY0FBYyxFQUFFLFFBQVE7d0JBQ3hCLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDL0IsS0FBSyxFQUFFLEVBQUU7cUJBQ1YsRUFDRCxNQUFNLEVBQUMsNkJBQTZCO29CQUVwQyxvQkFBQyxlQUFlLElBQ2QsSUFBSSxFQUFDLGVBQWUsRUFDcEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsS0FBSyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBQyxHQUNwRSxDQUNRLENBQ1A7WUFDUCxvQkFBQyxJQUFJLElBQ0gsS0FBSyxFQUFFLE1BQU0sQ0FBQyxlQUFlLEtBQUs7b0JBQ2hDLGFBQWEsRUFBRSxLQUFLO29CQUNwQixRQUFRLEVBQUUsTUFBTTtvQkFDaEIsY0FBYyxFQUFFLFFBQVE7b0JBQ3hCLFNBQVMsRUFBRSxDQUFDO2lCQUNiLEVBQ0QsTUFBTSxFQUFDLDhCQUE4QixJQUVwQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2pELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDNUIsT0FBTyxDQUNMLG9CQUFDLElBQUksSUFDSCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixLQUFLLEVBQUMsaUJBQWlCLEVBQUUsQ0FBQyxFQUFDLEVBQzNELE1BQU0sRUFBQyxpQ0FBaUM7d0JBRXhDLG9CQUFDLElBQUksSUFDSCxLQUFLLEVBQUUsTUFBTSxDQUFDLHNCQUFzQixLQUFLO2dDQUN2QyxLQUFLLEVBQUUsU0FBUztnQ0FDaEIsUUFBUSxFQUFFLEVBQUU7Z0NBQ1osVUFBVSxFQUFFLEdBQUc7NkJBQ2hCLFVBR0ksQ0FDRixDQUNSLENBQUE7Z0JBQ0gsQ0FBQztnQkFFRCxPQUFPLENBQ0wsb0JBQUMsb0JBQW9CLElBQ25CLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLFdBQVcsRUFDakMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQ2IsY0FBYyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQ3pDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxHQUNoQixDQUNILENBQUE7WUFDSCxDQUFDLENBQUMsQ0FDRyxDQUNGLENBQ1IsQ0FBQTtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FBQyxFQUFDLGFBQWEsRUFBQztRQUNoQyxPQUFPLENBQ0w7WUFDRyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FDbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUNwQixHQUFHLEVBQUUsWUFBWSxDQUFDLEdBQUcsSUFBSSxpQkFBaUIsWUFBWSxDQUFDLEtBQUssRUFBRTtnQkFDOUQsWUFBWTthQUNiLENBQUMsQ0FDSDtZQUNBLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztnQkFDMUIsb0JBQUMsSUFBSSxJQUNILEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyx1QkFBdUIsS0FBSzt3QkFDNUUsYUFBYSxFQUFFLEVBQUU7d0JBQ2pCLFdBQVcsRUFBRSxDQUFDO3dCQUNkLFlBQVksRUFBRSxDQUFDO3dCQUNmLFVBQVUsRUFBRSxFQUFFO3FCQUNmLENBQUMsRUFDRixNQUFNLEVBQUMsa0NBQWtDO29CQUV6QyxvQkFBQyxJQUFJLFFBQ0YsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FDL0UsQ0FDRixDQUVSLENBQ0osQ0FBQTtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxzQkFBc0IsQ0FBQyxFQUFDLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBQztRQUNqRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFBO1FBQ3hFLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUU7WUFDbkQsUUFBUSxFQUFFLFVBQVU7WUFDcEIsTUFBTSxFQUFFLE1BQU07WUFDZCxTQUFTLEVBQUUsTUFBTTtZQUNqQixJQUFJLEVBQUUsRUFBRTtZQUNSLEtBQUssRUFBRSxFQUFFO1lBQ1QsTUFBTSxFQUFFLENBQUM7WUFDVCxTQUFTLEVBQUUsY0FBYztZQUN6QixXQUFXLEVBQUUsU0FBUztZQUN0QixZQUFZLEVBQUUsRUFBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBQztZQUNyQyxhQUFhLEVBQUUsSUFBSTtZQUNuQixZQUFZLEVBQUUsRUFBRTtZQUNoQixTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLO2dCQUM3QixDQUFDLENBQUMsMkdBQTJHO2dCQUM3RyxDQUFDLENBQUMsU0FBUztZQUNiLGVBQWUsRUFBRSxNQUFNO1lBQ3ZCLG1CQUFtQixFQUFFLEVBQUU7WUFDdkIsb0JBQW9CLEVBQUUsRUFBRTtZQUN4QixPQUFPLEVBQUUsSUFBSSxDQUFDLDhCQUE4QjtZQUM1QyxRQUFRLEVBQUUsUUFBUTtZQUNsQixTQUFTLEVBQUUsSUFBSSxDQUFDLCtCQUErQjtZQUMvQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7U0FDckMsRUFBRSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQTtRQUU5QyxJQUFJLFFBQVEsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUMzQixVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUE7WUFDMUMsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFBO1FBQzFCLENBQUM7UUFFRCxPQUFPLENBQ0wsb0JBQUMsSUFBSSxJQUNILEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0IsS0FBSztnQkFDN0UsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVU7Z0JBQ3JELEdBQUcsRUFBRSxDQUFDO2dCQUNOLEtBQUssRUFBRSxDQUFDO2dCQUNSLE1BQU0sRUFBRSxDQUFDO2dCQUNULElBQUksRUFBRSxDQUFDO2dCQUNQLE1BQU0sRUFBRSxLQUFLO2dCQUNiLFNBQVMsRUFBRSxLQUFLO2FBQ2pCLENBQUMsRUFDRixNQUFNLEVBQUMsb0NBQW9DO1lBRTNDLG9CQUFDLFFBQVEsQ0FBQyxJQUFJLElBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixLQUFLO29CQUNsRixRQUFRLEVBQUUsVUFBVTtvQkFDcEIsR0FBRyxFQUFFLENBQUM7b0JBQ04sS0FBSyxFQUFFLENBQUM7b0JBQ1IsTUFBTSxFQUFFLENBQUM7b0JBQ1QsSUFBSSxFQUFFLENBQUM7b0JBQ1AsZUFBZSxFQUFFLHdCQUF3QjtvQkFDekMsT0FBTyxFQUFFLElBQUksQ0FBQyw0QkFBNEI7aUJBQzNDLENBQUMsRUFDRixNQUFNLEVBQUMscUNBQXFDLEtBQ3hDLElBQUksQ0FBQyxFQUFFLENBQUMsaUNBQWlDLENBQUMsV0FBVyxHQUN6RDtZQUNGLG9CQUFDLFFBQVEsQ0FBQyxJQUFJLElBQ1osT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQ2pCLCtCQUErQixFQUMvQixFQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixJQUFJLFFBQVEsRUFBQyxFQUN4RyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQy9CLEVBQ0QsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsd0JBQXdCLEVBQzFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUNoQyxLQUFLLEVBQUUsVUFBVSxFQUNqQixNQUFNLEVBQUMsK0JBQStCO2dCQUV0QyxvQkFBQyxVQUFVLElBQ1QscUJBQXFCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyw0QkFBNEIsRUFBRSxNQUFNLENBQUMsMEJBQTBCLEtBQUs7d0JBQ3pHLFFBQVEsRUFBRSxDQUFDO3dCQUNYLGNBQWMsRUFBRSxVQUFVO3FCQUMzQixDQUFDLEVBQ0YseUJBQXlCLEVBQUMsU0FBUyxFQUNuQyxtQkFBbUIsUUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMseUJBQXlCLEVBQUUsTUFBTSxDQUFDLHVCQUF1QixLQUFLLEVBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxFQUNoSSxNQUFNLEVBQUMsd0NBQXdDLElBRTlDLGtCQUFrQixDQUNSO2dCQUNaLGtCQUFrQjtnQkFDbkIsb0JBQUMsSUFBSSxJQUNILEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLDhCQUE4QixFQUFFLE1BQU0sQ0FBQyw0QkFBNEIsS0FBSzt3QkFDN0YsY0FBYyxFQUFFLFNBQVM7d0JBQ3pCLGNBQWMsRUFBRSxDQUFDO3dCQUNqQixhQUFhLEVBQUUsRUFBRTt3QkFDakIsV0FBVyxFQUFFLEVBQUU7d0JBQ2YsWUFBWSxFQUFFLEVBQUU7d0JBQ2hCLFVBQVUsRUFBRSxFQUFFO3FCQUNmLENBQUMsRUFDRixNQUFNLEVBQUMsNkNBQTZDLElBRW5ELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBQyxrQkFBa0IsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUM1QyxDQUNPLENBQ1gsQ0FDUixDQUFBO0lBQ0gsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxnQkFBZ0I7UUFDZCxNQUFNLEVBQUMscUJBQXFCLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNySSxJQUFJLElBQUksRUFBRSxHQUFHLENBQUE7UUFDYixNQUFNLEVBQUUsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDL0IsTUFBTSx1QkFBdUIsR0FBRyxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUE7UUFDeEYsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBQyxhQUFhLEVBQUMsQ0FBQyxDQUFBO1FBQ25FLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUE7UUFFcEQsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUMsRUFBRSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFDLENBQUMsQ0FBQTtRQUNsRixDQUFDO1FBRUQsSUFBSSxLQUFLLEdBQUc7WUFDVixRQUFRLEVBQUUsVUFBVTtZQUNwQixNQUFNLEVBQUUsS0FBSztZQUNiLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFVBQVUsRUFBRSxpQkFBaUI7WUFDN0IsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWTtZQUNqRCxlQUFlLEVBQUUsTUFBTTtZQUN2QixXQUFXLEVBQUUsTUFBTTtZQUNuQixXQUFXLEVBQUUsQ0FBQztZQUNkLFNBQVMsRUFBRSxHQUFHO1lBQ2QsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQTtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFBO1lBQ2IsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUE7UUFDaEIsQ0FBQzthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ25DLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBO1lBQ2QsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7UUFDbEIsQ0FBQzthQUFNLElBQUksdUJBQXVCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDOUMsSUFBSSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUN6QiwrRUFBK0U7Z0JBQy9FLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFBO2dCQUVsSCwwREFBMEQ7Z0JBQzFELElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUE7WUFDbkgsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksR0FBRyxxQkFBcUIsRUFBRSxJQUFJLENBQUE7Z0JBQ2xDLEdBQUcsR0FBRyxPQUFPLHFCQUFxQixFQUFFLEdBQUcsSUFBSSxRQUFRLElBQUksT0FBTyxxQkFBcUIsRUFBRSxNQUFNLElBQUksUUFBUTtvQkFDckcsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFDOUQsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtZQUNmLENBQUM7WUFFRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsRCxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtnQkFDakIsS0FBSyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBO1lBQ2xELENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQTtnQkFDZCxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQTtnQkFDYixLQUFLLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQTtZQUM3QixDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksdUJBQXVCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDOUMsSUFBSSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUN6QiwrRUFBK0U7Z0JBQy9FLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQTtnQkFFbEgsMERBQTBEO2dCQUMxRCxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUE7WUFDdkgsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksR0FBRyxxQkFBcUIsRUFBRSxJQUFJLENBQUE7Z0JBQ2xDLEdBQUcsR0FBRyxxQkFBcUIsRUFBRSxHQUFHLENBQUE7WUFDbEMsQ0FBQztZQUVELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xELEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO2dCQUNqQixLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1lBQ3JELENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQTtnQkFDZCxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQTtnQkFDYixLQUFLLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQTtZQUM3QixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4Qix1QkFBdUIsRUFBRSxDQUFDLENBQUE7UUFDMUUsQ0FBQztRQUVELElBQUksUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixLQUFLLENBQUMsT0FBTyxHQUFHLGlCQUFpQixJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDckQsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDM0IsQ0FBQztRQUVELEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUU5RixPQUFPLENBQ0wsb0JBQUMsSUFBSSxJQUNILE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUNqQix5QkFBeUIsRUFDekIsRUFBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsSUFBSSxRQUFRLEVBQUMsRUFDdEUsQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLENBQUMsQ0FDeEIsRUFDRCxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsRUFDMUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQ2hDLEtBQUssRUFBRSxLQUFLLEVBQ1osTUFBTSxFQUFDLCtCQUErQjtZQUV0QyxvQkFBQyxVQUFVLElBQ1QseUJBQXlCLEVBQUMsU0FBUyxFQUNuQyxtQkFBbUIsUUFDbkIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsS0FBSyxDQUFDLFNBQVMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLO29CQUMvRCxRQUFRLEVBQUUsQ0FBQztvQkFDWCxVQUFVLEVBQUUsQ0FBQztvQkFDYixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsSUFBSSxHQUFHO29CQUNqQyxTQUFTLEVBQUUsQ0FBQztpQkFDYixFQUNELE1BQU0sRUFBQyxpQ0FBaUMsSUFFdkMsa0JBQWtCLENBQ1I7WUFDWixrQkFBa0IsQ0FDZCxDQUNSLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGVBQWUsR0FBRyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRTtRQUN4QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDdEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFBO1FBRXZCLE1BQU0sRUFBQyxRQUFRLEVBQUUsYUFBYSxFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQTtRQUM1QyxNQUFNLEVBQUMsUUFBUSxFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN6QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUMvQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDakMsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFBO1FBQ25CLE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3hHLE1BQU0sVUFBVSxHQUFHLEVBQUMsR0FBRyxPQUFPLEVBQUMsQ0FBQTtRQUMvQixJQUFJLGlCQUFpQixDQUFBO1FBQ3JCLElBQUksTUFBTSxDQUFBO1FBRVYsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUNqRCxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FBQyxDQUFBO2dCQUV6RixJQUFJLFlBQVksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDL0MsOENBQThDO29CQUM5QyxPQUFPLFVBQVUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUE7b0JBQ3JDLE1BQU0sR0FBRyxpQ0FBaUMsQ0FBQTtvQkFFMUMsaUJBQWlCLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQ3pHLENBQUM7cUJBQU0sQ0FBQztvQkFDTix1Q0FBdUM7b0JBQ3ZDLFVBQVUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxZQUFZLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO29CQUMvRSxNQUFNLEdBQUcsY0FBYyxDQUFBO2dCQUN6QixDQUFDO2dCQUVELFFBQVEsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFBO1lBQy9CLENBQUM7aUJBQU0sQ0FBQztnQkFDTiw4QkFBOEI7Z0JBQzlCLE1BQU0sR0FBRyxlQUFlLENBQUE7Z0JBQ3hCLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3pHLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLHNEQUFzRDtZQUN0RCxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO29CQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUU7d0JBQzFELE1BQU0sRUFBRSx3QkFBd0I7d0JBQ2hDLFdBQVcsRUFBRSxZQUFZLENBQUMsS0FBSztxQkFDaEMsQ0FBQyxDQUFBO2dCQUNGLE9BQU07WUFDUixDQUFDO1lBRUQsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsbUJBQW1CO2dCQUNuQixVQUFVLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7Z0JBQ3ZELFFBQVEsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFBO1lBQy9CLENBQUM7WUFFRCxJQUFJLFFBQVEsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxHQUFHLFlBQVksQ0FBQTtnQkFDckIsaUJBQWlCLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUE7WUFDM0QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQTtnQkFDaEMsaUJBQWlCLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUNwQyxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUQsNkZBQTZGO1FBQy9GLENBQUM7YUFBTSxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDN0IsUUFBUSxDQUFDLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQTtRQUM3QyxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLElBQUksY0FBYyxDQUFBO1FBQ25ELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzFELE1BQU0sRUFBRSxNQUFNLElBQUksYUFBYTtnQkFDL0IsUUFBUTtnQkFDUixXQUFXLEVBQUUsWUFBWSxDQUFDLEtBQUs7Z0JBQy9CLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxNQUFNO2dCQUN6QyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsTUFBTTthQUNsQyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYTtZQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFBO1FBRW5FLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYix3Q0FBd0M7WUFDeEMsUUFBUSxDQUFDO2dCQUNQLEtBQUs7Z0JBQ0wsT0FBTztnQkFDUCxPQUFPLEVBQUUsVUFBVTthQUNwQixDQUFDLENBQUE7UUFDSixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzdCLElBQUksV0FBVyxDQUFBO1lBRWYsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3JELENBQUM7aUJBQU0sQ0FBQztnQkFDTixXQUFXLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDeEMsQ0FBQztZQUVELElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ25DLENBQUM7UUFFRCxJQUFJLFNBQVMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFBO1FBQ25DLENBQUM7UUFFRCxJQUFJLGdCQUFnQixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUE7UUFDakQsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVEOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLE1BQU0sR0FBRyxFQUFFO1FBQzdDLElBQUksYUFBYSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQTtRQUM3RCxNQUFNLFNBQVMsR0FBRyxFQUFDLEdBQUcsS0FBSyxFQUFDLENBQUE7UUFFNUIsSUFBSSxPQUFPLGFBQWEsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUN2Qyx1Q0FBdUM7WUFDdkMsYUFBYSxHQUFHLGFBQWEsQ0FBQztnQkFDNUIsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDckIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7Z0JBQ3pDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsS0FBSyxFQUFFLFNBQVM7YUFDakIsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUVELElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDcEQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYSxDQUFDLE1BQU07UUFDbEIsTUFBTSxFQUFDLGFBQWEsRUFBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFBO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUVqQyxJQUFJLGFBQWEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQzFDLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDLENBQUE7WUFFcEYsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxZQUFZLEVBQUUsQ0FBQyxDQUFBO1lBQzdFLENBQUM7WUFFRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUE7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYSxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFO1FBQy9CLE1BQU0sRUFBQyxhQUFhLEVBQUUsYUFBYSxFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUE7UUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDdkMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN6QyxNQUFNLFlBQVksR0FBRyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLFdBQVcsQ0FBQyxDQUFBO1FBQy9GLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNyRixJQUFJLEtBQUssQ0FBQTtRQUNULElBQUksV0FBVyxDQUFBO1FBRWYsSUFBSSxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7WUFDdEIsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsK0JBQStCLEVBQUUsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO1FBQzNGLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsd0JBQXdCLEVBQUUsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO1FBQ3BGLENBQUM7UUFFRCxPQUFPLENBQ0wsb0JBQUMsSUFBSSxJQUNILE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFO2dCQUM5QyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLFVBQVUsRUFBRSxZQUFZLEVBQUUsSUFBSTtnQkFDOUIsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLO2dCQUNoQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7YUFDcEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUN4RSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxFQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxDQUFDLEVBQzFGLE1BQU0sRUFBQyxpQ0FBaUM7WUFFdkMsYUFBYSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQztnQkFDMUMsb0JBQUMsSUFBSSxJQUNILEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLEVBQUMsS0FBSyxFQUFFLEVBQUUsRUFBQyxDQUFDLEVBQzVELE1BQU0sRUFBQyxxQ0FBcUMsR0FDNUM7WUFFSCxhQUFhLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQztnQkFDekMsb0JBQUMsSUFBSSxJQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUMsQ0FBQztvQkFDOUcsb0JBQUMsZUFBZSxJQUNkLElBQUksRUFBRSxJQUFJLEVBQ1YsTUFBTSxFQUFDLHlCQUF5QixHQUNoQyxDQUNHO1lBRVIsQ0FBQyxHQUFHLEVBQUU7Z0JBQ0wsSUFBSSxhQUFhLEVBQUUsQ0FBQztvQkFDbEIsNENBQTRDO29CQUM1QyxXQUFXLEdBQUcsYUFBYSxDQUFDLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQTtnQkFDakcsQ0FBQztxQkFBTSxJQUFJLElBQUksSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN0RCxXQUFXLEdBQUcsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFBO2dCQUN2QyxDQUFDO3FCQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUMxQixXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO2dCQUNoQyxDQUFDO3FCQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUNwRCxXQUFXLEdBQUcsb0JBQUMsVUFBVSxJQUFDLE1BQU0sRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFDLEdBQUksQ0FBQTtnQkFDcEUsQ0FBQztxQkFBTSxJQUFJLE1BQU0sSUFBSSxNQUFNLElBQUksUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDcEQsV0FBVyxHQUFHLDZCQUFLLHVCQUF1QixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUMsR0FBSSxDQUFBO2dCQUNoRixDQUFDO3FCQUFNLENBQUM7b0JBQ04sV0FBVyxHQUFHLENBQ1osb0JBQUMsSUFBSSxJQUNILEtBQUssRUFBRSxLQUFLLEVBQ1osTUFBTSxFQUFDLHNDQUFzQyxJQUU1QyxNQUFNLENBQUMsSUFBSSxDQUNQLENBQ1IsQ0FBQTtnQkFDSCxDQUFDO2dCQUVELE9BQU8sQ0FDTDtvQkFDRSxvQkFBQyxJQUFJLElBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDLENBQUMsSUFDakUsV0FBVyxDQUNQO29CQUNOLE1BQU0sQ0FBQyxLQUFLO3dCQUNYLG9CQUFDLElBQUksSUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFDLENBQUMsSUFDckgsTUFBTSxDQUFDLEtBQUssQ0FDUixDQUVSLENBQ0osQ0FBQTtZQUNILENBQUMsQ0FBQyxFQUFFLENBQ0MsQ0FDUixDQUFBO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsK0JBQStCO0lBQy9CLEtBQUssQ0FBQyx5QkFBeUI7UUFDN0IsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRWhDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQTtZQUM1QixDQUFDO1lBRUQsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUNsRSxNQUFNLEVBQUMsT0FBTyxFQUFFLGNBQWMsRUFBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNqRSxNQUFNLGFBQWEsR0FBRyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDakYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFdEYsSUFBSSxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUE7UUFDeEMsQ0FBQztJQUNILENBQUM7O0FBR0gsTUFBTSx3QkFBd0IsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUE7QUFFM0QsZUFBZSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YW55dGhpbmdEaWZmZXJlbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9kaWZmLXV0aWxzXCJcbmltcG9ydCBDb25maWcgZnJvbSBcIi4uL2NvbmZpZy5qc1wiXG5pbXBvcnQge2RpZywgZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQge0FuaW1hdGVkLCBEaW1lbnNpb25zLCBFYXNpbmcsIFBhblJlc3BvbmRlciwgUGxhdGZvcm0sIFByZXNzYWJsZSwgU2Nyb2xsVmlldywgVGV4dElucHV0LCBWaWV3fSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcbmltcG9ydCBSZWFjdCwge2NyZWF0ZVJlZiwgbWVtbywgdXNlRWZmZWN0fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudCwgU2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IGRlYm91bmNlIGZyb20gXCJkZWJvdW5jZVwiXG5pbXBvcnQgRm9udEF3ZXNvbWVJY29uIGZyb20gXCJyZWFjdC1uYXRpdmUtdmVjdG9yLWljb25zL0ZvbnRBd2Vzb21lXCJcbmltcG9ydCBpZEZvckNvbXBvbmVudCBmcm9tIFwiQGthc3Blcm5qL2FwaS1tYWtlci9idWlsZC9pbnB1dHMvaWQtZm9yLWNvbXBvbmVudFwiXG5pbXBvcnQgbmFtZUZvckNvbXBvbmVudCBmcm9tIFwiQGthc3Blcm5qL2FwaS1tYWtlci9idWlsZC9pbnB1dHMvbmFtZS1mb3ItY29tcG9uZW50XCJcbmltcG9ydCBUZXh0IGZyb20gXCJAa2FzcGVybmovYXBpLW1ha2VyL2J1aWxkL3V0aWxzL3RleHRcIlxuaW1wb3J0IE9wdGlvbiBmcm9tIFwiLi9vcHRpb25cIlxuaW1wb3J0IE9wdGlvbkdyb3VwIGZyb20gXCIuL29wdGlvbi1ncm91cFwiXG5pbXBvcnQgUGFnaW5hdGlvblBhZ2VCdXR0b24gZnJvbSBcIi4vcGFnaW5hdGlvbi1wYWdlLWJ1dHRvblwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBwcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQgUmVuZGVySHRtbCBmcm9tIFwicmVhY3QtbmF0aXZlLXJlbmRlci1odG1sXCJcbmltcG9ydCB7UG9ydGFsfSBmcm9tIFwiY29uam9pbnRtZW50XCJcbmltcG9ydCB1c2VFdmVudExpc3RlbmVyIGZyb20gXCJ5YS11c2UtZXZlbnQtbGlzdGVuZXJcIlxuaW1wb3J0IHVzZVByZXNzT3V0c2lkZSBmcm9tIFwib3V0c2lkZS1leWUvYnVpbGQvdXNlLXByZXNzLW91dHNpZGVcIlxuXG5jb25zdCBzdHlsZXMgPSB7fVxuY29uc3QgTU9CSUxFX09QVElPTlNfTUFYX1dJRFRIID0gNzY4XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdFRvZ2dsZU9wdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGljb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0T3B0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXJ9IHZhbHVlXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW3RleHRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW2NvbnRlbnRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW2N1cnJlbnRDb250ZW50XVxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGlzYWJsZWRdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2h0bWxdXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW3JpZ2h0XVxuICpcbiAqIEFkZGl0aW9uYWwgb3B0aW9uIHByb3BzIGFyZSBhbGxvd2VkOyBIYXlhU2VsZWN0IG9ubHkgdXNlcyB0aGUga2V5cyBhYm92ZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RPcHRpb25zUmVzdWx0XG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBvcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RvdGFsQ291bnRdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BhZ2VdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BhZ2VTaXplXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdFByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2F0dHJpYnV0ZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2xhc3NOYW1lXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbY2xvc2VPbkNoYW5nZV1cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbZGVmYXVsdFRvZ2dsZWRdXG4gKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXJ9IFtkZWZhdWx0VmFsdWVdXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZ3xudW1iZXI+fSBbZGVmYXVsdFZhbHVlc11cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IFtkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkZWJ1Z11cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbaWRdXG4gKiBAcHJvcGVydHkge29iamVjdH0gW21vZGVsXVxuICogQHByb3BlcnR5IHtcImF1dG9cInxcImFsd2F5c1wifFwibmV2ZXJcIn0gW21vYmlsZU9wdGlvbnNNb2RlXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbbXVsdGlwbGVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW25vT3B0aW9uc1RleHRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKGltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50PSk6IHZvaWR9IFtvbkJsdXJdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKGltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50PSk6IHZvaWR9IFtvbkNoYW5nZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oQXJyYXk8c3RyaW5nfG51bWJlcj49KTogdm9pZH0gW29uQ2hhbmdlVmFsdWVdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKGltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50PSk6IHZvaWR9IFtvbkZvY3VzXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7b3B0aW9uczogQXJyYXl9KTogdm9pZH0gW29uT3B0aW9uc0Nsb3NlZF1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe29wdGlvbnM6IEFycmF5fSk6IHZvaWR9IFtvbk9wdGlvbnNMb2FkZWRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG9iamVjdCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW29wdGlvbkNvbnRlbnRdXG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fGZ1bmN0aW9uKCk6IChBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnxIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdCl9IG9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW29wdGlvbnNBYnNvbHV0ZV1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW29wdGlvbnNQb3J0YWxdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW29wdGlvbnNXaWR0aF1cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbcGxhY2Vob2xkZXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NlbGVjdGVkQmFja2dyb3VuZENvbG9yXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZWxlY3RlZEhvdmVyQmFja2dyb3VuZENvbG9yXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2VhcmNoXVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVGV4dElucHV0UHJvcHN9IFtzZWFyY2hUZXh0SW5wdXRQcm9wc11cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbc3R5bGVzXVxuICogQHByb3BlcnR5IHtvYmplY3R9IFt0b2dnbGVkXVxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0VG9nZ2xlT3B0aW9uPn0gW3RvZ2dsZU9wdGlvbnNdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt0cmFuc3BhcmVudF1cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nfG51bWJlcj59IFt2YWx1ZXNdXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0U3RhdGVcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IGN1cnJlbnRPcHRpb25zXG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RMYXlvdXR8bnVsbH0gc2VsZWN0Q29udGFpbmVyTGF5b3V0XG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RMYXlvdXR8bnVsbH0gZW5kT2ZTZWxlY3RMYXlvdXRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IGhlaWdodFxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnx1bmRlZmluZWR9IGxvYWRlZE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2FkT3B0aW9uc1JlcXVlc3RJZFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHBhZ2VcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGFnZUlucHV0Rm9jdXNlZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhZ2VJbnB1dFZhbHVlXG4gKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBwYWdlU2l6ZVxuICogQHByb3BlcnR5IHtib29sZWFufSBvcGVuZWRcbiAqIEBwcm9wZXJ0eSB7SGF5YVNlbGVjdExheW91dHxudWxsfSBvcHRpb25zQ29udGFpbmVyTGF5b3V0XG4gKiBAcHJvcGVydHkge1wiYWJvdmVcInxcImJlbG93XCJ8XCJzaGVldFwifHVuZGVmaW5lZH0gb3B0aW9uc1BsYWNlbWVudFxuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfSBvcHRpb25zVG9wXG4gKiBAcHJvcGVydHkge1wiaGlkZGVuXCJ8XCJ2aXNpYmxlXCJ8dW5kZWZpbmVkfSBvcHRpb25zVmlzaWJpbGl0eVxuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfG51bGx9IG9wdGlvbnNXaWR0aFxuICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gc2Nyb2xsTGVmdFxuICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gc2Nyb2xsVG9wXG4gKiBAcHJvcGVydHkge251bWJlcnxudWxsfSB0b3RhbENvdW50XG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSB0b2dnbGVkXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0TGF5b3V0XG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RvcF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbGVmdF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbeF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbeV1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbd2lkdGhdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2hlaWdodF1cbiAqL1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgUmVhY3QgTmF0aXZlIGFuZCBSZWFjdCBOYXRpdmUgV2ViIGxheW91dCBrZXlzLlxuICogQHBhcmFtIHtIYXlhU2VsZWN0TGF5b3V0fG51bGx8dW5kZWZpbmVkfSBsYXlvdXQgTmF0aXZlIGxheW91dC5cbiAqIEByZXR1cm5zIHtIYXlhU2VsZWN0TGF5b3V0fSBOb3JtYWxpemVkIGxheW91dC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTGF5b3V0KGxheW91dCkge1xuICBjb25zdCBub3JtYWxpemVkTGF5b3V0ID0gT2JqZWN0LmFzc2lnbih7fSwgbGF5b3V0KVxuXG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZExheW91dC5sZWZ0ICE9IFwibnVtYmVyXCIgJiYgdHlwZW9mIG5vcm1hbGl6ZWRMYXlvdXQueCA9PSBcIm51bWJlclwiKSB7XG4gICAgbm9ybWFsaXplZExheW91dC5sZWZ0ID0gbm9ybWFsaXplZExheW91dC54XG4gIH1cblxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRMYXlvdXQudG9wICE9IFwibnVtYmVyXCIgJiYgdHlwZW9mIG5vcm1hbGl6ZWRMYXlvdXQueSA9PSBcIm51bWJlclwiKSB7XG4gICAgbm9ybWFsaXplZExheW91dC50b3AgPSBub3JtYWxpemVkTGF5b3V0LnlcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkTGF5b3V0XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBsYXlvdXQgaGFzIHVzYWJsZSBhYnNvbHV0ZS1pc2ggcG9zaXRpb24uXG4gKiBAcGFyYW0ge0hheWFTZWxlY3RMYXlvdXR8bnVsbHx1bmRlZmluZWR9IGxheW91dCBMYXlvdXQgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIHdoZW4gdG9wIGFuZCBsZWZ0IGNhbiBiZSB1c2VkLlxuICovXG5mdW5jdGlvbiBsYXlvdXRIYXNQb3NpdGlvbihsYXlvdXQpIHtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShsYXlvdXQ/LmxlZnQpICYmIE51bWJlci5pc0Zpbml0ZShsYXlvdXQ/LnRvcClcbn1cblxuLyoqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGZvciBuYXRpdmUgaU9TIGFuZCBpT1MvaVBhZE9TIFNhZmFyaSBvbiB3ZWIuICovXG5mdW5jdGlvbiBpc0lPU0xpa2VQbGF0Zm9ybSgpIHtcbiAgaWYgKFBsYXRmb3JtLk9TID09IFwiaW9zXCIpIHJldHVybiB0cnVlXG4gIGlmIChQbGF0Zm9ybS5PUyAhPSBcIndlYlwiIHx8IHR5cGVvZiBuYXZpZ2F0b3IgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgcGxhdGZvcm0gPSBuYXZpZ2F0b3IucGxhdGZvcm0gfHwgXCJcIlxuICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50IHx8IFwiXCJcblxuICByZXR1cm4gL2lQYWR8aVBob25lfGlQb2QvLnRlc3QocGxhdGZvcm0pIHx8XG4gICAgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QodXNlckFnZW50KSB8fFxuICAgIChwbGF0Zm9ybSA9PSBcIk1hY0ludGVsXCIgJiYgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMSlcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0T3B0aW9uUmVuZGVyQ29udGV4dFxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBpY29uXG4gKiBAcHJvcGVydHkge1wiY3VycmVudFwifFwib3B0aW9uXCJ9IG1vZGVcbiAqIEBwcm9wZXJ0eSB7SGF5YVNlbGVjdE9wdGlvbn0gb3B0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHNlbGVjdGVkXG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RUb2dnbGVPcHRpb258dW5kZWZpbmVkfSB0b2dnbGVPcHRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHVuZGVmaW5lZH0gdG9nZ2xlVmFsdWVcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZ3xudW1iZXIsIHN0cmluZz59IHRvZ2dsZWRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RPbkNoYW5nZVBheWxvYWRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50XG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBvcHRpb25zXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSB0b2dnbGVzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0U3R5bGluZ0NvbnRleHRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb3BlbmVkXG4gKiBAcHJvcGVydHkge1wiYWJvdmVcInxcImJlbG93XCJ8XCJzaGVldFwifHVuZGVmaW5lZH0gb3B0aW9uc1BsYWNlbWVudFxuICogQHByb3BlcnR5IHtIYXlhU2VsZWN0U3RhdGV9IHN0YXRlXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGFueT59IHN0eWxlXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge1NoYXBlQ29tcG9uZW50PEhheWFTZWxlY3RQcm9wcywgSGF5YVNlbGVjdFN0YXRlPn0gY29tcG9uZW50XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5jb25zdCBuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlID0gKGNvbXBvbmVudCkgPT4ge1xuICBsZXQgbmFtZSA9IG5hbWVGb3JDb21wb25lbnQoY29tcG9uZW50KVxuXG4gIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gY29tcG9uZW50LmdldEN1cnJlbnRPcHRpb25zKClcbiAgY29uc3QgdmFsdWVzID0gY29tcG9uZW50LmdldFZhbHVlcygpXG5cbiAgY29uc3QgaGFzTXVsdGlwbGVWYWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlcykgJiYgdmFsdWVzLmxlbmd0aCA+IDBcblxuICBpZiAoY29tcG9uZW50LnByb3BzLm11bHRpcGxlICYmIG5hbWUgJiYgKGN1cnJlbnRPcHRpb25zLmxlbmd0aCA+IDAgfHwgaGFzTXVsdGlwbGVWYWx1ZXMpKSB7XG4gICAgbmFtZSArPSBcIltdXCJcbiAgfVxuXG4gIHJldHVybiBuYW1lXG59XG5cbi8qKiBAYXVnbWVudHMge1NoYXBlQ29tcG9uZW50PEhheWFTZWxlY3RQcm9wcywgSGF5YVNlbGVjdFN0YXRlPn0gKi9cbmNsYXNzIEhheWFTZWxlY3QgZXh0ZW5kcyBTaGFwZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgY2xvc2VPbkNoYW5nZTogZmFsc2UsXG4gICAgZGVidWc6IGZhbHNlLFxuICAgIG1vYmlsZU9wdGlvbnNNb2RlOiBcImF1dG9cIixcbiAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgbm9PcHRpb25zVGV4dDogbnVsbCxcbiAgICBvbkJsdXI6IG51bGwsXG4gICAgb25Gb2N1czogbnVsbCxcbiAgICBvcHRpb25zQWJzb2x1dGU6IHRydWUsXG4gICAgb3B0aW9uc1BvcnRhbDogdHJ1ZSxcbiAgICBvcHRpb25zV2lkdGg6IG51bGwsXG4gICAgc2VhcmNoOiBmYWxzZSxcbiAgICBzZWFyY2hUZXh0SW5wdXRQcm9wczogdW5kZWZpbmVkLFxuICAgIHRyYW5zcGFyZW50OiBmYWxzZVxuICB9XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHByb3BUeXBlc0V4YWN0KHtcbiAgICBhdHRyaWJ1dGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNsb3NlT25DaGFuZ2U6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgZGVmYXVsdFRvZ2dsZWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gICAgZGVmYXVsdFZhbHVlczogUHJvcFR5cGVzLmFycmF5LFxuICAgIGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uczogUHJvcFR5cGVzLmFycmF5LFxuICAgIGRlYnVnOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGlkOiBQcm9wVHlwZXMubm9kZSxcbiAgICBtb2RlbDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBtb2JpbGVPcHRpb25zTW9kZTogUHJvcFR5cGVzLm9uZU9mKFtcImF1dG9cIiwgXCJhbHdheXNcIiwgXCJuZXZlclwiXSksXG4gICAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBub09wdGlvbnNUZXh0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkNoYW5nZVZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbk9wdGlvbnNDbG9zZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uT3B0aW9uc0xvYWRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb3B0aW9uQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICBjb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgY3VycmVudENvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIGh0bWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIHJpZ2h0OiBQcm9wVHlwZXMubm9kZSxcbiAgICAgICAgdGV4dDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICAgIHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZFxuICAgICAgfSkpLFxuICAgICAgUHJvcFR5cGVzLmZ1bmNcbiAgICBdKS5pc1JlcXVpcmVkLFxuICAgIG9wdGlvbnNBYnNvbHV0ZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBvcHRpb25zUG9ydGFsOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIG9wdGlvbnNXaWR0aDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLm5vZGUsXG4gICAgc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VsZWN0ZWRIb3ZlckJhY2tncm91bmRDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWFyY2g6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgc2VhcmNoVGV4dElucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHRvZ2dsZWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgdG9nZ2xlT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGljb246IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG4gICAgfSkpLFxuICAgIHRyYW5zcGFyZW50OiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIHZhbHVlczogUHJvcFR5cGVzLmFycmF5XG4gIH0pXG5cbiAgY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gZmFsc2VcbiAgYm9keVNjcm9sbExvY2tlZCA9IGZhbHNlXG4gIGVuZE9mU2VsZWN0UmVmID0gY3JlYXRlUmVmKClcbiAgbGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQgPSAwXG4gIG1vYmlsZU9wdGlvbnNCYWNrZHJvcE9wYWNpdHkgPSBuZXcgQW5pbWF0ZWQuVmFsdWUoMClcbiAgb3B0aW9uc0NvbnRhaW5lclJlZiA9IGNyZWF0ZVJlZigpXG4gIHBhZ2VJbnB1dFJlZiA9IGNyZWF0ZVJlZigpXG4gIHByZXZpb3VzQm9keU92ZXJmbG93ID0gdW5kZWZpbmVkXG4gIHByZXZpb3VzRG9jdW1lbnRPdmVyZmxvdyA9IHVuZGVmaW5lZFxuICBtb2JpbGVPcHRpb25zQ29udGFpbmVyUHJvZ3Jlc3MgPSBuZXcgQW5pbWF0ZWQuVmFsdWUoMClcbiAgbW9iaWxlT3B0aW9uc0NvbnRhaW5lclNjYWxlID0gdGhpcy5tb2JpbGVPcHRpb25zQ29udGFpbmVyUHJvZ3Jlc3MuaW50ZXJwb2xhdGUoe1xuICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICBvdXRwdXRSYW5nZTogWzAuOTYsIDFdXG4gIH0pXG4gIG1vYmlsZU9wdGlvbnNDb250YWluZXJUcmFuc2xhdGVZID0gdGhpcy5tb2JpbGVPcHRpb25zQ29udGFpbmVyUHJvZ3Jlc3MuaW50ZXJwb2xhdGUoe1xuICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICBvdXRwdXRSYW5nZTogWzIwLCAwXVxuICB9KVxuICBtb2JpbGVPcHRpb25zQ29udGFpbmVyVHJhbnNmb3JtID0gW1xuICAgIHt0cmFuc2xhdGVZOiB0aGlzLm1vYmlsZU9wdGlvbnNDb250YWluZXJUcmFuc2xhdGVZfSxcbiAgICB7c2NhbGU6IHRoaXMubW9iaWxlT3B0aW9uc0NvbnRhaW5lclNjYWxlfVxuICBdXG4gIG1vYmlsZU9wdGlvbnNDbG9zaW5nID0gZmFsc2VcbiAgb3B0aW9uR3JvdXBTdHlsZUVudHJpZXMgPSAoKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9uR3JvdXAgPSBkaWcodGhpcywgXCJwcm9wc1wiLCBcInN0eWxlc1wiLCBcIm9wdGlvbkdyb3VwXCIpXG4gICAgY29uc3Qgb3B0aW9uR3JvdXBUZXh0ID0gZGlnKHRoaXMsIFwicHJvcHNcIiwgXCJzdHlsZXNcIiwgXCJvcHRpb25Hcm91cFRleHRcIilcblxuICAgIHJldHVybiB0aGlzLmNhY2hlKFwib3B0aW9uR3JvdXBTdHlsZUVudHJpZXNcIiwge29wdGlvbkdyb3VwLCBvcHRpb25Hcm91cFRleHR9LCBbb3B0aW9uR3JvdXAsIG9wdGlvbkdyb3VwVGV4dF0pXG4gIH1cbiAgb3B0aW9uR3JvdXBTdHlsaW5nQ29udGV4dEtleSA9ICgpID0+IHtcbiAgICBjb25zdCB7b3B0aW9uR3JvdXAsIG9wdGlvbkdyb3VwVGV4dH0gPSB0aGlzLnR0Lm9wdGlvbkdyb3VwU3R5bGVFbnRyaWVzKClcbiAgICBpZiAodHlwZW9mIG9wdGlvbkdyb3VwICE9IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygb3B0aW9uR3JvdXBUZXh0ICE9IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGxcblxuICAgIHJldHVybiB0aGlzLmNhY2hlKFwib3B0aW9uR3JvdXBTdHlsaW5nQ29udGV4dEtleVwiLCB7fSwgW1xuICAgICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zLFxuICAgICAgdGhpcy5zLmVuZE9mU2VsZWN0TGF5b3V0LFxuICAgICAgdGhpcy5zLmhlaWdodCxcbiAgICAgIHRoaXMucy5sb2FkZWRPcHRpb25zLFxuICAgICAgdGhpcy5zLmxvYWRPcHRpb25zQXBwbGllZFJlcXVlc3RJZCxcbiAgICAgIHRoaXMucy5sb2FkT3B0aW9uc1JlcXVlc3RJZCxcbiAgICAgIHRoaXMucy5vcGVuZWQsXG4gICAgICB0aGlzLnMub3B0aW9uc0NvbnRhaW5lckxheW91dCxcbiAgICAgIHRoaXMucy5vcHRpb25zUGxhY2VtZW50LFxuICAgICAgdGhpcy5zLm9wdGlvbnNUb3AsXG4gICAgICB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHksXG4gICAgICB0aGlzLnMub3B0aW9uc1dpZHRoLFxuICAgICAgdGhpcy5zLnBhZ2UsXG4gICAgICB0aGlzLnMucGFnZUlucHV0Rm9jdXNlZCxcbiAgICAgIHRoaXMucy5wYWdlSW5wdXRWYWx1ZSxcbiAgICAgIHRoaXMucy5wYWdlU2l6ZSxcbiAgICAgIHRoaXMucy5zY3JvbGxMZWZ0LFxuICAgICAgdGhpcy5zLnNjcm9sbFRvcCxcbiAgICAgIHRoaXMucy5zZWxlY3RDb250YWluZXJMYXlvdXQsXG4gICAgICB0aGlzLnMudG9nZ2xlZCxcbiAgICAgIHRoaXMucy50b3RhbENvdW50XG4gICAgXSlcbiAgfVxuICBvcHRpb25Hcm91cFN0eWxpbmdGb3IgPSAoc3R5bGluZ05hbWUsIHN0eWxlID0ge30sIGNhY2hlcyA9IFtdKSA9PiB0aGlzLnR0LnN0eWxpbmdGb3Ioc3R5bGluZ05hbWUsIHN0eWxlLCBjYWNoZXMpXG4gIHNlYXJjaFRleHRWYWx1ZSA9IFwiXCJcbiAgc2VhcmNoVGV4dElucHV0UmVmID0gY3JlYXRlUmVmKClcbiAgc2VsZWN0Q29udGFpbmVyUmVmID0gY3JlYXRlUmVmKClcbiAgdCA9IENvbmZpZy5jdXJyZW50KCkuZ2V0VXNlVHJhbnNsYXRlKCkoKS50XG4gIHdpbmRvd1dpZHRoID0gRGltZW5zaW9ucy5nZXQoXCJ3aW5kb3dcIikud2lkdGhcbiAgd2luZG93SGVpZ2h0ID0gRGltZW5zaW9ucy5nZXQoXCJ3aW5kb3dcIikuaGVpZ2h0XG4gIC8qKiBAdHlwZSB7SGF5YVNlbGVjdFN0YXRlfSAqL1xuICBzdGF0ZSA9IHtcbiAgICBjdXJyZW50T3B0aW9uczogdGhpcy5kZWZhdWx0Q3VycmVudE9wdGlvbnMoKSxcbiAgICBzZWxlY3RDb250YWluZXJMYXlvdXQ6IG51bGwsXG4gICAgZW5kT2ZTZWxlY3RMYXlvdXQ6IG51bGwsXG4gICAgaGVpZ2h0OiBudWxsLFxuICAgIGxvYWRlZE9wdGlvbnM6IHRoaXMuZGVmYXVsdExvYWRlZE9wdGlvbnMoKSxcbiAgICBsb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWQ6IDAsXG4gICAgbG9hZE9wdGlvbnNSZXF1ZXN0SWQ6IDAsXG4gICAgcGFnZTogMSxcbiAgICBwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICBwYWdlSW5wdXRWYWx1ZTogXCIxXCIsXG4gICAgcGFnZVNpemU6IG51bGwsXG4gICAgb3BlbmVkOiBmYWxzZSxcbiAgICBvcHRpb25zQ29udGFpbmVyTGF5b3V0OiBudWxsLFxuICAgIG9wdGlvbnNQbGFjZW1lbnQ6IHVuZGVmaW5lZCxcbiAgICBvcHRpb25zVG9wOiB1bmRlZmluZWQsXG4gICAgb3B0aW9uc1Zpc2liaWxpdHk6IHVuZGVmaW5lZCxcbiAgICBvcHRpb25zV2lkdGg6IHVuZGVmaW5lZCxcbiAgICBzY3JvbGxMZWZ0OiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgOiBudWxsLFxuICAgIHNjcm9sbFRvcDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgOiBudWxsLFxuICAgIHRvdGFsQ291bnQ6IG51bGwsXG4gICAgdG9nZ2xlZDogdGhpcy5kZWZhdWx0VG9nZ2xlZCgpXG4gIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59ICovXG4gIGlzRGVidWdFbmFibGVkID0gKCkgPT4gQm9vbGVhbih0aGlzLnAuZGVidWcpXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWVcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbZGV0YWlsc11cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBkZWJ1Z0xvZyA9IChmdW5jdGlvbk5hbWUsIGRldGFpbHMgPSB1bmRlZmluZWQpID0+IHtcbiAgICBpZiAoIXRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgcmV0dXJuXG5cbiAgICBjb25zdCBiYXNlRGV0YWlscyA9IHtcbiAgICAgIGlkOiB0aGlzLnAuaWQsXG4gICAgICBuYW1lOiB0aGlzLnAubmFtZVxuICAgIH1cblxuICAgIGNvbnN0IG1lcmdlZERldGFpbHMgPSBkZXRhaWxzID8gT2JqZWN0LmFzc2lnbih7fSwgYmFzZURldGFpbHMsIGRldGFpbHMpIDogYmFzZURldGFpbHNcblxuICAgIGlmIChtZXJnZWREZXRhaWxzICYmIE9iamVjdC5rZXlzKG1lcmdlZERldGFpbHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbSGF5YVNlbGVjdF0gJHtmdW5jdGlvbk5hbWV9YCwgbWVyZ2VkRGV0YWlscylcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYFtIYXlhU2VsZWN0XSAke2Z1bmN0aW9uTmFtZX1gKVxuICAgIH1cbiAgfVxuXG4gIHNldHVwKCkge1xuICAgIGNvbnN0IHt0fSA9IENvbmZpZy5jdXJyZW50KCkuZ2V0VXNlVHJhbnNsYXRlKCkoKVxuXG4gICAgdGhpcy50ID0gdFxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy52YWx1ZXMpKSB7XG4gICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMucHJvcHMudmFsdWVzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkhheWFTZWxlY3Q6IFVuZGVmaW5lZCBnaXZlbiBhcyB2YWx1ZVwiKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2luZG93VGFyZ2V0ID0gUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiAmJiB0eXBlb2Ygd2luZG93ICE9IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiBudWxsXG5cbiAgICB1c2VFdmVudExpc3RlbmVyKERpbWVuc2lvbnMsIFwiY2hhbmdlXCIsIHRoaXMudHQub25EaW1lbnNpb25zQ2hhbmdlKVxuICAgIHVzZVByZXNzT3V0c2lkZSh0aGlzLnR0Lm9wdGlvbnNDb250YWluZXJSZWYsIHRoaXMudHQub25QcmVzc091dHNpZGVPcHRpb25zKVxuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93VGFyZ2V0LCBcInJlc2l6ZVwiLCB0aGlzLnR0Lm9uQW55dGhpbmdSZXNpemVkRGVib3VuY2VkKVxuICAgIHVzZUV2ZW50TGlzdGVuZXIod2luZG93VGFyZ2V0LCBcInNjcm9sbFwiLCB0aGlzLnR0Lm9uQW55dGhpbmdTY3JvbGxlZERlYm91bmNlZClcblxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXR1cFwiLCB7XG4gICAgICBoYXNDb250cm9sbGVkVmFsdWVzOiBcInZhbHVlc1wiIGluIHRoaXMucHJvcHMsXG4gICAgICBoYXNDb250cm9sbGVkVG9nZ2xlZDogXCJ0b2dnbGVkXCIgaW4gdGhpcy5wcm9wcyxcbiAgICAgIGNsb3NlT25DaGFuZ2U6IHRoaXMucC5jbG9zZU9uQ2hhbmdlLFxuICAgICAgbXVsdGlwbGU6IHRoaXMucC5tdWx0aXBsZSxcbiAgICAgIG9wdGlvbnNUeXBlOiBBcnJheS5pc0FycmF5KHRoaXMucHJvcHMub3B0aW9ucykgPyBcImFycmF5XCIgOiB0eXBlb2YgdGhpcy5wcm9wcy5vcHRpb25zXG4gICAgfSlcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy50dC5jYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4gJiYgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXQpIHtcbiAgICAgICAgdGhpcy5jYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4gPSBmYWxzZVxuICAgICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuKClcbiAgICAgIH1cbiAgICB9LCBbdGhpcy50dC5jYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4sIHRoaXMucy5vcHRpb25zQ29udGFpbmVyTGF5b3V0XSlcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50T3B0aW9uSWRzID0gdGhpcy5zLmN1cnJlbnRPcHRpb25zPy5tYXAoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUpXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMucHJvcHMudmFsdWVzKSAmJiBhbnl0aGluZ0RpZmZlcmVudChjdXJyZW50T3B0aW9uSWRzLCB0aGlzLnByb3BzLnZhbHVlcykgJiYgdHlwZW9mIHRoaXMucHJvcHMub3B0aW9ucyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50RnJvbUdpdmVuVmFsdWVzKClcbiAgICAgIH1cbiAgICB9LCBbdGhpcy5wcm9wcy52YWx1ZXNdKVxuICB9XG5cbiAgdHJhbnNsYXRlKG1zZ0lELCBvcHRpb25zKSB7XG4gICAgaWYgKG1zZ0lELnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgICByZXR1cm4gdGhpcy50KGBoYXlhX3NlbGVjdCR7bXNnSUR9YCwgb3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudChtc2dJRCwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSAqL1xuICBkZWZhdWx0Q3VycmVudE9wdGlvbnMoKSB7XG4gICAgY29uc3Qge2RlZmF1bHRWYWx1ZSwgZGVmYXVsdFZhbHVlcywgdmFsdWVzfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7b3B0aW9uc30gPSB0aGlzLnBcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25zKSkgcmV0dXJuIFtdXG4gICAgY29uc3QgY29udHJvbGxlZFZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWVzKSA/IHZhbHVlcyA6IFtdXG5cbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIoKHt2YWx1ZX0pID0+XG4gICAgICAoZGVmYXVsdFZhbHVlICYmIHZhbHVlID09IGRlZmF1bHRWYWx1ZSkgfHxcbiAgICAgICAgKGRlZmF1bHRWYWx1ZXMgJiYgZGVmYXVsdFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkpIHx8XG4gICAgICAgIGNvbnRyb2xsZWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpXG4gICAgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnx1bmRlZmluZWR9ICovXG4gIGRlZmF1bHRMb2FkZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucFxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBvcHRpb25zOiAke3R5cGVvZiBvcHRpb25zfWApXG4gIH1cblxuICAvKiogQHJldHVybnMge251bWJlcn0gKi9cbiAgZ2V0QWN0aXZlUGFnZSA9ICgpID0+IHRoaXMucy5wYWdlIHx8IDFcblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59ICovXG4gIGlzTW9iaWxlT3B0aW9uc1NoZWV0KCkge1xuICAgIGlmICh0aGlzLnAubW9iaWxlT3B0aW9uc01vZGUgPT0gXCJhbHdheXNcIikgcmV0dXJuIHRydWVcbiAgICBpZiAodGhpcy5wLm1vYmlsZU9wdGlvbnNNb2RlID09IFwibmV2ZXJcIikgcmV0dXJuIGZhbHNlXG5cbiAgICByZXR1cm4gRGltZW5zaW9ucy5nZXQoXCJ3aW5kb3dcIikud2lkdGggPD0gTU9CSUxFX09QVElPTlNfTUFYX1dJRFRIXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnxIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdH0gcmVzdWx0XG4gICAqIEByZXR1cm5zIHtIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdH1cbiAgICovXG4gIHBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSByZXR1cm4ge29wdGlvbnM6IHJlc3VsdH1cblxuICAgIGlmIChyZXN1bHQgJiYgQXJyYXkuaXNBcnJheShyZXN1bHQub3B0aW9ucykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGlvbnM6IHJlc3VsdC5vcHRpb25zLFxuICAgICAgICB0b3RhbENvdW50OiByZXN1bHQudG90YWxDb3VudCxcbiAgICAgICAgcGFnZTogcmVzdWx0LnBhZ2UsXG4gICAgICAgIHBhZ2VTaXplOiByZXN1bHQucGFnZVNpemVcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gb3B0aW9ucyByZXN1bHQ6ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXNcbiAgICogQHBhcmFtIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gcGFyYW1zLm9wdGlvbnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMucGFnZV1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMucGFnZVNpemVdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGFyYW1zLnRvdGFsQ291bnRdXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8bnVsbH1cbiAgICovXG4gIHJlc29sdmVQYWdlU2l6ZSh7b3B0aW9ucywgcGFnZSwgcGFnZVNpemUsIHRvdGFsQ291bnR9KSB7XG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShwYWdlU2l6ZSkgJiYgcGFnZVNpemUgPiAwKSByZXR1cm4gcGFnZVNpemVcblxuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUodGhpcy5zLnBhZ2VTaXplKSAmJiB0aGlzLnMucGFnZVNpemUgPiAwICYmIHBhZ2UgIT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMucy5wYWdlU2l6ZVxuICAgIH1cblxuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zKSAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmxlbmd0aFxuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodGhpcy5zLnBhZ2VTaXplKSAmJiB0aGlzLnMucGFnZVNpemUgPiAwID8gdGhpcy5zLnBhZ2VTaXplIDogbnVsbFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nfG51bWJlciwgc3RyaW5nPn0gKi9cbiAgZGVmYXVsdFRvZ2dsZWQoKSB7XG4gICAgcmV0dXJuIChcInRvZ2dsZWRcIiBpbiB0aGlzLnByb3BzKSA/IHRoaXMucC50b2dnbGVkIDogdGhpcy5wcm9wcy5kZWZhdWx0VG9nZ2xlZCB8fCB7fVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG4gIHBvcnRhbE5hbWUoKSB7XG4gICAgcmV0dXJuIG5hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcykgfHwgYGhheWEtc2VsZWN0LSR7U3RyaW5nKGlkRm9yQ29tcG9uZW50KHRoaXMpKX1gXG4gIH1cblxuICAvKiogQHJldHVybnMge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSAqL1xuICBnZXRUb2dnbGVkID0gKCkgPT4gKFwidG9nZ2xlZFwiIGluIHRoaXMucHJvcHMpID8gdGhpcy5wLnRvZ2dsZWQgOiB0aGlzLnMudG9nZ2xlZFxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nfG51bWJlcj59ICovXG4gIGdldFZhbHVlcyA9ICgpID0+IChcInZhbHVlc1wiIGluIHRoaXMucHJvcHMpXG4gICAgPyAoQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSA/IHRoaXMucC52YWx1ZXMgOiBbXSlcbiAgICA6IChBcnJheS5pc0FycmF5KHRoaXMucy5jdXJyZW50T3B0aW9ucykgPyB0aGlzLnMuY3VycmVudE9wdGlvbnMgOiBbXSkubWFwKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlKVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbnx7dmFsdWU6IHN0cmluZ3xudW1iZXJ9Pn0gKi9cbiAgZ2V0Q3VycmVudE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgaWYgKFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcyAmJiB0eXBlb2YgdGhpcy5wcm9wcy52YWx1ZXMgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wLnZhbHVlcykgJiYgdGhpcy5wLnZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiBbXVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLm9wdGlvbnMpICYmIEFycmF5LmlzQXJyYXkodGhpcy5wLnZhbHVlcykpIHtcbiAgICAgICAgLyoqIEB0eXBlIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gKi9cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW11cblxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMucC52YWx1ZXMpIHtcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLnAub3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PSB2YWx1ZSlcblxuICAgICAgICAgIGlmIChvcHRpb24pIHJlc3VsdC5wdXNoKG9wdGlvbilcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zLmxvYWRlZE9wdGlvbnMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSkge1xuICAgICAgICAvKiogQHR5cGUge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSAqL1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXVxuXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy5wLnZhbHVlcykge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9XG4gICAgICAgICAgICB0aGlzLnMubG9hZGVkT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PSB2YWx1ZSkgfHxcbiAgICAgICAgICAgIHRoaXMucy5jdXJyZW50T3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PSB2YWx1ZSlcblxuICAgICAgICAgIGlmIChvcHRpb24pIHJlc3VsdC5wdXNoKG9wdGlvbilcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucHJvcHMub3B0aW9ucyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgLy8gT3B0aW9ucyBoYXZlbid0IGJlZW4gbG9hZGVkIHlldC5cbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wLnZhbHVlcy5tYXAoKHZhbHVlKSA9PiAoe3ZhbHVlfSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucy5jdXJyZW50T3B0aW9uc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxzdHJpbmd8bnVtYmVyPn0gKi9cbiAgZ2V0Q3VycmVudE9wdGlvblZhbHVlcygpIHtcbiAgICBpZiAoXCJ2YWx1ZXNcIiBpbiB0aGlzLnByb3BzKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSA/IHRoaXMucC52YWx1ZXMgOiBbXVxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpXG5cbiAgICBpZiAoIWN1cnJlbnRPcHRpb25zKSByZXR1cm4gW11cblxuICAgIHJldHVybiBjdXJyZW50T3B0aW9uc1xuICAgICAgLm1hcCgob3B0aW9uKSA9PiBvcHRpb24/LnZhbHVlKVxuICAgICAgLmZpbHRlcigodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSAhPSBcInVuZGVmaW5lZFwiKVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3Qge2F0dHJpYnV0ZSwgZGVmYXVsdFZhbHVlLCBkZWZhdWx0VmFsdWVzLCBkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnMsIG1vZGVsLCBvcHRpb25zfSA9IHRoaXMucHJvcHNcblxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJjb21wb25lbnREaWRNb3VudFwiLCB7XG4gICAgICBoYXNBdHRyaWJ1dGVNb2RlbDogQm9vbGVhbihhdHRyaWJ1dGUgJiYgbW9kZWwpLFxuICAgICAgaGFzRGVmYXVsdFZhbHVlczogQm9vbGVhbihkZWZhdWx0VmFsdWUgfHwgZGVmYXVsdFZhbHVlcyB8fCBkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnMpLFxuICAgICAgb3B0aW9uc1R5cGU6IHR5cGVvZiBvcHRpb25zXG4gICAgfSlcblxuICAgIGlmICgoKGRlZmF1bHRWYWx1ZSB8fCBkZWZhdWx0VmFsdWVzIHx8IGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9ucykgfHwgKGF0dHJpYnV0ZSAmJiBtb2RlbCkpICYmIHR5cGVvZiBvcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5sb2FkRGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zQ2FsbGJhY2soKVxuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHt9XG5cbiAgICBpZiAoXCJ0b2dnbGVkXCIgaW4gdGhpcy5wcm9wcykge1xuICAgICAgY29uc3QgbmV3VG9nZ2xlZCA9IHRoaXMucC50b2dnbGVkXG5cbiAgICAgIGlmIChhbnl0aGluZ0RpZmZlcmVudCh0aGlzLnN0YXRlLnRvZ2dsZWQsIG5ld1RvZ2dsZWQpKSB7XG4gICAgICAgIG5ld1N0YXRlLnRvZ2dsZWQgPSBuZXdUb2dnbGVkXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKG5ld1N0YXRlKS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwiY29tcG9uZW50RGlkVXBkYXRlXCIsIHtzeW5jaW5nS2V5czogT2JqZWN0LmtleXMobmV3U3RhdGUpfSlcbiAgICAgIHRoaXMucy50b2dnbGVkID0gbmV3U3RhdGUudG9nZ2xlZFxuICAgIH1cblxuICAgIHRoaXMuc3luY09wdGlvbnNQbGFjZW1lbnRXaXRoTW9kZSgpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMubW9iaWxlT3B0aW9uc0JhY2tkcm9wT3BhY2l0eS5zdG9wQW5pbWF0aW9uKClcbiAgICB0aGlzLm1vYmlsZU9wdGlvbnNDb250YWluZXJQcm9ncmVzcy5zdG9wQW5pbWF0aW9uKClcbiAgICB0aGlzLnVubG9ja0JvZHlTY3JvbGwoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9ICovXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7ZW5kT2ZTZWxlY3RSZWZ9ID0gdGhpcy50dFxuICAgIGNvbnN0IHt0cmFuc3BhcmVudH0gPSB0aGlzLnBcbiAgICBjb25zdCB7Y2xhc3NOYW1lLCBwbGFjZWhvbGRlciwgdG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLnZhbHVlcykgPyB0aGlzLnByb3BzLnZhbHVlcyA6IFtdXG4gICAgY29uc3Qge29wZW5lZCwgb3B0aW9uc1BsYWNlbWVudH0gPSB0aGlzLnNcbiAgICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICAgIGNvbnN0IGlkID0gaWRGb3JDb21wb25lbnQodGhpcylcbiAgICBjb25zdCBtb2JpbGVPcHRpb25zU2hlZXQgPSB0aGlzLmlzTW9iaWxlT3B0aW9uc1NoZWV0KClcblxuICAgIGNvbnN0IHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsID0gey4uLnRoaXMuc3R5bGluZ0ZvcihcInNlbGVjdENvbnRhaW5lclwiLCB7XG4gICAgICBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLFxuICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiBcIiNmZmZcIixcbiAgICAgIGJvcmRlckNvbG9yOiB0cmFuc3BhcmVudCA/IHVuZGVmaW5lZCA6IFwiIzk5OVwiLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0cmFuc3BhcmVudCA/IHVuZGVmaW5lZCA6IDQsXG4gICAgICBib3JkZXJXaWR0aDogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiAxLFxuICAgICAgY29sb3I6IFwiIzAwMFwiLFxuICAgICAgY3Vyc29yOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gXCJwb2ludGVyXCIgOiB1bmRlZmluZWQsXG4gICAgICBwYWRkaW5nVG9wOiA1LFxuICAgICAgcGFkZGluZ0JvdHRvbTogNSxcbiAgICAgIHBhZGRpbmdMZWZ0OiA1XG4gICAgfSwgW3RyYW5zcGFyZW50XSl9XG5cbiAgICBpZiAob3BlbmVkICYmICFtb2JpbGVPcHRpb25zU2hlZXQpIHtcbiAgICAgIC8vIFByZXZlbnQgc2VsZWN0IGZyb20gY2hhbmdpbmcgc2l6ZSBvbmNlIHRoZSBjb250ZW50IGlzIHJlcGxhY2VkIHdpdGggc2VhcmNoIHRleHQgb25jZSBvcGVuZWRcbiAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmhlaWdodCA9IHRoaXMucy5oZWlnaHRcblxuICAgICAgY29uc3QgYmFzZUJvcmRlclJhZGl1cyA9IHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclJhZGl1c1xuXG4gICAgICBpZiAob3B0aW9uc1BsYWNlbWVudCA9PSBcImFib3ZlXCIpIHtcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyVG9wTGVmdFJhZGl1cyA9IDBcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSAwXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzID0gYmFzZUJvcmRlclJhZGl1c1xuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzID0gYmFzZUJvcmRlclJhZGl1c1xuXG4gICAgICAgIGRlbGV0ZSBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJSYWRpdXNcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9uc1BsYWNlbWVudCA9PSBcImJlbG93XCIpIHtcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyVG9wTGVmdFJhZGl1cyA9IGJhc2VCb3JkZXJSYWRpdXNcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSBiYXNlQm9yZGVyUmFkaXVzXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzID0gMFxuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzID0gMFxuXG4gICAgICAgIGRlbGV0ZSBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJSYWRpdXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcInJvb3RWaWV3RGF0YVNldFwiLCB7XG4gICAgICAgICAgYXBwbGllZFJlcXVlc3RJZDogdGhpcy5zLmxvYWRPcHRpb25zQXBwbGllZFJlcXVlc3RJZCxcbiAgICAgICAgICBjbGFzczogY2xhc3NOYW1lLFxuICAgICAgICAgIGNvbXBvbmVudDogXCJoYXlhLXNlbGVjdFwiLFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIG9wZW5lZCxcbiAgICAgICAgICBvcHRpb25zUGxhY2VtZW50LFxuICAgICAgICAgIHJlcXVlc3RJZDogdGhpcy5zLmxvYWRPcHRpb25zUmVxdWVzdElkLFxuICAgICAgICAgIHRvZ2dsZXM6IEJvb2xlYW4odG9nZ2xlT3B0aW9ucylcbiAgICAgICAgfSwgW3RoaXMucy5sb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWQsIGNsYXNzTmFtZSwgaWQsIG9wZW5lZCwgb3B0aW9uc1BsYWNlbWVudCwgdGhpcy5zLmxvYWRPcHRpb25zUmVxdWVzdElkLCBCb29sZWFuKHRvZ2dsZU9wdGlvbnMpXSl9XG4gICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJtYWluXCIpfVxuICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdFwiXG4gICAgICA+XG4gICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vblNlbGVjdENvbnRhaW5lckxheW91dH1cbiAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uU2VsZWN0Q2xpY2tlZH1cbiAgICAgICAgICByZWY9e3RoaXMudHQuc2VsZWN0Q29udGFpbmVyUmVmfVxuICAgICAgICAgIHN0eWxlPXtzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbH1cbiAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9zZWxlY3QtY29udGFpbmVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudFNlbGVjdGVkXCIsIHRoaXMuY3VycmVudFNlbGVjdGVkU3R5bGUgfHw9IHtmbGV4OiAxLCBmbGV4V3JhcDogXCJ3cmFwXCIsIG92ZXJmbG93OiBcImhpZGRlblwifSl9XG4gICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9jdXJyZW50LXNlbGVjdGVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b3BlbmVkICYmICFtb2JpbGVPcHRpb25zU2hlZXQgJiZcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXh0SW5wdXQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeyghb3BlbmVkIHx8IG1vYmlsZU9wdGlvbnNTaGVldCkgJiZcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbnMubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICAgIDxUZXh0IG51bWJlck9mTGluZXM9ezF9IHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJub3RoaW5nU2VsZWN0ZWRcIiwgdGhpcy5ub3RoaW5nU2VsZWN0ZWRTdHlsZSB8fD0ge2NvbG9yOiBcImdyZXlcIn0pfT5cbiAgICAgICAgICAgICAgICAgICAge3BsYWNlaG9sZGVyIHx8IHRoaXMudHJhbnNsYXRlKFwiLm5vdGhpbmdfc2VsZWN0ZWRcIil9XG4gICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9ucy5sZW5ndGggPT0gMCAmJiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5wLm11bHRpcGxlID8gdmFsdWVzIDogW3ZhbHVlc1swXV0pLm1hcCgodmFsdWUpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17aWRGb3JDb21wb25lbnQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGN1cnJlbnQtdmFsdWUtJHt2YWx1ZX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHt2YWx1ZXMubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtpZEZvckNvbXBvbmVudCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2N1cnJlbnRPcHRpb25zLm1hcCgoY3VycmVudE9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgICAgIGtleT17Y3VycmVudE9wdGlvbi5rZXkgfHwgYGN1cnJlbnQtdmFsdWUtJHtjdXJyZW50T3B0aW9uLnZhbHVlfWB9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjdXJyZW50T3B0aW9uXCIsIHttYXJnaW5SaWdodDogNn0pfVxuICAgICAgICAgICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9jdXJyZW50LW9wdGlvblwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9uLnR5cGUgPT0gXCJncm91cFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRPcHRpb25Hcm91cFwiLCB0aGlzLmN1cnJlbnRPcHRpb25Hcm91cFN0eWxlIHx8PSB7Zm9udFdlaWdodDogXCJib2xkXCJ9KX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudE9wdGlvbkdyb3VwVGV4dFwiKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9uLnRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9uLnR5cGUgIT0gXCJncm91cFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmIG5hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2lkRm9yQ29tcG9uZW50KHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2RpZ2coY3VycmVudE9wdGlvbiwgXCJ2YWx1ZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByZXNlbnRPcHRpb24oY3VycmVudE9wdGlvbiwgXCJjdXJyZW50XCIpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY2hldnJvbkNvbnRhaW5lclwiLCB0aGlzLmNoZXZyb25Db250YWluZXJTdHlsZSB8fD0ge1xuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgbWFyZ2luTGVmdDogXCJhdXRvXCIsXG4gICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiA4XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L2NoZXZyb24tY29udGFpbmVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uIG5hbWU9e29wZW5lZCA/IFwiY2hldnJvbi11cFwiIDogXCJjaGV2cm9uLWRvd25cIn0gc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImNoZXZyb25cIiwgdGhpcy5jaGV2cm9uU3R5bGUgfHw9IHtmb250U2l6ZTogMTJ9KX0gLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIG9uTGF5b3V0PXt0aGlzLnR0Lm9uRW5kT2ZTZWxlY3RMYXlvdXR9XG4gICAgICAgICAgcmVmPXtlbmRPZlNlbGVjdFJlZn1cbiAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9lbmQtb2Ytc2VsZWN0XCJcbiAgICAgICAgLz5cbiAgICAgICAge29wZW5lZCAmJiB0aGlzLnAub3B0aW9uc1BvcnRhbCAmJlxuICAgICAgICAgIDxQb3J0YWwgbmFtZT17dGhpcy5wb3J0YWxOYW1lKCl9PlxuICAgICAgICAgICAge3RoaXMub3B0aW9uc0NvbnRhaW5lcigpfVxuICAgICAgICAgIDwvUG9ydGFsPlxuICAgICAgICB9XG4gICAgICAgIHtvcGVuZWQgJiYgIXRoaXMucC5vcHRpb25zUG9ydGFsICYmXG4gICAgICAgICAgPFZpZXc+XG4gICAgICAgICAgICB7dGhpcy5vcHRpb25zQ29udGFpbmVyKCl9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICB9XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e21vYmlsZU9wdGlvbnNTaGVldD86IGJvb2xlYW59fSBbcGFyYW1zXVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfVxuICAgKi9cbiAgc2VhcmNoVGV4dElucHV0KHttb2JpbGVPcHRpb25zU2hlZXQgPSBmYWxzZX0gPSB7fSkge1xuICAgIGNvbnN0IGlvc0xpa2VNb2JpbGVTaGVldCA9IG1vYmlsZU9wdGlvbnNTaGVldCAmJiBpc0lPU0xpa2VQbGF0Zm9ybSgpXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFRleHRJbnB1dFxuICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuc2VhcmNoVGV4dFZhbHVlfVxuICAgICAgICBvbkNoYW5nZVRleHQ9e3RoaXMudHQub25DaGFuZ2VTZWFyY2hUZXh0fVxuICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy50cmFuc2xhdGUoXCIuc2VhcmNoX2RvdF9kb3RfZG90XCIpfVxuICAgICAgICByZWY9e3RoaXMudHQuc2VhcmNoVGV4dElucHV0UmVmfVxuICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwic2VhcmNoVGV4dElucHV0XCIsIHN0eWxlc1tgc2VhcmNoVGV4dElucHV0LSR7aW9zTGlrZU1vYmlsZVNoZWV0fWBdIHx8PSB7XG4gICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgIGJvcmRlcldpZHRoOiAwLFxuICAgICAgICAgIGZvbnRTaXplOiBpb3NMaWtlTW9iaWxlU2hlZXQgPyAxNiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBvdXRsaW5lOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gXCJub25lXCIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgcGFkZGluZzogMFxuICAgICAgICB9LCBbaW9zTGlrZU1vYmlsZVNoZWV0XSl9XG4gICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L3NlYXJjaC1pbnB1dFwiXG4gICAgICAgIHsuLi50aGlzLnAuc2VhcmNoVGV4dElucHV0UHJvcHN9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nfG51bWJlcj58c3RyaW5nfG51bWJlcnx1bmRlZmluZWR9ICovXG4gIGRlZmF1bHRWYWx1ZXMgKCkge1xuICAgIGNvbnN0IHthdHRyaWJ1dGUsIGRlZmF1bHRWYWx1ZSwgZGVmYXVsdFZhbHVlcywgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zLCBtb2RlbH0gPSB0aGlzLnByb3BzXG5cbiAgICBpZiAoZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zKSByZXR1cm4gZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSkgcmV0dXJuIGRlZmF1bHRWYWx1ZVxuICAgIGlmIChkZWZhdWx0VmFsdWVzKSByZXR1cm4gZGVmYXVsdFZhbHVlc1xuXG4gICAgaWYgKGF0dHJpYnV0ZSAmJiBtb2RlbCkge1xuICAgICAgaWYgKCEoYXR0cmlidXRlIGluIG1vZGVsKSkgdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIGF0dHJpYnV0ZSBvbiAke21vZGVsLm1vZGVsQ2xhc3NEYXRhKCkubmFtZX06ICR7YXR0cmlidXRlfWApXG5cbiAgICAgIHJldHVybiBtb2RlbFthdHRyaWJ1dGVdKClcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59ICovXG4gIGlzQWN0aXZlKCkge1xuICAgIGlmICh0aGlzLnR0LmVuZE9mU2VsZWN0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8dm9pZD59ICovXG4gIGFzeW5jIGxvYWREZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNDYWxsYmFjaygpIHtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWVzID0gdGhpcy5kZWZhdWx0VmFsdWVzKClcblxuICAgIGlmICghZGVmYXVsdFZhbHVlcykgcmV0dXJuXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwibG9hZERlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uc0NhbGxiYWNrXCIsIHtkZWZhdWx0VmFsdWVzfSlcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJvcHMub3B0aW9ucyh7XG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5nZXRTZWFyY2hUZXh0KCksXG4gICAgICBwYWdlOiB0aGlzLmdldEFjdGl2ZVBhZ2UoKSxcbiAgICAgIHZhbHVlczogZGVmYXVsdFZhbHVlc1xuICAgIH0pXG5cbiAgICBjb25zdCB7b3B0aW9uc30gPSB0aGlzLnBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWREZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNDYWxsYmFjay5yZXN1bHRcIiwge2xvYWRlZE9wdGlvbnNDb3VudDogb3B0aW9ucz8ubGVuZ3RoIHx8IDB9KVxuXG4gICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zID0gdGhpcy5zdGF0ZS5jdXJyZW50T3B0aW9ucy5jb25jYXQob3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3twYWdlPzogbnVtYmVyfX0gW3BhcmFtc11cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBsb2FkT3B0aW9ucyA9IGFzeW5jICh7cGFnZX0gPSB7fSkgPT4ge1xuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucFxuICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gdGhpcy5nZXRTZWFyY2hUZXh0KClcbiAgICBjb25zdCByZXF1ZXN0SWQgPSArK3RoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWRcbiAgICB0aGlzLnMubG9hZE9wdGlvbnNSZXF1ZXN0SWQgPSByZXF1ZXN0SWRcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwibG9hZE9wdGlvbnNcIiwge1xuICAgICAgcGFnZSxcbiAgICAgIHJlcXVlc3RJZCxcbiAgICAgIHNlYXJjaFZhbHVlLFxuICAgICAgb3B0aW9uc1R5cGU6IEFycmF5LmlzQXJyYXkob3B0aW9ucykgPyBcImFycmF5XCIgOiB0eXBlb2Ygb3B0aW9uc1xuICAgIH0pXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9ucywgc2VhcmNoVmFsdWUsIHJlcXVlc3RJZClcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ZWRQYWdlID0gTnVtYmVyLmlzRmluaXRlKHBhZ2UpID8gcGFnZSA6IHRoaXMuZ2V0QWN0aXZlUGFnZSgpXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3B0aW9ucyh7c2VhcmNoVmFsdWUsIHBhZ2U6IHJlcXVlc3RlZFBhZ2V9KVxuICAgIGNvbnN0IHtvcHRpb25zOiBsb2FkZWRPcHRpb25zLCBwYWdlOiByZXN1bHRQYWdlLCBwYWdlU2l6ZSwgdG90YWxDb3VudH0gPSB0aGlzLnBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpXG5cbiAgICBpZiAocmVxdWVzdElkICE9IHRoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQpIHtcbiAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJsb2FkT3B0aW9ucy5pZ25vcmVkX3N0YWxlX3Jlc3VsdFwiLCB7XG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgbGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQ6IHRoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQsXG4gICAgICAgIHJlcXVlc3RlZFBhZ2UsXG4gICAgICAgIHNlYXJjaFZhbHVlXG4gICAgICB9KVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZXNvbHZlZFBhZ2UgPSBOdW1iZXIuaXNGaW5pdGUocmVzdWx0UGFnZSkgPyByZXN1bHRQYWdlIDogcmVxdWVzdGVkUGFnZVxuICAgIGNvbnN0IHJlc29sdmVkUGFnZVNpemUgPSB0aGlzLnJlc29sdmVQYWdlU2l6ZSh7b3B0aW9uczogbG9hZGVkT3B0aW9ucywgcGFnZTogcmVzb2x2ZWRQYWdlLCBwYWdlU2l6ZSwgdG90YWxDb3VudH0pXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSAmJiBOdW1iZXIuaXNGaW5pdGUocmVzb2x2ZWRQYWdlU2l6ZSkgJiYgcmVzb2x2ZWRQYWdlU2l6ZSA+IDBcbiAgICAgID8gTWF0aC5jZWlsKHRvdGFsQ291bnQgLyByZXNvbHZlZFBhZ2VTaXplKVxuICAgICAgOiBudWxsXG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGxvYWRlZE9wdGlvbnMsXG4gICAgICBsb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcbiAgICAgIHBhZ2U6IHJlc29sdmVkUGFnZSxcbiAgICAgIHBhZ2VJbnB1dFZhbHVlOiBTdHJpbmcocmVzb2x2ZWRQYWdlKSxcbiAgICAgIHBhZ2VTaXplOiBOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgPyByZXNvbHZlZFBhZ2VTaXplIDogbnVsbCxcbiAgICAgIHRvdGFsQ291bnQ6IE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSA/IHRvdGFsQ291bnQgOiBudWxsXG4gICAgfSwgKCkgPT4gdGhpcy5wcm9wcy5vbk9wdGlvbnNMb2FkZWQ/Lih7b3B0aW9uczogbG9hZGVkT3B0aW9uc30pKVxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWRPcHRpb25zLnJlc3VsdFwiLCB7XG4gICAgICBsb2FkZWRPcHRpb25zQ291bnQ6IGxvYWRlZE9wdGlvbnM/Lmxlbmd0aCB8fCAwLFxuICAgICAgcmVzb2x2ZWRQYWdlLFxuICAgICAgcmVzb2x2ZWRQYWdlU2l6ZSxcbiAgICAgIHRvdGFsQ291bnQ6IE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSA/IHRvdGFsQ291bnQgOiBudWxsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3trZXk6IHN0cmluZywgbG9hZGVkT3B0aW9uOiBIYXlhU2VsZWN0T3B0aW9ufX1cbiAgICogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX1cbiAgICovXG4gIGhheWFTZWxlY3RPcHRpb24oe2tleSwgbG9hZGVkT3B0aW9ufSkge1xuICAgIGlmIChsb2FkZWRPcHRpb24udHlwZSA9PSBcImdyb3VwXCIpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxPcHRpb25Hcm91cFxuICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgIG9wdGlvbj17bG9hZGVkT3B0aW9ufVxuICAgICAgICAgIHN0eWxlRW50cmllcz17dGhpcy50dC5vcHRpb25Hcm91cFN0eWxlRW50cmllcygpfVxuICAgICAgICAgIHN0eWxpbmdDb250ZXh0S2V5PXt0aGlzLnR0Lm9wdGlvbkdyb3VwU3R5bGluZ0NvbnRleHRLZXkoKX1cbiAgICAgICAgICBzdHlsaW5nRm9yPXt0aGlzLnR0Lm9wdGlvbkdyb3VwU3R5bGluZ0Zvcn1cbiAgICAgICAgLz5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE9wdGlvblxuICAgICAgICBjdXJyZW50T3B0aW9uVmFsdWVzPXt0aGlzLmdldEN1cnJlbnRPcHRpb25WYWx1ZXMoKX1cbiAgICAgICAgaWNvbj17dGhpcy5pY29uRm9yT3B0aW9uKGxvYWRlZE9wdGlvbil9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBvcHRpb249e2xvYWRlZE9wdGlvbn1cbiAgICAgICAgb25PcHRpb25DbGlja2VkPXt0aGlzLnR0Lm9uT3B0aW9uQ2xpY2tlZH1cbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudD17dGhpcy5zLm9wdGlvbnNQbGFjZW1lbnR9XG4gICAgICAgIHByZXNlbnRPcHRpb249e3RoaXMudHQucHJlc2VudE9wdGlvbn1cbiAgICAgICAgc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3I9e3RoaXMucHJvcHMuc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3J9XG4gICAgICAgIHNlbGVjdGVkSG92ZXJCYWNrZ3JvdW5kQ29sb3I9e3RoaXMucHJvcHMuc2VsZWN0ZWRIb3ZlckJhY2tncm91bmRDb2xvcn1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWFyY2hWYWx1ZV1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtyZXF1ZXN0SWRdXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgbG9hZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9ucywgc2VhcmNoVmFsdWUsIHJlcXVlc3RJZCA9IHRoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQpIHtcbiAgICBjb25zdCBsb3dlclNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWU/LnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBsb2FkZWRPcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoKHt0ZXh0fSkgPT4gIWxvd2VyU2VhcmNoVmFsdWUgfHwgdGV4dD8udG9Mb3dlckNhc2UoKT8uaW5jbHVkZXMobG93ZXJTZWFyY2hWYWx1ZSkpXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWRPcHRpb25zRnJvbUFycmF5XCIsIHtcbiAgICAgIHJlcXVlc3RJZCxcbiAgICAgIHRvdGFsT3B0aW9uc0NvdW50OiBvcHRpb25zLmxlbmd0aCxcbiAgICAgIHNlYXJjaFZhbHVlLFxuICAgICAgbG9hZGVkT3B0aW9uc0NvdW50OiBsb2FkZWRPcHRpb25zLmxlbmd0aFxuICAgIH0pXG5cbiAgICB0aGlzLnMubG9hZGVkT3B0aW9ucyA9IGxvYWRlZE9wdGlvbnNcbiAgICB0aGlzLnMubG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkID0gcmVxdWVzdElkXG4gICAgdGhpcy5zLnBhZ2UgPSAxXG4gICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gXCIxXCJcbiAgICB0aGlzLnMucGFnZVNpemUgPSBudWxsXG4gICAgdGhpcy5zLnRvdGFsQ291bnQgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7d2luZG93OiB7d2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXJ9fX0gZXZlbnRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkRpbWVuc2lvbnNDaGFuZ2UgPSAoe3dpbmRvd30pID0+IHtcbiAgICB0aGlzLndpbmRvd1dpZHRoID0gd2luZG93LndpZHRoXG4gICAgdGhpcy53aW5kb3dIZWlnaHQgPSB3aW5kb3cuaGVpZ2h0XG5cbiAgICBpZiAodGhpcy5zLm9wZW5lZCkge1xuICAgICAgdGhpcy5zeW5jT3B0aW9uc1BsYWNlbWVudFdpdGhNb2RlKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7bmF0aXZlRXZlbnQ/OiB7bGF5b3V0PzogSGF5YVNlbGVjdExheW91dH19fSBlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25TZWxlY3RDb250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIHRoaXMucy5zZWxlY3RDb250YWluZXJMYXlvdXQgPSBub3JtYWxpemVMYXlvdXQoZGlnZyhlLCBcIm5hdGl2ZUV2ZW50XCIsIFwibGF5b3V0XCIpKVxuICAgIHRoaXMubWVhc3VyZU5hdGl2ZUxheW91dCh0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZiwgXCJzZWxlY3RDb250YWluZXJMYXlvdXRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tuYXRpdmVFdmVudD86IHtsYXlvdXQ/OiBIYXlhU2VsZWN0TGF5b3V0fX19IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkVuZE9mU2VsZWN0TGF5b3V0ID0gKGUpID0+IHtcbiAgICBjb25zdCBlbmRPZlNlbGVjdExheW91dCA9IG5vcm1hbGl6ZUxheW91dChkaWdnKGUsIFwibmF0aXZlRXZlbnRcIiwgXCJsYXlvdXRcIikpXG4gICAgY29uc3QgbmV3U3RhdGUgPSB7ZW5kT2ZTZWxlY3RMYXlvdXR9XG5cbiAgICBpZiAodGhpcy5zLm9wZW5lZCAmJiBlbmRPZlNlbGVjdExheW91dD8ud2lkdGgpIHtcbiAgICAgIG5ld1N0YXRlLm9wdGlvbnNXaWR0aCA9IGVuZE9mU2VsZWN0TGF5b3V0LndpZHRoXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT4ge1xuICAgICAgdGhpcy5tZWFzdXJlTmF0aXZlTGF5b3V0KHRoaXMudHQuZW5kT2ZTZWxlY3RSZWYsIFwiZW5kT2ZTZWxlY3RMYXlvdXRcIilcblxuICAgICAgaWYgKHRoaXMucy5vcGVuZWQgJiYgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXQpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbigpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tuYXRpdmVFdmVudD86IHtsYXlvdXQ/OiBIYXlhU2VsZWN0TGF5b3V0fX19IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbk9wdGlvbnNDb250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIHRoaXMucy5vcHRpb25zQ29udGFpbmVyTGF5b3V0ID0gbm9ybWFsaXplTGF5b3V0KGRpZ2coZSwgXCJuYXRpdmVFdmVudFwiLCBcImxheW91dFwiKSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgbWVhc3VyZU5hdGl2ZVNlbGVjdExheW91dHMoKSB7XG4gICAgdGhpcy5tZWFzdXJlTmF0aXZlTGF5b3V0KHRoaXMudHQuc2VsZWN0Q29udGFpbmVyUmVmLCBcInNlbGVjdENvbnRhaW5lckxheW91dFwiKVxuICAgIHRoaXMubWVhc3VyZU5hdGl2ZUxheW91dCh0aGlzLnR0LmVuZE9mU2VsZWN0UmVmLCBcImVuZE9mU2VsZWN0TGF5b3V0XCIpXG4gIH1cblxuICAvKipcbiAgICogTWVhc3VyZXMgYSBuYXRpdmUgdmlldyBpbiB3aW5kb3cgY29vcmRpbmF0ZXMgZm9yIHBvcnRhbCBwb3NpdGlvbmluZy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWZPYmplY3Q8b2JqZWN0Pn0gcmVmIFZpZXcgcmVmLlxuICAgKiBAcGFyYW0ge1wic2VsZWN0Q29udGFpbmVyTGF5b3V0XCJ8XCJlbmRPZlNlbGVjdExheW91dFwifSBzdGF0ZUtleSBTdGF0ZSBsYXlvdXQga2V5LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG1lYXN1cmVOYXRpdmVMYXlvdXQocmVmLCBzdGF0ZUtleSkge1xuICAgIGlmIChQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSByZXR1cm5cblxuICAgIGNvbnN0IGVsZW1lbnQgPSByZWYuY3VycmVudFxuICAgIGlmICghZWxlbWVudCB8fCB0eXBlb2YgZWxlbWVudC5tZWFzdXJlSW5XaW5kb3cgIT0gXCJmdW5jdGlvblwiKSByZXR1cm5cblxuICAgIGVsZW1lbnQubWVhc3VyZUluV2luZG93KChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICAgIGNvbnN0IG1lYXN1cmVkTGF5b3V0ID0ge2hlaWdodCwgbGVmdCwgdG9wLCB3aWR0aH1cblxuICAgICAgaWYgKCFsYXlvdXRIYXNQb3NpdGlvbihtZWFzdXJlZExheW91dCkpIHJldHVyblxuXG4gICAgICAvKiogQHR5cGUge1BhcnRpYWw8SGF5YVNlbGVjdFN0YXRlPn0gKi9cbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBbc3RhdGVLZXldOiBtZWFzdXJlZExheW91dFxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVLZXkgPT0gXCJlbmRPZlNlbGVjdExheW91dFwiICYmIHRoaXMucy5vcGVuZWQgJiYgd2lkdGgpIHtcbiAgICAgICAgbmV3U3RhdGUub3B0aW9uc1dpZHRoID0gd2lkdGhcbiAgICAgIH1cblxuICAgICAgaWYgKCFhbnl0aGluZ0RpZmZlcmVudCh0aGlzLnNbc3RhdGVLZXldLCBtZWFzdXJlZExheW91dCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucy5vcGVuZWQgJiYgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXQpIHtcbiAgICAgICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvblNlbGVjdENsaWNrZWQgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgIGNvbnN0IHtvcGVuZWR9ID0gdGhpcy5zXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uU2VsZWN0Q2xpY2tlZFwiLCB7b3BlbmVkfSlcblxuICAgIGlmIChvcGVuZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VPcHRpb25zKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuT3B0aW9ucygpXG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2hUZXh0SW5wdXRDaGFuZ2VkRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy50dC5sb2FkT3B0aW9ucywgMjAwKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tvcHRpb25zPzogQXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59fSBbcGFyYW1zXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsb3NlT3B0aW9ucyh7b3B0aW9uc30gPSB7fSkge1xuICAgIGNvbnN0IGNsb3NlZE9wdGlvbnMgPSBvcHRpb25zIHx8IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJjbG9zZU9wdGlvbnNcIiwge2Nsb3NlZE9wdGlvbnNDb3VudDogY2xvc2VkT3B0aW9ucz8ubGVuZ3RoIHx8IDB9KVxuXG4gICAgaWYgKHRoaXMucy5vcGVuZWQgJiYgdGhpcy5zLm9wdGlvbnNQbGFjZW1lbnQgPT0gXCJzaGVldFwiKSB7XG4gICAgICB0aGlzLmNsb3NlTW9iaWxlT3B0aW9uc1dpdGhBbmltYXRpb24oe2Nsb3NlZE9wdGlvbnN9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5maW5pc2hDbG9zZU9wdGlvbnMoe2Nsb3NlZE9wdGlvbnN9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e2Nsb3NlZE9wdGlvbnM6IEFycmF5PEhheWFTZWxlY3RPcHRpb24+fX0gcGFyYW1zIENsb3NlIHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xvc2VNb2JpbGVPcHRpb25zV2l0aEFuaW1hdGlvbih7Y2xvc2VkT3B0aW9uc30pIHtcbiAgICBpZiAodGhpcy5tb2JpbGVPcHRpb25zQ2xvc2luZykgcmV0dXJuXG5cbiAgICB0aGlzLm1vYmlsZU9wdGlvbnNDbG9zaW5nID0gdHJ1ZVxuICAgIHRoaXMubW9iaWxlT3B0aW9uc0JhY2tkcm9wT3BhY2l0eS5zdG9wQW5pbWF0aW9uKClcbiAgICB0aGlzLm1vYmlsZU9wdGlvbnNDb250YWluZXJQcm9ncmVzcy5zdG9wQW5pbWF0aW9uKClcblxuICAgIEFuaW1hdGVkLnBhcmFsbGVsKFtcbiAgICAgIEFuaW1hdGVkLnRpbWluZyh0aGlzLm1vYmlsZU9wdGlvbnNCYWNrZHJvcE9wYWNpdHksIHtcbiAgICAgICAgZHVyYXRpb246IDkwLFxuICAgICAgICBlYXNpbmc6IEVhc2luZy5vdXQoRWFzaW5nLmN1YmljKSxcbiAgICAgICAgdG9WYWx1ZTogMCxcbiAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiB0cnVlXG4gICAgICB9KSxcbiAgICAgIEFuaW1hdGVkLnRpbWluZyh0aGlzLm1vYmlsZU9wdGlvbnNDb250YWluZXJQcm9ncmVzcywge1xuICAgICAgICBkdXJhdGlvbjogMTEwLFxuICAgICAgICBlYXNpbmc6IEVhc2luZy5pbihFYXNpbmcuY3ViaWMpLFxuICAgICAgICB0b1ZhbHVlOiAwLFxuICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IHRydWVcbiAgICAgIH0pXG4gICAgXSkuc3RhcnQoKCkgPT4ge1xuICAgICAgdGhpcy5tb2JpbGVPcHRpb25zQ2xvc2luZyA9IGZhbHNlXG4gICAgICB0aGlzLmZpbmlzaENsb3NlT3B0aW9ucyh7Y2xvc2VkT3B0aW9uc30pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tjbG9zZWRPcHRpb25zOiBBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn19IHBhcmFtcyBDbG9zZSBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZpbmlzaENsb3NlT3B0aW9ucyh7Y2xvc2VkT3B0aW9uc30pIHtcbiAgICB0aGlzLmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9IGZhbHNlXG4gICAgdGhpcy51bmxvY2tCb2R5U2Nyb2xsKClcblxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgbG9hZGVkT3B0aW9uczogdW5kZWZpbmVkLFxuICAgICAgICBvcGVuZWQ6IGZhbHNlLFxuICAgICAgICBvcHRpb25zQ29udGFpbmVyTGF5b3V0OiBudWxsLFxuICAgICAgICBvcHRpb25zVmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgcGFnZTogMSxcbiAgICAgICAgcGFnZUlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICAgIHBhZ2VJbnB1dFZhbHVlOiBcIjFcIixcbiAgICAgICAgcGFnZVNpemU6IG51bGwsXG4gICAgICAgIHRvdGFsQ291bnQ6IG51bGxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJjbG9zZU9wdGlvbnMuZG9uZVwiLCB7b3BlbmVkOiB0aGlzLnMub3BlbmVkLCBvcHRpb25zVmlzaWJpbGl0eTogdGhpcy5zLm9wdGlvbnNWaXNpYmlsaXR5fSlcbiAgICAgIH1cbiAgICApXG5cbiAgICBpZiAodGhpcy5wcm9wcy5vbk9wdGlvbnNDbG9zZWQpIHtcbiAgICAgIHRoaXMucHJvcHMub25PcHRpb25zQ2xvc2VkKHtvcHRpb25zOiBjbG9zZWRPcHRpb25zfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wLm9uQmx1cikgdGhpcy5wLm9uQmx1cigpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHByZXBhcmVNb2JpbGVPcHRpb25zQW5pbWF0aW9uKCkge1xuICAgIHRoaXMubW9iaWxlT3B0aW9uc0Nsb3NpbmcgPSBmYWxzZVxuICAgIHRoaXMubW9iaWxlT3B0aW9uc0JhY2tkcm9wT3BhY2l0eS5zdG9wQW5pbWF0aW9uKClcbiAgICB0aGlzLm1vYmlsZU9wdGlvbnNDb250YWluZXJQcm9ncmVzcy5zdG9wQW5pbWF0aW9uKClcbiAgICB0aGlzLm1vYmlsZU9wdGlvbnNCYWNrZHJvcE9wYWNpdHkuc2V0VmFsdWUoMClcbiAgICB0aGlzLm1vYmlsZU9wdGlvbnNDb250YWluZXJQcm9ncmVzcy5zZXRWYWx1ZSgwKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBzdGFydE1vYmlsZU9wdGlvbnNPcGVuQW5pbWF0aW9uKCkge1xuICAgIEFuaW1hdGVkLnBhcmFsbGVsKFtcbiAgICAgIEFuaW1hdGVkLnRpbWluZyh0aGlzLm1vYmlsZU9wdGlvbnNCYWNrZHJvcE9wYWNpdHksIHtcbiAgICAgICAgZHVyYXRpb246IDkwLFxuICAgICAgICBlYXNpbmc6IEVhc2luZy5vdXQoRWFzaW5nLmN1YmljKSxcbiAgICAgICAgdG9WYWx1ZTogMSxcbiAgICAgICAgdXNlTmF0aXZlRHJpdmVyOiB0cnVlXG4gICAgICB9KSxcbiAgICAgIEFuaW1hdGVkLnRpbWluZyh0aGlzLm1vYmlsZU9wdGlvbnNDb250YWluZXJQcm9ncmVzcywge1xuICAgICAgICBkdXJhdGlvbjogMTMwLFxuICAgICAgICBlYXNpbmc6IEVhc2luZy5vdXQoRWFzaW5nLmJhY2soMS4wNSkpLFxuICAgICAgICB0b1ZhbHVlOiAxLFxuICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IHRydWVcbiAgICAgIH0pXG4gICAgXSkuc3RhcnQoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG4gIGdldFNlYXJjaFRleHQgPSAoKSA9PiB0aGlzLnNlYXJjaFRleHRWYWx1ZSB8fCBcIlwiXG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICByZXNldFNlYXJjaFRleHRJbnB1dCA9ICgpID0+IHtcbiAgICB0aGlzLnNlYXJjaFRleHRWYWx1ZSA9IFwiXCJcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMudHQuc2VhcmNoVGV4dElucHV0UmVmLmN1cnJlbnRcblxuICAgIGlmIChpbnB1dD8uY2xlYXIpIHtcbiAgICAgIGlucHV0LmNsZWFyKClcbiAgICB9IGVsc2UgaWYgKGlucHV0Py5zZXROYXRpdmVQcm9wcykge1xuICAgICAgaW5wdXQuc2V0TmF0aXZlUHJvcHMoe3RleHQ6IFwiXCJ9KVxuICAgIH0gZWxzZSBpZiAoaW5wdXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlucHV0LnZhbHVlID0gXCJcIlxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWdub3JlIGlmIHRoZSByZWYgZG9lc24ndCBzdXBwb3J0IGRpcmVjdCB2YWx1ZSBhc3NpZ25tZW50LlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGV4dFxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uQ2hhbmdlU2VhcmNoVGV4dCA9IChzZWFyY2hUZXh0KSA9PiB7XG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uQ2hhbmdlU2VhcmNoVGV4dFwiLCB7c2VhcmNoVGV4dCwgY3VycmVudFBhZ2U6IHRoaXMucy5wYWdlfSlcbiAgICB0aGlzLnNlYXJjaFRleHRWYWx1ZSA9IHNlYXJjaFRleHRcblxuICAgIGlmICh0aGlzLnMucGFnZSAhPSAxKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtwYWdlOiAxLCBwYWdlSW5wdXRWYWx1ZTogXCIxXCJ9LCB0aGlzLnR0Lm9uU2VhcmNoVGV4dElucHV0Q2hhbmdlZERlYm91bmNlZClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50dC5vblNlYXJjaFRleHRJbnB1dENoYW5nZWREZWJvdW5jZWQoKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgb3Blbk9wdGlvbnMoKSB7XG4gICAgY29uc3QgbW9iaWxlT3B0aW9uc1NoZWV0ID0gdGhpcy5pc01vYmlsZU9wdGlvbnNTaGVldCgpXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib3Blbk9wdGlvbnNcIiwge1xuICAgICAgY3VycmVudE9wdGlvbnNDb3VudDogdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpPy5sZW5ndGggfHwgMCxcbiAgICAgIG1vYmlsZU9wdGlvbnNTaGVldCxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IHRoaXMucC5zZWFyY2hcbiAgICB9KVxuICAgIHRoaXMuc2VhcmNoVGV4dFZhbHVlID0gXCJcIlxuICAgIHRoaXMuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gIW1vYmlsZU9wdGlvbnNTaGVldFxuXG4gICAgaWYgKG1vYmlsZU9wdGlvbnNTaGVldCkge1xuICAgICAgdGhpcy5wcmVwYXJlTW9iaWxlT3B0aW9uc0FuaW1hdGlvbigpXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgaGVpZ2h0OiBtb2JpbGVPcHRpb25zU2hlZXQgPyBudWxsIDogdGhpcy5zLnNlbGVjdENvbnRhaW5lckxheW91dD8uaGVpZ2h0LFxuICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnNQbGFjZW1lbnQ6IG1vYmlsZU9wdGlvbnNTaGVldCA/IFwic2hlZXRcIiA6IFwiYmVsb3dcIixcbiAgICAgICAgb3B0aW9uc1Zpc2liaWxpdHk6IG1vYmlsZU9wdGlvbnNTaGVldCA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIixcbiAgICAgICAgb3B0aW9uc1dpZHRoOiBtb2JpbGVPcHRpb25zU2hlZXQgPyB1bmRlZmluZWQgOiB0aGlzLnMuZW5kT2ZTZWxlY3RMYXlvdXQ/LndpZHRoLFxuICAgICAgICBwYWdlOiAxLFxuICAgICAgICBwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgICAgcGFnZUlucHV0VmFsdWU6IFwiMVwiLFxuICAgICAgICBzY3JvbGxMZWZ0OiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgOiBudWxsLFxuICAgICAgICBzY3JvbGxUb3A6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIDogbnVsbFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKG1vYmlsZU9wdGlvbnNTaGVldCkge1xuICAgICAgICAgIHRoaXMubG9ja0JvZHlTY3JvbGwoKVxuICAgICAgICAgIHRoaXMuc3RhcnRNb2JpbGVPcHRpb25zT3BlbkFuaW1hdGlvbigpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tZWFzdXJlTmF0aXZlU2VsZWN0TGF5b3V0cygpXG4gICAgICAgICAgdGhpcy5mb2N1c1RleHRJbnB1dCgpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0U2VhcmNoVGV4dElucHV0KClcbiAgICAgICAgdGhpcy5sb2FkT3B0aW9ucyh7cGFnZTogMX0pXG4gICAgICB9XG4gICAgKVxuXG4gICAgaWYgKHRoaXMucC5vbkZvY3VzKSB0aGlzLnAub25Gb2N1cygpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIGZvY3VzVGV4dElucHV0ID0gKCkgPT4gZGlnZyh0aGlzLnR0LnNlYXJjaFRleHRJbnB1dFJlZiwgXCJjdXJyZW50XCIpPy5mb2N1cygpXG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBsb2NrQm9keVNjcm9sbCgpIHtcbiAgICBpZiAoUGxhdGZvcm0uT1MgIT0gXCJ3ZWJcIiB8fCB0eXBlb2YgZG9jdW1lbnQgPT0gXCJ1bmRlZmluZWRcIiB8fCB0aGlzLmJvZHlTY3JvbGxMb2NrZWQpIHJldHVyblxuXG4gICAgdGhpcy5wcmV2aW91c0JvZHlPdmVyZmxvdyA9IGRvY3VtZW50LmJvZHk/LnN0eWxlLm92ZXJmbG93XG4gICAgdGhpcy5wcmV2aW91c0RvY3VtZW50T3ZlcmZsb3cgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/LnN0eWxlLm92ZXJmbG93XG5cbiAgICBpZiAoZG9jdW1lbnQuYm9keSkgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCJcbiAgICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiXG5cbiAgICB0aGlzLmJvZHlTY3JvbGxMb2NrZWQgPSB0cnVlXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHVubG9ja0JvZHlTY3JvbGwoKSB7XG4gICAgaWYgKFBsYXRmb3JtLk9TICE9IFwid2ViXCIgfHwgdHlwZW9mIGRvY3VtZW50ID09IFwidW5kZWZpbmVkXCIgfHwgIXRoaXMuYm9keVNjcm9sbExvY2tlZCkgcmV0dXJuXG5cbiAgICBpZiAoZG9jdW1lbnQuYm9keSkgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IHRoaXMucHJldmlvdXNCb2R5T3ZlcmZsb3cgfHwgXCJcIlxuICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IHRoaXMucHJldmlvdXNEb2N1bWVudE92ZXJmbG93IHx8IFwiXCJcblxuICAgIHRoaXMucHJldmlvdXNCb2R5T3ZlcmZsb3cgPSB1bmRlZmluZWRcbiAgICB0aGlzLnByZXZpb3VzRG9jdW1lbnRPdmVyZmxvdyA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYm9keVNjcm9sbExvY2tlZCA9IGZhbHNlXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHNldE9wdGlvbnNQb3NpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgcmV0dXJuIC8vIERlYm91bmNlIGFmdGVyIHVuLW1vdW50IGhhbmRlbGluZy5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc01vYmlsZU9wdGlvbnNTaGVldCgpKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvblNoZWV0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMudW5sb2NrQm9keVNjcm9sbCgpXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0T3B0aW9uc1Bvc2l0aW9uXCIpXG4gICAgdGhpcy5jYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4gPSB0cnVlXG4gICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25CZWxvdygpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHN5bmNPcHRpb25zUGxhY2VtZW50V2l0aE1vZGUoKSB7XG4gICAgaWYgKCF0aGlzLnMub3BlbmVkKSByZXR1cm5cblxuICAgIGlmICh0aGlzLmlzTW9iaWxlT3B0aW9uc1NoZWV0KCkpIHtcbiAgICAgIGlmICh0aGlzLnMub3B0aW9uc1BsYWNlbWVudCAhPSBcInNoZWV0XCIpIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uU2hlZXQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucy5vcHRpb25zUGxhY2VtZW50ID09IFwic2hlZXRcIikge1xuICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25CZWxvdygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnVubG9ja0JvZHlTY3JvbGwoKVxuICAgIHRoaXMubWVhc3VyZU5hdGl2ZVNlbGVjdExheW91dHMoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBzZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbigpIHtcbiAgICBpZiAoIXRoaXMucy5vcGVuZWQpIHJldHVyblxuICAgIGlmICh0aGlzLmlzTW9iaWxlT3B0aW9uc1NoZWV0KCkpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uU2hlZXQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qge3dpbmRvd0hlaWdodH0gPSB0aGlzLnR0XG4gICAgY29uc3Qge29wdGlvbnNDb250YWluZXJMYXlvdXQsIHNlbGVjdENvbnRhaW5lckxheW91dH0gPSB0aGlzLnNcbiAgICBjb25zdCBlbmRPZlNlbGVjdExheW91dCA9IHRoaXMucy5lbmRPZlNlbGVjdExheW91dFxuXG4gICAgY29uc3Qgb3B0aW9uc1RvcCA9IFBsYXRmb3JtLk9TID09IFwid2ViXCJcbiAgICAgID8gZW5kT2ZTZWxlY3RMYXlvdXQ/LnRvcFxuICAgICAgOiB0eXBlb2Ygc2VsZWN0Q29udGFpbmVyTGF5b3V0Py50b3AgPT0gXCJudW1iZXJcIiAmJiB0eXBlb2Ygc2VsZWN0Q29udGFpbmVyTGF5b3V0Py5oZWlnaHQgPT0gXCJudW1iZXJcIlxuICAgICAgICA/IHNlbGVjdENvbnRhaW5lckxheW91dC50b3AgKyBzZWxlY3RDb250YWluZXJMYXlvdXQuaGVpZ2h0ICsgMVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9uc1RvcCkpIHtcbiAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlblwiLCB7cGxhY2VtZW50OiBcImJlbG93XCIsIHJlYXNvbjogXCJtaXNzaW5nLW9wdGlvbnMtdG9wXCJ9KVxuICAgICAgdGhpcy5tZWFzdXJlTmF0aXZlU2VsZWN0TGF5b3V0cygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zVG90YWxCb3R0b21Qb3NpdGlvbiA9IG9wdGlvbnNDb250YWluZXJMYXlvdXQuaGVpZ2h0ICsgb3B0aW9uc1RvcFxuICAgIGNvbnN0IHdpbmRvd0hlaWdodFdpdGhTY3JvbGwgPSB3aW5kb3dIZWlnaHQgKyAodGhpcy5zLnNjcm9sbFRvcCB8fCAwKVxuXG4gICAgaWYgKHdpbmRvd0hlaWdodFdpdGhTY3JvbGwgPCBvcHRpb25zVG90YWxCb3R0b21Qb3NpdGlvbikge1xuICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuXCIsIHtwbGFjZW1lbnQ6IFwiYWJvdmVcIn0pXG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkFib3ZlKClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuXCIsIHtwbGFjZW1lbnQ6IFwiYmVsb3dcIn0pXG4gICAgICB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHkgPSBcInZpc2libGVcIlxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgc2V0T3B0aW9uc1Bvc2l0aW9uU2hlZXQoKSB7XG4gICAgaWYgKCF0aGlzLnMub3BlbmVkKSByZXR1cm5cblxuICAgIGNvbnN0IHN3aXRjaGluZ1RvU2hlZXQgPSB0aGlzLnMub3B0aW9uc1BsYWNlbWVudCAhPSBcInNoZWV0XCJcblxuICAgIGlmIChzd2l0Y2hpbmdUb1NoZWV0KSB7XG4gICAgICB0aGlzLnByZXBhcmVNb2JpbGVPcHRpb25zQW5pbWF0aW9uKClcbiAgICB9XG5cbiAgICB0aGlzLmxvY2tCb2R5U2Nyb2xsKClcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaGVpZ2h0OiBudWxsLFxuICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgb3B0aW9uc1BsYWNlbWVudDogXCJzaGVldFwiLFxuICAgICAgb3B0aW9uc1Zpc2liaWxpdHk6IFwidmlzaWJsZVwiLFxuICAgICAgb3B0aW9uc1dpZHRoOiB1bmRlZmluZWRcbiAgICB9LCAoKSA9PiB7XG4gICAgICBpZiAoc3dpdGNoaW5nVG9TaGVldCkgdGhpcy5zdGFydE1vYmlsZU9wdGlvbnNPcGVuQW5pbWF0aW9uKClcbiAgICB9KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBzZXRPcHRpb25zUG9zaXRpb25BYm92ZSgpIHtcbiAgICBpZiAoIXRoaXMucy5vcGVuZWQpIHJldHVyblxuXG4gICAgY29uc3Qge2VuZE9mU2VsZWN0TGF5b3V0fSA9IHRoaXMuc1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRPcHRpb25zUG9zaXRpb25BYm92ZVwiKVxuICAgIHRoaXMudW5sb2NrQm9keVNjcm9sbCgpXG5cbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnNQbGFjZW1lbnQ6IFwiYWJvdmVcIixcbiAgICAgICAgb3B0aW9uc1Zpc2liaWxpdHk6IFwidmlzaWJsZVwiLFxuICAgICAgICBvcHRpb25zV2lkdGg6IGVuZE9mU2VsZWN0TGF5b3V0Py53aWR0aFxuICAgICAgfSxcbiAgICAgICgpID0+IHRoaXMuZm9jdXNUZXh0SW5wdXQoKVxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgc2V0T3B0aW9uc1Bvc2l0aW9uQmVsb3coKSB7XG4gICAgaWYgKCF0aGlzLnMub3BlbmVkKSByZXR1cm5cblxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRPcHRpb25zUG9zaXRpb25CZWxvd1wiKVxuICAgIHRoaXMudW5sb2NrQm9keVNjcm9sbCgpXG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICBvcHRpb25zUGxhY2VtZW50OiBcImJlbG93XCIsXG4gICAgICAgIG9wdGlvbnNWaXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICBvcHRpb25zV2lkdGg6IHRoaXMucy5lbmRPZlNlbGVjdExheW91dD8ud2lkdGhcbiAgICAgIH0sXG4gICAgICAoKSA9PiB0aGlzLmZvY3VzVGV4dElucHV0KClcbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIG9uQW55dGhpbmdSZXNpemVkID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvbkFueXRoaW5nUmVzaXplZFwiLCB7b3BlbmVkOiB0aGlzLnMub3BlbmVkfSlcbiAgICBpZiAodGhpcy5zLm9wZW5lZCkge1xuICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb24oKVxuICAgIH1cbiAgfVxuXG4gIG9uQW55dGhpbmdSZXNpemVkRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy50dC5vbkFueXRoaW5nUmVzaXplZCwgMjUpXG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBvbkFueXRoaW5nU2Nyb2xsZWQgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uQW55dGhpbmdTY3JvbGxlZFwiLCB7b3BlbmVkOiB0aGlzLnMub3BlbmVkfSlcbiAgICBpZiAodGhpcy5zLm9wZW5lZCkge1xuICAgICAgdGhpcy5zLnNjcm9sbExlZnQgPSBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgOiBudWxsXG4gICAgICB0aGlzLnMuc2Nyb2xsVG9wID0gUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgOiBudWxsXG4gICAgICBpZiAodGhpcy5pc01vYmlsZU9wdGlvbnNTaGVldCgpKSByZXR1cm5cblxuICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb24oKVxuICAgIH1cbiAgfVxuXG4gIG9uQW55dGhpbmdTY3JvbGxlZERlYm91bmNlZCA9IGRlYm91bmNlKHRoaXMudHQub25Bbnl0aGluZ1Njcm9sbGVkLCAyNSlcblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIG9uUHJlc3NPdXRzaWRlT3B0aW9ucyA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25QcmVzc091dHNpZGVPcHRpb25zXCIsIHtvcGVuZWQ6IHRoaXMucy5vcGVuZWR9KVxuICAgIC8vIElmIG9wdGlvbnMgYXJlIG9wZW4gYW5kIGEgY2xpY2sgaXMgbWFkZSBvdXRzaWRlIG9mIHRoZSBvcHRpb25zIGNvbnRhaW5lclxuICAgIGlmICh0aGlzLnMub3BlbmVkKSB7XG4gICAgICB0aGlzLmNsb3NlT3B0aW9ucygpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50IFJlc3BvbmRlciBldmVudC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbk1vYmlsZU9wdGlvbnNCYWNrZHJvcFJlbGVhc2UgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdD8uKClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24/LigpXG5cbiAgICB0aGlzLmNsb3NlT3B0aW9ucygpXG4gIH1cblxuICBtb2JpbGVPcHRpb25zQmFja2Ryb3BQYW5SZXNwb25kZXIgPSBQYW5SZXNwb25kZXIuY3JlYXRlKHtcbiAgICBvblN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyOiAoKSA9PiB0cnVlLFxuICAgIG9uTW92ZVNob3VsZFNldFBhblJlc3BvbmRlcjogKCkgPT4gZmFsc2UsXG4gICAgb25QYW5SZXNwb25kZXJSZWxlYXNlOiB0aGlzLnR0Lm9uTW9iaWxlT3B0aW9uc0JhY2tkcm9wUmVsZWFzZSxcbiAgICBvblBhblJlc3BvbmRlclRlcm1pbmF0ZTogdGhpcy50dC5vbk1vYmlsZU9wdGlvbnNCYWNrZHJvcFJlbGVhc2VcbiAgfSlcblxuICAvKiogQHJldHVybnMge251bWJlcnxudWxsfSAqL1xuICBwYWdpbmF0aW9uVG90YWxQYWdlcygpIHtcbiAgICBjb25zdCB7dG90YWxDb3VudH0gPSB0aGlzLnNcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHRvdGFsQ291bnQpIHx8IHRvdGFsQ291bnQgPD0gMCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5yZXNvbHZlUGFnZVNpemUoe1xuICAgICAgb3B0aW9uczogdGhpcy5zLmxvYWRlZE9wdGlvbnMgfHwgW10sXG4gICAgICBwYWdlOiB0aGlzLmdldEFjdGl2ZVBhZ2UoKSxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnMucGFnZVNpemUsXG4gICAgICB0b3RhbENvdW50XG4gICAgfSlcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHBhZ2VTaXplKSB8fCBwYWdlU2l6ZSA8PSAwKSByZXR1cm4gbnVsbFxuXG4gICAgcmV0dXJuIE1hdGguY2VpbCh0b3RhbENvdW50IC8gcGFnZVNpemUpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsUGFnZXNcbiAgICogQHJldHVybnMge0FycmF5PHtrZXk6IHN0cmluZywgdHlwZTogXCJwYWdlXCJ8XCJlbGxpcHNpc1wiLCB2YWx1ZT86IG51bWJlcn0+fVxuICAgKi9cbiAgcGFnaW5hdGlvblBhZ2VJdGVtcyh0b3RhbFBhZ2VzKSB7XG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLmdldEFjdGl2ZVBhZ2UoKVxuICAgIGNvbnN0IGl0ZW1zID0gW11cbiAgICBjb25zdCBhZGRQYWdlID0gKHBhZ2UpID0+IGl0ZW1zLnB1c2goe2tleTogYHBhZ2UtJHtwYWdlfWAsIHR5cGU6IFwicGFnZVwiLCB2YWx1ZTogcGFnZX0pXG4gICAgY29uc3QgYWRkRWxsaXBzaXMgPSAoa2V5KSA9PiBpdGVtcy5wdXNoKHtrZXksIHR5cGU6IFwiZWxsaXBzaXNcIn0pXG5cbiAgICBpZiAodG90YWxQYWdlcyA8PSA3KSB7XG4gICAgICBmb3IgKGxldCBwYWdlID0gMTsgcGFnZSA8PSB0b3RhbFBhZ2VzOyBwYWdlICs9IDEpIHtcbiAgICAgICAgYWRkUGFnZShwYWdlKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXNcbiAgICB9XG5cbiAgICBhZGRQYWdlKDEpXG5cbiAgICBjb25zdCB3aW5kb3dTaXplID0gMlxuICAgIGxldCBzdGFydCA9IE1hdGgubWF4KDIsIGN1cnJlbnRQYWdlIC0gd2luZG93U2l6ZSlcbiAgICBsZXQgZW5kID0gTWF0aC5taW4odG90YWxQYWdlcyAtIDEsIGN1cnJlbnRQYWdlICsgd2luZG93U2l6ZSlcblxuICAgIGlmIChjdXJyZW50UGFnZSA8PSAzKSB7XG4gICAgICBzdGFydCA9IDJcbiAgICAgIGVuZCA9IE1hdGgubWluKHRvdGFsUGFnZXMgLSAxLCA1KVxuICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gdG90YWxQYWdlcyAtIDIpIHtcbiAgICAgIGVuZCA9IHRvdGFsUGFnZXMgLSAxXG4gICAgICBzdGFydCA9IE1hdGgubWF4KDIsIHRvdGFsUGFnZXMgLSA0KVxuICAgIH1cblxuICAgIGlmIChzdGFydCA+IDIpIGFkZEVsbGlwc2lzKFwiZWxsaXBzaXMtc3RhcnRcIilcblxuICAgIGZvciAobGV0IHBhZ2UgPSBzdGFydDsgcGFnZSA8PSBlbmQ7IHBhZ2UgKz0gMSkge1xuICAgICAgYWRkUGFnZShwYWdlKVxuICAgIH1cblxuICAgIGlmIChlbmQgPCB0b3RhbFBhZ2VzIC0gMSkgYWRkRWxsaXBzaXMoXCJlbGxpcHNpcy1lbmRcIilcblxuICAgIGFkZFBhZ2UodG90YWxQYWdlcylcblxuICAgIHJldHVybiBpdGVtc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFBhZ2VzXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBwYWdpbmF0aW9uRGlzcGxheVZhbHVlKHRvdGFsUGFnZXMpIHtcbiAgICBjb25zdCBhY3RpdmVQYWdlID0gdGhpcy5nZXRBY3RpdmVQYWdlKClcbiAgICBjb25zdCBmYWxsYmFja1RleHQgPSBgUGFnZSAke2FjdGl2ZVBhZ2V9IG9mICR7dG90YWxQYWdlc31gXG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUoXCIucGFnaW5hdGlvbl9wYWdlX29mX3BhZ2VzXCIsIHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsbGJhY2tUZXh0LFxuICAgICAgcGFnZTogYWN0aXZlUGFnZSxcbiAgICAgIHRvdGFsUGFnZXNcbiAgICB9KSB8fCBmYWxsYmFja1RleHRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWxQYWdlc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgcGFnaW5hdGlvbklucHV0VmFsdWUodG90YWxQYWdlcykge1xuICAgIGlmICh0aGlzLnMucGFnZUlucHV0Rm9jdXNlZCkgcmV0dXJuIHRoaXMucy5wYWdlSW5wdXRWYWx1ZVxuXG4gICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvbkRpc3BsYXlWYWx1ZSh0b3RhbFBhZ2VzKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7bnVtYmVyfSBwYWdlICovXG4gIHNldFBhZ2luYXRpb25QYWdlID0gKHBhZ2UpID0+IHtcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5wYWdpbmF0aW9uVG90YWxQYWdlcygpXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldFBhZ2luYXRpb25QYWdlXCIsIHtyZXF1ZXN0ZWRQYWdlOiBwYWdlLCB0b3RhbFBhZ2VzfSlcblxuICAgIGlmICghdG90YWxQYWdlcykgcmV0dXJuXG5cbiAgICBjb25zdCBuZXh0UGFnZSA9IE1hdGgubWluKE1hdGgubWF4KE1hdGguZmxvb3IocGFnZSksIDEpLCB0b3RhbFBhZ2VzKVxuXG4gICAgaWYgKG5leHRQYWdlID09IHRoaXMuZ2V0QWN0aXZlUGFnZSgpKSB7XG4gICAgICB0aGlzLnMucGFnZUlucHV0VmFsdWUgPSBTdHJpbmcodGhpcy5nZXRBY3RpdmVQYWdlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge3BhZ2U6IG5leHRQYWdlLCBwYWdlSW5wdXRWYWx1ZTogU3RyaW5nKG5leHRQYWdlKX0sXG4gICAgICAoKSA9PiB0aGlzLnR0LmxvYWRPcHRpb25zKHtwYWdlOiBuZXh0UGFnZX0pXG4gICAgKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvblByZXZQcmVzc2VkID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgdGhpcy5zZXRQYWdpbmF0aW9uUGFnZSh0aGlzLmdldEFjdGl2ZVBhZ2UoKSAtIDEpXG4gIH1cblxuICAvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgKi9cbiAgb25QYWdpbmF0aW9uTmV4dFByZXNzZWQgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdD8uKClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24/LigpXG5cbiAgICB0aGlzLnNldFBhZ2luYXRpb25QYWdlKHRoaXMuZ2V0QWN0aXZlUGFnZSgpICsgMSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgb25QYWdpbmF0aW9uSW5wdXRGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnMucGFnZUlucHV0Rm9jdXNlZCA9IHRydWVcbiAgICB0aGlzLnMucGFnZUlucHV0VmFsdWUgPSBTdHJpbmcodGhpcy5nZXRBY3RpdmVQYWdlKCkpXG4gIH1cblxuICAvKiogQHBhcmFtIHtzdHJpbmd9IHZhbHVlICovXG4gIG9uUGFnaW5hdGlvbklucHV0Q2hhbmdlID0gKHZhbHVlKSA9PiB7XG4gICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25JbnB1dEJsdXIgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdD8uKClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24/LigpXG5cbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5wYWdpbmF0aW9uVG90YWxQYWdlcygpXG4gICAgY29uc3QgcmF3VmFsdWUgPSBldmVudD8udGFyZ2V0Py52YWx1ZSA/PyB0aGlzLnMucGFnZUlucHV0VmFsdWVcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHJhd1ZhbHVlID8gTnVtYmVyKFN0cmluZyhyYXdWYWx1ZSkubWF0Y2goL1xcZCsvKT8uWzBdKSA6IE5hTlxuICAgIGNvbnN0IG5leHRQYWdlID0gTnVtYmVyLmlzRmluaXRlKHBhcnNlZFZhbHVlKSA/IHBhcnNlZFZhbHVlIDogTnVtYmVyKHRoaXMucy5wYWdlSW5wdXRWYWx1ZSlcblxuICAgIGlmICh0b3RhbFBhZ2VzICYmIE51bWJlci5pc0Zpbml0ZShuZXh0UGFnZSkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe3BhZ2VJbnB1dEZvY3VzZWQ6IGZhbHNlfSwgKCkgPT4gdGhpcy5zZXRQYWdpbmF0aW9uUGFnZShuZXh0UGFnZSkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHBhZ2VJbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgcGFnZUlucHV0VmFsdWU6IFN0cmluZyh0aGlzLmdldEFjdGl2ZVBhZ2UoKSlcbiAgICB9KVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvbklucHV0U3VibWl0ID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblRvdGFsUGFnZXMoKVxuXG4gICAgaWYgKCF0b3RhbFBhZ2VzKSB7XG4gICAgICB0aGlzLnMucGFnZUlucHV0Rm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLnMucGFnZUlucHV0VmFsdWUgPSBTdHJpbmcodGhpcy5nZXRBY3RpdmVQYWdlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBuZXh0UGFnZSA9IE51bWJlcih0aGlzLnMucGFnZUlucHV0VmFsdWUpXG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShuZXh0UGFnZSkpIHtcbiAgICAgIHRoaXMucy5wYWdlSW5wdXRGb2N1c2VkID0gZmFsc2VcbiAgICAgIHRoaXMucy5wYWdlSW5wdXRWYWx1ZSA9IFN0cmluZyh0aGlzLmdldEFjdGl2ZVBhZ2UoKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe3BhZ2VJbnB1dEZvY3VzZWQ6IGZhbHNlfSwgKCkgPT4gdGhpcy5zZXRQYWdpbmF0aW9uUGFnZShuZXh0UGFnZSkpXG4gIH1cblxuICAvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgKi9cbiAgb25QYWdpbmF0aW9uSW5wdXRLZXlEb3duID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50Py5rZXkgIT09IFwiRW50ZXJcIikgcmV0dXJuXG5cbiAgICB0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0U3VibWl0KGV2ZW50KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV8bnVsbH0gKi9cbiAgcGFnaW5hdGlvbkNvbnRyb2xzKCkge1xuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnBhZ2luYXRpb25Ub3RhbFBhZ2VzKClcblxuICAgIGlmICghdG90YWxQYWdlcyB8fCB0b3RhbFBhZ2VzIDw9IDEpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMuZ2V0QWN0aXZlUGFnZSgpXG4gICAgY29uc3QgcHJldkRpc2FibGVkID0gY3VycmVudFBhZ2UgPD0gMVxuICAgIGNvbnN0IG5leHREaXNhYmxlZCA9IGN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXNcblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25Db250YWluZXIgfHw9IHtcbiAgICAgICAgICBib3JkZXJUb3BDb2xvcjogXCIjZTJlOGYwXCIsXG4gICAgICAgICAgYm9yZGVyVG9wV2lkdGg6IDEsXG4gICAgICAgICAgcGFkZGluZzogOFxuICAgICAgICB9fVxuICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9vcHRpb25zLXBhZ2luYXRpb25cIlxuICAgICAgPlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkhlYWRlciB8fD0ge2ZsZXhEaXJlY3Rpb246IFwicm93XCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsIGp1c3RpZnlDb250ZW50OiBcInNwYWNlLWJldHdlZW5cIn19XG4gICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QvcGFnaW5hdGlvbi1oZWFkZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3ByZXZEaXNhYmxlZH1cbiAgICAgICAgICAgIG9uUHJlc3M9e3RoaXMudHQub25QYWdpbmF0aW9uUHJldlByZXNzZWR9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzW2BwYWdpbmF0aW9uTmF2QnV0dG9uLSR7cHJldkRpc2FibGVkfWBdIHx8PSB7XG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZjhmYWZjXCIsXG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBcIiNjYmQ1ZTFcIixcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA4LFxuICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMSxcbiAgICAgICAgICAgICAgaGVpZ2h0OiAzMCxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIG9wYWNpdHk6IHByZXZEaXNhYmxlZCA/IDAuNCA6IDEsXG4gICAgICAgICAgICAgIHdpZHRoOiAzMFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L3BhZ2luYXRpb24tcHJldlwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEZvbnRBd2Vzb21lSWNvblxuICAgICAgICAgICAgICBuYW1lPVwiY2hldnJvbi1sZWZ0XCJcbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uTmF2SWNvbiB8fD0ge2NvbG9yOiBcIiMzMzQxNTVcIiwgZm9udFNpemU6IDEyfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuY2FjaGUoXCJwYWdpbmF0aW9uTGFiZWxEYXRhU2V0XCIsIHtcbiAgICAgICAgICAgICAgcGFnZTogY3VycmVudFBhZ2VcbiAgICAgICAgICAgIH0sIFtjdXJyZW50UGFnZV0pfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uTGFiZWxCdXR0b24gfHw9IHtcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNmMWY1ZjlcIixcbiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IFwiI2NiZDVlMVwiLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDE0LFxuICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMSxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIG1pbldpZHRoOiAxNDAsXG4gICAgICAgICAgICAgIHBhZGRpbmdIb3Jpem9udGFsOiAxMCxcbiAgICAgICAgICAgICAgcGFkZGluZ1ZlcnRpY2FsOiA2XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QvcGFnaW5hdGlvbi1sYWJlbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICBrZXlib2FyZFR5cGU9XCJudW1iZXItcGFkXCJcbiAgICAgICAgICAgICAgb25CbHVyPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0Qmx1cn1cbiAgICAgICAgICAgICAgb25DaGFuZ2VUZXh0PXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlfVxuICAgICAgICAgICAgICBvbkZvY3VzPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0Rm9jdXN9XG4gICAgICAgICAgICAgIG9uUHJlc3NJbj17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dEZvY3VzfVxuICAgICAgICAgICAgICBvbktleURvd249e3RoaXMudHQub25QYWdpbmF0aW9uSW5wdXRLZXlEb3dufVxuICAgICAgICAgICAgICBvblN1Ym1pdEVkaXRpbmc9e3RoaXMudHQub25QYWdpbmF0aW9uSW5wdXRTdWJtaXR9XG4gICAgICAgICAgICAgIHJlZj17dGhpcy50dC5wYWdlSW5wdXRSZWZ9XG4gICAgICAgICAgICAgIHNlbGVjdFRleHRPbkZvY3VzXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbklucHV0U3R5bGUgfHw9IHtcbiAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMCxcbiAgICAgICAgICAgICAgICBjb2xvcjogXCIjMGYxNzJhXCIsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IDEyLFxuICAgICAgICAgICAgICAgIG91dGxpbmU6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBcIm5vbmVcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgICB3aWR0aDogMTIwXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L3BhZ2luYXRpb24taW5wdXRcIlxuICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5wYWdpbmF0aW9uSW5wdXRWYWx1ZSh0b3RhbFBhZ2VzKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICAgIGRpc2FibGVkPXtuZXh0RGlzYWJsZWR9XG4gICAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbk5leHRQcmVzc2VkfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlc1tgcGFnaW5hdGlvbk5hdkJ1dHRvbi0ke25leHREaXNhYmxlZH1gXSB8fD0ge1xuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2Y4ZmFmY1wiLFxuICAgICAgICAgICAgICBib3JkZXJDb2xvcjogXCIjY2JkNWUxXCIsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogOCxcbiAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgICAgIGhlaWdodDogMzAsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBuZXh0RGlzYWJsZWQgPyAwLjQgOiAxLFxuICAgICAgICAgICAgICB3aWR0aDogMzBcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9wYWdpbmF0aW9uLW5leHRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb25cbiAgICAgICAgICAgICAgbmFtZT1cImNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25OYXZJY29uIHx8PSB7Y29sb3I6IFwiIzMzNDE1NVwiLCBmb250U2l6ZTogMTJ9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvblBhZ2VzIHx8PSB7XG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLFxuICAgICAgICAgICAgZmxleFdyYXA6IFwid3JhcFwiLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICBtYXJnaW5Ub3A6IDhcbiAgICAgICAgICB9fVxuICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L3BhZ2luYXRpb24tcGFnZXNcIlxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucGFnaW5hdGlvblBhZ2VJdGVtcyh0b3RhbFBhZ2VzKS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT0gXCJlbGxpcHNpc1wiKSB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgICAgIGtleT17aXRlbS5rZXl9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25FbGxpcHNpcyB8fD0ge3BhZGRpbmdIb3Jpem9udGFsOiA2fX1cbiAgICAgICAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L3BhZ2luYXRpb24tZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkVsbGlwc2lzVGV4dCB8fD0ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcIiM2NDc0OGJcIixcbiAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNjAwXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIC4uLlxuICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8UGFnaW5hdGlvblBhZ2VCdXR0b25cbiAgICAgICAgICAgICAgICBhY3RpdmU9e2l0ZW0udmFsdWUgPT0gY3VycmVudFBhZ2V9XG4gICAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cbiAgICAgICAgICAgICAgICBvblBhZ2VTZWxlY3RlZD17dGhpcy50dC5zZXRQYWdpbmF0aW9uUGFnZX1cbiAgICAgICAgICAgICAgICBwYWdlPXtpdGVtLnZhbHVlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e2xvYWRlZE9wdGlvbnM6IEFycmF5PEhheWFTZWxlY3RPcHRpb24+fHVuZGVmaW5lZH19IGFyZ3MgT3B0aW9ucyB0byByZW5kZXIuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9XG4gICAqL1xuICBvcHRpb25zTGlzdENvbnRlbnQoe2xvYWRlZE9wdGlvbnN9KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtsb2FkZWRPcHRpb25zPy5tYXAoKGxvYWRlZE9wdGlvbikgPT5cbiAgICAgICAgICB0aGlzLmhheWFTZWxlY3RPcHRpb24oe1xuICAgICAgICAgICAga2V5OiBsb2FkZWRPcHRpb24ua2V5IHx8IGBsb2FkZWQtb3B0aW9uLSR7bG9hZGVkT3B0aW9uLnZhbHVlfWAsXG4gICAgICAgICAgICBsb2FkZWRPcHRpb25cbiAgICAgICAgICB9KVxuICAgICAgICApfVxuICAgICAgICB7bG9hZGVkT3B0aW9ucz8ubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJub09wdGlvbnNDb250YWluZXJcIiwgdGhpcy5ub09wdGlvbnNDb250YWluZXJTdHlsZSB8fD0ge1xuICAgICAgICAgICAgICBwYWRkaW5nQm90dG9tOiAxMCxcbiAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IDgsXG4gICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogOCxcbiAgICAgICAgICAgICAgcGFkZGluZ1RvcDogMTBcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3Qvbm8tb3B0aW9ucy1jb250YWluZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICB7dGhpcy5wLm5vT3B0aW9uc1RleHQgPyB0aGlzLnAubm9PcHRpb25zVGV4dCgpIDogdGhpcy50cmFuc2xhdGUoXCIubm9fb3B0aW9uc19mb3VuZFwiKX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIH1cbiAgICAgIDwvPlxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tpZDogc3RyaW5nfG51bWJlciwgb3B0aW9uc0xpc3RDb250ZW50OiBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGUsIHBhZ2luYXRpb25Db250cm9sczogaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfG51bGx9fSBhcmdzIE1vYmlsZSBzaGVldCBjb250ZW50LlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfVxuICAgKi9cbiAgbW9iaWxlT3B0aW9uc0NvbnRhaW5lcih7aWQsIG9wdGlvbnNMaXN0Q29udGVudCwgcGFnaW5hdGlvbkNvbnRyb2xzfSkge1xuICAgIGNvbnN0IHNoZWV0TWF4SGVpZ2h0ID0gTWF0aC5yb3VuZChEaW1lbnNpb25zLmdldChcIndpbmRvd1wiKS5oZWlnaHQgKiAwLjgpXG4gICAgbGV0IHNoZWV0U3R5bGUgPSB0aGlzLnN0eWxpbmdGb3IoXCJvcHRpb25zQ29udGFpbmVyXCIsIHtcbiAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICB6SW5kZXg6IDEwMDAwMCxcbiAgICAgIGVsZXZhdGlvbjogMTAwMDAwLFxuICAgICAgbGVmdDogMTAsXG4gICAgICByaWdodDogMTAsXG4gICAgICBib3R0b206IDAsXG4gICAgICBtYXhIZWlnaHQ6IHNoZWV0TWF4SGVpZ2h0LFxuICAgICAgc2hhZG93Q29sb3I6IFwiIzBmMTcyYVwiLFxuICAgICAgc2hhZG93T2Zmc2V0OiB7aGVpZ2h0OiAtMTIsIHdpZHRoOiAwfSxcbiAgICAgIHNoYWRvd09wYWNpdHk6IDAuNDgsXG4gICAgICBzaGFkb3dSYWRpdXM6IDM0LFxuICAgICAgYm94U2hhZG93OiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiXG4gICAgICAgID8gXCIwIC0yOHB4IDcycHggcmdiYSgxNSwgMjMsIDQyLCAwLjU2KSwgMCAtOHB4IDI0cHggcmdiYSgxNSwgMjMsIDQyLCAwLjM4KSwgMCAwIDAgMXB4IHJnYmEoMTUsIDIzLCA0MiwgMC4xMilcIlxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZmZmXCIsXG4gICAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAxOCxcbiAgICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAxOCxcbiAgICAgIG9wYWNpdHk6IHRoaXMubW9iaWxlT3B0aW9uc0NvbnRhaW5lclByb2dyZXNzLFxuICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICB0cmFuc2Zvcm06IHRoaXMubW9iaWxlT3B0aW9uc0NvbnRhaW5lclRyYW5zZm9ybSxcbiAgICAgIHZpc2liaWxpdHk6IHRoaXMucy5vcHRpb25zVmlzaWJpbGl0eVxuICAgIH0sIFtzaGVldE1heEhlaWdodCwgdGhpcy5zLm9wdGlvbnNWaXNpYmlsaXR5XSlcblxuICAgIGlmIChcImhlaWdodFwiIGluIHNoZWV0U3R5bGUpIHtcbiAgICAgIHNoZWV0U3R5bGUgPSBPYmplY3QuYXNzaWduKHt9LCBzaGVldFN0eWxlKVxuICAgICAgZGVsZXRlIHNoZWV0U3R5bGUuaGVpZ2h0XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJtb2JpbGVPcHRpb25zT3ZlcmxheVwiLCBzdHlsZXMubW9iaWxlT3B0aW9uc092ZXJsYXkgfHw9IHtcbiAgICAgICAgICBwb3NpdGlvbjogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgYm90dG9tOiAwLFxuICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgekluZGV4OiA5OTk5OSxcbiAgICAgICAgICBlbGV2YXRpb246IDk5OTk5XG4gICAgICAgIH0pfVxuICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9tb2JpbGUtb3B0aW9ucy1vdmVybGF5XCJcbiAgICAgID5cbiAgICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwibW9iaWxlT3B0aW9uc0JhY2tkcm9wXCIsIHRoaXMubW9iaWxlT3B0aW9uc0JhY2tkcm9wU3R5bGUgfHw9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwicmdiYSgxNSwgMjMsIDQyLCAwLjMyKVwiLFxuICAgICAgICAgICAgb3BhY2l0eTogdGhpcy5tb2JpbGVPcHRpb25zQmFja2Ryb3BPcGFjaXR5XG4gICAgICAgICAgfSl9XG4gICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QvbW9iaWxlLW9wdGlvbnMtYmFja2Ryb3BcIlxuICAgICAgICAgIHsuLi50aGlzLnR0Lm1vYmlsZU9wdGlvbnNCYWNrZHJvcFBhblJlc3BvbmRlci5wYW5IYW5kbGVyc31cbiAgICAgICAgLz5cbiAgICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgICBkYXRhU2V0PXt0aGlzLmNhY2hlKFxuICAgICAgICAgICAgXCJtb2JpbGVPcHRpb25zQ29udGFpbmVyRGF0YVNldFwiLFxuICAgICAgICAgICAge2lkLCByb2xlOiBcImRpYWxvZ1wiLCBvcHRpb25zUGxhY2VtZW50OiBcInNoZWV0XCIsIG9wdGlvbnNWaXNpYmlsaXR5OiB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHkgfHwgXCJoaWRkZW5cIn0sXG4gICAgICAgICAgICBbaWQsIHRoaXMucy5vcHRpb25zVmlzaWJpbGl0eV1cbiAgICAgICAgICApfVxuICAgICAgICAgIG9uTGF5b3V0PXt0aGlzLnR0Lm9uT3B0aW9uc0NvbnRhaW5lckxheW91dH1cbiAgICAgICAgICByZWY9e3RoaXMudHQub3B0aW9uc0NvbnRhaW5lclJlZn1cbiAgICAgICAgICBzdHlsZT17c2hlZXRTdHlsZX1cbiAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9vcHRpb25zLWNvbnRhaW5lclwiXG4gICAgICAgID5cbiAgICAgICAgICA8U2Nyb2xsVmlld1xuICAgICAgICAgICAgY29udGVudENvbnRhaW5lclN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJtb2JpbGVPcHRpb25zU2Nyb2xsQ29udGVudFwiLCBzdHlsZXMubW9iaWxlT3B0aW9uc1Njcm9sbENvbnRlbnQgfHw9IHtcbiAgICAgICAgICAgICAgZmxleEdyb3c6IDEsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImZsZXgtZW5kXCJcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAga2V5Ym9hcmRTaG91bGRQZXJzaXN0VGFwcz1cImhhbmRsZWRcIlxuICAgICAgICAgICAgbmVzdGVkU2Nyb2xsRW5hYmxlZFxuICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm1vYmlsZU9wdGlvbnNTY3JvbGxWaWV3XCIsIHN0eWxlcy5tb2JpbGVPcHRpb25zU2Nyb2xsVmlldyB8fD0ge2ZsZXhHcm93OiAwLCBmbGV4U2hyaW5rOiAxLCBtaW5IZWlnaHQ6IDB9KX1cbiAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L21vYmlsZS1vcHRpb25zLXNjcm9sbC12aWV3XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b3B0aW9uc0xpc3RDb250ZW50fVxuICAgICAgICAgIDwvU2Nyb2xsVmlldz5cbiAgICAgICAgICB7cGFnaW5hdGlvbkNvbnRyb2xzfVxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwibW9iaWxlT3B0aW9uc1NlYXJjaENvbnRhaW5lclwiLCBzdHlsZXMubW9iaWxlT3B0aW9uc1NlYXJjaENvbnRhaW5lciB8fD0ge1xuICAgICAgICAgICAgICBib3JkZXJUb3BDb2xvcjogXCIjY2JkNWUxXCIsXG4gICAgICAgICAgICAgIGJvcmRlclRvcFdpZHRoOiAxLFxuICAgICAgICAgICAgICBwYWRkaW5nQm90dG9tOiAxNCxcbiAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IDE0LFxuICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IDE0LFxuICAgICAgICAgICAgICBwYWRkaW5nVG9wOiAxMFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9tb2JpbGUtb3B0aW9ucy1zZWFyY2gtY29udGFpbmVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5zZWFyY2hUZXh0SW5wdXQoe21vYmlsZU9wdGlvbnNTaGVldDogdHJ1ZX0pfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9BbmltYXRlZC5WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfG51bGx9ICovXG4gIG9wdGlvbnNDb250YWluZXIoKSB7XG4gICAgY29uc3Qge3NlbGVjdENvbnRhaW5lckxheW91dCwgbG9hZGVkT3B0aW9ucywgZW5kT2ZTZWxlY3RMYXlvdXQsIG9wdGlvbnNDb250YWluZXJMYXlvdXQsIG9wdGlvbnNQbGFjZW1lbnQsIG9wdGlvbnNWaXNpYmlsaXR5fSA9IHRoaXMuc1xuICAgIGxldCBsZWZ0LCB0b3BcbiAgICBjb25zdCBpZCA9IGlkRm9yQ29tcG9uZW50KHRoaXMpXG4gICAgY29uc3QgZGVza3RvcE9wdGlvbnNQbGFjZW1lbnQgPSBvcHRpb25zUGxhY2VtZW50ID09IFwic2hlZXRcIiA/IFwiYmVsb3dcIiA6IG9wdGlvbnNQbGFjZW1lbnRcbiAgICBjb25zdCBvcHRpb25zTGlzdENvbnRlbnQgPSB0aGlzLm9wdGlvbnNMaXN0Q29udGVudCh7bG9hZGVkT3B0aW9uc30pXG4gICAgY29uc3QgcGFnaW5hdGlvbkNvbnRyb2xzID0gdGhpcy5wYWdpbmF0aW9uQ29udHJvbHMoKVxuXG4gICAgaWYgKHRoaXMuaXNNb2JpbGVPcHRpb25zU2hlZXQoKSkge1xuICAgICAgcmV0dXJuIHRoaXMubW9iaWxlT3B0aW9uc0NvbnRhaW5lcih7aWQsIG9wdGlvbnNMaXN0Q29udGVudCwgcGFnaW5hdGlvbkNvbnRyb2xzfSlcbiAgICB9XG5cbiAgICBsZXQgc3R5bGUgPSB7XG4gICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgekluZGV4OiA5OTk5OSxcbiAgICAgIGVsZXZhdGlvbjogOTk5OTksXG4gICAgICB2aXNpYmlsaXR5OiBvcHRpb25zVmlzaWJpbGl0eSxcbiAgICAgIHdpZHRoOiB0aGlzLnAub3B0aW9uc1dpZHRoIHx8IHRoaXMucy5vcHRpb25zV2lkdGgsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2ZmZlwiLFxuICAgICAgYm9yZGVyQ29sb3I6IFwiIzk5OVwiLFxuICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICBtYXhIZWlnaHQ6IDMwMCxcbiAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnAub3B0aW9uc1BvcnRhbCkge1xuICAgICAgc3R5bGUudG9wID0gMFxuICAgICAgc3R5bGUubGVmdCA9IDBcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnAub3B0aW9uc0Fic29sdXRlKSB7XG4gICAgICBzdHlsZS5sZWZ0ID0gMFxuICAgICAgc3R5bGUuYm90dG9tID0gMFxuICAgIH0gZWxzZSBpZiAoZGVza3RvcE9wdGlvbnNQbGFjZW1lbnQgPT0gXCJiZWxvd1wiKSB7XG4gICAgICBpZiAoUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIikge1xuICAgICAgICAvLyBvbkxheW91dCB0b3AgdmFsdWUgaXMgc29tZXRpbWVzIG5lZ2F0aXZlIHNvIHVzZSBicm93c2VyIEpTIHRvIGdldCBpdCBpbnN0ZWFkXG4gICAgICAgIHRvcCA9IGRpZ2codGhpcy50dC5lbmRPZlNlbGVjdFJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcInRvcFwiKSArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgKyAxXG5cbiAgICAgICAgLy8gb25MYXlvdXQgbGVmdCB2YWx1ZXMgZG9lc24ndCBhbHdheXMgdXBkYXRlIHdoZW4gY2hhbmdlZFxuICAgICAgICBsZWZ0ID0gZGlnZyh0aGlzLnR0LmVuZE9mU2VsZWN0UmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIFwibGVmdFwiKSArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0ID0gc2VsZWN0Q29udGFpbmVyTGF5b3V0Py5sZWZ0XG4gICAgICAgIHRvcCA9IHR5cGVvZiBzZWxlY3RDb250YWluZXJMYXlvdXQ/LnRvcCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBzZWxlY3RDb250YWluZXJMYXlvdXQ/LmhlaWdodCA9PSBcIm51bWJlclwiXG4gICAgICAgICAgPyBzZWxlY3RDb250YWluZXJMYXlvdXQudG9wICsgc2VsZWN0Q29udGFpbmVyTGF5b3V0LmhlaWdodCArIDFcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGxlZnQpICYmIE51bWJlci5pc0Zpbml0ZSh0b3ApKSB7XG4gICAgICAgIHN0eWxlLmxlZnQgPSBsZWZ0XG4gICAgICAgIHN0eWxlLnRvcCA9IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyB0b3AgLSAyIDogdG9wXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZS5sZWZ0ID0gMFxuICAgICAgICBzdHlsZS50b3AgPSAwXG4gICAgICAgIHN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkZXNrdG9wT3B0aW9uc1BsYWNlbWVudCA9PSBcImFib3ZlXCIpIHtcbiAgICAgIGlmIChQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSB7XG4gICAgICAgIC8vIG9uTGF5b3V0IHRvcCB2YWx1ZSBpcyBzb21ldGltZXMgbmVnYXRpdmUgc28gdXNlIGJyb3dzZXIgSlMgdG8gZ2V0IGl0IGluc3RlYWRcbiAgICAgICAgdG9wID0gZGlnZyh0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcInRvcFwiKSArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BcblxuICAgICAgICAvLyBvbkxheW91dCBsZWZ0IHZhbHVlcyBkb2Vzbid0IGFsd2F5cyB1cGRhdGUgd2hlbiBjaGFuZ2VkXG4gICAgICAgIGxlZnQgPSBkaWdnKHRoaXMudHQuc2VsZWN0Q29udGFpbmVyUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIFwibGVmdFwiKSArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0ID0gc2VsZWN0Q29udGFpbmVyTGF5b3V0Py5sZWZ0XG4gICAgICAgIHRvcCA9IHNlbGVjdENvbnRhaW5lckxheW91dD8udG9wXG4gICAgICB9XG5cbiAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUobGVmdCkgJiYgTnVtYmVyLmlzRmluaXRlKHRvcCkpIHtcbiAgICAgICAgc3R5bGUubGVmdCA9IGxlZnRcbiAgICAgICAgc3R5bGUudG9wID0gdG9wIC0gb3B0aW9uc0NvbnRhaW5lckxheW91dC5oZWlnaHQgKyAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZS5sZWZ0ID0gMFxuICAgICAgICBzdHlsZS50b3AgPSAwXG4gICAgICAgIHN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rb253biBvcHRpb25zIHBsYWNlbWVudDogJHtkZXNrdG9wT3B0aW9uc1BsYWNlbWVudH1gKVxuICAgIH1cblxuICAgIGlmIChQbGF0Zm9ybS5PUyAhPSBcIndlYlwiKSB7XG4gICAgICBzdHlsZS5vcGFjaXR5ID0gb3B0aW9uc1Zpc2liaWxpdHkgPT0gXCJoaWRkZW5cIiA/IDAgOiAxXG4gICAgICBzdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCJcbiAgICB9XG5cbiAgICBzdHlsZSA9IHRoaXMuc3R5bGluZ0ZvcihcIm9wdGlvbnNDb250YWluZXJcIiwgc3R5bGUsIFtsZWZ0LCB0b3AsIHN0eWxlLnZpc2liaWxpdHksIHN0eWxlLndpZHRoXSlcblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBkYXRhU2V0PXt0aGlzLmNhY2hlKFxuICAgICAgICAgIFwib3B0aW9uc0NvbnRhaW5lckRhdGFTZXRcIixcbiAgICAgICAgICB7aWQsIHJvbGU6IFwiZGlhbG9nXCIsIG9wdGlvbnNWaXNpYmlsaXR5OiBvcHRpb25zVmlzaWJpbGl0eSB8fCBcImhpZGRlblwifSxcbiAgICAgICAgICBbaWQsIG9wdGlvbnNWaXNpYmlsaXR5XVxuICAgICAgICApfVxuICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbk9wdGlvbnNDb250YWluZXJMYXlvdXR9XG4gICAgICAgIHJlZj17dGhpcy50dC5vcHRpb25zQ29udGFpbmVyUmVmfVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L29wdGlvbnMtY29udGFpbmVyXCJcbiAgICAgID5cbiAgICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgICBrZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzPVwiaGFuZGxlZFwiXG4gICAgICAgICAgbmVzdGVkU2Nyb2xsRW5hYmxlZFxuICAgICAgICAgIHN0eWxlPXtzdHlsZXNbYG9wdGlvbnNTY3JvbGxWaWV3LSR7c3R5bGUubWF4SGVpZ2h0IHx8IDMwMH1gXSB8fD0ge1xuICAgICAgICAgICAgZmxleEdyb3c6IDAsXG4gICAgICAgICAgICBmbGV4U2hyaW5rOiAxLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiBzdHlsZS5tYXhIZWlnaHQgfHwgMzAwLFxuICAgICAgICAgICAgbWluSGVpZ2h0OiAwXG4gICAgICAgICAgfX1cbiAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9vcHRpb25zLXNjcm9sbC12aWV3XCJcbiAgICAgICAgPlxuICAgICAgICAgIHtvcHRpb25zTGlzdENvbnRlbnR9XG4gICAgICAgIDwvU2Nyb2xsVmlldz5cbiAgICAgICAge3BhZ2luYXRpb25Db250cm9sc31cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnRcbiAgICogQHBhcmFtIHtIYXlhU2VsZWN0T3B0aW9ufSBsb2FkZWRPcHRpb25cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbk9wdGlvbkNsaWNrZWQgPSAoZXZlbnQsIGxvYWRlZE9wdGlvbikgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgY29uc3Qge29uQ2hhbmdlLCB0b2dnbGVPcHRpb25zfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7bXVsdGlwbGV9ID0gdGhpcy5wXG4gICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRPcHRpb25zKClcbiAgICBjb25zdCB0b2dnbGVkID0gdGhpcy5nZXRUb2dnbGVkKClcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHt9XG4gICAgY29uc3QgZXhpc3RpbmdPcHRpb24gPSBjdXJyZW50T3B0aW9ucy5maW5kKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlID09IGxvYWRlZE9wdGlvbi52YWx1ZSlcbiAgICBjb25zdCBuZXdUb2dnbGVkID0gey4uLnRvZ2dsZWR9XG4gICAgbGV0IG5ld0N1cnJlbnRPcHRpb25zXG4gICAgbGV0IGFjdGlvblxuXG4gICAgaWYgKGV4aXN0aW5nT3B0aW9uKSB7XG4gICAgICBpZiAodG9nZ2xlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBjdXJyZW50VG9nZ2xlID0gdG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRvZ2dsZU9wdGlvbnMuZmluZEluZGV4KChlbGVtZW50KSA9PiBlbGVtZW50LnZhbHVlID09IGN1cnJlbnRUb2dnbGUpXG5cbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+PSAodG9nZ2xlT3B0aW9ucy5sZW5ndGggLSAxKSkge1xuICAgICAgICAgIC8vIE5vIG5leHQgdG9nZ2xlZCAtIHJlbW92ZSB0b2dnbGVkIGFuZCBvcHRpb25cbiAgICAgICAgICBkZWxldGUgbmV3VG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdXG4gICAgICAgICAgYWN0aW9uID0gXCJyZW1vdmUtb3B0aW9uLWFmdGVyLWxhc3QtdG9nZ2xlXCJcblxuICAgICAgICAgIG5ld0N1cnJlbnRPcHRpb25zID0gY3VycmVudE9wdGlvbnMuZmlsdGVyKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlICE9IGxvYWRlZE9wdGlvbi52YWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBbHJlYWR5IHRvZ2dsZWQgLSBzZXQgdG8gbmV4dCB0b2dnbGVcbiAgICAgICAgICBuZXdUb2dnbGVkW2xvYWRlZE9wdGlvbi52YWx1ZV0gPSBkaWdnKHRvZ2dsZU9wdGlvbnMsIGN1cnJlbnRJbmRleCArIDEsIFwidmFsdWVcIilcbiAgICAgICAgICBhY3Rpb24gPSBcImN5Y2xlLXRvZ2dsZVwiXG4gICAgICAgIH1cblxuICAgICAgICBuZXdTdGF0ZS50b2dnbGVkID0gbmV3VG9nZ2xlZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGZyb20gY3VycmVudCBvcHRpb25zXG4gICAgICAgIGFjdGlvbiA9IFwicmVtb3ZlLW9wdGlvblwiXG4gICAgICAgIG5ld0N1cnJlbnRPcHRpb25zID0gY3VycmVudE9wdGlvbnMuZmlsdGVyKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlICE9IGxvYWRlZE9wdGlvbi52YWx1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIGNsaWNrZWQgb3B0aW9uIGlzIGRpc2FibGVkXG4gICAgICBpZiAobG9hZGVkT3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvbk9wdGlvbkNsaWNrZWRcIiwge1xuICAgICAgICAgIGFjdGlvbjogXCJpZ25vcmUtZGlzYWJsZWQtb3B0aW9uXCIsXG4gICAgICAgICAgb3B0aW9uVmFsdWU6IGxvYWRlZE9wdGlvbi52YWx1ZVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHRvZ2dsZU9wdGlvbnMpIHtcbiAgICAgICAgLy8gU2V0IGZyZXNoIHRvZ2dsZVxuICAgICAgICBuZXdUb2dnbGVkW2xvYWRlZE9wdGlvbi52YWx1ZV0gPSB0b2dnbGVPcHRpb25zWzBdLnZhbHVlXG4gICAgICAgIG5ld1N0YXRlLnRvZ2dsZWQgPSBuZXdUb2dnbGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChtdWx0aXBsZSB8fCB0b2dnbGVPcHRpb25zKSB7XG4gICAgICAgIGFjdGlvbiA9IFwiYWRkLW9wdGlvblwiXG4gICAgICAgIG5ld0N1cnJlbnRPcHRpb25zID0gY3VycmVudE9wdGlvbnMuY29uY2F0KFtsb2FkZWRPcHRpb25dKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aW9uID0gXCJyZXBsYWNlLXNpbmdsZS1vcHRpb25cIlxuICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IFtsb2FkZWRPcHRpb25dXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLnZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBjdXJyZW50T3B0aW9ucyBhcmUgY29udHJvbGxlZCBhbmQgYSB1c2VNZW1vIGNhbGxiYWNrIGlzIGhhbmRlbGluZyBzZXR0aW5nIGN1cnJlbnQgb3B0aW9ucy5cbiAgICB9IGVsc2UgaWYgKG5ld0N1cnJlbnRPcHRpb25zKSB7XG4gICAgICBuZXdTdGF0ZS5jdXJyZW50T3B0aW9ucyA9IG5ld0N1cnJlbnRPcHRpb25zXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IG5ld0N1cnJlbnRPcHRpb25zIHx8IGN1cnJlbnRPcHRpb25zXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uT3B0aW9uQ2xpY2tlZFwiLCB7XG4gICAgICBhY3Rpb246IGFjdGlvbiB8fCBcInRvZ2dsZS1vbmx5XCIsXG4gICAgICBtdWx0aXBsZSxcbiAgICAgIG9wdGlvblZhbHVlOiBsb2FkZWRPcHRpb24udmFsdWUsXG4gICAgICBvcHRpb25zQ291bnRCZWZvcmU6IGN1cnJlbnRPcHRpb25zLmxlbmd0aCxcbiAgICAgIG9wdGlvbnNDb3VudEFmdGVyOiBvcHRpb25zLmxlbmd0aFxuICAgIH0pXG5cbiAgICBpZiAoIW11bHRpcGxlIHx8IHRoaXMucC5jbG9zZU9uQ2hhbmdlKSB0aGlzLmNsb3NlT3B0aW9ucyh7b3B0aW9uc30pXG5cbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIC8qKiBAdHlwZSB7SGF5YVNlbGVjdE9uQ2hhbmdlUGF5bG9hZH0gKi9cbiAgICAgIG9uQ2hhbmdlKHtcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHRvZ2dsZXM6IG5ld1RvZ2dsZWRcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2VWYWx1ZSkge1xuICAgICAgbGV0IG9wdGlvblZhbHVlXG5cbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICBvcHRpb25WYWx1ZSA9IG9wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvblZhbHVlID0gZGlnKG9wdGlvbnMsIDAsIFwidmFsdWVcIilcbiAgICAgIH1cblxuICAgICAgdGhpcy5wLm9uQ2hhbmdlVmFsdWUob3B0aW9uVmFsdWUpXG4gICAgfVxuXG4gICAgaWYgKFwidG9nZ2xlZFwiIGluIG5ld1N0YXRlKSB7XG4gICAgICB0aGlzLnMudG9nZ2xlZCA9IG5ld1N0YXRlLnRvZ2dsZWRcbiAgICB9XG5cbiAgICBpZiAoXCJjdXJyZW50T3B0aW9uc1wiIGluIG5ld1N0YXRlKSB7XG4gICAgICB0aGlzLnMuY3VycmVudE9wdGlvbnMgPSBuZXdTdGF0ZS5jdXJyZW50T3B0aW9uc1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3R5bGluZ05hbWVcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbc3R5bGVdXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gW2NhY2hlc11cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGFueT59XG4gICAqL1xuICBzdHlsaW5nRm9yKHN0eWxpbmdOYW1lLCBzdHlsZSA9IHt9LCBjYWNoZXMgPSBbXSkge1xuICAgIGxldCBjdXN0b21TdHlsaW5nID0gZGlnKHRoaXMsIFwicHJvcHNcIiwgXCJzdHlsZXNcIiwgc3R5bGluZ05hbWUpXG4gICAgY29uc3QgYmFzZVN0eWxlID0gey4uLnN0eWxlfVxuXG4gICAgaWYgKHR5cGVvZiBjdXN0b21TdHlsaW5nID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgLyoqIEB0eXBlIHtIYXlhU2VsZWN0U3R5bGluZ0NvbnRleHR9ICovXG4gICAgICBjdXN0b21TdHlsaW5nID0gY3VzdG9tU3R5bGluZyh7XG4gICAgICAgIG9wZW5lZDogdGhpcy5zLm9wZW5lZCxcbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudDogdGhpcy5zLm9wdGlvbnNQbGFjZW1lbnQsXG4gICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgICBzdHlsZTogYmFzZVN0eWxlXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChjdXN0b21TdHlsaW5nKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZVN0eWxlLCBjdXN0b21TdHlsaW5nKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNhY2hlKGBzdHlsaW5nRm9yLSR7c3R5bGluZ05hbWV9YCwgc3R5bGUsIGNhY2hlcylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hheWFTZWxlY3RPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH1cbiAgICovXG4gIGljb25Gb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgY29uc3Qge3RvZ2dsZU9wdGlvbnN9ID0gdGhpcy5wcm9wcyB8fCB7fVxuICAgIGNvbnN0IHRvZ2dsZWQgPSB0aGlzLmdldFRvZ2dsZWQoKVxuXG4gICAgaWYgKHRvZ2dsZU9wdGlvbnMgJiYgKG9wdGlvbi52YWx1ZSBpbiB0b2dnbGVkKSkge1xuICAgICAgY29uc3QgdG9nZ2xlZFZhbHVlID0gdG9nZ2xlZFtvcHRpb24udmFsdWVdXG4gICAgICBjb25zdCB0b2dnbGVkT3B0aW9uID0gdG9nZ2xlT3B0aW9ucy5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50LnZhbHVlID09IHRvZ2dsZWRWYWx1ZSlcblxuICAgICAgaWYgKCF0b2dnbGVkT3B0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBhIHRvZ2dsZSBvcHRpb24gZm9yIHZhbHVlOiAke3RvZ2dsZWRWYWx1ZX1gKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdG9nZ2xlZE9wdGlvbi5pY29uXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SGF5YVNlbGVjdE9wdGlvbn0gb3B0aW9uXG4gICAqIEBwYXJhbSB7XCJjdXJyZW50XCJ8XCJvcHRpb25cIn0gbW9kZVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfVxuICAgKi9cbiAgcHJlc2VudE9wdGlvbiA9IChvcHRpb24sIG1vZGUpID0+IHtcbiAgICBjb25zdCB7b3B0aW9uQ29udGVudCwgdG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzIHx8IHt9XG4gICAgY29uc3QgdG9nZ2xlZCA9IHRoaXMuZ2V0VG9nZ2xlZCgpXG4gICAgY29uc3QgaWNvbiA9IHRoaXMuaWNvbkZvck9wdGlvbihvcHRpb24pXG4gICAgY29uc3QgdG9nZ2xlVmFsdWUgPSB0b2dnbGVkW29wdGlvbi52YWx1ZV1cbiAgICBjb25zdCB0b2dnbGVPcHRpb24gPSB0b2dnbGVPcHRpb25zPy5maW5kKCh0b2dnbGVPcHRpb25JKSA9PiB0b2dnbGVPcHRpb25JLnZhbHVlID09IHRvZ2dsZVZhbHVlKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5nZXRDdXJyZW50T3B0aW9uVmFsdWVzKCkuc29tZSgodmFsdWUpID0+IHZhbHVlID09IG9wdGlvbi52YWx1ZSlcbiAgICBsZXQgc3R5bGVcbiAgICBsZXQgY29udGVudE5vZGVcblxuICAgIGlmIChtb2RlID09IFwiY3VycmVudFwiKSB7XG4gICAgICBzdHlsZSA9IHRoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRPcHRpb25QcmVzZW50YXRpb25UZXh0XCIsIHtmbGV4OiAxLCB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwifSlcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGUgPSB0aGlzLnN0eWxpbmdGb3IoXCJvcHRpb25QcmVzZW50YXRpb25UZXh0XCIsIHtmbGV4OiAxLCB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwifSlcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcInByZXNlbnRPcHRpb25WaWV3RGF0YVNldFwiLCB7XG4gICAgICAgICAgdGV4dDogb3B0aW9uLnRleHQsXG4gICAgICAgICAgdG9nZ2xlSWNvbjogdG9nZ2xlT3B0aW9uPy5pY29uLFxuICAgICAgICAgIHRvZ2dsZVZhbHVlOiB0b2dnbGVPcHRpb24/LnZhbHVlLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWVcbiAgICAgICAgfSwgW29wdGlvbi50ZXh0LCBvcHRpb24udmFsdWUsIHRvZ2dsZU9wdGlvbj8uaWNvbiwgdG9nZ2xlT3B0aW9uPy52YWx1ZV0pfVxuICAgICAgICBzdHlsZT17dGhpcy5jYWNoZShcIm9wdGlvblByZXNlbnRhdGlvblN0eWxlXCIsIHtmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwifSl9XG4gICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L29wdGlvbi1wcmVzZW50YXRpb25cIlxuICAgICAgPlxuICAgICAgICB7dG9nZ2xlT3B0aW9ucyAmJiAhKG9wdGlvbi52YWx1ZSBpbiB0b2dnbGVkKSAmJlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5jYWNoZShcInRvZ2dsZUljb25QbGFjZWhvbGRlclN0eWxlXCIsIHt3aWR0aDogMjB9KX1cbiAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L3RvZ2dsZS1pY29uLXBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIHt0b2dnbGVPcHRpb25zICYmIChvcHRpb24udmFsdWUgaW4gdG9nZ2xlZCkgJiZcbiAgICAgICAgICA8VmlldyBzdHlsZT17dGhpcy5jYWNoZShcInRvZ2dsZUljb25Db250YWluZXJTdHlsZVwiLCB7YWxpZ25JdGVtczogXCJjZW50ZXJcIiwganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsIHdpZHRoOiAyMH0pfT5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb25cbiAgICAgICAgICAgICAgbmFtZT17aWNvbn1cbiAgICAgICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QvdG9nZ2xlLWljb25cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIH1cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbkNvbnRlbnQpIHtcbiAgICAgICAgICAgIC8qKiBAdHlwZSB7SGF5YVNlbGVjdE9wdGlvblJlbmRlckNvbnRleHR9ICovXG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IG9wdGlvbkNvbnRlbnQoe2ljb24sIG1vZGUsIG9wdGlvbiwgc2VsZWN0ZWQsIHRvZ2dsZU9wdGlvbiwgdG9nZ2xlVmFsdWUsIHRvZ2dsZWR9KVxuICAgICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBcImN1cnJlbnRcIiAmJiBvcHRpb24uY3VycmVudENvbnRlbnQpIHtcbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gb3B0aW9uLmN1cnJlbnRDb250ZW50KClcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi5jb250ZW50KSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IG9wdGlvbi5jb250ZW50KClcbiAgICAgICAgICB9IGVsc2UgaWYgKFwiaHRtbFwiIGluIG9wdGlvbiAmJiBQbGF0Zm9ybS5PUyAhPSBcIndlYlwiKSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IDxSZW5kZXJIdG1sIHNvdXJjZT17e2h0bWw6IGRpZ2cob3B0aW9uLCBcImh0bWxcIil9fSAvPlxuICAgICAgICAgIH0gZWxzZSBpZiAoXCJodG1sXCIgaW4gb3B0aW9uICYmIFBsYXRmb3JtLk9TID09IFwid2ViXCIpIHtcbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17e19faHRtbDogZGlnZyhvcHRpb24sIFwiaHRtbFwiKX19IC8+XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gKFxuICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9vcHRpb24tcHJlc2VudGF0aW9uLXRleHRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge29wdGlvbi50ZXh0fVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLmNhY2hlKFwib3B0aW9uUHJlc2VudGF0aW9uQ29udGVudFN0eWxlXCIsIHtmbGV4OiAxfSl9PlxuICAgICAgICAgICAgICAgIHtjb250ZW50Tm9kZX1cbiAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICB7b3B0aW9uLnJpZ2h0ICYmXG4gICAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3RoaXMuY2FjaGUoXCJvcHRpb25QcmVzZW50YXRpb25SaWdodFN0eWxlXCIsIHthbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIiwgbWFyZ2luTGVmdDogOH0pfT5cbiAgICAgICAgICAgICAgICAgIHtvcHRpb24ucmlnaHR9XG4gICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApXG4gICAgICAgIH0pKCl9XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBzZXRDdXJyZW50RnJvbUdpdmVuVmFsdWVzKCkge1xuICAgIGNvbnN0IHtvcHRpb25zLCB2YWx1ZXN9ID0gdGhpcy5wXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpICYmIHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGlmICh0aGlzLnMuY3VycmVudE9wdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLnMuY3VycmVudE9wdGlvbnMgPSBbXVxuICAgICAgfVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcHRpb25zKHtwYWdlOiB0aGlzLmdldEFjdGl2ZVBhZ2UoKSwgdmFsdWVzfSlcbiAgICBjb25zdCB7b3B0aW9uczogY3VycmVudE9wdGlvbnN9ID0gdGhpcy5wYXJzZU9wdGlvbnNSZXN1bHQocmVzdWx0KVxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPSBjdXJyZW50T3B0aW9ucz8ubWFwKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlKVxuICAgIGNvbnN0IHN0YXRlVmFsdWVzID0gdGhpcy5zLmN1cnJlbnRPcHRpb25zPy5tYXAoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUpXG5cbiAgICBpZiAoYW55dGhpbmdEaWZmZXJlbnQoY3VycmVudFZhbHVlcywgc3RhdGVWYWx1ZXMpKSB7XG4gICAgICB0aGlzLnMuY3VycmVudE9wdGlvbnMgPSBjdXJyZW50T3B0aW9uc1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBIYXlhU2VsZWN0U2hhcGVDb21wb25lbnQgPSBzaGFwZUNvbXBvbmVudChIYXlhU2VsZWN0KVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vKEhheWFTZWxlY3RTaGFwZUNvbXBvbmVudClcbiJdfQ==
1896
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VsZWN0L2luZGV4LmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNwRSxPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDbkMsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ3pILE9BQU8sS0FBSyxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDdkQsT0FBTyxFQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQTtBQUN6RixPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUE7QUFDL0IsT0FBTyxlQUFlLE1BQU0sdUNBQXVDLENBQUE7QUFDbkUsT0FBTyxjQUFjLE1BQU0sbURBQW1ELENBQUE7QUFDOUUsT0FBTyxnQkFBZ0IsTUFBTSxxREFBcUQsQ0FBQTtBQUNsRixPQUFPLElBQUksTUFBTSxzQ0FBc0MsQ0FBQTtBQUN2RCxPQUFPLE1BQU0sTUFBTSxVQUFVLENBQUE7QUFDN0IsT0FBTyxXQUFXLE1BQU0sZ0JBQWdCLENBQUE7QUFDeEMsT0FBTyxvQkFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUMzRCxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUE7QUFDbEMsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUE7QUFDN0MsT0FBTyxVQUFVLE1BQU0sMEJBQTBCLENBQUE7QUFDakQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUNuQyxPQUFPLGdCQUFnQixNQUFNLHVCQUF1QixDQUFBO0FBQ3BELE9BQU8sZUFBZSxNQUFNLHFDQUFxQyxDQUFBO0FBQ2pFLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQy9FLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGdCQUFnQixDQUFBO0FBRWpELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtBQUNqQixNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQTtBQUVwQzs7Ozs7R0FLRztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSDs7Ozs7Ozs7R0FRRztBQUVIOzs7O0dBSUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxNQUFNO0lBQzdCLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFbEQsSUFBSSxPQUFPLGdCQUFnQixDQUFDLElBQUksSUFBSSxRQUFRLElBQUksT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLENBQUM7UUFDdEYsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBRUQsSUFBSSxPQUFPLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxRQUFRLElBQUksT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLENBQUM7UUFDckYsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQTtBQUN6QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsaUJBQWlCLENBQUMsTUFBTTtJQUMvQixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBQ3RFLENBQUM7QUFFRCwyRUFBMkU7QUFDM0UsU0FBUyxpQkFBaUI7SUFDeEIsSUFBSSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUs7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUNyQyxJQUFJLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxJQUFJLE9BQU8sU0FBUyxJQUFJLFdBQVc7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUV6RSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQTtJQUN6QyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQTtJQUUzQyxPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdEMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNsQyxDQUFDLFFBQVEsSUFBSSxVQUFVLElBQUksU0FBUyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUM1RCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7O0dBR0c7QUFDSCxNQUFNLDRCQUE0QixHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUU7SUFDakQsSUFBSSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFdEMsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUE7SUFDcEQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBRXBDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtJQUVwRSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztRQUN6RixJQUFJLElBQUksSUFBSSxDQUFBO0lBQ2QsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyxDQUFBO0FBRUQsbUVBQW1FO0FBQ25FLE1BQU0sVUFBVyxTQUFRLGNBQWM7SUFDckMsTUFBTSxDQUFDLFlBQVksR0FBRztRQUNwQixhQUFhLEVBQUUsS0FBSztRQUNwQixLQUFLLEVBQUUsS0FBSztRQUNaLGlCQUFpQixFQUFFLE1BQU07UUFDekIsUUFBUSxFQUFFLEtBQUs7UUFDZixhQUFhLEVBQUUsSUFBSTtRQUNuQixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxJQUFJO1FBQ2IsZUFBZSxFQUFFLElBQUk7UUFDckIsYUFBYSxFQUFFLElBQUk7UUFDbkIsWUFBWSxFQUFFLElBQUk7UUFDbEIsTUFBTSxFQUFFLEtBQUs7UUFDYixvQkFBb0IsRUFBRSxTQUFTO1FBQy9CLFdBQVcsRUFBRSxLQUFLO0tBQ25CLENBQUE7SUFFRCxNQUFNLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQztRQUNoQyxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDM0IsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQzNCLGFBQWEsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVU7UUFDeEMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQ2hDLFlBQVksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxLQUFLO1FBQzlCLHdCQUF3QixFQUFFLFNBQVMsQ0FBQyxLQUFLO1FBQ3pDLEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVU7UUFDaEMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQ2xCLEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTTtRQUN2QixpQkFBaUIsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvRCxRQUFRLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVO1FBQ25DLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTtRQUN0QixhQUFhLEVBQUUsU0FBUyxDQUFDLElBQUk7UUFDN0IsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQ3RCLFFBQVEsRUFBRSxTQUFTLENBQUMsSUFBSTtRQUN4QixhQUFhLEVBQUUsU0FBUyxDQUFDLElBQUk7UUFDN0IsT0FBTyxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQ3ZCLGVBQWUsRUFBRSxTQUFTLENBQUMsSUFBSTtRQUMvQixlQUFlLEVBQUUsU0FBUyxDQUFDLElBQUk7UUFDL0IsYUFBYSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQzdCLE9BQU8sRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDO1lBQzNCLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDaEMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxJQUFJO2dCQUN2QixjQUFjLEVBQUUsU0FBUyxDQUFDLElBQUk7Z0JBQzlCLFFBQVEsRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDeEIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN0QixLQUFLLEVBQUUsU0FBUyxDQUFDLElBQUk7Z0JBQ3JCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDcEIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVU7YUFDNUUsQ0FBQyxDQUFDO1lBQ0gsU0FBUyxDQUFDLElBQUk7U0FDZixDQUFDLENBQUMsVUFBVTtRQUNiLGVBQWUsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVU7UUFDMUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVTtRQUN4QyxZQUFZLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDOUIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQzNCLHVCQUF1QixFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQ3pDLDRCQUE0QixFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQzlDLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVU7UUFDakMsb0JBQW9CLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDdEMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQ3hCLE9BQU8sRUFBRSxTQUFTLENBQUMsTUFBTTtRQUN6QixhQUFhLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQy9DLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVU7WUFDakMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVTtZQUNsQyxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1NBQ25DLENBQUMsQ0FBQztRQUNILFdBQVcsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVU7UUFDdEMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLO0tBQ3hCLENBQUMsQ0FBQTtJQUVGLHVDQUF1QyxHQUFHLEtBQUssQ0FBQTtJQUMvQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7SUFDeEIsY0FBYyxHQUFHLFNBQVMsRUFBRSxDQUFBO0lBQzVCLDBCQUEwQixHQUFHLENBQUMsQ0FBQTtJQUM5Qiw0QkFBNEIsR0FBRyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDcEQsbUJBQW1CLEdBQUcsU0FBUyxFQUFFLENBQUE7SUFDakMsWUFBWSxHQUFHLFNBQVMsRUFBRSxDQUFBO0lBQzFCLDhCQUE4QixHQUFHLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN0RCwyQkFBMkIsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsV0FBVyxDQUFDO1FBQzVFLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEIsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztLQUN2QixDQUFDLENBQUE7SUFDRixnQ0FBZ0MsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsV0FBVyxDQUFDO1FBQ2pGLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEIsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNyQixDQUFDLENBQUE7SUFDRiwrQkFBK0IsR0FBRztRQUNoQyxFQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0NBQWdDLEVBQUM7UUFDbkQsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixFQUFDO0tBQzFDLENBQUE7SUFDRCxvQkFBb0IsR0FBRyxLQUFLLENBQUE7SUFDNUIsdUJBQXVCLEdBQUcsR0FBRyxFQUFFO1FBQzdCLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUMvRCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtRQUV2RSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsRUFBQyxXQUFXLEVBQUUsZUFBZSxFQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQTtJQUM5RyxDQUFDLENBQUE7SUFDRCw0QkFBNEIsR0FBRyxHQUFHLEVBQUU7UUFDbEMsTUFBTSxFQUFDLFdBQVcsRUFBRSxlQUFlLEVBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLENBQUE7UUFDeEUsSUFBSSxPQUFPLFdBQVcsSUFBSSxVQUFVLElBQUksT0FBTyxlQUFlLElBQUksVUFBVTtZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRXpGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLEVBQUU7WUFDcEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjO1lBQ3JCLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCO1lBQ3hCLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYTtZQUNwQixJQUFJLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtZQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtZQUMzQixJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFDYixJQUFJLENBQUMsQ0FBQyxDQUFDLHNCQUFzQjtZQUM3QixJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtZQUN2QixJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVU7WUFDakIsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7WUFDeEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZO1lBQ25CLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNYLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO1lBQ3ZCLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYztZQUNyQixJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVE7WUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVU7WUFDakIsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ2hCLElBQUksQ0FBQyxDQUFDLENBQUMscUJBQXFCO1lBQzVCLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTztZQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVTtTQUNsQixDQUFDLENBQUE7SUFDSixDQUFDLENBQUE7SUFDRCxxQkFBcUIsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLE1BQU0sR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDaEgsZUFBZSxHQUFHLEVBQUUsQ0FBQTtJQUNwQixrQkFBa0IsR0FBRyxTQUFTLEVBQUUsQ0FBQTtJQUNoQyxrQkFBa0IsR0FBRyxTQUFTLEVBQUUsQ0FBQTtJQUNoQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQzFDLFdBQVcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUM1QyxZQUFZLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUE7SUFDOUMsOEJBQThCO0lBQzlCLEtBQUssR0FBRztRQUNOLGNBQWMsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUU7UUFDNUMscUJBQXFCLEVBQUUsSUFBSTtRQUMzQixpQkFBaUIsRUFBRSxJQUFJO1FBQ3ZCLE1BQU0sRUFBRSxJQUFJO1FBQ1osYUFBYSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtRQUMxQywyQkFBMkIsRUFBRSxDQUFDO1FBQzlCLG9CQUFvQixFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLENBQUM7UUFDUCxnQkFBZ0IsRUFBRSxLQUFLO1FBQ3ZCLGNBQWMsRUFBRSxHQUFHO1FBQ25CLFFBQVEsRUFBRSxJQUFJO1FBQ2QsTUFBTSxFQUFFLEtBQUs7UUFDYixzQkFBc0IsRUFBRSxJQUFJO1FBQzVCLGdCQUFnQixFQUFFLFNBQVM7UUFDM0IsVUFBVSxFQUFFLFNBQVM7UUFDckIsaUJBQWlCLEVBQUUsU0FBUztRQUM1QixZQUFZLEVBQUUsU0FBUztRQUN2QixVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJO1FBQzdFLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDM0UsVUFBVSxFQUFFLElBQUk7UUFDaEIsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUU7S0FDL0IsQ0FBQTtJQUVELHlCQUF5QjtJQUN6QixjQUFjLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFNUM7Ozs7T0FJRztJQUNILFFBQVEsR0FBRyxDQUFDLFlBQVksRUFBRSxPQUFPLEdBQUcsU0FBUyxFQUFFLEVBQUU7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxPQUFNO1FBRWxDLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDYixJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQ2xCLENBQUE7UUFFRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFBO1FBRXJGLElBQUksYUFBYSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLFlBQVksRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQzVELENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsWUFBWSxFQUFFLENBQUMsQ0FBQTtRQUM3QyxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsS0FBSztRQUNILE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQTtRQUVoRCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVWLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDckMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN0QyxJQUFJLE9BQU8sS0FBSyxJQUFJLFdBQVcsRUFBRSxDQUFDO29CQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUE7Z0JBQ3pELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxJQUFJLE9BQU8sTUFBTSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFFekYsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDbEUsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO1FBQzNFLGdCQUFnQixDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1FBQzVFLGdCQUFnQixDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO1FBRTdFLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUNoRCxtQkFBbUIsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUs7Z0JBQzNDLG9CQUFvQixFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSztnQkFDN0MsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYTtnQkFDbkMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUTtnQkFDekIsV0FBVyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTzthQUNyRixDQUFDLENBQUE7UUFFRixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLHVDQUF1QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDckYsSUFBSSxDQUFDLHVDQUF1QyxHQUFHLEtBQUssQ0FBQTtnQkFDcEQsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLENBQUE7WUFDL0MsQ0FBQztRQUNILENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsdUNBQXVDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUE7UUFFcEYsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7WUFFM0YsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUMxSSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQTtZQUNsQyxDQUFDO1FBQ0gsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ3pCLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU87UUFDdEIsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsS0FBSyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDL0MsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLHFCQUFxQjtRQUNuQixNQUFNLEVBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBQ3hELE1BQU0sRUFBQyxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRXhCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFBO1FBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFFNUQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUMsRUFBRSxFQUFFLENBQ2hDLENBQUMsWUFBWSxJQUFJLEtBQUssSUFBSSxZQUFZLENBQUM7WUFDckMsQ0FBQyxhQUFhLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQ25DLENBQUE7SUFDSCxDQUFDO0lBRUQsbURBQW1EO0lBQ25ELG9CQUFvQjtRQUNsQixNQUFNLEVBQUMsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUV4QixJQUFJLE9BQU8sT0FBTyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sU0FBUyxDQUFBO1FBQ2xCLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxPQUFPLE9BQU8sQ0FBQTtRQUNoQixDQUFDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsT0FBTyxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQy9ELENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsYUFBYSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQTtJQUV0Qyx5QkFBeUI7SUFDekIsb0JBQW9CO1FBQ2xCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsSUFBSSxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFDckQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixJQUFJLE9BQU87WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUVyRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxJQUFJLHdCQUF3QixDQUFBO0lBQ25FLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FBQyxNQUFNO1FBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBQyxDQUFBO1FBRW5ELElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDNUMsT0FBTztnQkFDTCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87Z0JBQ3ZCLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtnQkFDN0IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7YUFDMUIsQ0FBQTtRQUNILENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUN0RSxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILGVBQWUsQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBQztRQUNuRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxHQUFHLENBQUM7WUFBRSxPQUFPLFFBQVEsQ0FBQTtRQUU5RCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUE7UUFDeEIsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEYsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFBO1FBQ3ZCLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDekYsQ0FBQztJQUVELCtDQUErQztJQUMvQyxjQUFjO1FBQ1osT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUE7SUFDckYsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixVQUFVO1FBQ1IsT0FBTyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQzVGLENBQUM7SUFFRCwrQ0FBK0M7SUFDL0MsVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFBO0lBRTlFLHNDQUFzQztJQUN0QyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFbkgsZ0VBQWdFO0lBQ2hFLGlCQUFpQixHQUFHLEdBQUcsRUFBRTtRQUN2QixJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksV0FBVyxFQUFFLENBQUM7WUFDdEUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsT0FBTyxFQUFFLENBQUE7WUFFekUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RFLHNDQUFzQztnQkFDdEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO2dCQUVqQixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQTtvQkFFckUsSUFBSSxNQUFNO3dCQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQ2pDLENBQUM7Z0JBRUQsT0FBTyxNQUFNLENBQUE7WUFDZixDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2hFLHNDQUFzQztnQkFDdEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO2dCQUVqQixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2xDLE1BQU0sTUFBTSxHQUNWLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7d0JBQzVELElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQTtvQkFFL0QsSUFBSSxNQUFNO3dCQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQ2pDLENBQUM7Z0JBRUQsT0FBTyxNQUFNLENBQUE7WUFDZixDQUFDO2lCQUFNLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDbkQsbUNBQW1DO1lBQ3JDLENBQUM7aUJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUE7WUFDaEQsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFBO0lBQzlCLENBQUMsQ0FBQTtJQUVELHNDQUFzQztJQUN0QyxzQkFBc0I7UUFDcEIsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQzFELENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUUvQyxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU8sRUFBRSxDQUFBO1FBRTlCLE9BQU8sY0FBYzthQUNsQixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7YUFDOUIsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssSUFBSSxXQUFXLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBRXJHLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUE7UUFFbkcsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtnQkFDNUQsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7Z0JBQzlDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxZQUFZLElBQUksYUFBYSxJQUFJLHdCQUF3QixDQUFDO2dCQUNwRixXQUFXLEVBQUUsT0FBTyxPQUFPO2FBQzVCLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxDQUFDLFlBQVksSUFBSSxhQUFhLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLE9BQU8sT0FBTyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzFILElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxDQUFBO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUVuQixJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7WUFFakMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxRQUFRLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQTtZQUMvQixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsRUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxDQUFDLENBQUE7WUFDcEcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQTtRQUNuQyxDQUFDO1FBRUQsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUE7SUFDckMsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixvQkFBb0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsNkJBQTZCO1lBQUUsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUE7UUFDNUUsa0JBQWtCLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3BELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNqRCxJQUFJLENBQUMsOEJBQThCLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDbkQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7SUFDekIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwyQkFBMkIsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFO1FBQzdDLElBQUksWUFBWSxJQUFJLFlBQVksS0FBSyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDckIsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELDJDQUEyQztJQUMzQyxNQUFNO1FBQ0osTUFBTSxFQUFDLGNBQWMsRUFBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUE7UUFDaEMsTUFBTSxFQUFDLFdBQVcsRUFBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDNUIsTUFBTSxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQTtRQUMxRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDeEUsTUFBTSxFQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDekMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFDL0MsTUFBTSxFQUFFLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQy9CLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUE7UUFFdEQsTUFBTSwwQkFBMEIsR0FBRyxFQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDeEUsYUFBYSxFQUFFLEtBQUs7Z0JBQ3BCLFVBQVUsRUFBRSxRQUFRO2dCQUNwQixlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU07Z0JBQ2pELFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDN0MsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLEtBQUssRUFBRSxNQUFNO2dCQUNiLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUNwRCxVQUFVLEVBQUUsQ0FBQztnQkFDYixhQUFhLEVBQUUsQ0FBQztnQkFDaEIsV0FBVyxFQUFFLENBQUM7YUFDZixFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBQyxDQUFBO1FBRWxCLElBQUksTUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNsQyw4RkFBOEY7WUFDOUYsMEJBQTBCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO1lBRWpELE1BQU0sZ0JBQWdCLEdBQUcsMEJBQTBCLENBQUMsWUFBWSxDQUFBO1lBRWhFLElBQUksZ0JBQWdCLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ2hDLDBCQUEwQixDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQTtnQkFDbEQsMEJBQTBCLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFBO2dCQUNuRCwwQkFBMEIsQ0FBQyx1QkFBdUIsR0FBRyxnQkFBZ0IsQ0FBQTtnQkFDckUsMEJBQTBCLENBQUMsc0JBQXNCLEdBQUcsZ0JBQWdCLENBQUE7Z0JBRXBFLE9BQU8sMEJBQTBCLENBQUMsWUFBWSxDQUFBO1lBQ2hELENBQUM7aUJBQU0sSUFBSSxnQkFBZ0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDdkMsMEJBQTBCLENBQUMsbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUE7Z0JBQ2pFLDBCQUEwQixDQUFDLG9CQUFvQixHQUFHLGdCQUFnQixDQUFBO2dCQUNsRSwwQkFBMEIsQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUE7Z0JBQ3RELDBCQUEwQixDQUFDLHNCQUFzQixHQUFHLENBQUMsQ0FBQTtnQkFFckQsT0FBTywwQkFBMEIsQ0FBQyxZQUFZLENBQUE7WUFDaEQsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLENBQ0wsb0JBQUMsSUFBSSxJQUNILE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFO2dCQUNyQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtnQkFDcEQsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLFNBQVMsRUFBRSxhQUFhO2dCQUN4QixFQUFFO2dCQUNGLE1BQU07Z0JBQ04sZ0JBQWdCO2dCQUNoQixTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxvQkFBb0I7Z0JBQ3RDLE9BQU8sRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ2hDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFDdEksS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQzlCLE1BQU0sRUFBQyxhQUFhO1lBRXBCLG9CQUFDLFNBQVMsSUFDUixRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsRUFDekMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUNoQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFDL0IsS0FBSyxFQUFFLDBCQUEwQixFQUNqQyxNQUFNLEVBQUMsOEJBQThCO2dCQUVyQyxvQkFBQyxJQUFJLElBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixLQUFLLEVBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsQ0FBQyxFQUN4SCxNQUFNLEVBQUMsOEJBQThCO29CQUVwQyxNQUFNLElBQUksQ0FBQyxrQkFBa0I7d0JBQzVCLElBQUksQ0FBQyxlQUFlLEVBQUU7b0JBRXZCLENBQUMsQ0FBQyxNQUFNLElBQUksa0JBQWtCLENBQUM7d0JBQzlCOzRCQUNHLGNBQWMsQ0FBQyxNQUFNLElBQUksQ0FBQztnQ0FDekIsb0JBQUMsSUFBSSxJQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixLQUFLLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDLElBQzdHLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQzlDOzRCQUVSLGNBQWMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSztnQ0FDakQ7b0NBQ0csTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDO3dDQUNoQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQ3RELCtCQUNFLEVBQUUsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQ3hCLEdBQUcsRUFBRSxpQkFBaUIsS0FBSyxFQUFFLEVBQzdCLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsRUFDeEMsSUFBSSxFQUFDLFFBQVEsRUFDYixLQUFLLEVBQUUsS0FBSyxHQUNaLENBQ0gsQ0FBQztvQ0FFSCxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUM7d0NBQ2pCLCtCQUNFLEVBQUUsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQ3hCLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsRUFDeEMsSUFBSSxFQUFDLFFBQVEsRUFDYixLQUFLLEVBQUMsRUFBRSxHQUNSLENBRUg7NEJBRUosY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQ3BDLG9CQUFDLElBQUksSUFDSCxHQUFHLEVBQUUsYUFBYSxDQUFDLEdBQUcsSUFBSSxpQkFBaUIsYUFBYSxDQUFDLEtBQUssRUFBRSxFQUNoRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsRUFBQyxXQUFXLEVBQUUsQ0FBQyxFQUFDLENBQUMsRUFDekQsTUFBTSxFQUFDLDRCQUE0QjtnQ0FFbEMsYUFBYSxDQUFDLElBQUksSUFBSSxPQUFPO29DQUM1QixvQkFBQyxJQUFJLElBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixLQUFLLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyxDQUFDO3dDQUN2RyxvQkFBQyxJQUFJLElBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsSUFDbkQsYUFBYSxDQUFDLElBQUksQ0FDZCxDQUNGO2dDQUVSLGFBQWEsQ0FBQyxJQUFJLElBQUksT0FBTztvQ0FDNUI7d0NBQ0csUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLElBQUksNEJBQTRCLENBQUMsSUFBSSxDQUFDOzRDQUN6RCwrQkFDRSxFQUFFLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUN4QixJQUFJLEVBQUUsNEJBQTRCLENBQUMsSUFBSSxDQUFDLEVBQ3hDLElBQUksRUFBQyxRQUFRLEVBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLEdBQ25DO3dDQUVILElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUM1QyxDQUVBLENBQ1IsQ0FDQSxDQUVBO2dCQUNQLG9CQUFDLElBQUksSUFDSCxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMscUJBQXFCLEtBQUs7d0JBQ3hFLFVBQVUsRUFBRSxRQUFRO3dCQUNwQixjQUFjLEVBQUUsUUFBUTt3QkFDeEIsTUFBTSxFQUFFLE1BQU07d0JBQ2QsVUFBVSxFQUFFLE1BQU07d0JBQ2xCLFdBQVcsRUFBRSxDQUFDO3FCQUNmLENBQUMsRUFDRixNQUFNLEVBQUMsK0JBQStCO29CQUV0QyxvQkFBQyxlQUFlLElBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLEtBQUssRUFBQyxRQUFRLEVBQUUsRUFBRSxFQUFDLENBQUMsR0FBSSxDQUNySSxDQUNHO1lBQ1osb0JBQUMsSUFBSSxJQUNILFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUNyQyxHQUFHLEVBQUUsY0FBYyxFQUNuQixNQUFNLEVBQUMsMkJBQTJCLEdBQ2xDO1lBQ0QsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYTtnQkFDN0Isb0JBQUMsTUFBTSxJQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQzVCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUNqQjtZQUVWLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYTtnQkFDOUIsb0JBQUMsSUFBSSxRQUNGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUNuQixDQUVKLENBQ1IsQ0FBQTtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlLENBQUMsRUFBQyxrQkFBa0IsR0FBRyxLQUFLLEVBQUMsR0FBRyxFQUFFO1FBQy9DLE1BQU0sa0JBQWtCLEdBQUcsa0JBQWtCLElBQUksaUJBQWlCLEVBQUUsQ0FBQTtRQUVwRSxPQUFPLENBQ0wsb0JBQUMsU0FBUyxJQUNSLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxFQUNsQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFDeEMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsRUFDbEQsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQy9CLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxtQkFBbUIsa0JBQWtCLEVBQUUsQ0FBQyxLQUFLO2dCQUM1RixLQUFLLEVBQUUsTUFBTTtnQkFDYixXQUFXLEVBQUUsQ0FBQztnQkFDZCxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDN0MsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ2xELE9BQU8sRUFBRSxDQUFDO2FBQ1gsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFDeEIsTUFBTSxFQUFDLDBCQUEwQixLQUM3QixJQUFJLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixHQUMvQixDQUNILENBQUE7SUFDSCxDQUFDO0lBRUQsOERBQThEO0lBQzlELGFBQWE7UUFDWCxNQUFNLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsd0JBQXdCLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQTtRQUU1RixJQUFJLHdCQUF3QjtZQUFFLE9BQU8sd0JBQXdCLENBQUE7UUFDN0QsSUFBSSxZQUFZO1lBQUUsT0FBTyxZQUFZLENBQUE7UUFDckMsSUFBSSxhQUFhO1lBQUUsT0FBTyxhQUFhLENBQUE7UUFFdkMsSUFBSSxTQUFTLElBQUksS0FBSyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUE7WUFFL0csT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQTtRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELHlCQUF5QjtJQUN6QixRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsS0FBSyxDQUFDLG9DQUFvQztRQUN4QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFFMUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFNO1FBRTFCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsc0NBQXNDLEVBQUUsRUFBQyxhQUFhLEVBQUMsQ0FBQyxDQUFBO1FBRWpHLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDdEMsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDakMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDMUIsTUFBTSxFQUFFLGFBQWE7U0FDdEIsQ0FBQyxDQUFBO1FBRUYsTUFBTSxFQUFDLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNqRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLDZDQUE2QyxFQUFFLEVBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFBO1FBRW5JLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNuRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVyxHQUFHLEtBQUssRUFBRSxFQUFDLElBQUksRUFBQyxHQUFHLEVBQUUsRUFBRSxFQUFFO1FBQ2xDLE1BQU0sRUFBQyxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUN4QyxNQUFNLFNBQVMsR0FBRyxFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQTtRQUNuRCxJQUFJLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQTtRQUN2QyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRTtnQkFDdEQsSUFBSTtnQkFDSixTQUFTO2dCQUNULFdBQVc7Z0JBQ1gsV0FBVyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxPQUFPO2FBQy9ELENBQUMsQ0FBQTtRQUVGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzNCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDbkUsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3pFLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUMsQ0FBQyxDQUFBO1FBQ2hFLE1BQU0sRUFBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUV4RyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUNqRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQ0FBa0MsRUFBRTtvQkFDM0UsU0FBUztvQkFDVCwwQkFBMEIsRUFBRSxJQUFJLENBQUMsMEJBQTBCO29CQUMzRCxhQUFhO29CQUNiLFdBQVc7aUJBQ1osQ0FBQyxDQUFBO1lBRUYsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQTtRQUM3RSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7UUFDakgsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksZ0JBQWdCLEdBQUcsQ0FBQztZQUN6RyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUM7WUFDMUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUVSLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDWixhQUFhO1lBQ2IsMkJBQTJCLEVBQUUsU0FBUztZQUN0QyxJQUFJLEVBQUUsWUFBWTtZQUNsQixjQUFjLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQztZQUNwQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDL0QsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUM1RCxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQyxDQUFBO1FBRWhFLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzdELGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQztnQkFDOUMsWUFBWTtnQkFDWixnQkFBZ0I7Z0JBQ2hCLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUk7YUFDNUQsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsRUFBQyxHQUFHLEVBQUUsWUFBWSxFQUFDO1FBQ2xDLElBQUksWUFBWSxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNqQyxPQUFPLENBQ0wsb0JBQUMsV0FBVyxJQUNWLEdBQUcsRUFBRSxHQUFHLEVBQ1IsTUFBTSxFQUFFLFlBQVksRUFDcEIsWUFBWSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsRUFDL0MsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxFQUN6RCxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsR0FDekMsQ0FDSCxDQUFBO1FBQ0gsQ0FBQztRQUVELE9BQU8sQ0FDTCxvQkFBQyxNQUFNLElBQ0wsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEVBQ2xELElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUN0QyxHQUFHLEVBQUUsR0FBRyxFQUNSLE1BQU0sRUFBRSxZQUFZLEVBQ3BCLGVBQWUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFDeEMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFDekMsYUFBYSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUNwQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUMzRCw0QkFBNEIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLDRCQUE0QixHQUNyRSxDQUNILENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsR0FBRyxJQUFJLENBQUMsMEJBQTBCO1FBQ3BGLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFBO1FBQ25ELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixJQUFJLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFBO1FBQ3RILElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUU7Z0JBQy9ELFNBQVM7Z0JBQ1QsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLE1BQU07Z0JBQ2pDLFdBQVc7Z0JBQ1gsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLE1BQU07YUFDekMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsMkJBQTJCLEdBQUcsU0FBUyxDQUFBO1FBQzlDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQTtRQUNmLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQTtRQUMzQixJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7UUFDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsR0FBRyxDQUFDLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBRTtRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUE7UUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFBO1FBRWpDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQTtRQUNyQyxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUM5QixJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO1FBQ2hGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLHVCQUF1QixDQUFDLENBQUE7SUFDL0UsQ0FBQyxDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUMxQixNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO1FBQzNFLE1BQU0sUUFBUSxHQUFHLEVBQUMsaUJBQWlCLEVBQUMsQ0FBQTtRQUVwQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLGlCQUFpQixFQUFFLEtBQUssRUFBRSxDQUFDO1lBQzlDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFBO1FBQ2pELENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLG1CQUFtQixDQUFDLENBQUE7WUFFckUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxDQUFBO1lBQy9DLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQTtJQUVEOzs7T0FHRztJQUNILHdCQUF3QixHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUNuRixDQUFDLENBQUE7SUFFRCxzQkFBc0I7SUFDdEIsMEJBQTBCO1FBQ3hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLHVCQUF1QixDQUFDLENBQUE7UUFDN0UsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLG1CQUFtQixDQUFDLENBQUE7SUFDdkUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsbUJBQW1CLENBQUMsR0FBRyxFQUFFLFFBQVE7UUFDL0IsSUFBSSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUs7WUFBRSxPQUFNO1FBRWhDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUE7UUFDM0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLE9BQU8sQ0FBQyxlQUFlLElBQUksVUFBVTtZQUFFLE9BQU07UUFFcEUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25ELE1BQU0sY0FBYyxHQUFHLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFDLENBQUE7WUFFakQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQztnQkFBRSxPQUFNO1lBRTlDLHVDQUF1QztZQUN2QyxNQUFNLFFBQVEsR0FBRztnQkFDZixDQUFDLFFBQVEsQ0FBQyxFQUFFLGNBQWM7YUFDM0IsQ0FBQTtZQUVELElBQUksUUFBUSxJQUFJLG1CQUFtQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUM5RCxRQUFRLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQTtZQUMvQixDQUFDO1lBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDekQsT0FBTTtZQUNSLENBQUM7WUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQzNCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO29CQUNuRCxJQUFJLENBQUMsc0NBQXNDLEVBQUUsQ0FBQTtnQkFDL0MsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZUFBZSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDdEIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ2xCLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQTtRQUVuQixNQUFNLEVBQUMsTUFBTSxFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN2QixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUVyRSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ3JCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ3BCLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCxpQ0FBaUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFFdEU7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLEVBQUMsT0FBTyxFQUFDLEdBQUcsRUFBRTtRQUN6QixNQUFNLGFBQWEsR0FBRyxPQUFPLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFDekQsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3JDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLEVBQUMsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFBO1FBRTFHLHlFQUF5RTtRQUN6RSxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFeEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQywrQkFBK0IsQ0FBQyxFQUFDLGFBQWEsRUFBQyxDQUFDLENBQUE7WUFDckQsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBQyxhQUFhLEVBQUMsQ0FBQyxDQUFBO0lBQzFDLENBQUM7SUFFRDs7O09BR0c7SUFDSCwrQkFBK0IsQ0FBQyxFQUFDLGFBQWEsRUFBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxvQkFBb0I7WUFBRSxPQUFNO1FBRXJDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUE7UUFDaEMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ2pELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUVuRCxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ2hCLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFO2dCQUNqRCxRQUFRLEVBQUUsRUFBRTtnQkFDWixNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNoQyxPQUFPLEVBQUUsQ0FBQztnQkFDVixlQUFlLEVBQUUsSUFBSTthQUN0QixDQUFDO1lBQ0YsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLEVBQUU7Z0JBQ25ELFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQy9CLE9BQU8sRUFBRSxDQUFDO2dCQUNWLGVBQWUsRUFBRSxJQUFJO2FBQ3RCLENBQUM7U0FDSCxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUE7WUFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQTtRQUMxQyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FBQyxFQUFDLGFBQWEsRUFBQztRQUNoQyxJQUFJLENBQUMsdUNBQXVDLEdBQUcsS0FBSyxDQUFBO1FBQ3BELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBRXZCLElBQUksQ0FBQyxRQUFRLENBQ1g7WUFDRSxNQUFNLEVBQUUsSUFBSTtZQUNaLGFBQWEsRUFBRSxTQUFTO1lBQ3hCLE1BQU0sRUFBRSxLQUFLO1lBQ2Isc0JBQXNCLEVBQUUsSUFBSTtZQUM1QixpQkFBaUIsRUFBRSxRQUFRO1lBQzNCLElBQUksRUFBRSxDQUFDO1lBQ1AsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixjQUFjLEVBQUUsR0FBRztZQUNuQixRQUFRLEVBQUUsSUFBSTtZQUNkLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLEVBQ0QsR0FBRyxFQUFFO1lBQ0gsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBQyxDQUFDLENBQUE7UUFDckksQ0FBQyxDQUNGLENBQUE7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBQyxPQUFPLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQTtRQUN0RCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ3BDLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsNkJBQTZCO1FBQzNCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUE7UUFDakMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ2pELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNuRCxJQUFJLENBQUMsNEJBQTRCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzdDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakQsQ0FBQztJQUVELHNCQUFzQjtJQUN0QiwrQkFBK0I7UUFDN0IsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUNoQixRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtnQkFDakQsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDaEMsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsZUFBZSxFQUFFLElBQUk7YUFDdEIsQ0FBQztZQUNGLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFO2dCQUNuRCxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLEVBQUUsQ0FBQztnQkFDVixlQUFlLEVBQUUsSUFBSTthQUN0QixDQUFDO1NBQ0gsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ1osQ0FBQztJQUVELHdCQUF3QjtJQUN4QixhQUFhLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUE7SUFFaEQsc0JBQXNCO0lBQ3RCLG9CQUFvQixHQUFHLEdBQUcsRUFBRTtRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQTtRQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQTtRQUVoRCxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNqQixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDZixDQUFDO2FBQU0sSUFBSSxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDakMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsQ0FBQyxDQUFBO1FBQ2xDLENBQUM7YUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQztnQkFDSCxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQTtZQUNsQixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZiw2REFBNkQ7WUFDL0QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFO1FBQ2xDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsRUFBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUN0RyxJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQTtRQUVqQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGlDQUFpQyxDQUFDLENBQUE7UUFDMUYsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsRUFBRSxDQUFDLGlDQUFpQyxFQUFFLENBQUE7UUFDN0MsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELHNCQUFzQjtJQUN0QixXQUFXO1FBQ1QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtRQUN0RCxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFckMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7Z0JBQ3RELG1CQUFtQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sSUFBSSxDQUFDO2dCQUMxRCxrQkFBa0I7Z0JBQ2xCLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU07YUFDN0IsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUE7UUFDekIsSUFBSSxDQUFDLHVDQUF1QyxHQUFHLENBQUMsa0JBQWtCLENBQUE7UUFFbEUsd0VBQXdFO1FBQ3hFLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QyxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUE7UUFDdEMsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQ1g7WUFDRSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNO1lBQ3hFLE1BQU0sRUFBRSxJQUFJO1lBQ1osZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTztZQUN4RCxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO1lBQzVELFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEtBQUs7WUFDOUUsSUFBSSxFQUFFLENBQUM7WUFDUCxnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLGNBQWMsRUFBRSxHQUFHO1lBQ25CLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDN0UsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUM1RSxFQUNELEdBQUcsRUFBRTtZQUNILElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO2dCQUNyQixJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQTtZQUN4QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUE7Z0JBQ2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtZQUN2QixDQUFDO1lBRUQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUE7WUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFBO1FBQzdCLENBQUMsQ0FDRixDQUFBO1FBRUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ3RDLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsY0FBYyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFBO0lBRTNFLHNCQUFzQjtJQUN0QixjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsT0FBTTtRQUVqQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFBO1FBQzVCLHFCQUFxQixFQUFFLENBQUE7SUFDekIsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixnQkFBZ0I7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE9BQU07UUFFbEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQTtRQUM3QixxQkFBcUIsRUFBRSxDQUFBO0lBQ3pCLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNyQixPQUFNLENBQUMscUNBQXFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7WUFDOUIsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUV2QixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFDOUQsSUFBSSxDQUFDLHVDQUF1QyxHQUFHLElBQUksQ0FBQTtRQUNuRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLDRCQUE0QjtRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNO1lBQUUsT0FBTTtRQUUxQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7WUFDaEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixJQUFJLE9BQU87Z0JBQUUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7WUFDdEUsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7WUFDOUIsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUN2QixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLHNDQUFzQztRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNO1lBQUUsT0FBTTtRQUMxQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7WUFDOUIsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLEVBQUMsWUFBWSxFQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQTtRQUM5QixNQUFNLEVBQUMsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQzlELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQTtRQUVsRCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUs7WUFDckMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEdBQUc7WUFDeEIsQ0FBQyxDQUFDLE9BQU8scUJBQXFCLEVBQUUsR0FBRyxJQUFJLFFBQVEsSUFBSSxPQUFPLHFCQUFxQixFQUFFLE1BQU0sSUFBSSxRQUFRO2dCQUNqRyxDQUFDLENBQUMscUJBQXFCLENBQUMsR0FBRyxHQUFHLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUM5RCxDQUFDLENBQUMsU0FBUyxDQUFBO1FBRWYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRSxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFDLENBQUMsQ0FBQTtZQUN2SSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQTtZQUNqQyxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sMEJBQTBCLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQTtRQUM3RSxNQUFNLHNCQUFzQixHQUFHLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRXJFLElBQUksc0JBQXNCLEdBQUcsMEJBQTBCLEVBQUUsQ0FBQztZQUN4RCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRSxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO1lBQ3hHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsd0NBQXdDLEVBQUUsRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQTtZQUN4RyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQTtRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtJQUN0Qix1QkFBdUI7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUFFLE9BQU07UUFFMUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixJQUFJLE9BQU8sQ0FBQTtRQUUzRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUE7UUFDdEMsQ0FBQztRQUVELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUVyQixJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ1osTUFBTSxFQUFFLElBQUk7WUFDWixNQUFNLEVBQUUsSUFBSTtZQUNaLGdCQUFnQixFQUFFLE9BQU87WUFDekIsaUJBQWlCLEVBQUUsU0FBUztZQUM1QixZQUFZLEVBQUUsU0FBUztTQUN4QixFQUFFLEdBQUcsRUFBRTtZQUNOLElBQUksZ0JBQWdCO2dCQUFFLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFBO1FBQzlELENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHNCQUFzQjtJQUN0Qix1QkFBdUI7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUFFLE9BQU07UUFFMUIsTUFBTSxFQUFDLGlCQUFpQixFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNsQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUE7UUFDbkUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7UUFFdkIsSUFBSSxDQUFDLFFBQVEsQ0FDWDtZQUNFLE1BQU0sRUFBRSxJQUFJO1lBQ1osZ0JBQWdCLEVBQUUsT0FBTztZQUN6QixpQkFBaUIsRUFBRSxTQUFTO1lBQzVCLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxLQUFLO1NBQ3ZDLEVBQ0QsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUM1QixDQUFBO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtJQUN0Qix1QkFBdUI7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUFFLE9BQU07UUFFMUIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO1FBQ25FLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQ1g7WUFDRSxNQUFNLEVBQUUsSUFBSTtZQUNaLGdCQUFnQixFQUFFLE9BQU87WUFDekIsaUJBQWlCLEVBQUUsUUFBUTtZQUMzQixZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLO1NBQzlDLEVBQ0QsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUM1QixDQUFBO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixpQkFBaUIsR0FBRyxHQUFHLEVBQUU7UUFDdkIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDdEYsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1FBQzNCLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCwwQkFBMEIsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUVwRSxzQkFBc0I7SUFDdEIsa0JBQWtCLEdBQUcsR0FBRyxFQUFFO1FBQ3hCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQ3ZGLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtZQUNyRixJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtZQUNuRixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFBRSxPQUFNO1lBRXZDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1FBQzNCLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCwyQkFBMkIsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUV0RSxzQkFBc0I7SUFDdEIscUJBQXFCLEdBQUcsR0FBRyxFQUFFO1FBQzNCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQzFGLDJFQUEyRTtRQUMzRSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ3JCLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCw4QkFBOEIsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3pDLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFBO1FBQ3hCLEtBQUssQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFBO1FBRXpCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUNyQixDQUFDLENBQUE7SUFFRCxpQ0FBaUMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQ3RELDRCQUE0QixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7UUFDeEMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSztRQUN4QyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLDhCQUE4QjtRQUM3RCx1QkFBdUIsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLDhCQUE4QjtLQUNoRSxDQUFDLENBQUE7SUFFRiw2QkFBNkI7SUFDN0Isb0JBQW9CO1FBQ2xCLE1BQU0sRUFBQyxVQUFVLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRTNCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFaEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNwQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLElBQUksRUFBRTtZQUNuQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRO1lBQ3pCLFVBQVU7U0FDWCxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRTVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUE7SUFDekMsQ0FBQztJQUVEOzs7T0FHRztJQUNILG1CQUFtQixDQUFDLFVBQVU7UUFDNUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQTtRQUNoQixNQUFNLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLEdBQUcsRUFBRSxRQUFRLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDdEYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7UUFFaEUsSUFBSSxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEIsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNmLENBQUM7WUFFRCxPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUM7UUFFRCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFVixNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUE7UUFDcEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFBO1FBQ2pELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxXQUFXLEdBQUcsVUFBVSxDQUFDLENBQUE7UUFFNUQsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDckIsS0FBSyxHQUFHLENBQUMsQ0FBQTtZQUNULEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDbkMsQ0FBQzthQUFNLElBQUksV0FBVyxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxHQUFHLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQTtZQUNwQixLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ3JDLENBQUM7UUFFRCxJQUFJLEtBQUssR0FBRyxDQUFDO1lBQUUsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFFNUMsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2YsQ0FBQztRQUVELElBQUksR0FBRyxHQUFHLFVBQVUsR0FBRyxDQUFDO1lBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBRXJELE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUVuQixPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxzQkFBc0IsQ0FBQyxVQUFVO1FBQy9CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUN2QyxNQUFNLFlBQVksR0FBRyxRQUFRLFVBQVUsT0FBTyxVQUFVLEVBQUUsQ0FBQTtRQUUxRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsMkJBQTJCLEVBQUU7WUFDakQsWUFBWSxFQUFFLFlBQVk7WUFDMUIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsVUFBVTtTQUNYLENBQUMsSUFBSSxZQUFZLENBQUE7SUFDcEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILG9CQUFvQixDQUFDLFVBQVU7UUFDN0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtZQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUE7UUFFekQsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixpQkFBaUIsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQzNCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO1FBQzlDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsRUFBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7UUFFaEcsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFNO1FBRXZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBRXBFLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtZQUNwRCxPQUFNO1FBQ1IsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQ1gsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUMsRUFDbEQsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FDNUMsQ0FBQTtJQUNILENBQUMsQ0FBQTtJQUVELG9EQUFvRDtJQUNwRCx1QkFBdUIsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2xDLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFBO1FBQ3hCLEtBQUssQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFBO1FBRXpCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDbEQsQ0FBQyxDQUFBO0lBRUQsb0RBQW9EO0lBQ3BELHVCQUF1QixHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDbEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUE7UUFDeEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUE7UUFFekIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNsRCxDQUFDLENBQUE7SUFFRCxzQkFBc0I7SUFDdEIsc0JBQXNCLEdBQUcsR0FBRyxFQUFFO1FBQzVCLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFBO1FBQzlCLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtJQUN0RCxDQUFDLENBQUE7SUFFRCw0QkFBNEI7SUFDNUIsdUJBQXVCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUE7SUFDL0IsQ0FBQyxDQUFBO0lBRUQsb0RBQW9EO0lBQ3BELHFCQUFxQixHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDaEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUE7UUFDeEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUE7UUFFekIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUE7UUFDOUMsTUFBTSxRQUFRLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUE7UUFDOUQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtRQUMvRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBRTNGLElBQUksVUFBVSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7WUFDaEYsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ1osZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixjQUFjLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUM3QyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUE7SUFFRCxvREFBb0Q7SUFDcEQsdUJBQXVCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNsQyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQTtRQUN4QixLQUFLLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQTtRQUV6QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtRQUU5QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7WUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO1lBQ3BELE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUE7UUFFOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQTtZQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUE7WUFDcEQsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7SUFDbEYsQ0FBQyxDQUFBO0lBRUQsb0RBQW9EO0lBQ3BELHdCQUF3QixHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDbkMsSUFBSSxLQUFLLEVBQUUsR0FBRyxLQUFLLE9BQU87WUFBRSxPQUFNO1FBRWxDLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDeEMsQ0FBQyxDQUFBO0lBRUQsZ0RBQWdEO0lBQ2hELGtCQUFrQjtRQUNoQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtRQUU5QyxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFL0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3hDLE1BQU0sWUFBWSxHQUFHLFdBQVcsSUFBSSxDQUFDLENBQUE7UUFDckMsTUFBTSxZQUFZLEdBQUcsV0FBVyxJQUFJLFVBQVUsQ0FBQTtRQUU5QyxPQUFPLENBQ0wsb0JBQUMsSUFBSSxJQUNILEtBQUssRUFBRSxNQUFNLENBQUMsbUJBQW1CLEtBQUs7Z0JBQ3BDLGNBQWMsRUFBRSxTQUFTO2dCQUN6QixjQUFjLEVBQUUsQ0FBQztnQkFDakIsT0FBTyxFQUFFLENBQUM7YUFDWCxFQUNELE1BQU0sRUFBQyxnQ0FBZ0M7WUFFdkMsb0JBQUMsSUFBSSxJQUNILEtBQUssRUFBRSxNQUFNLENBQUMsZ0JBQWdCLEtBQUssRUFBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBQyxFQUNoSCxNQUFNLEVBQUMsK0JBQStCO2dCQUV0QyxvQkFBQyxTQUFTLElBQ1IsUUFBUSxFQUFFLFlBQVksRUFDdEIsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLEVBQ3hDLEtBQUssRUFBRSxNQUFNLENBQUMsdUJBQXVCLFlBQVksRUFBRSxDQUFDLEtBQUs7d0JBQ3ZELFVBQVUsRUFBRSxRQUFRO3dCQUNwQixlQUFlLEVBQUUsU0FBUzt3QkFDMUIsV0FBVyxFQUFFLFNBQVM7d0JBQ3RCLFlBQVksRUFBRSxDQUFDO3dCQUNmLFdBQVcsRUFBRSxDQUFDO3dCQUNkLE1BQU0sRUFBRSxFQUFFO3dCQUNWLGNBQWMsRUFBRSxRQUFRO3dCQUN4QixPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQy9CLEtBQUssRUFBRSxFQUFFO3FCQUNWLEVBQ0QsTUFBTSxFQUFDLDZCQUE2QjtvQkFFcEMsb0JBQUMsZUFBZSxJQUNkLElBQUksRUFBQyxjQUFjLEVBQ25CLEtBQUssRUFBRSxNQUFNLENBQUMsaUJBQWlCLEtBQUssRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUMsR0FDcEUsQ0FDUTtnQkFDWixvQkFBQyxJQUFJLElBQ0gsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUU7d0JBQzVDLElBQUksRUFBRSxXQUFXO3FCQUNsQixFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsRUFDakIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsS0FBSzt3QkFDdEMsVUFBVSxFQUFFLFFBQVE7d0JBQ3BCLGVBQWUsRUFBRSxTQUFTO3dCQUMxQixXQUFXLEVBQUUsU0FBUzt3QkFDdEIsWUFBWSxFQUFFLEVBQUU7d0JBQ2hCLFdBQVcsRUFBRSxDQUFDO3dCQUNkLGNBQWMsRUFBRSxRQUFRO3dCQUN4QixRQUFRLEVBQUUsR0FBRzt3QkFDYixpQkFBaUIsRUFBRSxFQUFFO3dCQUNyQixlQUFlLEVBQUUsQ0FBQztxQkFDbkIsRUFDRCxNQUFNLEVBQUMsOEJBQThCO29CQUVyQyxvQkFBQyxTQUFTLElBQ1IsWUFBWSxFQUFDLFlBQVksRUFDekIsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMscUJBQXFCLEVBQ3JDLFlBQVksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUM3QyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsRUFDdkMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsc0JBQXNCLEVBQ3pDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLHdCQUF3QixFQUMzQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsRUFDaEQsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUN6QixpQkFBaUIsUUFDakIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxvQkFBb0IsS0FBSzs0QkFDckMsV0FBVyxFQUFFLENBQUM7NEJBQ2QsS0FBSyxFQUFFLFNBQVM7NEJBQ2hCLFFBQVEsRUFBRSxFQUFFOzRCQUNaLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTOzRCQUNsRCxPQUFPLEVBQUUsQ0FBQzs0QkFDVixTQUFTLEVBQUUsUUFBUTs0QkFDbkIsS0FBSyxFQUFFLEdBQUc7eUJBQ1gsRUFDRCxNQUFNLEVBQUMsOEJBQThCLEVBQ3JDLEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLEdBQzVDLENBQ0c7Z0JBQ1Asb0JBQUMsU0FBUyxJQUNSLFFBQVEsRUFBRSxZQUFZLEVBQ3RCLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUN4QyxLQUFLLEVBQUUsTUFBTSxDQUFDLHVCQUF1QixZQUFZLEVBQUUsQ0FBQyxLQUFLO3dCQUN2RCxVQUFVLEVBQUUsUUFBUTt3QkFDcEIsZUFBZSxFQUFFLFNBQVM7d0JBQzFCLFdBQVcsRUFBRSxTQUFTO3dCQUN0QixZQUFZLEVBQUUsQ0FBQzt3QkFDZixXQUFXLEVBQUUsQ0FBQzt3QkFDZCxNQUFNLEVBQUUsRUFBRTt3QkFDVixjQUFjLEVBQUUsUUFBUTt3QkFDeEIsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMvQixLQUFLLEVBQUUsRUFBRTtxQkFDVixFQUNELE1BQU0sRUFBQyw2QkFBNkI7b0JBRXBDLG9CQUFDLGVBQWUsSUFDZCxJQUFJLEVBQUMsZUFBZSxFQUNwQixLQUFLLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixLQUFLLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFDLEdBQ3BFLENBQ1EsQ0FDUDtZQUNQLG9CQUFDLElBQUksSUFDSCxLQUFLLEVBQUUsTUFBTSxDQUFDLGVBQWUsS0FBSztvQkFDaEMsYUFBYSxFQUFFLEtBQUs7b0JBQ3BCLFFBQVEsRUFBRSxNQUFNO29CQUNoQixjQUFjLEVBQUUsUUFBUTtvQkFDeEIsU0FBUyxFQUFFLENBQUM7aUJBQ2IsRUFDRCxNQUFNLEVBQUMsOEJBQThCLElBRXBDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDakQsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUM1QixPQUFPLENBQ0wsb0JBQUMsSUFBSSxJQUNILEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUNiLEtBQUssRUFBRSxNQUFNLENBQUMsa0JBQWtCLEtBQUssRUFBQyxpQkFBaUIsRUFBRSxDQUFDLEVBQUMsRUFDM0QsTUFBTSxFQUFDLGlDQUFpQzt3QkFFeEMsb0JBQUMsSUFBSSxJQUNILEtBQUssRUFBRSxNQUFNLENBQUMsc0JBQXNCLEtBQUs7Z0NBQ3ZDLEtBQUssRUFBRSxTQUFTO2dDQUNoQixRQUFRLEVBQUUsRUFBRTtnQ0FDWixVQUFVLEVBQUUsR0FBRzs2QkFDaEIsVUFHSSxDQUNGLENBQ1IsQ0FBQTtnQkFDSCxDQUFDO2dCQUVELE9BQU8sQ0FDTCxvQkFBQyxvQkFBb0IsSUFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksV0FBVyxFQUNqQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFDYixjQUFjLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFDekMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQ2hCLENBQ0gsQ0FBQTtZQUNILENBQUMsQ0FBQyxDQUNHLENBQ0YsQ0FDUixDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILGtCQUFrQixDQUFDLEVBQUMsYUFBYSxFQUFDO1FBQ2hDLE9BQU8sQ0FDTDtZQUNHLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3BCLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBRyxJQUFJLGlCQUFpQixZQUFZLENBQUMsS0FBSyxFQUFFO2dCQUM5RCxZQUFZO2FBQ2IsQ0FBQyxDQUNIO1lBQ0EsYUFBYSxFQUFFLE1BQU0sS0FBSyxDQUFDO2dCQUMxQixvQkFBQyxJQUFJLElBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixLQUFLO3dCQUM1RSxhQUFhLEVBQUUsRUFBRTt3QkFDakIsV0FBVyxFQUFFLENBQUM7d0JBQ2QsWUFBWSxFQUFFLENBQUM7d0JBQ2YsVUFBVSxFQUFFLEVBQUU7cUJBQ2YsQ0FBQyxFQUNGLE1BQU0sRUFBQyxrQ0FBa0M7b0JBRXpDLG9CQUFDLElBQUksUUFDRixJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUMvRSxDQUNGLENBRVIsQ0FDSixDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILHNCQUFzQixDQUFDLEVBQUMsRUFBRSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFDO1FBQ2pFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUE7UUFDeEUsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRTtZQUNuRCxRQUFRLEVBQUUsVUFBVTtZQUNwQixNQUFNLEVBQUUsTUFBTTtZQUNkLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLElBQUksRUFBRSxFQUFFO1lBQ1IsS0FBSyxFQUFFLEVBQUU7WUFDVCxNQUFNLEVBQUUsQ0FBQztZQUNULFNBQVMsRUFBRSxjQUFjO1lBQ3pCLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLFlBQVksRUFBRSxFQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFDO1lBQ3JDLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFlBQVksRUFBRSxFQUFFO1lBQ2hCLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUs7Z0JBQzdCLENBQUMsQ0FBQywyR0FBMkc7Z0JBQzdHLENBQUMsQ0FBQyxTQUFTO1lBQ2IsZUFBZSxFQUFFLE1BQU07WUFDdkIsbUJBQW1CLEVBQUUsRUFBRTtZQUN2QixvQkFBb0IsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sRUFBRSxJQUFJLENBQUMsOEJBQThCO1lBQzVDLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFNBQVMsRUFBRSxJQUFJLENBQUMsK0JBQStCO1lBQy9DLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQjtTQUNyQyxFQUFFLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFBO1FBRTlDLElBQUksUUFBUSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzNCLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQTtZQUMxQyxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUE7UUFDMUIsQ0FBQztRQUVELE9BQU8sQ0FDTCxvQkFBQyxJQUFJLElBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLG9CQUFvQixLQUFLO2dCQUM3RSxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVTtnQkFDckQsR0FBRyxFQUFFLENBQUM7Z0JBQ04sS0FBSyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxFQUFFLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLENBQUM7Z0JBQ1AsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsU0FBUyxFQUFFLEtBQUs7YUFDakIsQ0FBQyxFQUNGLE1BQU0sRUFBQyxvQ0FBb0M7WUFFM0Msb0JBQUMsUUFBUSxDQUFDLElBQUksSUFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsMEJBQTBCLEtBQUs7b0JBQ2xGLFFBQVEsRUFBRSxVQUFVO29CQUNwQixHQUFHLEVBQUUsQ0FBQztvQkFDTixLQUFLLEVBQUUsQ0FBQztvQkFDUixNQUFNLEVBQUUsQ0FBQztvQkFDVCxJQUFJLEVBQUUsQ0FBQztvQkFDUCxlQUFlLEVBQUUsd0JBQXdCO29CQUN6QyxPQUFPLEVBQUUsSUFBSSxDQUFDLDRCQUE0QjtpQkFDM0MsQ0FBQyxFQUNGLE1BQU0sRUFBQyxxQ0FBcUMsS0FDeEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQyxXQUFXLEdBQ3pEO1lBQ0Ysb0JBQUMsUUFBUSxDQUFDLElBQUksSUFDWixPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FDakIsK0JBQStCLEVBQy9CLEVBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLElBQUksUUFBUSxFQUFDLEVBQ3hHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FDL0IsRUFDRCxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsRUFDMUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQ2hDLEtBQUssRUFBRSxVQUFVLEVBQ2pCLE1BQU0sRUFBQywrQkFBK0I7Z0JBRXRDLG9CQUFDLFVBQVUsSUFDVCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLDRCQUE0QixFQUFFLE1BQU0sQ0FBQywwQkFBMEIsS0FBSzt3QkFDekcsUUFBUSxFQUFFLENBQUM7d0JBQ1gsY0FBYyxFQUFFLFVBQVU7cUJBQzNCLENBQUMsRUFDRix5QkFBeUIsRUFBQyxTQUFTLEVBQ25DLG1CQUFtQixRQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsRUFBRSxNQUFNLENBQUMsdUJBQXVCLEtBQUssRUFBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBQyxDQUFDLEVBQ2hJLE1BQU0sRUFBQyx3Q0FBd0MsSUFFOUMsa0JBQWtCLENBQ1I7Z0JBQ1osa0JBQWtCO2dCQUNuQixvQkFBQyxJQUFJLElBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsOEJBQThCLEVBQUUsTUFBTSxDQUFDLDRCQUE0QixLQUFLO3dCQUM3RixjQUFjLEVBQUUsU0FBUzt3QkFDekIsY0FBYyxFQUFFLENBQUM7d0JBQ2pCLGFBQWEsRUFBRSxFQUFFO3dCQUNqQixXQUFXLEVBQUUsRUFBRTt3QkFDZixZQUFZLEVBQUUsRUFBRTt3QkFDaEIsVUFBVSxFQUFFLEVBQUU7cUJBQ2YsQ0FBQyxFQUNGLE1BQU0sRUFBQyw2Q0FBNkMsSUFFbkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFDLGtCQUFrQixFQUFFLElBQUksRUFBQyxDQUFDLENBQzVDLENBQ08sQ0FDWCxDQUNSLENBQUE7SUFDSCxDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELGdCQUFnQjtRQUNkLE1BQU0sRUFBQyxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3JJLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQTtRQUNiLE1BQU0sRUFBRSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMvQixNQUFNLHVCQUF1QixHQUFHLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQTtRQUN4RixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFDLGFBQWEsRUFBQyxDQUFDLENBQUE7UUFDbkUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQTtRQUVwRCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBQyxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUMsQ0FBQyxDQUFBO1FBQ2xGLENBQUM7UUFFRCxJQUFJLEtBQUssR0FBRztZQUNWLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsU0FBUyxFQUFFLEtBQUs7WUFDaEIsVUFBVSxFQUFFLGlCQUFpQjtZQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZO1lBQ2pELGVBQWUsRUFBRSxNQUFNO1lBQ3ZCLFdBQVcsRUFBRSxNQUFNO1lBQ25CLFdBQVcsRUFBRSxDQUFDO1lBQ2QsU0FBUyxFQUFFLEdBQUc7WUFDZCxRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFBO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDMUIsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUE7WUFDYixLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQTtRQUNoQixDQUFDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUE7WUFDZCxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtRQUNsQixDQUFDO2FBQU0sSUFBSSx1QkFBdUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM5QyxJQUFJLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ3pCLCtFQUErRTtnQkFDL0UsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUE7Z0JBRWxILDBEQUEwRDtnQkFDMUQsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQTtZQUNuSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxHQUFHLHFCQUFxQixFQUFFLElBQUksQ0FBQTtnQkFDbEMsR0FBRyxHQUFHLE9BQU8scUJBQXFCLEVBQUUsR0FBRyxJQUFJLFFBQVEsSUFBSSxPQUFPLHFCQUFxQixFQUFFLE1BQU0sSUFBSSxRQUFRO29CQUNyRyxDQUFDLENBQUMscUJBQXFCLENBQUMsR0FBRyxHQUFHLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDO29CQUM5RCxDQUFDLENBQUMsU0FBUyxDQUFBO1lBQ2YsQ0FBQztZQUVELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xELEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO2dCQUNqQixLQUFLLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUE7WUFDbEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBO2dCQUNkLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFBO2dCQUNiLEtBQUssQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFBO1lBQzdCLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSx1QkFBdUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM5QyxJQUFJLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ3pCLCtFQUErRTtnQkFDL0UsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFBO2dCQUVsSCwwREFBMEQ7Z0JBQzFELElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQTtZQUN2SCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxHQUFHLHFCQUFxQixFQUFFLElBQUksQ0FBQTtnQkFDbEMsR0FBRyxHQUFHLHFCQUFxQixFQUFFLEdBQUcsQ0FBQTtZQUNsQyxDQUFDO1lBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7Z0JBQ2pCLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7WUFDckQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBO2dCQUNkLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFBO2dCQUNiLEtBQUssQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFBO1lBQzdCLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLHVCQUF1QixFQUFFLENBQUMsQ0FBQTtRQUMxRSxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxPQUFPLEdBQUcsaUJBQWlCLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNyRCxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUMzQixDQUFDO1FBRUQsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBRTlGLE9BQU8sQ0FDTCxvQkFBQyxJQUFJLElBQ0gsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQ2pCLHlCQUF5QixFQUN6QixFQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixJQUFJLFFBQVEsRUFBQyxFQUN0RSxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxDQUN4QixFQUNELFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLHdCQUF3QixFQUMxQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFDaEMsS0FBSyxFQUFFLEtBQUssRUFDWixNQUFNLEVBQUMsK0JBQStCO1lBRXRDLG9CQUFDLFVBQVUsSUFDVCx5QkFBeUIsRUFBQyxTQUFTLEVBQ25DLG1CQUFtQixRQUNuQixLQUFLLEVBQUUsTUFBTSxDQUFDLHFCQUFxQixLQUFLLENBQUMsU0FBUyxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUs7b0JBQy9ELFFBQVEsRUFBRSxDQUFDO29CQUNYLFVBQVUsRUFBRSxDQUFDO29CQUNiLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxJQUFJLEdBQUc7b0JBQ2pDLFNBQVMsRUFBRSxDQUFDO2lCQUNiLEVBQ0QsTUFBTSxFQUFDLGlDQUFpQyxJQUV2QyxrQkFBa0IsQ0FDUjtZQUNaLGtCQUFrQixDQUNkLENBQ1IsQ0FBQTtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZUFBZSxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFO1FBQ3hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUN0QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUE7UUFFdkIsTUFBTSxFQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBQzVDLE1BQU0sRUFBQyxRQUFRLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3pCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1FBQy9DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUNqQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUE7UUFDbkIsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDeEcsTUFBTSxVQUFVLEdBQUcsRUFBQyxHQUFHLE9BQU8sRUFBQyxDQUFBO1FBQy9CLElBQUksaUJBQWlCLENBQUE7UUFDckIsSUFBSSxNQUFNLENBQUE7UUFFVixJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQ2pELE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDLENBQUE7Z0JBRXpGLElBQUksWUFBWSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUMvQyw4Q0FBOEM7b0JBQzlDLE9BQU8sVUFBVSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDckMsTUFBTSxHQUFHLGlDQUFpQyxDQUFBO29CQUUxQyxpQkFBaUIsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDekcsQ0FBQztxQkFBTSxDQUFDO29CQUNOLHVDQUF1QztvQkFDdkMsVUFBVSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLFlBQVksR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUE7b0JBQy9FLE1BQU0sR0FBRyxjQUFjLENBQUE7Z0JBQ3pCLENBQUM7Z0JBRUQsUUFBUSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUE7WUFDL0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLDhCQUE4QjtnQkFDOUIsTUFBTSxHQUFHLGVBQWUsQ0FBQTtnQkFDeEIsaUJBQWlCLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDekcsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sc0RBQXNEO1lBQ3RELElBQUksWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMxQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7b0JBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTt3QkFDMUQsTUFBTSxFQUFFLHdCQUF3Qjt3QkFDaEMsV0FBVyxFQUFFLFlBQVksQ0FBQyxLQUFLO3FCQUNoQyxDQUFDLENBQUE7Z0JBQ0YsT0FBTTtZQUNSLENBQUM7WUFFRCxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixtQkFBbUI7Z0JBQ25CLFVBQVUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtnQkFDdkQsUUFBUSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUE7WUFDL0IsQ0FBQztZQUVELElBQUksUUFBUSxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUM5QixNQUFNLEdBQUcsWUFBWSxDQUFBO2dCQUNyQixpQkFBaUIsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQTtZQUMzRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxHQUFHLHVCQUF1QixDQUFBO2dCQUNoQyxpQkFBaUIsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFBO1lBQ3BDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5RCw2RkFBNkY7UUFDL0YsQ0FBQzthQUFNLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUM3QixRQUFRLENBQUMsY0FBYyxHQUFHLGlCQUFpQixDQUFBO1FBQzdDLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsSUFBSSxjQUFjLENBQUE7UUFDbkQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDMUQsTUFBTSxFQUFFLE1BQU0sSUFBSSxhQUFhO2dCQUMvQixRQUFRO2dCQUNSLFdBQVcsRUFBRSxZQUFZLENBQUMsS0FBSztnQkFDL0Isa0JBQWtCLEVBQUUsY0FBYyxDQUFDLE1BQU07Z0JBQ3pDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxNQUFNO2FBQ2xDLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhO1lBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUE7UUFFbkUsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLHdDQUF3QztZQUN4QyxRQUFRLENBQUM7Z0JBQ1AsS0FBSztnQkFDTCxPQUFPO2dCQUNQLE9BQU8sRUFBRSxVQUFVO2FBQ3BCLENBQUMsQ0FBQTtRQUNKLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDN0IsSUFBSSxXQUFXLENBQUE7WUFFZixJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDckQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFdBQVcsR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUN4QyxDQUFDO1lBRUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDbkMsQ0FBQztRQUVELElBQUksU0FBUyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUE7UUFDbkMsQ0FBQztRQUVELElBQUksZ0JBQWdCLElBQUksUUFBUSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQTtRQUNqRCxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQ7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUU7UUFDN0MsSUFBSSxhQUFhLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBQzdELE1BQU0sU0FBUyxHQUFHLEVBQUMsR0FBRyxLQUFLLEVBQUMsQ0FBQTtRQUU1QixJQUFJLE9BQU8sYUFBYSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLHVDQUF1QztZQUN2QyxhQUFhLEdBQUcsYUFBYSxDQUFDO2dCQUM1QixNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNO2dCQUNyQixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtnQkFDekMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixLQUFLLEVBQUUsU0FBUzthQUNqQixDQUFDLENBQUE7UUFDSixDQUFDO1FBRUQsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUNwRCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQy9ELENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsTUFBTTtRQUNsQixNQUFNLEVBQUMsYUFBYSxFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUE7UUFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBRWpDLElBQUksYUFBYSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQy9DLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDMUMsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxZQUFZLENBQUMsQ0FBQTtZQUVwRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLFlBQVksRUFBRSxDQUFDLENBQUE7WUFDN0UsQ0FBQztZQUVELE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQTtRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxhQUFhLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDL0IsTUFBTSxFQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQTtRQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN2QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLENBQUE7UUFDL0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3JGLElBQUksS0FBSyxDQUFBO1FBQ1QsSUFBSSxXQUFXLENBQUE7UUFFZixJQUFJLElBQUksSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN0QixLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQywrQkFBK0IsRUFBRSxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUE7UUFDM0YsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUE7UUFDcEYsQ0FBQztRQUVELE9BQU8sQ0FDTCxvQkFBQyxJQUFJLElBQ0gsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUU7Z0JBQzlDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsVUFBVSxFQUFFLFlBQVksRUFBRSxJQUFJO2dCQUM5QixXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUs7Z0JBQ2hDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSzthQUNwQixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQ3hFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLEVBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLENBQUMsRUFDMUYsTUFBTSxFQUFDLGlDQUFpQztZQUV2QyxhQUFhLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDO2dCQUMxQyxvQkFBQyxJQUFJLElBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUUsRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFDLENBQUMsRUFDNUQsTUFBTSxFQUFDLHFDQUFxQyxHQUM1QztZQUVILGFBQWEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDO2dCQUN6QyxvQkFBQyxJQUFJLElBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBQyxDQUFDO29CQUM5RyxvQkFBQyxlQUFlLElBQ2QsSUFBSSxFQUFFLElBQUksRUFDVixNQUFNLEVBQUMseUJBQXlCLEdBQ2hDLENBQ0c7WUFFUixDQUFDLEdBQUcsRUFBRTtnQkFDTCxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNsQiw0Q0FBNEM7b0JBQzVDLFdBQVcsR0FBRyxhQUFhLENBQUMsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO2dCQUNqRyxDQUFDO3FCQUFNLElBQUksSUFBSSxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3RELFdBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUE7Z0JBQ3ZDLENBQUM7cUJBQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzFCLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7Z0JBQ2hDLENBQUM7cUJBQU0sSUFBSSxNQUFNLElBQUksTUFBTSxJQUFJLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ3BELFdBQVcsR0FBRyxvQkFBQyxVQUFVLElBQUMsTUFBTSxFQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUMsR0FBSSxDQUFBO2dCQUNwRSxDQUFDO3FCQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUNwRCxXQUFXLEdBQUcsNkJBQUssdUJBQXVCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBQyxHQUFJLENBQUE7Z0JBQ2hGLENBQUM7cUJBQU0sQ0FBQztvQkFDTixXQUFXLEdBQUcsQ0FDWixvQkFBQyxJQUFJLElBQ0gsS0FBSyxFQUFFLEtBQUssRUFDWixNQUFNLEVBQUMsc0NBQXNDLElBRTVDLE1BQU0sQ0FBQyxJQUFJLENBQ1AsQ0FDUixDQUFBO2dCQUNILENBQUM7Z0JBRUQsT0FBTyxDQUNMO29CQUNFLG9CQUFDLElBQUksSUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUNqRSxXQUFXLENBQ1A7b0JBQ04sTUFBTSxDQUFDLEtBQUs7d0JBQ1gsb0JBQUMsSUFBSSxJQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUNySCxNQUFNLENBQUMsS0FBSyxDQUNSLENBRVIsQ0FDSixDQUFBO1lBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FDQyxDQUNSLENBQUE7SUFDSCxDQUFDLENBQUE7SUFFRCwrQkFBK0I7SUFDL0IsS0FBSyxDQUFDLHlCQUF5QjtRQUM3QixNQUFNLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFFaEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFBO1lBQzVCLENBQUM7WUFFRCxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQ2xFLE1BQU0sRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2pFLE1BQU0sYUFBYSxHQUFHLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNqRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUV0RixJQUFJLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQTtRQUN4QyxDQUFDO0lBQ0gsQ0FBQzs7QUFHSCxNQUFNLHdCQUF3QixHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtBQUUzRCxlQUFlLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthbnl0aGluZ0RpZmZlcmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL2RpZmYtdXRpbHNcIlxuaW1wb3J0IENvbmZpZyBmcm9tIFwiLi4vY29uZmlnLmpzXCJcbmltcG9ydCB7ZGlnLCBkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCB7QW5pbWF0ZWQsIERpbWVuc2lvbnMsIEVhc2luZywgUGFuUmVzcG9uZGVyLCBQbGF0Zm9ybSwgUHJlc3NhYmxlLCBTY3JvbGxWaWV3LCBUZXh0SW5wdXQsIFZpZXd9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuaW1wb3J0IFJlYWN0LCB7Y3JlYXRlUmVmLCBtZW1vLCB1c2VFZmZlY3R9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge3NoYXBlQ29tcG9uZW50LCBTaGFwZUNvbXBvbmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL3NoYXBlLWNvbXBvbmVudC5qc1wiXG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcImRlYm91bmNlXCJcbmltcG9ydCBGb250QXdlc29tZUljb24gZnJvbSBcInJlYWN0LW5hdGl2ZS12ZWN0b3ItaWNvbnMvRm9udEF3ZXNvbWVcIlxuaW1wb3J0IGlkRm9yQ29tcG9uZW50IGZyb20gXCJAa2FzcGVybmovYXBpLW1ha2VyL2J1aWxkL2lucHV0cy9pZC1mb3ItY29tcG9uZW50XCJcbmltcG9ydCBuYW1lRm9yQ29tcG9uZW50IGZyb20gXCJAa2FzcGVybmovYXBpLW1ha2VyL2J1aWxkL2lucHV0cy9uYW1lLWZvci1jb21wb25lbnRcIlxuaW1wb3J0IFRleHQgZnJvbSBcIkBrYXNwZXJuai9hcGktbWFrZXIvYnVpbGQvdXRpbHMvdGV4dFwiXG5pbXBvcnQgT3B0aW9uIGZyb20gXCIuL29wdGlvblwiXG5pbXBvcnQgT3B0aW9uR3JvdXAgZnJvbSBcIi4vb3B0aW9uLWdyb3VwXCJcbmltcG9ydCBQYWdpbmF0aW9uUGFnZUJ1dHRvbiBmcm9tIFwiLi9wYWdpbmF0aW9uLXBhZ2UtYnV0dG9uXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHByb3BUeXBlc0V4YWN0IGZyb20gXCJwcm9wLXR5cGVzLWV4YWN0XCJcbmltcG9ydCBSZW5kZXJIdG1sIGZyb20gXCJyZWFjdC1uYXRpdmUtcmVuZGVyLWh0bWxcIlxuaW1wb3J0IHtQb3J0YWx9IGZyb20gXCJjb25qb2ludG1lbnRcIlxuaW1wb3J0IHVzZUV2ZW50TGlzdGVuZXIgZnJvbSBcInlhLXVzZS1ldmVudC1saXN0ZW5lclwiXG5pbXBvcnQgdXNlUHJlc3NPdXRzaWRlIGZyb20gXCJvdXRzaWRlLWV5ZS9idWlsZC91c2UtcHJlc3Mtb3V0c2lkZVwiXG5pbXBvcnQge2FjcXVpcmVCb2R5U2Nyb2xsTG9jaywgcmVsZWFzZUJvZHlTY3JvbGxMb2NrfSBmcm9tIFwiLi9ib2R5LXNjcm9sbC1sb2NrXCJcbmltcG9ydCB7c2VsZWN0Q29vcmRpbmF0aW9ufSBmcm9tIFwiLi9jb29yZGluYXRpb25cIlxuXG5jb25zdCBzdHlsZXMgPSB7fVxuY29uc3QgTU9CSUxFX09QVElPTlNfTUFYX1dJRFRIID0gNzY4XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdFRvZ2dsZU9wdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGljb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0T3B0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXJ9IHZhbHVlXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW3RleHRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW2NvbnRlbnRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW2N1cnJlbnRDb250ZW50XVxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGlzYWJsZWRdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2h0bWxdXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW3JpZ2h0XVxuICpcbiAqIEFkZGl0aW9uYWwgb3B0aW9uIHByb3BzIGFyZSBhbGxvd2VkOyBIYXlhU2VsZWN0IG9ubHkgdXNlcyB0aGUga2V5cyBhYm92ZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RPcHRpb25zUmVzdWx0XG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBvcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RvdGFsQ291bnRdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BhZ2VdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BhZ2VTaXplXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdFByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2F0dHJpYnV0ZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2xhc3NOYW1lXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbY2xvc2VPbkNoYW5nZV1cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbZGVmYXVsdFRvZ2dsZWRdXG4gKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXJ9IFtkZWZhdWx0VmFsdWVdXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZ3xudW1iZXI+fSBbZGVmYXVsdFZhbHVlc11cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IFtkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkZWJ1Z11cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbaWRdXG4gKiBAcHJvcGVydHkge29iamVjdH0gW21vZGVsXVxuICogQHByb3BlcnR5IHtcImF1dG9cInxcImFsd2F5c1wifFwibmV2ZXJcIn0gW21vYmlsZU9wdGlvbnNNb2RlXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbbXVsdGlwbGVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW25vT3B0aW9uc1RleHRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKGltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50PSk6IHZvaWR9IFtvbkJsdXJdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKGltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50PSk6IHZvaWR9IFtvbkNoYW5nZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oQXJyYXk8c3RyaW5nfG51bWJlcj49KTogdm9pZH0gW29uQ2hhbmdlVmFsdWVdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKGltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50PSk6IHZvaWR9IFtvbkZvY3VzXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7b3B0aW9uczogQXJyYXl9KTogdm9pZH0gW29uT3B0aW9uc0Nsb3NlZF1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe29wdGlvbnM6IEFycmF5fSk6IHZvaWR9IFtvbk9wdGlvbnNMb2FkZWRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG9iamVjdCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW29wdGlvbkNvbnRlbnRdXG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fGZ1bmN0aW9uKCk6IChBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnxIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdCl9IG9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW29wdGlvbnNBYnNvbHV0ZV1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW29wdGlvbnNQb3J0YWxdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW29wdGlvbnNXaWR0aF1cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbcGxhY2Vob2xkZXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NlbGVjdGVkQmFja2dyb3VuZENvbG9yXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZWxlY3RlZEhvdmVyQmFja2dyb3VuZENvbG9yXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2VhcmNoXVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVGV4dElucHV0UHJvcHN9IFtzZWFyY2hUZXh0SW5wdXRQcm9wc11cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbc3R5bGVzXVxuICogQHByb3BlcnR5IHtvYmplY3R9IFt0b2dnbGVkXVxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0VG9nZ2xlT3B0aW9uPn0gW3RvZ2dsZU9wdGlvbnNdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt0cmFuc3BhcmVudF1cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nfG51bWJlcj59IFt2YWx1ZXNdXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0U3RhdGVcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IGN1cnJlbnRPcHRpb25zXG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RMYXlvdXR8bnVsbH0gc2VsZWN0Q29udGFpbmVyTGF5b3V0XG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RMYXlvdXR8bnVsbH0gZW5kT2ZTZWxlY3RMYXlvdXRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IGhlaWdodFxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnx1bmRlZmluZWR9IGxvYWRlZE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2FkT3B0aW9uc1JlcXVlc3RJZFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHBhZ2VcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGFnZUlucHV0Rm9jdXNlZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhZ2VJbnB1dFZhbHVlXG4gKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBwYWdlU2l6ZVxuICogQHByb3BlcnR5IHtib29sZWFufSBvcGVuZWRcbiAqIEBwcm9wZXJ0eSB7SGF5YVNlbGVjdExheW91dHxudWxsfSBvcHRpb25zQ29udGFpbmVyTGF5b3V0XG4gKiBAcHJvcGVydHkge1wiYWJvdmVcInxcImJlbG93XCJ8XCJzaGVldFwifHVuZGVmaW5lZH0gb3B0aW9uc1BsYWNlbWVudFxuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfSBvcHRpb25zVG9wXG4gKiBAcHJvcGVydHkge1wiaGlkZGVuXCJ8XCJ2aXNpYmxlXCJ8dW5kZWZpbmVkfSBvcHRpb25zVmlzaWJpbGl0eVxuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfG51bGx9IG9wdGlvbnNXaWR0aFxuICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gc2Nyb2xsTGVmdFxuICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gc2Nyb2xsVG9wXG4gKiBAcHJvcGVydHkge251bWJlcnxudWxsfSB0b3RhbENvdW50XG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSB0b2dnbGVkXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0TGF5b3V0XG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RvcF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbGVmdF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbeF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbeV1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbd2lkdGhdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2hlaWdodF1cbiAqL1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgUmVhY3QgTmF0aXZlIGFuZCBSZWFjdCBOYXRpdmUgV2ViIGxheW91dCBrZXlzLlxuICogQHBhcmFtIHtIYXlhU2VsZWN0TGF5b3V0fG51bGx8dW5kZWZpbmVkfSBsYXlvdXQgTmF0aXZlIGxheW91dC5cbiAqIEByZXR1cm5zIHtIYXlhU2VsZWN0TGF5b3V0fSBOb3JtYWxpemVkIGxheW91dC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTGF5b3V0KGxheW91dCkge1xuICBjb25zdCBub3JtYWxpemVkTGF5b3V0ID0gT2JqZWN0LmFzc2lnbih7fSwgbGF5b3V0KVxuXG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZExheW91dC5sZWZ0ICE9IFwibnVtYmVyXCIgJiYgdHlwZW9mIG5vcm1hbGl6ZWRMYXlvdXQueCA9PSBcIm51bWJlclwiKSB7XG4gICAgbm9ybWFsaXplZExheW91dC5sZWZ0ID0gbm9ybWFsaXplZExheW91dC54XG4gIH1cblxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRMYXlvdXQudG9wICE9IFwibnVtYmVyXCIgJiYgdHlwZW9mIG5vcm1hbGl6ZWRMYXlvdXQueSA9PSBcIm51bWJlclwiKSB7XG4gICAgbm9ybWFsaXplZExheW91dC50b3AgPSBub3JtYWxpemVkTGF5b3V0LnlcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkTGF5b3V0XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBsYXlvdXQgaGFzIHVzYWJsZSBhYnNvbHV0ZS1pc2ggcG9zaXRpb24uXG4gKiBAcGFyYW0ge0hheWFTZWxlY3RMYXlvdXR8bnVsbHx1bmRlZmluZWR9IGxheW91dCBMYXlvdXQgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIHdoZW4gdG9wIGFuZCBsZWZ0IGNhbiBiZSB1c2VkLlxuICovXG5mdW5jdGlvbiBsYXlvdXRIYXNQb3NpdGlvbihsYXlvdXQpIHtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShsYXlvdXQ/LmxlZnQpICYmIE51bWJlci5pc0Zpbml0ZShsYXlvdXQ/LnRvcClcbn1cblxuLyoqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGZvciBuYXRpdmUgaU9TIGFuZCBpT1MvaVBhZE9TIFNhZmFyaSBvbiB3ZWIuICovXG5mdW5jdGlvbiBpc0lPU0xpa2VQbGF0Zm9ybSgpIHtcbiAgaWYgKFBsYXRmb3JtLk9TID09IFwiaW9zXCIpIHJldHVybiB0cnVlXG4gIGlmIChQbGF0Zm9ybS5PUyAhPSBcIndlYlwiIHx8IHR5cGVvZiBuYXZpZ2F0b3IgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgcGxhdGZvcm0gPSBuYXZpZ2F0b3IucGxhdGZvcm0gfHwgXCJcIlxuICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50IHx8IFwiXCJcblxuICByZXR1cm4gL2lQYWR8aVBob25lfGlQb2QvLnRlc3QocGxhdGZvcm0pIHx8XG4gICAgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QodXNlckFnZW50KSB8fFxuICAgIChwbGF0Zm9ybSA9PSBcIk1hY0ludGVsXCIgJiYgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMSlcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0T3B0aW9uUmVuZGVyQ29udGV4dFxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBpY29uXG4gKiBAcHJvcGVydHkge1wiY3VycmVudFwifFwib3B0aW9uXCJ9IG1vZGVcbiAqIEBwcm9wZXJ0eSB7SGF5YVNlbGVjdE9wdGlvbn0gb3B0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHNlbGVjdGVkXG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RUb2dnbGVPcHRpb258dW5kZWZpbmVkfSB0b2dnbGVPcHRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHVuZGVmaW5lZH0gdG9nZ2xlVmFsdWVcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZ3xudW1iZXIsIHN0cmluZz59IHRvZ2dsZWRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RPbkNoYW5nZVBheWxvYWRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50XG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBvcHRpb25zXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSB0b2dnbGVzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0U3R5bGluZ0NvbnRleHRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb3BlbmVkXG4gKiBAcHJvcGVydHkge1wiYWJvdmVcInxcImJlbG93XCJ8XCJzaGVldFwifHVuZGVmaW5lZH0gb3B0aW9uc1BsYWNlbWVudFxuICogQHByb3BlcnR5IHtIYXlhU2VsZWN0U3RhdGV9IHN0YXRlXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGFueT59IHN0eWxlXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge1NoYXBlQ29tcG9uZW50PEhheWFTZWxlY3RQcm9wcywgSGF5YVNlbGVjdFN0YXRlPn0gY29tcG9uZW50XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5jb25zdCBuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlID0gKGNvbXBvbmVudCkgPT4ge1xuICBsZXQgbmFtZSA9IG5hbWVGb3JDb21wb25lbnQoY29tcG9uZW50KVxuXG4gIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gY29tcG9uZW50LmdldEN1cnJlbnRPcHRpb25zKClcbiAgY29uc3QgdmFsdWVzID0gY29tcG9uZW50LmdldFZhbHVlcygpXG5cbiAgY29uc3QgaGFzTXVsdGlwbGVWYWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlcykgJiYgdmFsdWVzLmxlbmd0aCA+IDBcblxuICBpZiAoY29tcG9uZW50LnByb3BzLm11bHRpcGxlICYmIG5hbWUgJiYgKGN1cnJlbnRPcHRpb25zLmxlbmd0aCA+IDAgfHwgaGFzTXVsdGlwbGVWYWx1ZXMpKSB7XG4gICAgbmFtZSArPSBcIltdXCJcbiAgfVxuXG4gIHJldHVybiBuYW1lXG59XG5cbi8qKiBAYXVnbWVudHMge1NoYXBlQ29tcG9uZW50PEhheWFTZWxlY3RQcm9wcywgSGF5YVNlbGVjdFN0YXRlPn0gKi9cbmNsYXNzIEhheWFTZWxlY3QgZXh0ZW5kcyBTaGFwZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgY2xvc2VPbkNoYW5nZTogZmFsc2UsXG4gICAgZGVidWc6IGZhbHNlLFxuICAgIG1vYmlsZU9wdGlvbnNNb2RlOiBcImF1dG9cIixcbiAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgbm9PcHRpb25zVGV4dDogbnVsbCxcbiAgICBvbkJsdXI6IG51bGwsXG4gICAgb25Gb2N1czogbnVsbCxcbiAgICBvcHRpb25zQWJzb2x1dGU6IHRydWUsXG4gICAgb3B0aW9uc1BvcnRhbDogdHJ1ZSxcbiAgICBvcHRpb25zV2lkdGg6IG51bGwsXG4gICAgc2VhcmNoOiBmYWxzZSxcbiAgICBzZWFyY2hUZXh0SW5wdXRQcm9wczogdW5kZWZpbmVkLFxuICAgIHRyYW5zcGFyZW50OiBmYWxzZVxuICB9XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHByb3BUeXBlc0V4YWN0KHtcbiAgICBhdHRyaWJ1dGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNsb3NlT25DaGFuZ2U6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgZGVmYXVsdFRvZ2dsZWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gICAgZGVmYXVsdFZhbHVlczogUHJvcFR5cGVzLmFycmF5LFxuICAgIGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uczogUHJvcFR5cGVzLmFycmF5LFxuICAgIGRlYnVnOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGlkOiBQcm9wVHlwZXMubm9kZSxcbiAgICBtb2RlbDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBtb2JpbGVPcHRpb25zTW9kZTogUHJvcFR5cGVzLm9uZU9mKFtcImF1dG9cIiwgXCJhbHdheXNcIiwgXCJuZXZlclwiXSksXG4gICAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBub09wdGlvbnNUZXh0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkNoYW5nZVZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbk9wdGlvbnNDbG9zZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uT3B0aW9uc0xvYWRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb3B0aW9uQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICBjb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgY3VycmVudENvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIGh0bWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIHJpZ2h0OiBQcm9wVHlwZXMubm9kZSxcbiAgICAgICAgdGV4dDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICAgIHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZFxuICAgICAgfSkpLFxuICAgICAgUHJvcFR5cGVzLmZ1bmNcbiAgICBdKS5pc1JlcXVpcmVkLFxuICAgIG9wdGlvbnNBYnNvbHV0ZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBvcHRpb25zUG9ydGFsOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIG9wdGlvbnNXaWR0aDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLm5vZGUsXG4gICAgc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VsZWN0ZWRIb3ZlckJhY2tncm91bmRDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWFyY2g6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgc2VhcmNoVGV4dElucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHRvZ2dsZWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgdG9nZ2xlT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGljb246IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG4gICAgfSkpLFxuICAgIHRyYW5zcGFyZW50OiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIHZhbHVlczogUHJvcFR5cGVzLmFycmF5XG4gIH0pXG5cbiAgY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gZmFsc2VcbiAgYm9keVNjcm9sbExvY2tlZCA9IGZhbHNlXG4gIGVuZE9mU2VsZWN0UmVmID0gY3JlYXRlUmVmKClcbiAgbGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQgPSAwXG4gIG1vYmlsZU9wdGlvbnNCYWNrZHJvcE9wYWNpdHkgPSBuZXcgQW5pbWF0ZWQuVmFsdWUoMClcbiAgb3B0aW9uc0NvbnRhaW5lclJlZiA9IGNyZWF0ZVJlZigpXG4gIHBhZ2VJbnB1dFJlZiA9IGNyZWF0ZVJlZigpXG4gIG1vYmlsZU9wdGlvbnNDb250YWluZXJQcm9ncmVzcyA9IG5ldyBBbmltYXRlZC5WYWx1ZSgwKVxuICBtb2JpbGVPcHRpb25zQ29udGFpbmVyU2NhbGUgPSB0aGlzLm1vYmlsZU9wdGlvbnNDb250YWluZXJQcm9ncmVzcy5pbnRlcnBvbGF0ZSh7XG4gICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgIG91dHB1dFJhbmdlOiBbMC45NiwgMV1cbiAgfSlcbiAgbW9iaWxlT3B0aW9uc0NvbnRhaW5lclRyYW5zbGF0ZVkgPSB0aGlzLm1vYmlsZU9wdGlvbnNDb250YWluZXJQcm9ncmVzcy5pbnRlcnBvbGF0ZSh7XG4gICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgIG91dHB1dFJhbmdlOiBbMjAsIDBdXG4gIH0pXG4gIG1vYmlsZU9wdGlvbnNDb250YWluZXJUcmFuc2Zvcm0gPSBbXG4gICAge3RyYW5zbGF0ZVk6IHRoaXMubW9iaWxlT3B0aW9uc0NvbnRhaW5lclRyYW5zbGF0ZVl9LFxuICAgIHtzY2FsZTogdGhpcy5tb2JpbGVPcHRpb25zQ29udGFpbmVyU2NhbGV9XG4gIF1cbiAgbW9iaWxlT3B0aW9uc0Nsb3NpbmcgPSBmYWxzZVxuICBvcHRpb25Hcm91cFN0eWxlRW50cmllcyA9ICgpID0+IHtcbiAgICBjb25zdCBvcHRpb25Hcm91cCA9IGRpZyh0aGlzLCBcInByb3BzXCIsIFwic3R5bGVzXCIsIFwib3B0aW9uR3JvdXBcIilcbiAgICBjb25zdCBvcHRpb25Hcm91cFRleHQgPSBkaWcodGhpcywgXCJwcm9wc1wiLCBcInN0eWxlc1wiLCBcIm9wdGlvbkdyb3VwVGV4dFwiKVxuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUoXCJvcHRpb25Hcm91cFN0eWxlRW50cmllc1wiLCB7b3B0aW9uR3JvdXAsIG9wdGlvbkdyb3VwVGV4dH0sIFtvcHRpb25Hcm91cCwgb3B0aW9uR3JvdXBUZXh0XSlcbiAgfVxuICBvcHRpb25Hcm91cFN0eWxpbmdDb250ZXh0S2V5ID0gKCkgPT4ge1xuICAgIGNvbnN0IHtvcHRpb25Hcm91cCwgb3B0aW9uR3JvdXBUZXh0fSA9IHRoaXMudHQub3B0aW9uR3JvdXBTdHlsZUVudHJpZXMoKVxuICAgIGlmICh0eXBlb2Ygb3B0aW9uR3JvdXAgIT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBvcHRpb25Hcm91cFRleHQgIT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbFxuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUoXCJvcHRpb25Hcm91cFN0eWxpbmdDb250ZXh0S2V5XCIsIHt9LCBbXG4gICAgICB0aGlzLnMuY3VycmVudE9wdGlvbnMsXG4gICAgICB0aGlzLnMuZW5kT2ZTZWxlY3RMYXlvdXQsXG4gICAgICB0aGlzLnMuaGVpZ2h0LFxuICAgICAgdGhpcy5zLmxvYWRlZE9wdGlvbnMsXG4gICAgICB0aGlzLnMubG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkLFxuICAgICAgdGhpcy5zLmxvYWRPcHRpb25zUmVxdWVzdElkLFxuICAgICAgdGhpcy5zLm9wZW5lZCxcbiAgICAgIHRoaXMucy5vcHRpb25zQ29udGFpbmVyTGF5b3V0LFxuICAgICAgdGhpcy5zLm9wdGlvbnNQbGFjZW1lbnQsXG4gICAgICB0aGlzLnMub3B0aW9uc1RvcCxcbiAgICAgIHRoaXMucy5vcHRpb25zVmlzaWJpbGl0eSxcbiAgICAgIHRoaXMucy5vcHRpb25zV2lkdGgsXG4gICAgICB0aGlzLnMucGFnZSxcbiAgICAgIHRoaXMucy5wYWdlSW5wdXRGb2N1c2VkLFxuICAgICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlLFxuICAgICAgdGhpcy5zLnBhZ2VTaXplLFxuICAgICAgdGhpcy5zLnNjcm9sbExlZnQsXG4gICAgICB0aGlzLnMuc2Nyb2xsVG9wLFxuICAgICAgdGhpcy5zLnNlbGVjdENvbnRhaW5lckxheW91dCxcbiAgICAgIHRoaXMucy50b2dnbGVkLFxuICAgICAgdGhpcy5zLnRvdGFsQ291bnRcbiAgICBdKVxuICB9XG4gIG9wdGlvbkdyb3VwU3R5bGluZ0ZvciA9IChzdHlsaW5nTmFtZSwgc3R5bGUgPSB7fSwgY2FjaGVzID0gW10pID0+IHRoaXMudHQuc3R5bGluZ0ZvcihzdHlsaW5nTmFtZSwgc3R5bGUsIGNhY2hlcylcbiAgc2VhcmNoVGV4dFZhbHVlID0gXCJcIlxuICBzZWFyY2hUZXh0SW5wdXRSZWYgPSBjcmVhdGVSZWYoKVxuICBzZWxlY3RDb250YWluZXJSZWYgPSBjcmVhdGVSZWYoKVxuICB0ID0gQ29uZmlnLmN1cnJlbnQoKS5nZXRVc2VUcmFuc2xhdGUoKSgpLnRcbiAgd2luZG93V2lkdGggPSBEaW1lbnNpb25zLmdldChcIndpbmRvd1wiKS53aWR0aFxuICB3aW5kb3dIZWlnaHQgPSBEaW1lbnNpb25zLmdldChcIndpbmRvd1wiKS5oZWlnaHRcbiAgLyoqIEB0eXBlIHtIYXlhU2VsZWN0U3RhdGV9ICovXG4gIHN0YXRlID0ge1xuICAgIGN1cnJlbnRPcHRpb25zOiB0aGlzLmRlZmF1bHRDdXJyZW50T3B0aW9ucygpLFxuICAgIHNlbGVjdENvbnRhaW5lckxheW91dDogbnVsbCxcbiAgICBlbmRPZlNlbGVjdExheW91dDogbnVsbCxcbiAgICBoZWlnaHQ6IG51bGwsXG4gICAgbG9hZGVkT3B0aW9uczogdGhpcy5kZWZhdWx0TG9hZGVkT3B0aW9ucygpLFxuICAgIGxvYWRPcHRpb25zQXBwbGllZFJlcXVlc3RJZDogMCxcbiAgICBsb2FkT3B0aW9uc1JlcXVlc3RJZDogMCxcbiAgICBwYWdlOiAxLFxuICAgIHBhZ2VJbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgIHBhZ2VJbnB1dFZhbHVlOiBcIjFcIixcbiAgICBwYWdlU2l6ZTogbnVsbCxcbiAgICBvcGVuZWQ6IGZhbHNlLFxuICAgIG9wdGlvbnNDb250YWluZXJMYXlvdXQ6IG51bGwsXG4gICAgb3B0aW9uc1BsYWNlbWVudDogdW5kZWZpbmVkLFxuICAgIG9wdGlvbnNUb3A6IHVuZGVmaW5lZCxcbiAgICBvcHRpb25zVmlzaWJpbGl0eTogdW5kZWZpbmVkLFxuICAgIG9wdGlvbnNXaWR0aDogdW5kZWZpbmVkLFxuICAgIHNjcm9sbExlZnQ6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCA6IG51bGwsXG4gICAgc2Nyb2xsVG9wOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA6IG51bGwsXG4gICAgdG90YWxDb3VudDogbnVsbCxcbiAgICB0b2dnbGVkOiB0aGlzLmRlZmF1bHRUb2dnbGVkKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cbiAgaXNEZWJ1Z0VuYWJsZWQgPSAoKSA9PiBCb29sZWFuKHRoaXMucC5kZWJ1ZylcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFtkZXRhaWxzXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGRlYnVnTG9nID0gKGZ1bmN0aW9uTmFtZSwgZGV0YWlscyA9IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmICghdGhpcy5pc0RlYnVnRW5hYmxlZCgpKSByZXR1cm5cblxuICAgIGNvbnN0IGJhc2VEZXRhaWxzID0ge1xuICAgICAgaWQ6IHRoaXMucC5pZCxcbiAgICAgIG5hbWU6IHRoaXMucC5uYW1lXG4gICAgfVxuXG4gICAgY29uc3QgbWVyZ2VkRGV0YWlscyA9IGRldGFpbHMgPyBPYmplY3QuYXNzaWduKHt9LCBiYXNlRGV0YWlscywgZGV0YWlscykgOiBiYXNlRGV0YWlsc1xuXG4gICAgaWYgKG1lcmdlZERldGFpbHMgJiYgT2JqZWN0LmtleXMobWVyZ2VkRGV0YWlscykubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5sb2coYFtIYXlhU2VsZWN0XSAke2Z1bmN0aW9uTmFtZX1gLCBtZXJnZWREZXRhaWxzKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0hheWFTZWxlY3RdICR7ZnVuY3Rpb25OYW1lfWApXG4gICAgfVxuICB9XG5cbiAgc2V0dXAoKSB7XG4gICAgY29uc3Qge3R9ID0gQ29uZmlnLmN1cnJlbnQoKS5nZXRVc2VUcmFuc2xhdGUoKSgpXG5cbiAgICB0aGlzLnQgPSB0XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLnZhbHVlcykpIHtcbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy5wcm9wcy52YWx1ZXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSGF5YVNlbGVjdDogVW5kZWZpbmVkIGdpdmVuIGFzIHZhbHVlXCIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3aW5kb3dUYXJnZXQgPSBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmIHR5cGVvZiB3aW5kb3cgIT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IG51bGxcblxuICAgIHVzZUV2ZW50TGlzdGVuZXIoRGltZW5zaW9ucywgXCJjaGFuZ2VcIiwgdGhpcy50dC5vbkRpbWVuc2lvbnNDaGFuZ2UpXG4gICAgdXNlUHJlc3NPdXRzaWRlKHRoaXMudHQub3B0aW9uc0NvbnRhaW5lclJlZiwgdGhpcy50dC5vblByZXNzT3V0c2lkZU9wdGlvbnMpXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3dUYXJnZXQsIFwicmVzaXplXCIsIHRoaXMudHQub25Bbnl0aGluZ1Jlc2l6ZWREZWJvdW5jZWQpXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3dUYXJnZXQsIFwic2Nyb2xsXCIsIHRoaXMudHQub25Bbnl0aGluZ1Njcm9sbGVkRGVib3VuY2VkKVxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldHVwXCIsIHtcbiAgICAgIGhhc0NvbnRyb2xsZWRWYWx1ZXM6IFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcyxcbiAgICAgIGhhc0NvbnRyb2xsZWRUb2dnbGVkOiBcInRvZ2dsZWRcIiBpbiB0aGlzLnByb3BzLFxuICAgICAgY2xvc2VPbkNoYW5nZTogdGhpcy5wLmNsb3NlT25DaGFuZ2UsXG4gICAgICBtdWx0aXBsZTogdGhpcy5wLm11bHRpcGxlLFxuICAgICAgb3B0aW9uc1R5cGU6IEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy5vcHRpb25zKSA/IFwiYXJyYXlcIiA6IHR5cGVvZiB0aGlzLnByb3BzLm9wdGlvbnNcbiAgICB9KVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnR0LmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiAmJiB0aGlzLnMub3B0aW9uc0NvbnRhaW5lckxheW91dCkge1xuICAgICAgICB0aGlzLmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4oKVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnR0LmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiwgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXRdKVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb25JZHMgPSB0aGlzLnMuY3VycmVudE9wdGlvbnM/Lm1hcCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSlcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy52YWx1ZXMpICYmIGFueXRoaW5nRGlmZmVyZW50KGN1cnJlbnRPcHRpb25JZHMsIHRoaXMucHJvcHMudmFsdWVzKSAmJiB0eXBlb2YgdGhpcy5wcm9wcy5vcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnNldEN1cnJlbnRGcm9tR2l2ZW5WYWx1ZXMoKVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnByb3BzLnZhbHVlc10pXG4gIH1cblxuICB0cmFuc2xhdGUobXNnSUQsIG9wdGlvbnMpIHtcbiAgICBpZiAobXNnSUQuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgIHJldHVybiB0aGlzLnQoYGhheWFfc2VsZWN0JHttc2dJRH1gLCBvcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy50KG1zZ0lELCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59ICovXG4gIGRlZmF1bHRDdXJyZW50T3B0aW9ucygpIHtcbiAgICBjb25zdCB7ZGVmYXVsdFZhbHVlLCBkZWZhdWx0VmFsdWVzLCB2YWx1ZXN9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucFxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpKSByZXR1cm4gW11cbiAgICBjb25zdCBjb250cm9sbGVkVmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZXMpID8gdmFsdWVzIDogW11cblxuICAgIHJldHVybiBvcHRpb25zLmZpbHRlcigoe3ZhbHVlfSkgPT5cbiAgICAgIChkZWZhdWx0VmFsdWUgJiYgdmFsdWUgPT0gZGVmYXVsdFZhbHVlKSB8fFxuICAgICAgICAoZGVmYXVsdFZhbHVlcyAmJiBkZWZhdWx0VmFsdWVzLmluY2x1ZGVzKHZhbHVlKSkgfHxcbiAgICAgICAgY29udHJvbGxlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSlcbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fHVuZGVmaW5lZH0gKi9cbiAgZGVmYXVsdExvYWRlZE9wdGlvbnMoKSB7XG4gICAgY29uc3Qge29wdGlvbnN9ID0gdGhpcy5wXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIG9wdGlvbnM6ICR7dHlwZW9mIG9wdGlvbnN9YClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7bnVtYmVyfSAqL1xuICBnZXRBY3RpdmVQYWdlID0gKCkgPT4gdGhpcy5zLnBhZ2UgfHwgMVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cbiAgaXNNb2JpbGVPcHRpb25zU2hlZXQoKSB7XG4gICAgaWYgKHRoaXMucC5tb2JpbGVPcHRpb25zTW9kZSA9PSBcImFsd2F5c1wiKSByZXR1cm4gdHJ1ZVxuICAgIGlmICh0aGlzLnAubW9iaWxlT3B0aW9uc01vZGUgPT0gXCJuZXZlclwiKSByZXR1cm4gZmFsc2VcblxuICAgIHJldHVybiBEaW1lbnNpb25zLmdldChcIndpbmRvd1wiKS53aWR0aCA8PSBNT0JJTEVfT1BUSU9OU19NQVhfV0lEVEhcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fEhheWFTZWxlY3RPcHRpb25zUmVzdWx0fSByZXN1bHRcbiAgICogQHJldHVybnMge0hheWFTZWxlY3RPcHRpb25zUmVzdWx0fVxuICAgKi9cbiAgcGFyc2VPcHRpb25zUmVzdWx0KHJlc3VsdCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHJldHVybiB7b3B0aW9uczogcmVzdWx0fVxuXG4gICAgaWYgKHJlc3VsdCAmJiBBcnJheS5pc0FycmF5KHJlc3VsdC5vcHRpb25zKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW9uczogcmVzdWx0Lm9wdGlvbnMsXG4gICAgICAgIHRvdGFsQ291bnQ6IHJlc3VsdC50b3RhbENvdW50LFxuICAgICAgICBwYWdlOiByZXN1bHQucGFnZSxcbiAgICAgICAgcGFnZVNpemU6IHJlc3VsdC5wYWdlU2l6ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBvcHRpb25zIHJlc3VsdDogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtc1xuICAgKiBAcGFyYW0ge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBwYXJhbXMub3B0aW9uc1xuICAgKiBAcGFyYW0ge251bWJlcn0gW3BhcmFtcy5wYWdlXVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3BhcmFtcy5wYWdlU2l6ZV1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMudG90YWxDb3VudF1cbiAgICogQHJldHVybnMge251bWJlcnxudWxsfVxuICAgKi9cbiAgcmVzb2x2ZVBhZ2VTaXplKHtvcHRpb25zLCBwYWdlLCBwYWdlU2l6ZSwgdG90YWxDb3VudH0pIHtcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHBhZ2VTaXplKSAmJiBwYWdlU2l6ZSA+IDApIHJldHVybiBwYWdlU2l6ZVxuXG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZSh0aGlzLnMucGFnZVNpemUpICYmIHRoaXMucy5wYWdlU2l6ZSA+IDAgJiYgcGFnZSAhPSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5zLnBhZ2VTaXplXG4gICAgfVxuXG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSAmJiBBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMubGVuZ3RoXG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0aGlzLnMucGFnZVNpemUpICYmIHRoaXMucy5wYWdlU2l6ZSA+IDAgPyB0aGlzLnMucGFnZVNpemUgOiBudWxsXG4gIH1cblxuICAvKiogQHJldHVybnMge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSAqL1xuICBkZWZhdWx0VG9nZ2xlZCgpIHtcbiAgICByZXR1cm4gKFwidG9nZ2xlZFwiIGluIHRoaXMucHJvcHMpID8gdGhpcy5wLnRvZ2dsZWQgOiB0aGlzLnByb3BzLmRlZmF1bHRUb2dnbGVkIHx8IHt9XG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gKi9cbiAgcG9ydGFsTmFtZSgpIHtcbiAgICByZXR1cm4gbmFtZUZvckNvbXBvbmVudFdpdGhNdWx0aXBsZSh0aGlzKSB8fCBgaGF5YS1zZWxlY3QtJHtTdHJpbmcoaWRGb3JDb21wb25lbnQodGhpcykpfWBcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZ3xudW1iZXIsIHN0cmluZz59ICovXG4gIGdldFRvZ2dsZWQgPSAoKSA9PiAoXCJ0b2dnbGVkXCIgaW4gdGhpcy5wcm9wcykgPyB0aGlzLnAudG9nZ2xlZCA6IHRoaXMucy50b2dnbGVkXG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxzdHJpbmd8bnVtYmVyPn0gKi9cbiAgZ2V0VmFsdWVzID0gKCkgPT4gKFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcylcbiAgICA/IChBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpID8gdGhpcy5wLnZhbHVlcyA6IFtdKVxuICAgIDogKEFycmF5LmlzQXJyYXkodGhpcy5zLmN1cnJlbnRPcHRpb25zKSA/IHRoaXMucy5jdXJyZW50T3B0aW9ucyA6IFtdKS5tYXAoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUpXG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9ufHt2YWx1ZTogc3RyaW5nfG51bWJlcn0+fSAqL1xuICBnZXRDdXJyZW50T3B0aW9ucyA9ICgpID0+IHtcbiAgICBpZiAoXCJ2YWx1ZXNcIiBpbiB0aGlzLnByb3BzICYmIHR5cGVvZiB0aGlzLnByb3BzLnZhbHVlcyAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSAmJiB0aGlzLnAudmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMucHJvcHMub3B0aW9ucykgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSkge1xuICAgICAgICAvKiogQHR5cGUge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSAqL1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXVxuXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy5wLnZhbHVlcykge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMucC5vcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09IHZhbHVlKVxuXG4gICAgICAgICAgaWYgKG9wdGlvbikgcmVzdWx0LnB1c2gob3B0aW9uKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSBlbHNlIGlmICh0aGlzLnMubG9hZGVkT3B0aW9ucyAmJiBBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpKSB7XG4gICAgICAgIC8qKiBAdHlwZSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59ICovXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnAudmFsdWVzKSB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9uID1cbiAgICAgICAgICAgIHRoaXMucy5sb2FkZWRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09IHZhbHVlKSB8fFxuICAgICAgICAgICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09IHZhbHVlKVxuXG4gICAgICAgICAgaWYgKG9wdGlvbikgcmVzdWx0LnB1c2gob3B0aW9uKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAvLyBPcHRpb25zIGhhdmVuJ3QgYmVlbiBsb2FkZWQgeWV0LlxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnAudmFsdWVzLm1hcCgodmFsdWUpID0+ICh7dmFsdWV9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zLmN1cnJlbnRPcHRpb25zXG4gIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PHN0cmluZ3xudW1iZXI+fSAqL1xuICBnZXRDdXJyZW50T3B0aW9uVmFsdWVzKCkge1xuICAgIGlmIChcInZhbHVlc1wiIGluIHRoaXMucHJvcHMpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpID8gdGhpcy5wLnZhbHVlcyA6IFtdXG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRPcHRpb25zKClcblxuICAgIGlmICghY3VycmVudE9wdGlvbnMpIHJldHVybiBbXVxuXG4gICAgcmV0dXJuIGN1cnJlbnRPcHRpb25zXG4gICAgICAubWFwKChvcHRpb24pID0+IG9wdGlvbj8udmFsdWUpXG4gICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlICE9IFwidW5kZWZpbmVkXCIpXG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7YXR0cmlidXRlLCBkZWZhdWx0VmFsdWUsIGRlZmF1bHRWYWx1ZXMsIGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9ucywgbW9kZWwsIG9wdGlvbnN9ID0gdGhpcy5wcm9wc1xuXG4gICAgdGhpcy51bnN1YnNjcmliZVNlbGVjdENvb3JkaW5hdGlvbiA9IHNlbGVjdENvb3JkaW5hdGlvbi5zdWJzY3JpYmUodGhpcy5vblNlbGVjdENvb3JkaW5hdGlvbkNoYW5nZWQpXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwiY29tcG9uZW50RGlkTW91bnRcIiwge1xuICAgICAgaGFzQXR0cmlidXRlTW9kZWw6IEJvb2xlYW4oYXR0cmlidXRlICYmIG1vZGVsKSxcbiAgICAgIGhhc0RlZmF1bHRWYWx1ZXM6IEJvb2xlYW4oZGVmYXVsdFZhbHVlIHx8IGRlZmF1bHRWYWx1ZXMgfHwgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zKSxcbiAgICAgIG9wdGlvbnNUeXBlOiB0eXBlb2Ygb3B0aW9uc1xuICAgIH0pXG5cbiAgICBpZiAoKChkZWZhdWx0VmFsdWUgfHwgZGVmYXVsdFZhbHVlcyB8fCBkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnMpIHx8IChhdHRyaWJ1dGUgJiYgbW9kZWwpKSAmJiB0eXBlb2Ygb3B0aW9ucyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMubG9hZERlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uc0NhbGxiYWNrKClcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7fVxuXG4gICAgaWYgKFwidG9nZ2xlZFwiIGluIHRoaXMucHJvcHMpIHtcbiAgICAgIGNvbnN0IG5ld1RvZ2dsZWQgPSB0aGlzLnAudG9nZ2xlZFxuXG4gICAgICBpZiAoYW55dGhpbmdEaWZmZXJlbnQodGhpcy5zdGF0ZS50b2dnbGVkLCBuZXdUb2dnbGVkKSkge1xuICAgICAgICBuZXdTdGF0ZS50b2dnbGVkID0gbmV3VG9nZ2xlZFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyhuZXdTdGF0ZSkubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImNvbXBvbmVudERpZFVwZGF0ZVwiLCB7c3luY2luZ0tleXM6IE9iamVjdC5rZXlzKG5ld1N0YXRlKX0pXG4gICAgICB0aGlzLnMudG9nZ2xlZCA9IG5ld1N0YXRlLnRvZ2dsZWRcbiAgICB9XG5cbiAgICB0aGlzLnN5bmNPcHRpb25zUGxhY2VtZW50V2l0aE1vZGUoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy51bnN1YnNjcmliZVNlbGVjdENvb3JkaW5hdGlvbikgdGhpcy51bnN1YnNjcmliZVNlbGVjdENvb3JkaW5hdGlvbigpXG4gICAgc2VsZWN0Q29vcmRpbmF0aW9uLmNsb3NlU2VsZWN0KGlkRm9yQ29tcG9uZW50KHRoaXMpKVxuICAgIHRoaXMubW9iaWxlT3B0aW9uc0JhY2tkcm9wT3BhY2l0eS5zdG9wQW5pbWF0aW9uKClcbiAgICB0aGlzLm1vYmlsZU9wdGlvbnNDb250YWluZXJQcm9ncmVzcy5zdG9wQW5pbWF0aW9uKClcbiAgICB0aGlzLnVubG9ja0JvZHlTY3JvbGwoKVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGlzIHNlbGVjdCB3aGVuIGEgZGlmZmVyZW50IHNlbGVjdCBiZWNvbWVzIHRoZSBvcGVuIG9uZS5cbiAgICogQHBhcmFtIHtzdHJpbmd8bnVsbH0gb3BlblNlbGVjdElkXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25TZWxlY3RDb29yZGluYXRpb25DaGFuZ2VkID0gKG9wZW5TZWxlY3RJZCkgPT4ge1xuICAgIGlmIChvcGVuU2VsZWN0SWQgJiYgb3BlblNlbGVjdElkICE9PSBpZEZvckNvbXBvbmVudCh0aGlzKSAmJiB0aGlzLnMub3BlbmVkKSB7XG4gICAgICB0aGlzLmNsb3NlT3B0aW9ucygpXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9ICovXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7ZW5kT2ZTZWxlY3RSZWZ9ID0gdGhpcy50dFxuICAgIGNvbnN0IHt0cmFuc3BhcmVudH0gPSB0aGlzLnBcbiAgICBjb25zdCB7Y2xhc3NOYW1lLCBwbGFjZWhvbGRlciwgdG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLnZhbHVlcykgPyB0aGlzLnByb3BzLnZhbHVlcyA6IFtdXG4gICAgY29uc3Qge29wZW5lZCwgb3B0aW9uc1BsYWNlbWVudH0gPSB0aGlzLnNcbiAgICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICAgIGNvbnN0IGlkID0gaWRGb3JDb21wb25lbnQodGhpcylcbiAgICBjb25zdCBtb2JpbGVPcHRpb25zU2hlZXQgPSB0aGlzLmlzTW9iaWxlT3B0aW9uc1NoZWV0KClcblxuICAgIGNvbnN0IHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsID0gey4uLnRoaXMuc3R5bGluZ0ZvcihcInNlbGVjdENvbnRhaW5lclwiLCB7XG4gICAgICBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLFxuICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiBcIiNmZmZcIixcbiAgICAgIGJvcmRlckNvbG9yOiB0cmFuc3BhcmVudCA/IHVuZGVmaW5lZCA6IFwiIzk5OVwiLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0cmFuc3BhcmVudCA/IHVuZGVmaW5lZCA6IDQsXG4gICAgICBib3JkZXJXaWR0aDogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiAxLFxuICAgICAgY29sb3I6IFwiIzAwMFwiLFxuICAgICAgY3Vyc29yOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gXCJwb2ludGVyXCIgOiB1bmRlZmluZWQsXG4gICAgICBwYWRkaW5nVG9wOiA1LFxuICAgICAgcGFkZGluZ0JvdHRvbTogNSxcbiAgICAgIHBhZGRpbmdMZWZ0OiA1XG4gICAgfSwgW3RyYW5zcGFyZW50XSl9XG5cbiAgICBpZiAob3BlbmVkICYmICFtb2JpbGVPcHRpb25zU2hlZXQpIHtcbiAgICAgIC8vIFByZXZlbnQgc2VsZWN0IGZyb20gY2hhbmdpbmcgc2l6ZSBvbmNlIHRoZSBjb250ZW50IGlzIHJlcGxhY2VkIHdpdGggc2VhcmNoIHRleHQgb25jZSBvcGVuZWRcbiAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmhlaWdodCA9IHRoaXMucy5oZWlnaHRcblxuICAgICAgY29uc3QgYmFzZUJvcmRlclJhZGl1cyA9IHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclJhZGl1c1xuXG4gICAgICBpZiAob3B0aW9uc1BsYWNlbWVudCA9PSBcImFib3ZlXCIpIHtcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyVG9wTGVmdFJhZGl1cyA9IDBcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSAwXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzID0gYmFzZUJvcmRlclJhZGl1c1xuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzID0gYmFzZUJvcmRlclJhZGl1c1xuXG4gICAgICAgIGRlbGV0ZSBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJSYWRpdXNcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9uc1BsYWNlbWVudCA9PSBcImJlbG93XCIpIHtcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyVG9wTGVmdFJhZGl1cyA9IGJhc2VCb3JkZXJSYWRpdXNcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSBiYXNlQm9yZGVyUmFkaXVzXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzID0gMFxuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzID0gMFxuXG4gICAgICAgIGRlbGV0ZSBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJSYWRpdXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcInJvb3RWaWV3RGF0YVNldFwiLCB7XG4gICAgICAgICAgYXBwbGllZFJlcXVlc3RJZDogdGhpcy5zLmxvYWRPcHRpb25zQXBwbGllZFJlcXVlc3RJZCxcbiAgICAgICAgICBjbGFzczogY2xhc3NOYW1lLFxuICAgICAgICAgIGNvbXBvbmVudDogXCJoYXlhLXNlbGVjdFwiLFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIG9wZW5lZCxcbiAgICAgICAgICBvcHRpb25zUGxhY2VtZW50LFxuICAgICAgICAgIHJlcXVlc3RJZDogdGhpcy5zLmxvYWRPcHRpb25zUmVxdWVzdElkLFxuICAgICAgICAgIHRvZ2dsZXM6IEJvb2xlYW4odG9nZ2xlT3B0aW9ucylcbiAgICAgICAgfSwgW3RoaXMucy5sb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWQsIGNsYXNzTmFtZSwgaWQsIG9wZW5lZCwgb3B0aW9uc1BsYWNlbWVudCwgdGhpcy5zLmxvYWRPcHRpb25zUmVxdWVzdElkLCBCb29sZWFuKHRvZ2dsZU9wdGlvbnMpXSl9XG4gICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJtYWluXCIpfVxuICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdFwiXG4gICAgICA+XG4gICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vblNlbGVjdENvbnRhaW5lckxheW91dH1cbiAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uU2VsZWN0Q2xpY2tlZH1cbiAgICAgICAgICByZWY9e3RoaXMudHQuc2VsZWN0Q29udGFpbmVyUmVmfVxuICAgICAgICAgIHN0eWxlPXtzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbH1cbiAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9zZWxlY3QtY29udGFpbmVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudFNlbGVjdGVkXCIsIHRoaXMuY3VycmVudFNlbGVjdGVkU3R5bGUgfHw9IHtmbGV4OiAxLCBmbGV4V3JhcDogXCJ3cmFwXCIsIG92ZXJmbG93OiBcImhpZGRlblwifSl9XG4gICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9jdXJyZW50LXNlbGVjdGVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b3BlbmVkICYmICFtb2JpbGVPcHRpb25zU2hlZXQgJiZcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXh0SW5wdXQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeyghb3BlbmVkIHx8IG1vYmlsZU9wdGlvbnNTaGVldCkgJiZcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbnMubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICAgIDxUZXh0IG51bWJlck9mTGluZXM9ezF9IHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJub3RoaW5nU2VsZWN0ZWRcIiwgdGhpcy5ub3RoaW5nU2VsZWN0ZWRTdHlsZSB8fD0ge2NvbG9yOiBcImdyZXlcIn0pfT5cbiAgICAgICAgICAgICAgICAgICAge3BsYWNlaG9sZGVyIHx8IHRoaXMudHJhbnNsYXRlKFwiLm5vdGhpbmdfc2VsZWN0ZWRcIil9XG4gICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9ucy5sZW5ndGggPT0gMCAmJiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5wLm11bHRpcGxlID8gdmFsdWVzIDogW3ZhbHVlc1swXV0pLm1hcCgodmFsdWUpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17aWRGb3JDb21wb25lbnQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGN1cnJlbnQtdmFsdWUtJHt2YWx1ZX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHt2YWx1ZXMubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtpZEZvckNvbXBvbmVudCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2N1cnJlbnRPcHRpb25zLm1hcCgoY3VycmVudE9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgICAgIGtleT17Y3VycmVudE9wdGlvbi5rZXkgfHwgYGN1cnJlbnQtdmFsdWUtJHtjdXJyZW50T3B0aW9uLnZhbHVlfWB9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjdXJyZW50T3B0aW9uXCIsIHttYXJnaW5SaWdodDogNn0pfVxuICAgICAgICAgICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9jdXJyZW50LW9wdGlvblwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9uLnR5cGUgPT0gXCJncm91cFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRPcHRpb25Hcm91cFwiLCB0aGlzLmN1cnJlbnRPcHRpb25Hcm91cFN0eWxlIHx8PSB7Zm9udFdlaWdodDogXCJib2xkXCJ9KX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudE9wdGlvbkdyb3VwVGV4dFwiKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9uLnRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9uLnR5cGUgIT0gXCJncm91cFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmIG5hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2lkRm9yQ29tcG9uZW50KHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2RpZ2coY3VycmVudE9wdGlvbiwgXCJ2YWx1ZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByZXNlbnRPcHRpb24oY3VycmVudE9wdGlvbiwgXCJjdXJyZW50XCIpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY2hldnJvbkNvbnRhaW5lclwiLCB0aGlzLmNoZXZyb25Db250YWluZXJTdHlsZSB8fD0ge1xuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgbWFyZ2luTGVmdDogXCJhdXRvXCIsXG4gICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiA4XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L2NoZXZyb24tY29udGFpbmVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uIG5hbWU9e29wZW5lZCA/IFwiY2hldnJvbi11cFwiIDogXCJjaGV2cm9uLWRvd25cIn0gc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImNoZXZyb25cIiwgdGhpcy5jaGV2cm9uU3R5bGUgfHw9IHtmb250U2l6ZTogMTJ9KX0gLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIG9uTGF5b3V0PXt0aGlzLnR0Lm9uRW5kT2ZTZWxlY3RMYXlvdXR9XG4gICAgICAgICAgcmVmPXtlbmRPZlNlbGVjdFJlZn1cbiAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9lbmQtb2Ytc2VsZWN0XCJcbiAgICAgICAgLz5cbiAgICAgICAge29wZW5lZCAmJiB0aGlzLnAub3B0aW9uc1BvcnRhbCAmJlxuICAgICAgICAgIDxQb3J0YWwgbmFtZT17dGhpcy5wb3J0YWxOYW1lKCl9PlxuICAgICAgICAgICAge3RoaXMub3B0aW9uc0NvbnRhaW5lcigpfVxuICAgICAgICAgIDwvUG9ydGFsPlxuICAgICAgICB9XG4gICAgICAgIHtvcGVuZWQgJiYgIXRoaXMucC5vcHRpb25zUG9ydGFsICYmXG4gICAgICAgICAgPFZpZXc+XG4gICAgICAgICAgICB7dGhpcy5vcHRpb25zQ29udGFpbmVyKCl9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICB9XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e21vYmlsZU9wdGlvbnNTaGVldD86IGJvb2xlYW59fSBbcGFyYW1zXVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfVxuICAgKi9cbiAgc2VhcmNoVGV4dElucHV0KHttb2JpbGVPcHRpb25zU2hlZXQgPSBmYWxzZX0gPSB7fSkge1xuICAgIGNvbnN0IGlvc0xpa2VNb2JpbGVTaGVldCA9IG1vYmlsZU9wdGlvbnNTaGVldCAmJiBpc0lPU0xpa2VQbGF0Zm9ybSgpXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFRleHRJbnB1dFxuICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuc2VhcmNoVGV4dFZhbHVlfVxuICAgICAgICBvbkNoYW5nZVRleHQ9e3RoaXMudHQub25DaGFuZ2VTZWFyY2hUZXh0fVxuICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy50cmFuc2xhdGUoXCIuc2VhcmNoX2RvdF9kb3RfZG90XCIpfVxuICAgICAgICByZWY9e3RoaXMudHQuc2VhcmNoVGV4dElucHV0UmVmfVxuICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwic2VhcmNoVGV4dElucHV0XCIsIHN0eWxlc1tgc2VhcmNoVGV4dElucHV0LSR7aW9zTGlrZU1vYmlsZVNoZWV0fWBdIHx8PSB7XG4gICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgIGJvcmRlcldpZHRoOiAwLFxuICAgICAgICAgIGZvbnRTaXplOiBpb3NMaWtlTW9iaWxlU2hlZXQgPyAxNiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBvdXRsaW5lOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gXCJub25lXCIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgcGFkZGluZzogMFxuICAgICAgICB9LCBbaW9zTGlrZU1vYmlsZVNoZWV0XSl9XG4gICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L3NlYXJjaC1pbnB1dFwiXG4gICAgICAgIHsuLi50aGlzLnAuc2VhcmNoVGV4dElucHV0UHJvcHN9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nfG51bWJlcj58c3RyaW5nfG51bWJlcnx1bmRlZmluZWR9ICovXG4gIGRlZmF1bHRWYWx1ZXMgKCkge1xuICAgIGNvbnN0IHthdHRyaWJ1dGUsIGRlZmF1bHRWYWx1ZSwgZGVmYXVsdFZhbHVlcywgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zLCBtb2RlbH0gPSB0aGlzLnByb3BzXG5cbiAgICBpZiAoZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zKSByZXR1cm4gZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSkgcmV0dXJuIGRlZmF1bHRWYWx1ZVxuICAgIGlmIChkZWZhdWx0VmFsdWVzKSByZXR1cm4gZGVmYXVsdFZhbHVlc1xuXG4gICAgaWYgKGF0dHJpYnV0ZSAmJiBtb2RlbCkge1xuICAgICAgaWYgKCEoYXR0cmlidXRlIGluIG1vZGVsKSkgdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIGF0dHJpYnV0ZSBvbiAke21vZGVsLm1vZGVsQ2xhc3NEYXRhKCkubmFtZX06ICR7YXR0cmlidXRlfWApXG5cbiAgICAgIHJldHVybiBtb2RlbFthdHRyaWJ1dGVdKClcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59ICovXG4gIGlzQWN0aXZlKCkge1xuICAgIGlmICh0aGlzLnR0LmVuZE9mU2VsZWN0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8dm9pZD59ICovXG4gIGFzeW5jIGxvYWREZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNDYWxsYmFjaygpIHtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWVzID0gdGhpcy5kZWZhdWx0VmFsdWVzKClcblxuICAgIGlmICghZGVmYXVsdFZhbHVlcykgcmV0dXJuXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwibG9hZERlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uc0NhbGxiYWNrXCIsIHtkZWZhdWx0VmFsdWVzfSlcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJvcHMub3B0aW9ucyh7XG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5nZXRTZWFyY2hUZXh0KCksXG4gICAgICBwYWdlOiB0aGlzLmdldEFjdGl2ZVBhZ2UoKSxcbiAgICAgIHZhbHVlczogZGVmYXVsdFZhbHVlc1xuICAgIH0pXG5cbiAgICBjb25zdCB7b3B0aW9uc30gPSB0aGlzLnBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWREZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNDYWxsYmFjay5yZXN1bHRcIiwge2xvYWRlZE9wdGlvbnNDb3VudDogb3B0aW9ucz8ubGVuZ3RoIHx8IDB9KVxuXG4gICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zID0gdGhpcy5zdGF0ZS5jdXJyZW50T3B0aW9ucy5jb25jYXQob3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3twYWdlPzogbnVtYmVyfX0gW3BhcmFtc11cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBsb2FkT3B0aW9ucyA9IGFzeW5jICh7cGFnZX0gPSB7fSkgPT4ge1xuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucFxuICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gdGhpcy5nZXRTZWFyY2hUZXh0KClcbiAgICBjb25zdCByZXF1ZXN0SWQgPSArK3RoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWRcbiAgICB0aGlzLnMubG9hZE9wdGlvbnNSZXF1ZXN0SWQgPSByZXF1ZXN0SWRcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwibG9hZE9wdGlvbnNcIiwge1xuICAgICAgcGFnZSxcbiAgICAgIHJlcXVlc3RJZCxcbiAgICAgIHNlYXJjaFZhbHVlLFxuICAgICAgb3B0aW9uc1R5cGU6IEFycmF5LmlzQXJyYXkob3B0aW9ucykgPyBcImFycmF5XCIgOiB0eXBlb2Ygb3B0aW9uc1xuICAgIH0pXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9ucywgc2VhcmNoVmFsdWUsIHJlcXVlc3RJZClcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ZWRQYWdlID0gTnVtYmVyLmlzRmluaXRlKHBhZ2UpID8gcGFnZSA6IHRoaXMuZ2V0QWN0aXZlUGFnZSgpXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3B0aW9ucyh7c2VhcmNoVmFsdWUsIHBhZ2U6IHJlcXVlc3RlZFBhZ2V9KVxuICAgIGNvbnN0IHtvcHRpb25zOiBsb2FkZWRPcHRpb25zLCBwYWdlOiByZXN1bHRQYWdlLCBwYWdlU2l6ZSwgdG90YWxDb3VudH0gPSB0aGlzLnBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpXG5cbiAgICBpZiAocmVxdWVzdElkICE9IHRoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQpIHtcbiAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJsb2FkT3B0aW9ucy5pZ25vcmVkX3N0YWxlX3Jlc3VsdFwiLCB7XG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgbGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQ6IHRoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQsXG4gICAgICAgIHJlcXVlc3RlZFBhZ2UsXG4gICAgICAgIHNlYXJjaFZhbHVlXG4gICAgICB9KVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZXNvbHZlZFBhZ2UgPSBOdW1iZXIuaXNGaW5pdGUocmVzdWx0UGFnZSkgPyByZXN1bHRQYWdlIDogcmVxdWVzdGVkUGFnZVxuICAgIGNvbnN0IHJlc29sdmVkUGFnZVNpemUgPSB0aGlzLnJlc29sdmVQYWdlU2l6ZSh7b3B0aW9uczogbG9hZGVkT3B0aW9ucywgcGFnZTogcmVzb2x2ZWRQYWdlLCBwYWdlU2l6ZSwgdG90YWxDb3VudH0pXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSAmJiBOdW1iZXIuaXNGaW5pdGUocmVzb2x2ZWRQYWdlU2l6ZSkgJiYgcmVzb2x2ZWRQYWdlU2l6ZSA+IDBcbiAgICAgID8gTWF0aC5jZWlsKHRvdGFsQ291bnQgLyByZXNvbHZlZFBhZ2VTaXplKVxuICAgICAgOiBudWxsXG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGxvYWRlZE9wdGlvbnMsXG4gICAgICBsb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcbiAgICAgIHBhZ2U6IHJlc29sdmVkUGFnZSxcbiAgICAgIHBhZ2VJbnB1dFZhbHVlOiBTdHJpbmcocmVzb2x2ZWRQYWdlKSxcbiAgICAgIHBhZ2VTaXplOiBOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgPyByZXNvbHZlZFBhZ2VTaXplIDogbnVsbCxcbiAgICAgIHRvdGFsQ291bnQ6IE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSA/IHRvdGFsQ291bnQgOiBudWxsXG4gICAgfSwgKCkgPT4gdGhpcy5wcm9wcy5vbk9wdGlvbnNMb2FkZWQ/Lih7b3B0aW9uczogbG9hZGVkT3B0aW9uc30pKVxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWRPcHRpb25zLnJlc3VsdFwiLCB7XG4gICAgICBsb2FkZWRPcHRpb25zQ291bnQ6IGxvYWRlZE9wdGlvbnM/Lmxlbmd0aCB8fCAwLFxuICAgICAgcmVzb2x2ZWRQYWdlLFxuICAgICAgcmVzb2x2ZWRQYWdlU2l6ZSxcbiAgICAgIHRvdGFsQ291bnQ6IE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSA/IHRvdGFsQ291bnQgOiBudWxsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3trZXk6IHN0cmluZywgbG9hZGVkT3B0aW9uOiBIYXlhU2VsZWN0T3B0aW9ufX1cbiAgICogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX1cbiAgICovXG4gIGhheWFTZWxlY3RPcHRpb24oe2tleSwgbG9hZGVkT3B0aW9ufSkge1xuICAgIGlmIChsb2FkZWRPcHRpb24udHlwZSA9PSBcImdyb3VwXCIpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxPcHRpb25Hcm91cFxuICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgIG9wdGlvbj17bG9hZGVkT3B0aW9ufVxuICAgICAgICAgIHN0eWxlRW50cmllcz17dGhpcy50dC5vcHRpb25Hcm91cFN0eWxlRW50cmllcygpfVxuICAgICAgICAgIHN0eWxpbmdDb250ZXh0S2V5PXt0aGlzLnR0Lm9wdGlvbkdyb3VwU3R5bGluZ0NvbnRleHRLZXkoKX1cbiAgICAgICAgICBzdHlsaW5nRm9yPXt0aGlzLnR0Lm9wdGlvbkdyb3VwU3R5bGluZ0Zvcn1cbiAgICAgICAgLz5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE9wdGlvblxuICAgICAgICBjdXJyZW50T3B0aW9uVmFsdWVzPXt0aGlzLmdldEN1cnJlbnRPcHRpb25WYWx1ZXMoKX1cbiAgICAgICAgaWNvbj17dGhpcy5pY29uRm9yT3B0aW9uKGxvYWRlZE9wdGlvbil9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBvcHRpb249e2xvYWRlZE9wdGlvbn1cbiAgICAgICAgb25PcHRpb25DbGlja2VkPXt0aGlzLnR0Lm9uT3B0aW9uQ2xpY2tlZH1cbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudD17dGhpcy5zLm9wdGlvbnNQbGFjZW1lbnR9XG4gICAgICAgIHByZXNlbnRPcHRpb249e3RoaXMudHQucHJlc2VudE9wdGlvbn1cbiAgICAgICAgc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3I9e3RoaXMucHJvcHMuc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3J9XG4gICAgICAgIHNlbGVjdGVkSG92ZXJCYWNrZ3JvdW5kQ29sb3I9e3RoaXMucHJvcHMuc2VsZWN0ZWRIb3ZlckJhY2tncm91bmRDb2xvcn1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWFyY2hWYWx1ZV1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtyZXF1ZXN0SWRdXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgbG9hZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9ucywgc2VhcmNoVmFsdWUsIHJlcXVlc3RJZCA9IHRoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQpIHtcbiAgICBjb25zdCBsb3dlclNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWU/LnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBsb2FkZWRPcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoKHt0ZXh0fSkgPT4gIWxvd2VyU2VhcmNoVmFsdWUgfHwgdGV4dD8udG9Mb3dlckNhc2UoKT8uaW5jbHVkZXMobG93ZXJTZWFyY2hWYWx1ZSkpXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWRPcHRpb25zRnJvbUFycmF5XCIsIHtcbiAgICAgIHJlcXVlc3RJZCxcbiAgICAgIHRvdGFsT3B0aW9uc0NvdW50OiBvcHRpb25zLmxlbmd0aCxcbiAgICAgIHNlYXJjaFZhbHVlLFxuICAgICAgbG9hZGVkT3B0aW9uc0NvdW50OiBsb2FkZWRPcHRpb25zLmxlbmd0aFxuICAgIH0pXG5cbiAgICB0aGlzLnMubG9hZGVkT3B0aW9ucyA9IGxvYWRlZE9wdGlvbnNcbiAgICB0aGlzLnMubG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkID0gcmVxdWVzdElkXG4gICAgdGhpcy5zLnBhZ2UgPSAxXG4gICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gXCIxXCJcbiAgICB0aGlzLnMucGFnZVNpemUgPSBudWxsXG4gICAgdGhpcy5zLnRvdGFsQ291bnQgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7d2luZG93OiB7d2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXJ9fX0gZXZlbnRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkRpbWVuc2lvbnNDaGFuZ2UgPSAoe3dpbmRvd30pID0+IHtcbiAgICB0aGlzLndpbmRvd1dpZHRoID0gd2luZG93LndpZHRoXG4gICAgdGhpcy53aW5kb3dIZWlnaHQgPSB3aW5kb3cuaGVpZ2h0XG5cbiAgICBpZiAodGhpcy5zLm9wZW5lZCkge1xuICAgICAgdGhpcy5zeW5jT3B0aW9uc1BsYWNlbWVudFdpdGhNb2RlKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7bmF0aXZlRXZlbnQ/OiB7bGF5b3V0PzogSGF5YVNlbGVjdExheW91dH19fSBlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25TZWxlY3RDb250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIHRoaXMucy5zZWxlY3RDb250YWluZXJMYXlvdXQgPSBub3JtYWxpemVMYXlvdXQoZGlnZyhlLCBcIm5hdGl2ZUV2ZW50XCIsIFwibGF5b3V0XCIpKVxuICAgIHRoaXMubWVhc3VyZU5hdGl2ZUxheW91dCh0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZiwgXCJzZWxlY3RDb250YWluZXJMYXlvdXRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tuYXRpdmVFdmVudD86IHtsYXlvdXQ/OiBIYXlhU2VsZWN0TGF5b3V0fX19IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkVuZE9mU2VsZWN0TGF5b3V0ID0gKGUpID0+IHtcbiAgICBjb25zdCBlbmRPZlNlbGVjdExheW91dCA9IG5vcm1hbGl6ZUxheW91dChkaWdnKGUsIFwibmF0aXZlRXZlbnRcIiwgXCJsYXlvdXRcIikpXG4gICAgY29uc3QgbmV3U3RhdGUgPSB7ZW5kT2ZTZWxlY3RMYXlvdXR9XG5cbiAgICBpZiAodGhpcy5zLm9wZW5lZCAmJiBlbmRPZlNlbGVjdExheW91dD8ud2lkdGgpIHtcbiAgICAgIG5ld1N0YXRlLm9wdGlvbnNXaWR0aCA9IGVuZE9mU2VsZWN0TGF5b3V0LndpZHRoXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT4ge1xuICAgICAgdGhpcy5tZWFzdXJlTmF0aXZlTGF5b3V0KHRoaXMudHQuZW5kT2ZTZWxlY3RSZWYsIFwiZW5kT2ZTZWxlY3RMYXlvdXRcIilcblxuICAgICAgaWYgKHRoaXMucy5vcGVuZWQgJiYgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXQpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbigpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tuYXRpdmVFdmVudD86IHtsYXlvdXQ/OiBIYXlhU2VsZWN0TGF5b3V0fX19IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbk9wdGlvbnNDb250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIHRoaXMucy5vcHRpb25zQ29udGFpbmVyTGF5b3V0ID0gbm9ybWFsaXplTGF5b3V0KGRpZ2coZSwgXCJuYXRpdmVFdmVudFwiLCBcImxheW91dFwiKSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgbWVhc3VyZU5hdGl2ZVNlbGVjdExheW91dHMoKSB7XG4gICAgdGhpcy5tZWFzdXJlTmF0aXZlTGF5b3V0KHRoaXMudHQuc2VsZWN0Q29udGFpbmVyUmVmLCBcInNlbGVjdENvbnRhaW5lckxheW91dFwiKVxuICAgIHRoaXMubWVhc3VyZU5hdGl2ZUxheW91dCh0aGlzLnR0LmVuZE9mU2VsZWN0UmVmLCBcImVuZE9mU2VsZWN0TGF5b3V0XCIpXG4gIH1cblxuICAvKipcbiAgICogTWVhc3VyZXMgYSBuYXRpdmUgdmlldyBpbiB3aW5kb3cgY29vcmRpbmF0ZXMgZm9yIHBvcnRhbCBwb3NpdGlvbmluZy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWZPYmplY3Q8b2JqZWN0Pn0gcmVmIFZpZXcgcmVmLlxuICAgKiBAcGFyYW0ge1wic2VsZWN0Q29udGFpbmVyTGF5b3V0XCJ8XCJlbmRPZlNlbGVjdExheW91dFwifSBzdGF0ZUtleSBTdGF0ZSBsYXlvdXQga2V5LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG1lYXN1cmVOYXRpdmVMYXlvdXQocmVmLCBzdGF0ZUtleSkge1xuICAgIGlmIChQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSByZXR1cm5cblxuICAgIGNvbnN0IGVsZW1lbnQgPSByZWYuY3VycmVudFxuICAgIGlmICghZWxlbWVudCB8fCB0eXBlb2YgZWxlbWVudC5tZWFzdXJlSW5XaW5kb3cgIT0gXCJmdW5jdGlvblwiKSByZXR1cm5cblxuICAgIGVsZW1lbnQubWVhc3VyZUluV2luZG93KChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICAgIGNvbnN0IG1lYXN1cmVkTGF5b3V0ID0ge2hlaWdodCwgbGVmdCwgdG9wLCB3aWR0aH1cblxuICAgICAgaWYgKCFsYXlvdXRIYXNQb3NpdGlvbihtZWFzdXJlZExheW91dCkpIHJldHVyblxuXG4gICAgICAvKiogQHR5cGUge1BhcnRpYWw8SGF5YVNlbGVjdFN0YXRlPn0gKi9cbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBbc3RhdGVLZXldOiBtZWFzdXJlZExheW91dFxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVLZXkgPT0gXCJlbmRPZlNlbGVjdExheW91dFwiICYmIHRoaXMucy5vcGVuZWQgJiYgd2lkdGgpIHtcbiAgICAgICAgbmV3U3RhdGUub3B0aW9uc1dpZHRoID0gd2lkdGhcbiAgICAgIH1cblxuICAgICAgaWYgKCFhbnl0aGluZ0RpZmZlcmVudCh0aGlzLnNbc3RhdGVLZXldLCBtZWFzdXJlZExheW91dCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucy5vcGVuZWQgJiYgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXQpIHtcbiAgICAgICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvblNlbGVjdENsaWNrZWQgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgIGNvbnN0IHtvcGVuZWR9ID0gdGhpcy5zXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uU2VsZWN0Q2xpY2tlZFwiLCB7b3BlbmVkfSlcblxuICAgIGlmIChvcGVuZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VPcHRpb25zKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuT3B0aW9ucygpXG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2hUZXh0SW5wdXRDaGFuZ2VkRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy50dC5sb2FkT3B0aW9ucywgMjAwKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tvcHRpb25zPzogQXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59fSBbcGFyYW1zXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsb3NlT3B0aW9ucyh7b3B0aW9uc30gPSB7fSkge1xuICAgIGNvbnN0IGNsb3NlZE9wdGlvbnMgPSBvcHRpb25zIHx8IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICAgIGNvbnN0IHNlbGVjdElkID0gaWRGb3JDb21wb25lbnQodGhpcylcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwiY2xvc2VPcHRpb25zXCIsIHtjbG9zZWRPcHRpb25zQ291bnQ6IGNsb3NlZE9wdGlvbnM/Lmxlbmd0aCB8fCAwfSlcblxuICAgIC8vIENsZWFyIHRoZSBzaGFyZWQgb3Blbi1zZWxlY3Qgc2xvdCBpZiB0aGlzIGlzIHRoZSBzZWxlY3QgY3VycmVudGx5IG9wZW5cbiAgICBzZWxlY3RDb29yZGluYXRpb24uY2xvc2VTZWxlY3Qoc2VsZWN0SWQpXG5cbiAgICBpZiAodGhpcy5zLm9wZW5lZCAmJiB0aGlzLnMub3B0aW9uc1BsYWNlbWVudCA9PSBcInNoZWV0XCIpIHtcbiAgICAgIHRoaXMuY2xvc2VNb2JpbGVPcHRpb25zV2l0aEFuaW1hdGlvbih7Y2xvc2VkT3B0aW9uc30pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmZpbmlzaENsb3NlT3B0aW9ucyh7Y2xvc2VkT3B0aW9uc30pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7Y2xvc2VkT3B0aW9uczogQXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59fSBwYXJhbXMgQ2xvc2UgcGF5bG9hZC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbG9zZU1vYmlsZU9wdGlvbnNXaXRoQW5pbWF0aW9uKHtjbG9zZWRPcHRpb25zfSkge1xuICAgIGlmICh0aGlzLm1vYmlsZU9wdGlvbnNDbG9zaW5nKSByZXR1cm5cblxuICAgIHRoaXMubW9iaWxlT3B0aW9uc0Nsb3NpbmcgPSB0cnVlXG4gICAgdGhpcy5tb2JpbGVPcHRpb25zQmFja2Ryb3BPcGFjaXR5LnN0b3BBbmltYXRpb24oKVxuICAgIHRoaXMubW9iaWxlT3B0aW9uc0NvbnRhaW5lclByb2dyZXNzLnN0b3BBbmltYXRpb24oKVxuXG4gICAgQW5pbWF0ZWQucGFyYWxsZWwoW1xuICAgICAgQW5pbWF0ZWQudGltaW5nKHRoaXMubW9iaWxlT3B0aW9uc0JhY2tkcm9wT3BhY2l0eSwge1xuICAgICAgICBkdXJhdGlvbjogOTAsXG4gICAgICAgIGVhc2luZzogRWFzaW5nLm91dChFYXNpbmcuY3ViaWMpLFxuICAgICAgICB0b1ZhbHVlOiAwLFxuICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IHRydWVcbiAgICAgIH0pLFxuICAgICAgQW5pbWF0ZWQudGltaW5nKHRoaXMubW9iaWxlT3B0aW9uc0NvbnRhaW5lclByb2dyZXNzLCB7XG4gICAgICAgIGR1cmF0aW9uOiAxMTAsXG4gICAgICAgIGVhc2luZzogRWFzaW5nLmluKEVhc2luZy5jdWJpYyksXG4gICAgICAgIHRvVmFsdWU6IDAsXG4gICAgICAgIHVzZU5hdGl2ZURyaXZlcjogdHJ1ZVxuICAgICAgfSlcbiAgICBdKS5zdGFydCgoKSA9PiB7XG4gICAgICB0aGlzLm1vYmlsZU9wdGlvbnNDbG9zaW5nID0gZmFsc2VcbiAgICAgIHRoaXMuZmluaXNoQ2xvc2VPcHRpb25zKHtjbG9zZWRPcHRpb25zfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e2Nsb3NlZE9wdGlvbnM6IEFycmF5PEhheWFTZWxlY3RPcHRpb24+fX0gcGFyYW1zIENsb3NlIHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZmluaXNoQ2xvc2VPcHRpb25zKHtjbG9zZWRPcHRpb25zfSkge1xuICAgIHRoaXMuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gZmFsc2VcbiAgICB0aGlzLnVubG9ja0JvZHlTY3JvbGwoKVxuXG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgaGVpZ2h0OiBudWxsLFxuICAgICAgICBsb2FkZWRPcHRpb25zOiB1bmRlZmluZWQsXG4gICAgICAgIG9wZW5lZDogZmFsc2UsXG4gICAgICAgIG9wdGlvbnNDb250YWluZXJMYXlvdXQ6IG51bGwsXG4gICAgICAgIG9wdGlvbnNWaXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICBwYWdlOiAxLFxuICAgICAgICBwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgICAgcGFnZUlucHV0VmFsdWU6IFwiMVwiLFxuICAgICAgICBwYWdlU2l6ZTogbnVsbCxcbiAgICAgICAgdG90YWxDb3VudDogbnVsbFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImNsb3NlT3B0aW9ucy5kb25lXCIsIHtvcGVuZWQ6IHRoaXMucy5vcGVuZWQsIG9wdGlvbnNWaXNpYmlsaXR5OiB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHl9KVxuICAgICAgfVxuICAgIClcblxuICAgIGlmICh0aGlzLnByb3BzLm9uT3B0aW9uc0Nsb3NlZCkge1xuICAgICAgdGhpcy5wcm9wcy5vbk9wdGlvbnNDbG9zZWQoe29wdGlvbnM6IGNsb3NlZE9wdGlvbnN9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLnAub25CbHVyKSB0aGlzLnAub25CbHVyKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgcHJlcGFyZU1vYmlsZU9wdGlvbnNBbmltYXRpb24oKSB7XG4gICAgdGhpcy5tb2JpbGVPcHRpb25zQ2xvc2luZyA9IGZhbHNlXG4gICAgdGhpcy5tb2JpbGVPcHRpb25zQmFja2Ryb3BPcGFjaXR5LnN0b3BBbmltYXRpb24oKVxuICAgIHRoaXMubW9iaWxlT3B0aW9uc0NvbnRhaW5lclByb2dyZXNzLnN0b3BBbmltYXRpb24oKVxuICAgIHRoaXMubW9iaWxlT3B0aW9uc0JhY2tkcm9wT3BhY2l0eS5zZXRWYWx1ZSgwKVxuICAgIHRoaXMubW9iaWxlT3B0aW9uc0NvbnRhaW5lclByb2dyZXNzLnNldFZhbHVlKDApXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHN0YXJ0TW9iaWxlT3B0aW9uc09wZW5BbmltYXRpb24oKSB7XG4gICAgQW5pbWF0ZWQucGFyYWxsZWwoW1xuICAgICAgQW5pbWF0ZWQudGltaW5nKHRoaXMubW9iaWxlT3B0aW9uc0JhY2tkcm9wT3BhY2l0eSwge1xuICAgICAgICBkdXJhdGlvbjogOTAsXG4gICAgICAgIGVhc2luZzogRWFzaW5nLm91dChFYXNpbmcuY3ViaWMpLFxuICAgICAgICB0b1ZhbHVlOiAxLFxuICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IHRydWVcbiAgICAgIH0pLFxuICAgICAgQW5pbWF0ZWQudGltaW5nKHRoaXMubW9iaWxlT3B0aW9uc0NvbnRhaW5lclByb2dyZXNzLCB7XG4gICAgICAgIGR1cmF0aW9uOiAxMzAsXG4gICAgICAgIGVhc2luZzogRWFzaW5nLm91dChFYXNpbmcuYmFjaygxLjA1KSksXG4gICAgICAgIHRvVmFsdWU6IDEsXG4gICAgICAgIHVzZU5hdGl2ZURyaXZlcjogdHJ1ZVxuICAgICAgfSlcbiAgICBdKS5zdGFydCgpXG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gKi9cbiAgZ2V0U2VhcmNoVGV4dCA9ICgpID0+IHRoaXMuc2VhcmNoVGV4dFZhbHVlIHx8IFwiXCJcblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHJlc2V0U2VhcmNoVGV4dElucHV0ID0gKCkgPT4ge1xuICAgIHRoaXMuc2VhcmNoVGV4dFZhbHVlID0gXCJcIlxuICAgIGNvbnN0IGlucHV0ID0gdGhpcy50dC5zZWFyY2hUZXh0SW5wdXRSZWYuY3VycmVudFxuXG4gICAgaWYgKGlucHV0Py5jbGVhcikge1xuICAgICAgaW5wdXQuY2xlYXIoKVxuICAgIH0gZWxzZSBpZiAoaW5wdXQ/LnNldE5hdGl2ZVByb3BzKSB7XG4gICAgICBpbnB1dC5zZXROYXRpdmVQcm9wcyh7dGV4dDogXCJcIn0pXG4gICAgfSBlbHNlIGlmIChpbnB1dCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaW5wdXQudmFsdWUgPSBcIlwiXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZ25vcmUgaWYgdGhlIHJlZiBkb2Vzbid0IHN1cHBvcnQgZGlyZWN0IHZhbHVlIGFzc2lnbm1lbnQuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXh0XG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25DaGFuZ2VTZWFyY2hUZXh0ID0gKHNlYXJjaFRleHQpID0+IHtcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25DaGFuZ2VTZWFyY2hUZXh0XCIsIHtzZWFyY2hUZXh0LCBjdXJyZW50UGFnZTogdGhpcy5zLnBhZ2V9KVxuICAgIHRoaXMuc2VhcmNoVGV4dFZhbHVlID0gc2VhcmNoVGV4dFxuXG4gICAgaWYgKHRoaXMucy5wYWdlICE9IDEpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe3BhZ2U6IDEsIHBhZ2VJbnB1dFZhbHVlOiBcIjFcIn0sIHRoaXMudHQub25TZWFyY2hUZXh0SW5wdXRDaGFuZ2VkRGVib3VuY2VkKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnR0Lm9uU2VhcmNoVGV4dElucHV0Q2hhbmdlZERlYm91bmNlZCgpXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBvcGVuT3B0aW9ucygpIHtcbiAgICBjb25zdCBtb2JpbGVPcHRpb25zU2hlZXQgPSB0aGlzLmlzTW9iaWxlT3B0aW9uc1NoZWV0KClcbiAgICBjb25zdCBzZWxlY3RJZCA9IGlkRm9yQ29tcG9uZW50KHRoaXMpXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib3Blbk9wdGlvbnNcIiwge1xuICAgICAgY3VycmVudE9wdGlvbnNDb3VudDogdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpPy5sZW5ndGggfHwgMCxcbiAgICAgIG1vYmlsZU9wdGlvbnNTaGVldCxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IHRoaXMucC5zZWFyY2hcbiAgICB9KVxuICAgIHRoaXMuc2VhcmNoVGV4dFZhbHVlID0gXCJcIlxuICAgIHRoaXMuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gIW1vYmlsZU9wdGlvbnNTaGVldFxuXG4gICAgLy8gQ2xhaW0gdGhlIHNoYXJlZCBvcGVuLXNlbGVjdCBzbG90LCB3aGljaCBjbG9zZXMgYW55IG90aGVyIG9wZW4gc2VsZWN0XG4gICAgc2VsZWN0Q29vcmRpbmF0aW9uLm9wZW5TZWxlY3Qoc2VsZWN0SWQpXG5cbiAgICBpZiAobW9iaWxlT3B0aW9uc1NoZWV0KSB7XG4gICAgICB0aGlzLnByZXBhcmVNb2JpbGVPcHRpb25zQW5pbWF0aW9uKClcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICBoZWlnaHQ6IG1vYmlsZU9wdGlvbnNTaGVldCA/IG51bGwgOiB0aGlzLnMuc2VsZWN0Q29udGFpbmVyTGF5b3V0Py5oZWlnaHQsXG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudDogbW9iaWxlT3B0aW9uc1NoZWV0ID8gXCJzaGVldFwiIDogXCJiZWxvd1wiLFxuICAgICAgICBvcHRpb25zVmlzaWJpbGl0eTogbW9iaWxlT3B0aW9uc1NoZWV0ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiLFxuICAgICAgICBvcHRpb25zV2lkdGg6IG1vYmlsZU9wdGlvbnNTaGVldCA/IHVuZGVmaW5lZCA6IHRoaXMucy5lbmRPZlNlbGVjdExheW91dD8ud2lkdGgsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIHBhZ2VJbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgICBwYWdlSW5wdXRWYWx1ZTogXCIxXCIsXG4gICAgICAgIHNjcm9sbExlZnQ6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCA6IG51bGwsXG4gICAgICAgIHNjcm9sbFRvcDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgOiBudWxsXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAobW9iaWxlT3B0aW9uc1NoZWV0KSB7XG4gICAgICAgICAgdGhpcy5sb2NrQm9keVNjcm9sbCgpXG4gICAgICAgICAgdGhpcy5zdGFydE1vYmlsZU9wdGlvbnNPcGVuQW5pbWF0aW9uKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1lYXN1cmVOYXRpdmVTZWxlY3RMYXlvdXRzKClcbiAgICAgICAgICB0aGlzLmZvY3VzVGV4dElucHV0KClcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVzZXRTZWFyY2hUZXh0SW5wdXQoKVxuICAgICAgICB0aGlzLmxvYWRPcHRpb25zKHtwYWdlOiAxfSlcbiAgICAgIH1cbiAgICApXG5cbiAgICBpZiAodGhpcy5wLm9uRm9jdXMpIHRoaXMucC5vbkZvY3VzKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgZm9jdXNUZXh0SW5wdXQgPSAoKSA9PiBkaWdnKHRoaXMudHQuc2VhcmNoVGV4dElucHV0UmVmLCBcImN1cnJlbnRcIik/LmZvY3VzKClcblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIGxvY2tCb2R5U2Nyb2xsKCkge1xuICAgIGlmICh0aGlzLmJvZHlTY3JvbGxMb2NrZWQpIHJldHVyblxuXG4gICAgdGhpcy5ib2R5U2Nyb2xsTG9ja2VkID0gdHJ1ZVxuICAgIGFjcXVpcmVCb2R5U2Nyb2xsTG9jaygpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHVubG9ja0JvZHlTY3JvbGwoKSB7XG4gICAgaWYgKCF0aGlzLmJvZHlTY3JvbGxMb2NrZWQpIHJldHVyblxuXG4gICAgdGhpcy5ib2R5U2Nyb2xsTG9ja2VkID0gZmFsc2VcbiAgICByZWxlYXNlQm9keVNjcm9sbExvY2soKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBzZXRPcHRpb25zUG9zaXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICAgIHJldHVybiAvLyBEZWJvdW5jZSBhZnRlciB1bi1tb3VudCBoYW5kZWxpbmcuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNNb2JpbGVPcHRpb25zU2hlZXQoKSkge1xuICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25TaGVldCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnVubG9ja0JvZHlTY3JvbGwoKVxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvblwiKVxuICAgIHRoaXMuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gdHJ1ZVxuICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQmVsb3coKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBzeW5jT3B0aW9uc1BsYWNlbWVudFdpdGhNb2RlKCkge1xuICAgIGlmICghdGhpcy5zLm9wZW5lZCkgcmV0dXJuXG5cbiAgICBpZiAodGhpcy5pc01vYmlsZU9wdGlvbnNTaGVldCgpKSB7XG4gICAgICBpZiAodGhpcy5zLm9wdGlvbnNQbGFjZW1lbnQgIT0gXCJzaGVldFwiKSB0aGlzLnNldE9wdGlvbnNQb3NpdGlvblNoZWV0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLnMub3B0aW9uc1BsYWNlbWVudCA9PSBcInNoZWV0XCIpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQmVsb3coKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy51bmxvY2tCb2R5U2Nyb2xsKClcbiAgICB0aGlzLm1lYXN1cmVOYXRpdmVTZWxlY3RMYXlvdXRzKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4oKSB7XG4gICAgaWYgKCF0aGlzLnMub3BlbmVkKSByZXR1cm5cbiAgICBpZiAodGhpcy5pc01vYmlsZU9wdGlvbnNTaGVldCgpKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvblNoZWV0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHt3aW5kb3dIZWlnaHR9ID0gdGhpcy50dFxuICAgIGNvbnN0IHtvcHRpb25zQ29udGFpbmVyTGF5b3V0LCBzZWxlY3RDb250YWluZXJMYXlvdXR9ID0gdGhpcy5zXG4gICAgY29uc3QgZW5kT2ZTZWxlY3RMYXlvdXQgPSB0aGlzLnMuZW5kT2ZTZWxlY3RMYXlvdXRcblxuICAgIGNvbnN0IG9wdGlvbnNUb3AgPSBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiXG4gICAgICA/IGVuZE9mU2VsZWN0TGF5b3V0Py50b3BcbiAgICAgIDogdHlwZW9mIHNlbGVjdENvbnRhaW5lckxheW91dD8udG9wID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHNlbGVjdENvbnRhaW5lckxheW91dD8uaGVpZ2h0ID09IFwibnVtYmVyXCJcbiAgICAgICAgPyBzZWxlY3RDb250YWluZXJMYXlvdXQudG9wICsgc2VsZWN0Q29udGFpbmVyTGF5b3V0LmhlaWdodCArIDFcbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG9wdGlvbnNUb3ApKSB7XG4gICAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW5cIiwge3BsYWNlbWVudDogXCJiZWxvd1wiLCByZWFzb246IFwibWlzc2luZy1vcHRpb25zLXRvcFwifSlcbiAgICAgIHRoaXMubWVhc3VyZU5hdGl2ZVNlbGVjdExheW91dHMoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9uc1RvdGFsQm90dG9tUG9zaXRpb24gPSBvcHRpb25zQ29udGFpbmVyTGF5b3V0LmhlaWdodCArIG9wdGlvbnNUb3BcbiAgICBjb25zdCB3aW5kb3dIZWlnaHRXaXRoU2Nyb2xsID0gd2luZG93SGVpZ2h0ICsgKHRoaXMucy5zY3JvbGxUb3AgfHwgMClcblxuICAgIGlmICh3aW5kb3dIZWlnaHRXaXRoU2Nyb2xsIDwgb3B0aW9uc1RvdGFsQm90dG9tUG9zaXRpb24pIHtcbiAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlblwiLCB7cGxhY2VtZW50OiBcImFib3ZlXCJ9KVxuICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25BYm92ZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlblwiLCB7cGxhY2VtZW50OiBcImJlbG93XCJ9KVxuICAgICAgdGhpcy5zLm9wdGlvbnNWaXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCJcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHNldE9wdGlvbnNQb3NpdGlvblNoZWV0KCkge1xuICAgIGlmICghdGhpcy5zLm9wZW5lZCkgcmV0dXJuXG5cbiAgICBjb25zdCBzd2l0Y2hpbmdUb1NoZWV0ID0gdGhpcy5zLm9wdGlvbnNQbGFjZW1lbnQgIT0gXCJzaGVldFwiXG5cbiAgICBpZiAoc3dpdGNoaW5nVG9TaGVldCkge1xuICAgICAgdGhpcy5wcmVwYXJlTW9iaWxlT3B0aW9uc0FuaW1hdGlvbigpXG4gICAgfVxuXG4gICAgdGhpcy5sb2NrQm9keVNjcm9sbCgpXG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgIG9wdGlvbnNQbGFjZW1lbnQ6IFwic2hlZXRcIixcbiAgICAgIG9wdGlvbnNWaXNpYmlsaXR5OiBcInZpc2libGVcIixcbiAgICAgIG9wdGlvbnNXaWR0aDogdW5kZWZpbmVkXG4gICAgfSwgKCkgPT4ge1xuICAgICAgaWYgKHN3aXRjaGluZ1RvU2hlZXQpIHRoaXMuc3RhcnRNb2JpbGVPcHRpb25zT3BlbkFuaW1hdGlvbigpXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmUoKSB7XG4gICAgaWYgKCF0aGlzLnMub3BlbmVkKSByZXR1cm5cblxuICAgIGNvbnN0IHtlbmRPZlNlbGVjdExheW91dH0gPSB0aGlzLnNcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVcIilcbiAgICB0aGlzLnVubG9ja0JvZHlTY3JvbGwoKVxuXG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICBvcHRpb25zUGxhY2VtZW50OiBcImFib3ZlXCIsXG4gICAgICAgIG9wdGlvbnNWaXNpYmlsaXR5OiBcInZpc2libGVcIixcbiAgICAgICAgb3B0aW9uc1dpZHRoOiBlbmRPZlNlbGVjdExheW91dD8ud2lkdGhcbiAgICAgIH0sXG4gICAgICAoKSA9PiB0aGlzLmZvY3VzVGV4dElucHV0KClcbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHNldE9wdGlvbnNQb3NpdGlvbkJlbG93KCkge1xuICAgIGlmICghdGhpcy5zLm9wZW5lZCkgcmV0dXJuXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0T3B0aW9uc1Bvc2l0aW9uQmVsb3dcIilcbiAgICB0aGlzLnVubG9ja0JvZHlTY3JvbGwoKVxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudDogXCJiZWxvd1wiLFxuICAgICAgICBvcHRpb25zVmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgb3B0aW9uc1dpZHRoOiB0aGlzLnMuZW5kT2ZTZWxlY3RMYXlvdXQ/LndpZHRoXG4gICAgICB9LFxuICAgICAgKCkgPT4gdGhpcy5mb2N1c1RleHRJbnB1dCgpXG4gICAgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBvbkFueXRoaW5nUmVzaXplZCA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25Bbnl0aGluZ1Jlc2l6ZWRcIiwge29wZW5lZDogdGhpcy5zLm9wZW5lZH0pXG4gICAgaWYgKHRoaXMucy5vcGVuZWQpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uKClcbiAgICB9XG4gIH1cblxuICBvbkFueXRoaW5nUmVzaXplZERlYm91bmNlZCA9IGRlYm91bmNlKHRoaXMudHQub25Bbnl0aGluZ1Jlc2l6ZWQsIDI1KVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgb25Bbnl0aGluZ1Njcm9sbGVkID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvbkFueXRoaW5nU2Nyb2xsZWRcIiwge29wZW5lZDogdGhpcy5zLm9wZW5lZH0pXG4gICAgaWYgKHRoaXMucy5vcGVuZWQpIHtcbiAgICAgIHRoaXMucy5zY3JvbGxMZWZ0ID0gUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogbnVsbFxuICAgICAgdGhpcy5zLnNjcm9sbFRvcCA9IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIDogbnVsbFxuICAgICAgaWYgKHRoaXMuaXNNb2JpbGVPcHRpb25zU2hlZXQoKSkgcmV0dXJuXG5cbiAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uKClcbiAgICB9XG4gIH1cblxuICBvbkFueXRoaW5nU2Nyb2xsZWREZWJvdW5jZWQgPSBkZWJvdW5jZSh0aGlzLnR0Lm9uQW55dGhpbmdTY3JvbGxlZCwgMjUpXG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBvblByZXNzT3V0c2lkZU9wdGlvbnMgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uUHJlc3NPdXRzaWRlT3B0aW9uc1wiLCB7b3BlbmVkOiB0aGlzLnMub3BlbmVkfSlcbiAgICAvLyBJZiBvcHRpb25zIGFyZSBvcGVuIGFuZCBhIGNsaWNrIGlzIG1hZGUgb3V0c2lkZSBvZiB0aGUgb3B0aW9ucyBjb250YWluZXJcbiAgICBpZiAodGhpcy5zLm9wZW5lZCkge1xuICAgICAgdGhpcy5jbG9zZU9wdGlvbnMoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCBSZXNwb25kZXIgZXZlbnQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25Nb2JpbGVPcHRpb25zQmFja2Ryb3BSZWxlYXNlID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgdGhpcy5jbG9zZU9wdGlvbnMoKVxuICB9XG5cbiAgbW9iaWxlT3B0aW9uc0JhY2tkcm9wUGFuUmVzcG9uZGVyID0gUGFuUmVzcG9uZGVyLmNyZWF0ZSh7XG4gICAgb25TdGFydFNob3VsZFNldFBhblJlc3BvbmRlcjogKCkgPT4gdHJ1ZSxcbiAgICBvbk1vdmVTaG91bGRTZXRQYW5SZXNwb25kZXI6ICgpID0+IGZhbHNlLFxuICAgIG9uUGFuUmVzcG9uZGVyUmVsZWFzZTogdGhpcy50dC5vbk1vYmlsZU9wdGlvbnNCYWNrZHJvcFJlbGVhc2UsXG4gICAgb25QYW5SZXNwb25kZXJUZXJtaW5hdGU6IHRoaXMudHQub25Nb2JpbGVPcHRpb25zQmFja2Ryb3BSZWxlYXNlXG4gIH0pXG5cbiAgLyoqIEByZXR1cm5zIHtudW1iZXJ8bnVsbH0gKi9cbiAgcGFnaW5hdGlvblRvdGFsUGFnZXMoKSB7XG4gICAgY29uc3Qge3RvdGFsQ291bnR9ID0gdGhpcy5zXG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSB8fCB0b3RhbENvdW50IDw9IDApIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucmVzb2x2ZVBhZ2VTaXplKHtcbiAgICAgIG9wdGlvbnM6IHRoaXMucy5sb2FkZWRPcHRpb25zIHx8IFtdLFxuICAgICAgcGFnZTogdGhpcy5nZXRBY3RpdmVQYWdlKCksXG4gICAgICBwYWdlU2l6ZTogdGhpcy5zLnBhZ2VTaXplLFxuICAgICAgdG90YWxDb3VudFxuICAgIH0pXG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShwYWdlU2l6ZSkgfHwgcGFnZVNpemUgPD0gMCkgcmV0dXJuIG51bGxcblxuICAgIHJldHVybiBNYXRoLmNlaWwodG90YWxDb3VudCAvIHBhZ2VTaXplKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFBhZ2VzXG4gICAqIEByZXR1cm5zIHtBcnJheTx7a2V5OiBzdHJpbmcsIHR5cGU6IFwicGFnZVwifFwiZWxsaXBzaXNcIiwgdmFsdWU/OiBudW1iZXJ9Pn1cbiAgICovXG4gIHBhZ2luYXRpb25QYWdlSXRlbXModG90YWxQYWdlcykge1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5nZXRBY3RpdmVQYWdlKClcbiAgICBjb25zdCBpdGVtcyA9IFtdXG4gICAgY29uc3QgYWRkUGFnZSA9IChwYWdlKSA9PiBpdGVtcy5wdXNoKHtrZXk6IGBwYWdlLSR7cGFnZX1gLCB0eXBlOiBcInBhZ2VcIiwgdmFsdWU6IHBhZ2V9KVxuICAgIGNvbnN0IGFkZEVsbGlwc2lzID0gKGtleSkgPT4gaXRlbXMucHVzaCh7a2V5LCB0eXBlOiBcImVsbGlwc2lzXCJ9KVxuXG4gICAgaWYgKHRvdGFsUGFnZXMgPD0gNykge1xuICAgICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0gdG90YWxQYWdlczsgcGFnZSArPSAxKSB7XG4gICAgICAgIGFkZFBhZ2UocGFnZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW1zXG4gICAgfVxuXG4gICAgYWRkUGFnZSgxKVxuXG4gICAgY29uc3Qgd2luZG93U2l6ZSA9IDJcbiAgICBsZXQgc3RhcnQgPSBNYXRoLm1heCgyLCBjdXJyZW50UGFnZSAtIHdpbmRvd1NpemUpXG4gICAgbGV0IGVuZCA9IE1hdGgubWluKHRvdGFsUGFnZXMgLSAxLCBjdXJyZW50UGFnZSArIHdpbmRvd1NpemUpXG5cbiAgICBpZiAoY3VycmVudFBhZ2UgPD0gMykge1xuICAgICAgc3RhcnQgPSAyXG4gICAgICBlbmQgPSBNYXRoLm1pbih0b3RhbFBhZ2VzIC0gMSwgNSlcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXMgLSAyKSB7XG4gICAgICBlbmQgPSB0b3RhbFBhZ2VzIC0gMVxuICAgICAgc3RhcnQgPSBNYXRoLm1heCgyLCB0b3RhbFBhZ2VzIC0gNClcbiAgICB9XG5cbiAgICBpZiAoc3RhcnQgPiAyKSBhZGRFbGxpcHNpcyhcImVsbGlwc2lzLXN0YXJ0XCIpXG5cbiAgICBmb3IgKGxldCBwYWdlID0gc3RhcnQ7IHBhZ2UgPD0gZW5kOyBwYWdlICs9IDEpIHtcbiAgICAgIGFkZFBhZ2UocGFnZSlcbiAgICB9XG5cbiAgICBpZiAoZW5kIDwgdG90YWxQYWdlcyAtIDEpIGFkZEVsbGlwc2lzKFwiZWxsaXBzaXMtZW5kXCIpXG5cbiAgICBhZGRQYWdlKHRvdGFsUGFnZXMpXG5cbiAgICByZXR1cm4gaXRlbXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWxQYWdlc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgcGFnaW5hdGlvbkRpc3BsYXlWYWx1ZSh0b3RhbFBhZ2VzKSB7XG4gICAgY29uc3QgYWN0aXZlUGFnZSA9IHRoaXMuZ2V0QWN0aXZlUGFnZSgpXG4gICAgY29uc3QgZmFsbGJhY2tUZXh0ID0gYFBhZ2UgJHthY3RpdmVQYWdlfSBvZiAke3RvdGFsUGFnZXN9YFxuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlKFwiLnBhZ2luYXRpb25fcGFnZV9vZl9wYWdlc1wiLCB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbGxiYWNrVGV4dCxcbiAgICAgIHBhZ2U6IGFjdGl2ZVBhZ2UsXG4gICAgICB0b3RhbFBhZ2VzXG4gICAgfSkgfHwgZmFsbGJhY2tUZXh0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsUGFnZXNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHBhZ2luYXRpb25JbnB1dFZhbHVlKHRvdGFsUGFnZXMpIHtcbiAgICBpZiAodGhpcy5zLnBhZ2VJbnB1dEZvY3VzZWQpIHJldHVybiB0aGlzLnMucGFnZUlucHV0VmFsdWVcblxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb25EaXNwbGF5VmFsdWUodG90YWxQYWdlcylcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge251bWJlcn0gcGFnZSAqL1xuICBzZXRQYWdpbmF0aW9uUGFnZSA9IChwYWdlKSA9PiB7XG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblRvdGFsUGFnZXMoKVxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRQYWdpbmF0aW9uUGFnZVwiLCB7cmVxdWVzdGVkUGFnZTogcGFnZSwgdG90YWxQYWdlc30pXG5cbiAgICBpZiAoIXRvdGFsUGFnZXMpIHJldHVyblxuXG4gICAgY29uc3QgbmV4dFBhZ2UgPSBNYXRoLm1pbihNYXRoLm1heChNYXRoLmZsb29yKHBhZ2UpLCAxKSwgdG90YWxQYWdlcylcblxuICAgIGlmIChuZXh0UGFnZSA9PSB0aGlzLmdldEFjdGl2ZVBhZ2UoKSkge1xuICAgICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gU3RyaW5nKHRoaXMuZ2V0QWN0aXZlUGFnZSgpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtwYWdlOiBuZXh0UGFnZSwgcGFnZUlucHV0VmFsdWU6IFN0cmluZyhuZXh0UGFnZSl9LFxuICAgICAgKCkgPT4gdGhpcy50dC5sb2FkT3B0aW9ucyh7cGFnZTogbmV4dFBhZ2V9KVxuICAgIClcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25QcmV2UHJlc3NlZCA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIHRoaXMuc2V0UGFnaW5hdGlvblBhZ2UodGhpcy5nZXRBY3RpdmVQYWdlKCkgLSAxKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvbk5leHRQcmVzc2VkID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgdGhpcy5zZXRQYWdpbmF0aW9uUGFnZSh0aGlzLmdldEFjdGl2ZVBhZ2UoKSArIDEpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIG9uUGFnaW5hdGlvbklucHV0Rm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5zLnBhZ2VJbnB1dEZvY3VzZWQgPSB0cnVlXG4gICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gU3RyaW5nKHRoaXMuZ2V0QWN0aXZlUGFnZSgpKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAqL1xuICBvblBhZ2luYXRpb25JbnB1dENoYW5nZSA9ICh2YWx1ZSkgPT4ge1xuICAgIHRoaXMucy5wYWdlSW5wdXRWYWx1ZSA9IHZhbHVlXG4gIH1cblxuICAvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgKi9cbiAgb25QYWdpbmF0aW9uSW5wdXRCbHVyID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblRvdGFsUGFnZXMoKVxuICAgIGNvbnN0IHJhd1ZhbHVlID0gZXZlbnQ/LnRhcmdldD8udmFsdWUgPz8gdGhpcy5zLnBhZ2VJbnB1dFZhbHVlXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSByYXdWYWx1ZSA/IE51bWJlcihTdHJpbmcocmF3VmFsdWUpLm1hdGNoKC9cXGQrLyk/LlswXSkgOiBOYU5cbiAgICBjb25zdCBuZXh0UGFnZSA9IE51bWJlci5pc0Zpbml0ZShwYXJzZWRWYWx1ZSkgPyBwYXJzZWRWYWx1ZSA6IE51bWJlcih0aGlzLnMucGFnZUlucHV0VmFsdWUpXG5cbiAgICBpZiAodG90YWxQYWdlcyAmJiBOdW1iZXIuaXNGaW5pdGUobmV4dFBhZ2UpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZX0sICgpID0+IHRoaXMuc2V0UGFnaW5hdGlvblBhZ2UobmV4dFBhZ2UpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHBhZ2VJbnB1dFZhbHVlOiBTdHJpbmcodGhpcy5nZXRBY3RpdmVQYWdlKCkpXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25JbnB1dFN1Ym1pdCA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnBhZ2luYXRpb25Ub3RhbFBhZ2VzKClcblxuICAgIGlmICghdG90YWxQYWdlcykge1xuICAgICAgdGhpcy5zLnBhZ2VJbnB1dEZvY3VzZWQgPSBmYWxzZVxuICAgICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gU3RyaW5nKHRoaXMuZ2V0QWN0aXZlUGFnZSgpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFBhZ2UgPSBOdW1iZXIodGhpcy5zLnBhZ2VJbnB1dFZhbHVlKVxuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobmV4dFBhZ2UpKSB7XG4gICAgICB0aGlzLnMucGFnZUlucHV0Rm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLnMucGFnZUlucHV0VmFsdWUgPSBTdHJpbmcodGhpcy5nZXRBY3RpdmVQYWdlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZX0sICgpID0+IHRoaXMuc2V0UGFnaW5hdGlvblBhZ2UobmV4dFBhZ2UpKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvbklucHV0S2V5RG93biA9IChldmVudCkgPT4ge1xuICAgIGlmIChldmVudD8ua2V5ICE9PSBcIkVudGVyXCIpIHJldHVyblxuXG4gICAgdGhpcy50dC5vblBhZ2luYXRpb25JbnB1dFN1Ym1pdChldmVudClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfG51bGx9ICovXG4gIHBhZ2luYXRpb25Db250cm9scygpIHtcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5wYWdpbmF0aW9uVG90YWxQYWdlcygpXG5cbiAgICBpZiAoIXRvdGFsUGFnZXMgfHwgdG90YWxQYWdlcyA8PSAxKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLmdldEFjdGl2ZVBhZ2UoKVxuICAgIGNvbnN0IHByZXZEaXNhYmxlZCA9IGN1cnJlbnRQYWdlIDw9IDFcbiAgICBjb25zdCBuZXh0RGlzYWJsZWQgPSBjdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uQ29udGFpbmVyIHx8PSB7XG4gICAgICAgICAgYm9yZGVyVG9wQ29sb3I6IFwiI2UyZThmMFwiLFxuICAgICAgICAgIGJvcmRlclRvcFdpZHRoOiAxLFxuICAgICAgICAgIHBhZGRpbmc6IDhcbiAgICAgICAgfX1cbiAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3Qvb3B0aW9ucy1wYWdpbmF0aW9uXCJcbiAgICAgID5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25IZWFkZXIgfHw9IHtmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCJ9fVxuICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L3BhZ2luYXRpb24taGVhZGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICAgIGRpc2FibGVkPXtwcmV2RGlzYWJsZWR9XG4gICAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uUGFnaW5hdGlvblByZXZQcmVzc2VkfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlc1tgcGFnaW5hdGlvbk5hdkJ1dHRvbi0ke3ByZXZEaXNhYmxlZH1gXSB8fD0ge1xuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2Y4ZmFmY1wiLFxuICAgICAgICAgICAgICBib3JkZXJDb2xvcjogXCIjY2JkNWUxXCIsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogOCxcbiAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgICAgIGhlaWdodDogMzAsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBwcmV2RGlzYWJsZWQgPyAwLjQgOiAxLFxuICAgICAgICAgICAgICB3aWR0aDogMzBcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9wYWdpbmF0aW9uLXByZXZcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb25cbiAgICAgICAgICAgICAgbmFtZT1cImNoZXZyb24tbGVmdFwiXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbk5hdkljb24gfHw9IHtjb2xvcjogXCIjMzM0MTU1XCIsIGZvbnRTaXplOiAxMn19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBkYXRhU2V0PXt0aGlzLmNhY2hlKFwicGFnaW5hdGlvbkxhYmVsRGF0YVNldFwiLCB7XG4gICAgICAgICAgICAgIHBhZ2U6IGN1cnJlbnRQYWdlXG4gICAgICAgICAgICB9LCBbY3VycmVudFBhZ2VdKX1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkxhYmVsQnV0dG9uIHx8PSB7XG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZjFmNWY5XCIsXG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBcIiNjYmQ1ZTFcIixcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAxNCxcbiAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBtaW5XaWR0aDogMTQwLFxuICAgICAgICAgICAgICBwYWRkaW5nSG9yaXpvbnRhbDogMTAsXG4gICAgICAgICAgICAgIHBhZGRpbmdWZXJ0aWNhbDogNlxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L3BhZ2luYXRpb24tbGFiZWxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAga2V5Ym9hcmRUeXBlPVwibnVtYmVyLXBhZFwiXG4gICAgICAgICAgICAgIG9uQmx1cj17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dEJsdXJ9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlVGV4dD17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgb25Gb2N1cz17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dEZvY3VzfVxuICAgICAgICAgICAgICBvblByZXNzSW49e3RoaXMudHQub25QYWdpbmF0aW9uSW5wdXRGb2N1c31cbiAgICAgICAgICAgICAgb25LZXlEb3duPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0S2V5RG93bn1cbiAgICAgICAgICAgICAgb25TdWJtaXRFZGl0aW5nPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0U3VibWl0fVxuICAgICAgICAgICAgICByZWY9e3RoaXMudHQucGFnZUlucHV0UmVmfVxuICAgICAgICAgICAgICBzZWxlY3RUZXh0T25Gb2N1c1xuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25JbnB1dFN0eWxlIHx8PSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgY29sb3I6IFwiIzBmMTcyYVwiLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICAgICAgICBvdXRsaW5lOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gXCJub25lXCIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEyMFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9wYWdpbmF0aW9uLWlucHV0XCJcbiAgICAgICAgICAgICAgdmFsdWU9e3RoaXMucGFnaW5hdGlvbklucHV0VmFsdWUodG90YWxQYWdlcyl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8UHJlc3NhYmxlXG4gICAgICAgICAgICBkaXNhYmxlZD17bmV4dERpc2FibGVkfVxuICAgICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vblBhZ2luYXRpb25OZXh0UHJlc3NlZH1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXNbYHBhZ2luYXRpb25OYXZCdXR0b24tJHtuZXh0RGlzYWJsZWR9YF0gfHw9IHtcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNmOGZhZmNcIixcbiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IFwiI2NiZDVlMVwiLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDgsXG4gICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICAgICAgICBoZWlnaHQ6IDMwLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgb3BhY2l0eTogbmV4dERpc2FibGVkID8gMC40IDogMSxcbiAgICAgICAgICAgICAgd2lkdGg6IDMwXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QvcGFnaW5hdGlvbi1uZXh0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uXG4gICAgICAgICAgICAgIG5hbWU9XCJjaGV2cm9uLXJpZ2h0XCJcbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uTmF2SWNvbiB8fD0ge2NvbG9yOiBcIiMzMzQxNTVcIiwgZm9udFNpemU6IDEyfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25QYWdlcyB8fD0ge1xuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogXCJyb3dcIixcbiAgICAgICAgICAgIGZsZXhXcmFwOiBcIndyYXBcIixcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgbWFyZ2luVG9wOiA4XG4gICAgICAgICAgfX1cbiAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9wYWdpbmF0aW9uLXBhZ2VzXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnBhZ2luYXRpb25QYWdlSXRlbXModG90YWxQYWdlcykubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS50eXBlID09IFwiZWxsaXBzaXNcIikge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgICBrZXk9e2l0ZW0ua2V5fVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uRWxsaXBzaXMgfHw9IHtwYWRkaW5nSG9yaXpvbnRhbDogNn19XG4gICAgICAgICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9wYWdpbmF0aW9uLWVsbGlwc2lzXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25FbGxpcHNpc1RleHQgfHw9IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCIjNjQ3NDhiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IDEyLFxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDYwMFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAuLi5cbiAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFBhZ2luYXRpb25QYWdlQnV0dG9uXG4gICAgICAgICAgICAgICAgYWN0aXZlPXtpdGVtLnZhbHVlID09IGN1cnJlbnRQYWdlfVxuICAgICAgICAgICAgICAgIGtleT17aXRlbS5rZXl9XG4gICAgICAgICAgICAgICAgb25QYWdlU2VsZWN0ZWQ9e3RoaXMudHQuc2V0UGFnaW5hdGlvblBhZ2V9XG4gICAgICAgICAgICAgICAgcGFnZT17aXRlbS52YWx1ZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tsb2FkZWRPcHRpb25zOiBBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnx1bmRlZmluZWR9fSBhcmdzIE9wdGlvbnMgdG8gcmVuZGVyLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfVxuICAgKi9cbiAgb3B0aW9uc0xpc3RDb250ZW50KHtsb2FkZWRPcHRpb25zfSkge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7bG9hZGVkT3B0aW9ucz8ubWFwKChsb2FkZWRPcHRpb24pID0+XG4gICAgICAgICAgdGhpcy5oYXlhU2VsZWN0T3B0aW9uKHtcbiAgICAgICAgICAgIGtleTogbG9hZGVkT3B0aW9uLmtleSB8fCBgbG9hZGVkLW9wdGlvbi0ke2xvYWRlZE9wdGlvbi52YWx1ZX1gLFxuICAgICAgICAgICAgbG9hZGVkT3B0aW9uXG4gICAgICAgICAgfSlcbiAgICAgICAgKX1cbiAgICAgICAge2xvYWRlZE9wdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwibm9PcHRpb25zQ29udGFpbmVyXCIsIHRoaXMubm9PcHRpb25zQ29udGFpbmVyU3R5bGUgfHw9IHtcbiAgICAgICAgICAgICAgcGFkZGluZ0JvdHRvbTogMTAsXG4gICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiA4LFxuICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IDgsXG4gICAgICAgICAgICAgIHBhZGRpbmdUb3A6IDEwXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L25vLW9wdGlvbnMtY29udGFpbmVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAge3RoaXMucC5ub09wdGlvbnNUZXh0ID8gdGhpcy5wLm5vT3B0aW9uc1RleHQoKSA6IHRoaXMudHJhbnNsYXRlKFwiLm5vX29wdGlvbnNfZm91bmRcIil9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICB9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7aWQ6IHN0cmluZ3xudW1iZXIsIG9wdGlvbnNMaXN0Q29udGVudDogaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlLCBwYWdpbmF0aW9uQ29udHJvbHM6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZXxudWxsfX0gYXJncyBNb2JpbGUgc2hlZXQgY29udGVudC5cbiAgICogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX1cbiAgICovXG4gIG1vYmlsZU9wdGlvbnNDb250YWluZXIoe2lkLCBvcHRpb25zTGlzdENvbnRlbnQsIHBhZ2luYXRpb25Db250cm9sc30pIHtcbiAgICBjb25zdCBzaGVldE1heEhlaWdodCA9IE1hdGgucm91bmQoRGltZW5zaW9ucy5nZXQoXCJ3aW5kb3dcIikuaGVpZ2h0ICogMC44KVxuICAgIGxldCBzaGVldFN0eWxlID0gdGhpcy5zdHlsaW5nRm9yKFwib3B0aW9uc0NvbnRhaW5lclwiLCB7XG4gICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgekluZGV4OiAxMDAwMDAsXG4gICAgICBlbGV2YXRpb246IDEwMDAwMCxcbiAgICAgIGxlZnQ6IDEwLFxuICAgICAgcmlnaHQ6IDEwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgbWF4SGVpZ2h0OiBzaGVldE1heEhlaWdodCxcbiAgICAgIHNoYWRvd0NvbG9yOiBcIiMwZjE3MmFcIixcbiAgICAgIHNoYWRvd09mZnNldDoge2hlaWdodDogLTEyLCB3aWR0aDogMH0sXG4gICAgICBzaGFkb3dPcGFjaXR5OiAwLjQ4LFxuICAgICAgc2hhZG93UmFkaXVzOiAzNCxcbiAgICAgIGJveFNoYWRvdzogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIlxuICAgICAgICA/IFwiMCAtMjhweCA3MnB4IHJnYmEoMTUsIDIzLCA0MiwgMC41NiksIDAgLThweCAyNHB4IHJnYmEoMTUsIDIzLCA0MiwgMC4zOCksIDAgMCAwIDFweCByZ2JhKDE1LCAyMywgNDIsIDAuMTIpXCJcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2ZmZlwiLFxuICAgICAgYm9yZGVyVG9wTGVmdFJhZGl1czogMTgsXG4gICAgICBib3JkZXJUb3BSaWdodFJhZGl1czogMTgsXG4gICAgICBvcGFjaXR5OiB0aGlzLm1vYmlsZU9wdGlvbnNDb250YWluZXJQcm9ncmVzcyxcbiAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgdHJhbnNmb3JtOiB0aGlzLm1vYmlsZU9wdGlvbnNDb250YWluZXJUcmFuc2Zvcm0sXG4gICAgICB2aXNpYmlsaXR5OiB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHlcbiAgICB9LCBbc2hlZXRNYXhIZWlnaHQsIHRoaXMucy5vcHRpb25zVmlzaWJpbGl0eV0pXG5cbiAgICBpZiAoXCJoZWlnaHRcIiBpbiBzaGVldFN0eWxlKSB7XG4gICAgICBzaGVldFN0eWxlID0gT2JqZWN0LmFzc2lnbih7fSwgc2hlZXRTdHlsZSlcbiAgICAgIGRlbGV0ZSBzaGVldFN0eWxlLmhlaWdodFxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwibW9iaWxlT3B0aW9uc092ZXJsYXlcIiwgc3R5bGVzLm1vYmlsZU9wdGlvbnNPdmVybGF5IHx8PSB7XG4gICAgICAgICAgcG9zaXRpb246IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgIHpJbmRleDogOTk5OTksXG4gICAgICAgICAgZWxldmF0aW9uOiA5OTk5OVxuICAgICAgICB9KX1cbiAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QvbW9iaWxlLW9wdGlvbnMtb3ZlcmxheVwiXG4gICAgICA+XG4gICAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm1vYmlsZU9wdGlvbnNCYWNrZHJvcFwiLCB0aGlzLm1vYmlsZU9wdGlvbnNCYWNrZHJvcFN0eWxlIHx8PSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInJnYmEoMTUsIDIzLCA0MiwgMC4zMilcIixcbiAgICAgICAgICAgIG9wYWNpdHk6IHRoaXMubW9iaWxlT3B0aW9uc0JhY2tkcm9wT3BhY2l0eVxuICAgICAgICAgIH0pfVxuICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L21vYmlsZS1vcHRpb25zLWJhY2tkcm9wXCJcbiAgICAgICAgICB7Li4udGhpcy50dC5tb2JpbGVPcHRpb25zQmFja2Ryb3BQYW5SZXNwb25kZXIucGFuSGFuZGxlcnN9XG4gICAgICAgIC8+XG4gICAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcbiAgICAgICAgICAgIFwibW9iaWxlT3B0aW9uc0NvbnRhaW5lckRhdGFTZXRcIixcbiAgICAgICAgICAgIHtpZCwgcm9sZTogXCJkaWFsb2dcIiwgb3B0aW9uc1BsYWNlbWVudDogXCJzaGVldFwiLCBvcHRpb25zVmlzaWJpbGl0eTogdGhpcy5zLm9wdGlvbnNWaXNpYmlsaXR5IHx8IFwiaGlkZGVuXCJ9LFxuICAgICAgICAgICAgW2lkLCB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHldXG4gICAgICAgICAgKX1cbiAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbk9wdGlvbnNDb250YWluZXJMYXlvdXR9XG4gICAgICAgICAgcmVmPXt0aGlzLnR0Lm9wdGlvbnNDb250YWluZXJSZWZ9XG4gICAgICAgICAgc3R5bGU9e3NoZWV0U3R5bGV9XG4gICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3Qvb3B0aW9ucy1jb250YWluZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPFNjcm9sbFZpZXdcbiAgICAgICAgICAgIGNvbnRlbnRDb250YWluZXJTdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwibW9iaWxlT3B0aW9uc1Njcm9sbENvbnRlbnRcIiwgc3R5bGVzLm1vYmlsZU9wdGlvbnNTY3JvbGxDb250ZW50IHx8PSB7XG4gICAgICAgICAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJmbGV4LWVuZFwiXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIGtleWJvYXJkU2hvdWxkUGVyc2lzdFRhcHM9XCJoYW5kbGVkXCJcbiAgICAgICAgICAgIG5lc3RlZFNjcm9sbEVuYWJsZWRcbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJtb2JpbGVPcHRpb25zU2Nyb2xsVmlld1wiLCBzdHlsZXMubW9iaWxlT3B0aW9uc1Njcm9sbFZpZXcgfHw9IHtmbGV4R3JvdzogMCwgZmxleFNocmluazogMSwgbWluSGVpZ2h0OiAwfSl9XG4gICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9tb2JpbGUtb3B0aW9ucy1zY3JvbGwtdmlld1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge29wdGlvbnNMaXN0Q29udGVudH1cbiAgICAgICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICAgICAge3BhZ2luYXRpb25Db250cm9sc31cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm1vYmlsZU9wdGlvbnNTZWFyY2hDb250YWluZXJcIiwgc3R5bGVzLm1vYmlsZU9wdGlvbnNTZWFyY2hDb250YWluZXIgfHw9IHtcbiAgICAgICAgICAgICAgYm9yZGVyVG9wQ29sb3I6IFwiI2NiZDVlMVwiLFxuICAgICAgICAgICAgICBib3JkZXJUb3BXaWR0aDogMSxcbiAgICAgICAgICAgICAgcGFkZGluZ0JvdHRvbTogMTQsXG4gICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAxNCxcbiAgICAgICAgICAgICAgcGFkZGluZ1JpZ2h0OiAxNCxcbiAgICAgICAgICAgICAgcGFkZGluZ1RvcDogMTBcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QvbW9iaWxlLW9wdGlvbnMtc2VhcmNoLWNvbnRhaW5lclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMuc2VhcmNoVGV4dElucHV0KHttb2JpbGVPcHRpb25zU2hlZXQ6IHRydWV9KX1cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvQW5pbWF0ZWQuVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZXxudWxsfSAqL1xuICBvcHRpb25zQ29udGFpbmVyKCkge1xuICAgIGNvbnN0IHtzZWxlY3RDb250YWluZXJMYXlvdXQsIGxvYWRlZE9wdGlvbnMsIGVuZE9mU2VsZWN0TGF5b3V0LCBvcHRpb25zQ29udGFpbmVyTGF5b3V0LCBvcHRpb25zUGxhY2VtZW50LCBvcHRpb25zVmlzaWJpbGl0eX0gPSB0aGlzLnNcbiAgICBsZXQgbGVmdCwgdG9wXG4gICAgY29uc3QgaWQgPSBpZEZvckNvbXBvbmVudCh0aGlzKVxuICAgIGNvbnN0IGRlc2t0b3BPcHRpb25zUGxhY2VtZW50ID0gb3B0aW9uc1BsYWNlbWVudCA9PSBcInNoZWV0XCIgPyBcImJlbG93XCIgOiBvcHRpb25zUGxhY2VtZW50XG4gICAgY29uc3Qgb3B0aW9uc0xpc3RDb250ZW50ID0gdGhpcy5vcHRpb25zTGlzdENvbnRlbnQoe2xvYWRlZE9wdGlvbnN9KVxuICAgIGNvbnN0IHBhZ2luYXRpb25Db250cm9scyA9IHRoaXMucGFnaW5hdGlvbkNvbnRyb2xzKClcblxuICAgIGlmICh0aGlzLmlzTW9iaWxlT3B0aW9uc1NoZWV0KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vYmlsZU9wdGlvbnNDb250YWluZXIoe2lkLCBvcHRpb25zTGlzdENvbnRlbnQsIHBhZ2luYXRpb25Db250cm9sc30pXG4gICAgfVxuXG4gICAgbGV0IHN0eWxlID0ge1xuICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgIHpJbmRleDogOTk5OTksXG4gICAgICBlbGV2YXRpb246IDk5OTk5LFxuICAgICAgdmlzaWJpbGl0eTogb3B0aW9uc1Zpc2liaWxpdHksXG4gICAgICB3aWR0aDogdGhpcy5wLm9wdGlvbnNXaWR0aCB8fCB0aGlzLnMub3B0aW9uc1dpZHRoLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNmZmZcIixcbiAgICAgIGJvcmRlckNvbG9yOiBcIiM5OTlcIixcbiAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgbWF4SGVpZ2h0OiAzMDAsXG4gICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIlxuICAgIH1cblxuICAgIGlmICghdGhpcy5wLm9wdGlvbnNQb3J0YWwpIHtcbiAgICAgIHN0eWxlLnRvcCA9IDBcbiAgICAgIHN0eWxlLmxlZnQgPSAwXG4gICAgfSBlbHNlIGlmICghdGhpcy5wLm9wdGlvbnNBYnNvbHV0ZSkge1xuICAgICAgc3R5bGUubGVmdCA9IDBcbiAgICAgIHN0eWxlLmJvdHRvbSA9IDBcbiAgICB9IGVsc2UgaWYgKGRlc2t0b3BPcHRpb25zUGxhY2VtZW50ID09IFwiYmVsb3dcIikge1xuICAgICAgaWYgKFBsYXRmb3JtLk9TID09IFwid2ViXCIpIHtcbiAgICAgICAgLy8gb25MYXlvdXQgdG9wIHZhbHVlIGlzIHNvbWV0aW1lcyBuZWdhdGl2ZSBzbyB1c2UgYnJvd3NlciBKUyB0byBnZXQgaXQgaW5zdGVhZFxuICAgICAgICB0b3AgPSBkaWdnKHRoaXMudHQuZW5kT2ZTZWxlY3RSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgXCJ0b3BcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICsgMVxuXG4gICAgICAgIC8vIG9uTGF5b3V0IGxlZnQgdmFsdWVzIGRvZXNuJ3QgYWx3YXlzIHVwZGF0ZSB3aGVuIGNoYW5nZWRcbiAgICAgICAgbGVmdCA9IGRpZ2codGhpcy50dC5lbmRPZlNlbGVjdFJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcImxlZnRcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IHNlbGVjdENvbnRhaW5lckxheW91dD8ubGVmdFxuICAgICAgICB0b3AgPSB0eXBlb2Ygc2VsZWN0Q29udGFpbmVyTGF5b3V0Py50b3AgPT0gXCJudW1iZXJcIiAmJiB0eXBlb2Ygc2VsZWN0Q29udGFpbmVyTGF5b3V0Py5oZWlnaHQgPT0gXCJudW1iZXJcIlxuICAgICAgICAgID8gc2VsZWN0Q29udGFpbmVyTGF5b3V0LnRvcCArIHNlbGVjdENvbnRhaW5lckxheW91dC5oZWlnaHQgKyAxXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShsZWZ0KSAmJiBOdW1iZXIuaXNGaW5pdGUodG9wKSkge1xuICAgICAgICBzdHlsZS5sZWZ0ID0gbGVmdFxuICAgICAgICBzdHlsZS50b3AgPSBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gdG9wIC0gMiA6IHRvcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUubGVmdCA9IDBcbiAgICAgICAgc3R5bGUudG9wID0gMFxuICAgICAgICBzdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIlxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGVza3RvcE9wdGlvbnNQbGFjZW1lbnQgPT0gXCJhYm92ZVwiKSB7XG4gICAgICBpZiAoUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIikge1xuICAgICAgICAvLyBvbkxheW91dCB0b3AgdmFsdWUgaXMgc29tZXRpbWVzIG5lZ2F0aXZlIHNvIHVzZSBicm93c2VyIEpTIHRvIGdldCBpdCBpbnN0ZWFkXG4gICAgICAgIHRvcCA9IGRpZ2codGhpcy50dC5zZWxlY3RDb250YWluZXJSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgXCJ0b3BcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG5cbiAgICAgICAgLy8gb25MYXlvdXQgbGVmdCB2YWx1ZXMgZG9lc24ndCBhbHdheXMgdXBkYXRlIHdoZW4gY2hhbmdlZFxuICAgICAgICBsZWZ0ID0gZGlnZyh0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcImxlZnRcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IHNlbGVjdENvbnRhaW5lckxheW91dD8ubGVmdFxuICAgICAgICB0b3AgPSBzZWxlY3RDb250YWluZXJMYXlvdXQ/LnRvcFxuICAgICAgfVxuXG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGxlZnQpICYmIE51bWJlci5pc0Zpbml0ZSh0b3ApKSB7XG4gICAgICAgIHN0eWxlLmxlZnQgPSBsZWZ0XG4gICAgICAgIHN0eWxlLnRvcCA9IHRvcCAtIG9wdGlvbnNDb250YWluZXJMYXlvdXQuaGVpZ2h0ICsgMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUubGVmdCA9IDBcbiAgICAgICAgc3R5bGUudG9wID0gMFxuICAgICAgICBzdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIlxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua29ud24gb3B0aW9ucyBwbGFjZW1lbnQ6ICR7ZGVza3RvcE9wdGlvbnNQbGFjZW1lbnR9YClcbiAgICB9XG5cbiAgICBpZiAoUGxhdGZvcm0uT1MgIT0gXCJ3ZWJcIikge1xuICAgICAgc3R5bGUub3BhY2l0eSA9IG9wdGlvbnNWaXNpYmlsaXR5ID09IFwiaGlkZGVuXCIgPyAwIDogMVxuICAgICAgc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiXG4gICAgfVxuXG4gICAgc3R5bGUgPSB0aGlzLnN0eWxpbmdGb3IoXCJvcHRpb25zQ29udGFpbmVyXCIsIHN0eWxlLCBbbGVmdCwgdG9wLCBzdHlsZS52aXNpYmlsaXR5LCBzdHlsZS53aWR0aF0pXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcbiAgICAgICAgICBcIm9wdGlvbnNDb250YWluZXJEYXRhU2V0XCIsXG4gICAgICAgICAge2lkLCByb2xlOiBcImRpYWxvZ1wiLCBvcHRpb25zVmlzaWJpbGl0eTogb3B0aW9uc1Zpc2liaWxpdHkgfHwgXCJoaWRkZW5cIn0sXG4gICAgICAgICAgW2lkLCBvcHRpb25zVmlzaWJpbGl0eV1cbiAgICAgICAgKX1cbiAgICAgICAgb25MYXlvdXQ9e3RoaXMudHQub25PcHRpb25zQ29udGFpbmVyTGF5b3V0fVxuICAgICAgICByZWY9e3RoaXMudHQub3B0aW9uc0NvbnRhaW5lclJlZn1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9vcHRpb25zLWNvbnRhaW5lclwiXG4gICAgICA+XG4gICAgICAgIDxTY3JvbGxWaWV3XG4gICAgICAgICAga2V5Ym9hcmRTaG91bGRQZXJzaXN0VGFwcz1cImhhbmRsZWRcIlxuICAgICAgICAgIG5lc3RlZFNjcm9sbEVuYWJsZWRcbiAgICAgICAgICBzdHlsZT17c3R5bGVzW2BvcHRpb25zU2Nyb2xsVmlldy0ke3N0eWxlLm1heEhlaWdodCB8fCAzMDB9YF0gfHw9IHtcbiAgICAgICAgICAgIGZsZXhHcm93OiAwLFxuICAgICAgICAgICAgZmxleFNocmluazogMSxcbiAgICAgICAgICAgIG1heEhlaWdodDogc3R5bGUubWF4SGVpZ2h0IHx8IDMwMCxcbiAgICAgICAgICAgIG1pbkhlaWdodDogMFxuICAgICAgICAgIH19XG4gICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3Qvb3B0aW9ucy1zY3JvbGwtdmlld1wiXG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9uc0xpc3RDb250ZW50fVxuICAgICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICAgIHtwYWdpbmF0aW9uQ29udHJvbHN9XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7SGF5YVNlbGVjdE9wdGlvbn0gbG9hZGVkT3B0aW9uXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25PcHRpb25DbGlja2VkID0gKGV2ZW50LCBsb2FkZWRPcHRpb24pID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgIGNvbnN0IHtvbkNoYW5nZSwgdG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge211bHRpcGxlfSA9IHRoaXMucFxuICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpXG4gICAgY29uc3QgdG9nZ2xlZCA9IHRoaXMuZ2V0VG9nZ2xlZCgpXG4gICAgY29uc3QgbmV3U3RhdGUgPSB7fVxuICAgIGNvbnN0IGV4aXN0aW5nT3B0aW9uID0gY3VycmVudE9wdGlvbnMuZmluZCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSA9PSBsb2FkZWRPcHRpb24udmFsdWUpXG4gICAgY29uc3QgbmV3VG9nZ2xlZCA9IHsuLi50b2dnbGVkfVxuICAgIGxldCBuZXdDdXJyZW50T3B0aW9uc1xuICAgIGxldCBhY3Rpb25cblxuICAgIGlmIChleGlzdGluZ09wdGlvbikge1xuICAgICAgaWYgKHRvZ2dsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRvZ2dsZSA9IHRvZ2dsZWRbbG9hZGVkT3B0aW9uLnZhbHVlXVxuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0b2dnbGVPcHRpb25zLmZpbmRJbmRleCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWx1ZSA9PSBjdXJyZW50VG9nZ2xlKVxuXG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPj0gKHRvZ2dsZU9wdGlvbnMubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICAvLyBObyBuZXh0IHRvZ2dsZWQgLSByZW1vdmUgdG9nZ2xlZCBhbmQgb3B0aW9uXG4gICAgICAgICAgZGVsZXRlIG5ld1RvZ2dsZWRbbG9hZGVkT3B0aW9uLnZhbHVlXVxuICAgICAgICAgIGFjdGlvbiA9IFwicmVtb3ZlLW9wdGlvbi1hZnRlci1sYXN0LXRvZ2dsZVwiXG5cbiAgICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zLmZpbHRlcigoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSAhPSBsb2FkZWRPcHRpb24udmFsdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQWxyZWFkeSB0b2dnbGVkIC0gc2V0IHRvIG5leHQgdG9nZ2xlXG4gICAgICAgICAgbmV3VG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdID0gZGlnZyh0b2dnbGVPcHRpb25zLCBjdXJyZW50SW5kZXggKyAxLCBcInZhbHVlXCIpXG4gICAgICAgICAgYWN0aW9uID0gXCJjeWNsZS10b2dnbGVcIlxuICAgICAgICB9XG5cbiAgICAgICAgbmV3U3RhdGUudG9nZ2xlZCA9IG5ld1RvZ2dsZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIGN1cnJlbnQgb3B0aW9uc1xuICAgICAgICBhY3Rpb24gPSBcInJlbW92ZS1vcHRpb25cIlxuICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zLmZpbHRlcigoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSAhPSBsb2FkZWRPcHRpb24udmFsdWUpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZSBjbGlja2VkIG9wdGlvbiBpcyBkaXNhYmxlZFxuICAgICAgaWYgKGxvYWRlZE9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25PcHRpb25DbGlja2VkXCIsIHtcbiAgICAgICAgICBhY3Rpb246IFwiaWdub3JlLWRpc2FibGVkLW9wdGlvblwiLFxuICAgICAgICAgIG9wdGlvblZhbHVlOiBsb2FkZWRPcHRpb24udmFsdWVcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0b2dnbGVPcHRpb25zKSB7XG4gICAgICAgIC8vIFNldCBmcmVzaCB0b2dnbGVcbiAgICAgICAgbmV3VG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdID0gdG9nZ2xlT3B0aW9uc1swXS52YWx1ZVxuICAgICAgICBuZXdTdGF0ZS50b2dnbGVkID0gbmV3VG9nZ2xlZFxuICAgICAgfVxuXG4gICAgICBpZiAobXVsdGlwbGUgfHwgdG9nZ2xlT3B0aW9ucykge1xuICAgICAgICBhY3Rpb24gPSBcImFkZC1vcHRpb25cIlxuICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zLmNvbmNhdChbbG9hZGVkT3B0aW9uXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbiA9IFwicmVwbGFjZS1zaW5nbGUtb3B0aW9uXCJcbiAgICAgICAgbmV3Q3VycmVudE9wdGlvbnMgPSBbbG9hZGVkT3B0aW9uXVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcInZhbHVlc1wiIGluIHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy52YWx1ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gY3VycmVudE9wdGlvbnMgYXJlIGNvbnRyb2xsZWQgYW5kIGEgdXNlTWVtbyBjYWxsYmFjayBpcyBoYW5kZWxpbmcgc2V0dGluZyBjdXJyZW50IG9wdGlvbnMuXG4gICAgfSBlbHNlIGlmIChuZXdDdXJyZW50T3B0aW9ucykge1xuICAgICAgbmV3U3RhdGUuY3VycmVudE9wdGlvbnMgPSBuZXdDdXJyZW50T3B0aW9uc1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSBuZXdDdXJyZW50T3B0aW9ucyB8fCBjdXJyZW50T3B0aW9uc1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvbk9wdGlvbkNsaWNrZWRcIiwge1xuICAgICAgYWN0aW9uOiBhY3Rpb24gfHwgXCJ0b2dnbGUtb25seVwiLFxuICAgICAgbXVsdGlwbGUsXG4gICAgICBvcHRpb25WYWx1ZTogbG9hZGVkT3B0aW9uLnZhbHVlLFxuICAgICAgb3B0aW9uc0NvdW50QmVmb3JlOiBjdXJyZW50T3B0aW9ucy5sZW5ndGgsXG4gICAgICBvcHRpb25zQ291bnRBZnRlcjogb3B0aW9ucy5sZW5ndGhcbiAgICB9KVxuXG4gICAgaWYgKCFtdWx0aXBsZSB8fCB0aGlzLnAuY2xvc2VPbkNoYW5nZSkgdGhpcy5jbG9zZU9wdGlvbnMoe29wdGlvbnN9KVxuXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAvKiogQHR5cGUge0hheWFTZWxlY3RPbkNoYW5nZVBheWxvYWR9ICovXG4gICAgICBvbkNoYW5nZSh7XG4gICAgICAgIGV2ZW50LFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICB0b2dnbGVzOiBuZXdUb2dnbGVkXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlVmFsdWUpIHtcbiAgICAgIGxldCBvcHRpb25WYWx1ZVxuXG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgb3B0aW9uVmFsdWUgPSBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25WYWx1ZSA9IGRpZyhvcHRpb25zLCAwLCBcInZhbHVlXCIpXG4gICAgICB9XG5cbiAgICAgIHRoaXMucC5vbkNoYW5nZVZhbHVlKG9wdGlvblZhbHVlKVxuICAgIH1cblxuICAgIGlmIChcInRvZ2dsZWRcIiBpbiBuZXdTdGF0ZSkge1xuICAgICAgdGhpcy5zLnRvZ2dsZWQgPSBuZXdTdGF0ZS50b2dnbGVkXG4gICAgfVxuXG4gICAgaWYgKFwiY3VycmVudE9wdGlvbnNcIiBpbiBuZXdTdGF0ZSkge1xuICAgICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zID0gbmV3U3RhdGUuY3VycmVudE9wdGlvbnNcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0eWxpbmdOYW1lXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW3N0eWxlXVxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IFtjYWNoZXNdXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fVxuICAgKi9cbiAgc3R5bGluZ0ZvcihzdHlsaW5nTmFtZSwgc3R5bGUgPSB7fSwgY2FjaGVzID0gW10pIHtcbiAgICBsZXQgY3VzdG9tU3R5bGluZyA9IGRpZyh0aGlzLCBcInByb3BzXCIsIFwic3R5bGVzXCIsIHN0eWxpbmdOYW1lKVxuICAgIGNvbnN0IGJhc2VTdHlsZSA9IHsuLi5zdHlsZX1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tU3R5bGluZyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8qKiBAdHlwZSB7SGF5YVNlbGVjdFN0eWxpbmdDb250ZXh0fSAqL1xuICAgICAgY3VzdG9tU3R5bGluZyA9IGN1c3RvbVN0eWxpbmcoe1xuICAgICAgICBvcGVuZWQ6IHRoaXMucy5vcGVuZWQsXG4gICAgICAgIG9wdGlvbnNQbGFjZW1lbnQ6IHRoaXMucy5vcHRpb25zUGxhY2VtZW50LFxuICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgICAgc3R5bGU6IGJhc2VTdHlsZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoY3VzdG9tU3R5bGluZykge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2VTdHlsZSwgY3VzdG9tU3R5bGluZylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZShgc3R5bGluZ0Zvci0ke3N0eWxpbmdOYW1lfWAsIHN0eWxlLCBjYWNoZXMpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIYXlhU2VsZWN0T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9XG4gICAqL1xuICBpY29uRm9yT3B0aW9uKG9wdGlvbikge1xuICAgIGNvbnN0IHt0b2dnbGVPcHRpb25zfSA9IHRoaXMucHJvcHMgfHwge31cbiAgICBjb25zdCB0b2dnbGVkID0gdGhpcy5nZXRUb2dnbGVkKClcblxuICAgIGlmICh0b2dnbGVPcHRpb25zICYmIChvcHRpb24udmFsdWUgaW4gdG9nZ2xlZCkpIHtcbiAgICAgIGNvbnN0IHRvZ2dsZWRWYWx1ZSA9IHRvZ2dsZWRbb3B0aW9uLnZhbHVlXVxuICAgICAgY29uc3QgdG9nZ2xlZE9wdGlvbiA9IHRvZ2dsZU9wdGlvbnMuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWx1ZSA9PSB0b2dnbGVkVmFsdWUpXG5cbiAgICAgIGlmICghdG9nZ2xlZE9wdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgYSB0b2dnbGUgb3B0aW9uIGZvciB2YWx1ZTogJHt0b2dnbGVkVmFsdWV9YClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRvZ2dsZWRPcHRpb24uaWNvblxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hheWFTZWxlY3RPcHRpb259IG9wdGlvblxuICAgKiBAcGFyYW0ge1wiY3VycmVudFwifFwib3B0aW9uXCJ9IG1vZGVcbiAgICogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX1cbiAgICovXG4gIHByZXNlbnRPcHRpb24gPSAob3B0aW9uLCBtb2RlKSA9PiB7XG4gICAgY29uc3Qge29wdGlvbkNvbnRlbnQsIHRvZ2dsZU9wdGlvbnN9ID0gdGhpcy5wcm9wcyB8fCB7fVxuICAgIGNvbnN0IHRvZ2dsZWQgPSB0aGlzLmdldFRvZ2dsZWQoKVxuICAgIGNvbnN0IGljb24gPSB0aGlzLmljb25Gb3JPcHRpb24ob3B0aW9uKVxuICAgIGNvbnN0IHRvZ2dsZVZhbHVlID0gdG9nZ2xlZFtvcHRpb24udmFsdWVdXG4gICAgY29uc3QgdG9nZ2xlT3B0aW9uID0gdG9nZ2xlT3B0aW9ucz8uZmluZCgodG9nZ2xlT3B0aW9uSSkgPT4gdG9nZ2xlT3B0aW9uSS52YWx1ZSA9PSB0b2dnbGVWYWx1ZSlcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZ2V0Q3VycmVudE9wdGlvblZhbHVlcygpLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZSA9PSBvcHRpb24udmFsdWUpXG4gICAgbGV0IHN0eWxlXG4gICAgbGV0IGNvbnRlbnROb2RlXG5cbiAgICBpZiAobW9kZSA9PSBcImN1cnJlbnRcIikge1xuICAgICAgc3R5bGUgPSB0aGlzLnN0eWxpbmdGb3IoXCJjdXJyZW50T3B0aW9uUHJlc2VudGF0aW9uVGV4dFwiLCB7ZmxleDogMSwgd2hpdGVTcGFjZTogXCJub3dyYXBcIn0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlID0gdGhpcy5zdHlsaW5nRm9yKFwib3B0aW9uUHJlc2VudGF0aW9uVGV4dFwiLCB7ZmxleDogMSwgd2hpdGVTcGFjZTogXCJub3dyYXBcIn0pXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIGRhdGFTZXQ9e3RoaXMuY2FjaGUoXCJwcmVzZW50T3B0aW9uVmlld0RhdGFTZXRcIiwge1xuICAgICAgICAgIHRleHQ6IG9wdGlvbi50ZXh0LFxuICAgICAgICAgIHRvZ2dsZUljb246IHRvZ2dsZU9wdGlvbj8uaWNvbixcbiAgICAgICAgICB0b2dnbGVWYWx1ZTogdG9nZ2xlT3B0aW9uPy52YWx1ZSxcbiAgICAgICAgICB2YWx1ZTogb3B0aW9uLnZhbHVlXG4gICAgICAgIH0sIFtvcHRpb24udGV4dCwgb3B0aW9uLnZhbHVlLCB0b2dnbGVPcHRpb24/Lmljb24sIHRvZ2dsZU9wdGlvbj8udmFsdWVdKX1cbiAgICAgICAgc3R5bGU9e3RoaXMuY2FjaGUoXCJvcHRpb25QcmVzZW50YXRpb25TdHlsZVwiLCB7ZmxleERpcmVjdGlvbjogXCJyb3dcIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIn0pfVxuICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC9vcHRpb24tcHJlc2VudGF0aW9uXCJcbiAgICAgID5cbiAgICAgICAge3RvZ2dsZU9wdGlvbnMgJiYgIShvcHRpb24udmFsdWUgaW4gdG9nZ2xlZCkgJiZcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgc3R5bGU9e3RoaXMuY2FjaGUoXCJ0b2dnbGVJY29uUGxhY2Vob2xkZXJTdHlsZVwiLCB7d2lkdGg6IDIwfSl9XG4gICAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC90b2dnbGUtaWNvbi1wbGFjZWhvbGRlclwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICB7dG9nZ2xlT3B0aW9ucyAmJiAob3B0aW9uLnZhbHVlIGluIHRvZ2dsZWQpICYmXG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3RoaXMuY2FjaGUoXCJ0b2dnbGVJY29uQ29udGFpbmVyU3R5bGVcIiwge2FsaWduSXRlbXM6IFwiY2VudGVyXCIsIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLCB3aWR0aDogMjB9KX0+XG4gICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uXG4gICAgICAgICAgICAgIG5hbWU9e2ljb259XG4gICAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0L3RvZ2dsZS1pY29uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICB9XG4gICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgIGlmIChvcHRpb25Db250ZW50KSB7XG4gICAgICAgICAgICAvKiogQHR5cGUge0hheWFTZWxlY3RPcHRpb25SZW5kZXJDb250ZXh0fSAqL1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSBvcHRpb25Db250ZW50KHtpY29uLCBtb2RlLCBvcHRpb24sIHNlbGVjdGVkLCB0b2dnbGVPcHRpb24sIHRvZ2dsZVZhbHVlLCB0b2dnbGVkfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gXCJjdXJyZW50XCIgJiYgb3B0aW9uLmN1cnJlbnRDb250ZW50KSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IG9wdGlvbi5jdXJyZW50Q29udGVudCgpXG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb24uY29udGVudCkge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSBvcHRpb24uY29udGVudCgpXG4gICAgICAgICAgfSBlbHNlIGlmIChcImh0bWxcIiBpbiBvcHRpb24gJiYgUGxhdGZvcm0uT1MgIT0gXCJ3ZWJcIikge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSA8UmVuZGVySHRtbCBzb3VyY2U9e3todG1sOiBkaWdnKG9wdGlvbiwgXCJodG1sXCIpfX0gLz5cbiAgICAgICAgICB9IGVsc2UgaWYgKFwiaHRtbFwiIGluIG9wdGlvbiAmJiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tfX2h0bWw6IGRpZ2cob3B0aW9uLCBcImh0bWxcIil9fSAvPlxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IChcbiAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3Qvb3B0aW9uLXByZXNlbnRhdGlvbi10ZXh0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtvcHRpb24udGV4dH1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8VmlldyBzdHlsZT17dGhpcy5jYWNoZShcIm9wdGlvblByZXNlbnRhdGlvbkNvbnRlbnRTdHlsZVwiLCB7ZmxleDogMX0pfT5cbiAgICAgICAgICAgICAgICB7Y29udGVudE5vZGV9XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAge29wdGlvbi5yaWdodCAmJlxuICAgICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLmNhY2hlKFwib3B0aW9uUHJlc2VudGF0aW9uUmlnaHRTdHlsZVwiLCB7YWxpZ25JdGVtczogXCJjZW50ZXJcIiwganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsIG1hcmdpbkxlZnQ6IDh9KX0+XG4gICAgICAgICAgICAgICAgICB7b3B0aW9uLnJpZ2h0fVxuICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKVxuICAgICAgICB9KSgpfVxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gKi9cbiAgYXN5bmMgc2V0Q3VycmVudEZyb21HaXZlblZhbHVlcygpIHtcbiAgICBjb25zdCB7b3B0aW9ucywgdmFsdWVzfSA9IHRoaXMucFxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzKSAmJiB2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAodGhpcy5zLmN1cnJlbnRPcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zID0gW11cbiAgICAgIH1cblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3B0aW9ucyh7cGFnZTogdGhpcy5nZXRBY3RpdmVQYWdlKCksIHZhbHVlc30pXG4gICAgY29uc3Qge29wdGlvbnM6IGN1cnJlbnRPcHRpb25zfSA9IHRoaXMucGFyc2VPcHRpb25zUmVzdWx0KHJlc3VsdClcbiAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gY3VycmVudE9wdGlvbnM/Lm1hcCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSlcbiAgICBjb25zdCBzdGF0ZVZhbHVlcyA9IHRoaXMucy5jdXJyZW50T3B0aW9ucz8ubWFwKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlKVxuXG4gICAgaWYgKGFueXRoaW5nRGlmZmVyZW50KGN1cnJlbnRWYWx1ZXMsIHN0YXRlVmFsdWVzKSkge1xuICAgICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zID0gY3VycmVudE9wdGlvbnNcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgSGF5YVNlbGVjdFNoYXBlQ29tcG9uZW50ID0gc2hhcGVDb21wb25lbnQoSGF5YVNlbGVjdClcblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhIYXlhU2VsZWN0U2hhcGVDb21wb25lbnQpXG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "haya-select",
3
- "version": "1.0.121",
3
+ "version": "1.0.123",
4
4
  "description": "Just another select component for React Native + Web.",
5
5
  "files": [
6
6
  "build/**"
@@ -11,7 +11,7 @@
11
11
  "build": "EXPO_NONINTERACTIVE=1 expo-module build",
12
12
  "build:example:dist": "npm run build && EXPO_NONINTERACTIVE=1 cd example && npx expo export --platform web --output-dir ../dist",
13
13
  "clean": "expo-module clean",
14
- "lint": "npm run eslint && npm run typecheck",
14
+ "lint": "npm run lint:eslint && npm run typecheck",
15
15
  "test": "node scripts/velocious-test.js",
16
16
  "test:dist": "npm run build:example:dist && SYSTEM_TEST_HOST=dist npm test",
17
17
  "prepare": "expo-module prepare && npm run build",
@@ -20,7 +20,7 @@
20
20
  "open:ios": "xed example/ios",
21
21
  "open:android": "open -a \"Android Studio\" example/android",
22
22
  "typecheck": "tsc --noEmit",
23
- "eslint": "expo-module lint"
23
+ "lint:eslint": "expo-module lint"
24
24
  },
25
25
  "keywords": [
26
26
  "react-native",