@sumaris-net/ngx-components 18.26.13 → 18.27.0-alpha1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/doc/changelog.md +3 -1
- package/esm2022/public_api.mjs +2 -1
- package/esm2022/src/app/core/core.module.mjs +4 -1
- package/esm2022/src/app/core/form/form.utils.mjs +12 -1
- package/esm2022/src/app/shared/field-accessor.mjs +16 -0
- package/esm2022/src/app/shared/focusable.mjs +1 -1
- package/esm2022/src/app/shared/inputs.mjs +22 -3
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +175 -46
- package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +69 -23
- package/esm2022/src/app/shared/material/datetime/material.date.mjs +18 -4
- package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +116 -28
- package/esm2022/src/app/shared/material/duration/duration.module.mjs +10 -3
- package/esm2022/src/app/shared/material/duration/material.duration.mjs +63 -33
- package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +3 -3
- package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +14 -1
- package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +16 -1
- package/esm2022/src/app/shared/material/testing/common.test.mjs +218 -27
- package/fesm2022/sumaris-net.ngx-components.mjs +985 -429
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +1 -0
- package/src/app/core/core.module.d.ts +15 -15
- package/src/app/core/form/form.utils.d.ts +7 -0
- package/src/app/shared/field-accessor.d.ts +51 -0
- package/src/app/shared/focusable.d.ts +3 -1
- package/src/app/shared/inputs.d.ts +3 -1
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +20 -7
- package/src/app/shared/material/boolean/material.boolean.d.ts +12 -4
- package/src/app/shared/material/datetime/material.date.d.ts +6 -2
- package/src/app/shared/material/datetime/material.datetime.d.ts +20 -4
- package/src/app/shared/material/duration/duration.module.d.ts +3 -1
- package/src/app/shared/material/duration/material.duration.d.ts +15 -13
- package/src/app/shared/material/latlong/material.latlong-input.d.ts +5 -3
- package/src/app/shared/material/latlong/material.latlong.d.ts +5 -1
- package/src/app/shared/material/testing/common.test.d.ts +49 -6
- package/src/assets/i18n/en.json +1 -1
- package/src/assets/manifest.json +1 -1
|
@@ -59,6 +59,25 @@ export function getCaretPosition(input) {
|
|
|
59
59
|
}
|
|
60
60
|
return -1;
|
|
61
61
|
}
|
|
62
|
+
export function setCaretPosition(input, position) {
|
|
63
|
+
if (input && input.selectionStart != null) {
|
|
64
|
+
try {
|
|
65
|
+
// Clamp position to valid range
|
|
66
|
+
const maxPosition = input.value?.length ?? 0;
|
|
67
|
+
const clampedPosition = Math.max(0, Math.min(position, maxPosition));
|
|
68
|
+
// Set cursor position using setSelectionRange
|
|
69
|
+
if (typeof input.setSelectionRange === 'function') {
|
|
70
|
+
input.setSelectionRange(clampedPosition, clampedPosition);
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
console.error('Could not set caret position', err);
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
62
81
|
export function moveInputCaretToSeparator(event, separator, forward) {
|
|
63
82
|
if (event.defaultPrevented || !separator)
|
|
64
83
|
return false;
|
|
@@ -126,10 +145,10 @@ export function filterNumberInput(event, allowDecimals, decimalSeparator) {
|
|
|
126
145
|
}
|
|
127
146
|
}
|
|
128
147
|
}
|
|
129
|
-
export function focusInput(element) {
|
|
148
|
+
export function focusInput(element, options, origin) {
|
|
130
149
|
const inputElement = asInputElement(element);
|
|
131
150
|
if (inputElement)
|
|
132
|
-
inputElement.focus();
|
|
151
|
+
inputElement.focus(options, origin);
|
|
133
152
|
else {
|
|
134
153
|
console.warn('Trying to focus on this element:', element);
|
|
135
154
|
}
|
|
@@ -278,4 +297,4 @@ export function getInputRangeFromCaretIndex(caretIndex, inputRanges) {
|
|
|
278
297
|
}
|
|
279
298
|
return null;
|
|
280
299
|
}
|
|
281
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaW5wdXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBb0Isa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuSCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsS0FBWTtJQUN0RCxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0I7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNuRCxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxNQUEwQixDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFtRDtJQUNwRiwyQ0FBMkM7SUFDM0MsSUFBSSxLQUFLLEVBQUUsTUFBTSxJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUM1QyxPQUFPLENBQUMsSUFBSSxDQUFDLHdHQUF3RyxDQUFDLENBQUM7UUFDdkgsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFeEIsb0JBQW9CO0lBQ3BCLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUU1QyxJQUFJLE9BQU8sS0FBSyxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUM7WUFDSCxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztR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QUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsVUFBa0IsRUFBRSxXQUF1QjtJQUNyRixLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25FLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb2N1c2FibGVFbGVtZW50LCBpc0ZvY3VzYWJsZUVsZW1lbnQgfSBmcm9tICcuL2ZvY3VzYWJsZSc7XG5pbXBvcnQgeyBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHRvQm9vbGVhbiwgdG9OdW1iZXIgfSBmcm9tICcuL2Z1bmN0aW9ucyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RJbnB1dENvbnRlbnRGcm9tRXZlbnQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gIGlmICghZXZlbnQgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gc2VsZWN0SW5wdXRDb250ZW50KGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdElucHV0Q29udGVudChpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBhbnkpOiBib29sZWFuIHtcbiAgLy8gRGV0ZWN0IGRlcHJlY2F0ZWQgdXNhZ2UgKGJlZm9yZSAxOC4yLjIxKVxuICBpZiAoaW5wdXQ/LnRhcmdldCB8fCBpbnB1dCBpbnN0YW5jZW9mIEV2ZW50KSB7XG4gICAgY29uc29sZS53YXJuKCdERVBSRUNBVEVEIHVzYWdlIHNpbmNlIDE4LjIuMjEgLSBQbGVhc2UgdXNlIHNlbGVjdElucHV0Q29udGVudEZyb21FdmVudCgpIGluc3RlYWQgc2VsZWN0SW5wdXRDb250ZW50KCknKTtcbiAgICBpbnB1dCA9IGlucHV0LnRhcmdldDtcbiAgfVxuICBpZiAoIWlucHV0KSByZXR1cm4gdHJ1ZTtcblxuICAvLyBOb3RoaW5nIHRvIHNlbGVjdFxuICBpZiAoaXNOaWxPckJsYW5rKGlucHV0LnZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgaW5wdXQuc2VsZWN0UmFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgaW5wdXQuc2VsZWN0UmFuZ2UoaW5wdXQudmFsdWUubGVuZ3RoLCAwKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHNlbGVjdCBpbnB1dCBjb250ZW50LCB1c2luZyBzZWxlY3RSYW5nZSgpJywgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0LnNlbGVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHNlbGVjdCBpbnB1dCBjb250ZW50LCB1c2luZyBzZWxlY3QoKScsIGVycik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0SW5wdXRSYW5nZShcbiAgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50LFxuICBzdGFydEluZGV4OiBudW1iZXIsXG4gIGVuZEluZGV4PzogbnVtYmVyLFxuICBkaXJlY3Rpb24/OiAnYmFja3dhcmQnIHwgJ2ZvcndhcmQnIHwgJ25vbmUnXG4pIHtcbiAgaWYgKGlucHV0ICYmIHR5cGVvZiBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIE5vIGNvbnRlbnRcbiAgICBpZiAoaXNOaWxPckJsYW5rKGlucHV0LnZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0SW5kZXgsIGVuZEluZGV4ID8/IHN0YXJ0SW5kZXgsIGRpcmVjdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgc2VsZWN0IGlucHV0IHJhbmdlJywgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYXJldFBvc2l0aW9uKGlucHV0OiBhbnkpOiBudW1iZXIge1xuICBpZiAoaW5wdXQgJiYgaW5wdXQuc2VsZWN0aW9uU3RhcnQgIT0gbnVsbCkge1xuICAgIHJldHVybiBpbnB1dC5zZWxlY3Rpb25EaXJlY3Rpb24gPyAoaW5wdXQuc2VsZWN0aW9uRGlyZWN0aW9uID09PSAnYmFja3dhcmQnID8gaW5wdXQuc2VsZWN0aW9uU3RhcnQgOiBpbnB1dC5zZWxlY3Rpb25FbmQpIDogaW5wdXQuc2VsZWN0aW9uU3RhcnQ7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW92ZUlucHV0Q2FyZXRUb1NlcGFyYXRvcihldmVudDogS2V5Ym9hcmRFdmVudCwgc2VwYXJhdG9yOiBzdHJpbmcsIGZvcndhcmQ/OiBib29sZWFuKSB7XG4gIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkIHx8ICFzZXBhcmF0b3IpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgYW55O1xuICBpZiAoIWlucHV0KSByZXR1cm4gdHJ1ZTtcblxuICBjb25zdCBjYXJldFBvc2l0aW9uID0gZ2V0Q2FyZXRQb3NpdGlvbihpbnB1dCk7XG5cbiAgLy8gREVCVUdcbiAgLy9jb25zb2xlLmRlYnVnKCdjYXJldFBvc2l0aW9uPScsIGNhcmV0UG9zaXRpb24pO1xuXG4gIGlmIChjYXJldFBvc2l0aW9uID09PSAtMSkgcmV0dXJuIHRydWU7IC8vIENhcmV0IHBvcyBub3QgZm91bmQ6IHNraXBcblxuICAvLyBHZXQgaW5wdXQgdmFsdWVcbiAgY29uc3QgdmFsdWUgPSBpbnB1dC52YWx1ZSBhcyBzdHJpbmc7XG5cbiAgLy8gTm8gY29udGVudDogc2tpcFxuICBpZiAoaXNOaWxPckJsYW5rKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgaWYgKHZhbHVlICYmIGNhcmV0UG9zaXRpb24gPD0gdmFsdWUubGVuZ3RoKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiSW5wdXQgdGV4dCB2YWx1ZTogXCIsIHZhbHVlKTtcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkN1cnNvciBhdDogXCIsIGNhcmV0UG9zaXRpb24pO1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiVGV4dCBhZnRlciBjdXJzb3I6IFwiLCB2YWx1ZS5zdWJzdHJpbmcoY2FyZXRQb3NpdGlvbikpO1xuXG4gICAgICBmb3J3YXJkID0gZm9yd2FyZCAhPT0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IHNlcGFyYXRvckluZGV4ID0gZm9yd2FyZCA/IHZhbHVlLmluZGV4T2Yoc2VwYXJhdG9yLCBjYXJldFBvc2l0aW9uKSA6IHZhbHVlLmxhc3RJbmRleE9mKHNlcGFyYXRvciwgY2FyZXRQb3NpdGlvbik7XG4gICAgICBpZiAoc2VwYXJhdG9ySW5kZXggIT09IC0xICYmICgoZm9yd2FyZCAmJiBzZXBhcmF0b3JJbmRleCArIDEgPCB2YWx1ZS5sZW5ndGgpIHx8ICghZm9yd2FyZCAmJiBzZXBhcmF0b3JJbmRleCA+IDApKSkge1xuICAgICAgICBpZiAoaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgICAgICAvLyBNb3ZlIGFmdGVyIHRoZSBuZXh0IHNlcGFyYXRvclxuICAgICAgICAgIGlmIChzZWxlY3RJbnB1dFJhbmdlKGlucHV0LCBzZXBhcmF0b3JJbmRleCArIChmb3J3YXJkID8gMSA6IC0xKSkpIHtcbiAgICAgICAgICAgIC8vIFN0b3AgdGhlIGtleWJvYXJkIGV2ZW50XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgbW92ZSBjYXJldCB0byBuZXh0IHNlcGFyYXRvcicsIGVycik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyTnVtYmVySW5wdXQoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGFsbG93RGVjaW1hbHM6IGJvb2xlYW4sIGRlY2ltYWxTZXBhcmF0b3I/OiBzdHJpbmcpIHtcbiAgLy9pbnB1dCBudW1iZXIgZW50ZXJlZCBvciBvbmUgb2YgdGhlIDQgZGlyZWN0aW9uIHVwLCBkb3duLCBsZWZ0IGFuZCByaWdodFxuICBpZiAoKGV2ZW50LndoaWNoID49IDQ4ICYmIGV2ZW50LndoaWNoIDw9IDU3KSB8fCAoZXZlbnQud2hpY2ggPj0gMzcgJiYgZXZlbnQud2hpY2ggPD0gNDApKSB7XG4gICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBudW1iZXIgZW50ZXJlZCA6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlKTtcbiAgICAvLyBPS1xuICB9XG4gIC8vIERlY2ltYWwgc2VwYXJhdG9yXG4gIGVsc2UgaWYgKFxuICAgIGFsbG93RGVjaW1hbHMgJiZcbiAgICAoKCFkZWNpbWFsU2VwYXJhdG9yICYmIChldmVudC5rZXkgPT09ICcuJyB8fCBldmVudC5rZXkgPT09ICcsJykpIHx8IChkZWNpbWFsU2VwYXJhdG9yICYmIGV2ZW50LmtleSA9PT0gZGVjaW1hbFNlcGFyYXRvcikpXG4gICkge1xuICAgIC8vY29uc29sZS5kZWJ1ZygnaW5wdXQgZGVjaW1hbCBzZXBhcmF0b3IgZW50ZXJlZCA6JyArIGV2ZW50LmNvZGUpO1xuICAgIC8vIE9LXG4gIH0gZWxzZSB7XG4gICAgLy9pbnB1dCBjb21tYW5kIGVudGVyZWQgb2YgZGVsZXRlLCBiYWNrc3BhY2Ugb3Igb25lIG9mIHRoZSA0IGRpcmVjdGlvbiB1cCwgZG93biwgbGVmdCBhbmQgcmlnaHQsIG9yIG5lZ2F0aXZlIHNpZ25cbiAgICBpZiAoKGV2ZW50LmtleUNvZGUgPj0gMzcgJiYgZXZlbnQua2V5Q29kZSA8PSA0MCkgfHwgZXZlbnQua2V5Q29kZSA9PT0gNDYgfHwgZXZlbnQud2hpY2ggPT09IDggfHwgZXZlbnQua2V5Q29kZSA9PT0gOSB8fCBldmVudC5rZXlDb2RlID09PSA0NSkge1xuICAgICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBjb21tYW5kIGVudGVyZWQgOicgKyBldmVudC53aGljaCArICcgJyArIGV2ZW50LmtleUNvZGUgKyAnICcgKyBldmVudC5jaGFyQ29kZSk7XG4gICAgICAvLyBPS1xuICAgIH1cbiAgICAvLyBDYW5jZWwgb3RoZXIga2V5Ym9hcmQgZXZlbnRzXG4gICAgZWxzZSB7XG4gICAgICAvL2NvbnNvbGUuZGVidWcoJ2lucHV0IG5vdCBudW1iZXIgZW50ZXJlZCA6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlICsgJyAnICsgZXZlbnQuY29kZSApO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvY3VzSW5wdXQ8VCA9IGFueT4oZWxlbWVudDogRWxlbWVudFJlZjxUPikge1xuICBjb25zdCBpbnB1dEVsZW1lbnQgPSBhc0lucHV0RWxlbWVudChlbGVtZW50KTtcbiAgaWYgKGlucHV0RWxlbWVudCkgaW5wdXRFbGVtZW50LmZvY3VzKCk7XG4gIGVsc2Uge1xuICAgIGNvbnNvbGUud2FybignVHJ5aW5nIHRvIGZvY3VzIG9uIHRoaXMgZWxlbWVudDonLCBlbGVtZW50KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGFiSW5kZXg8VCA9IGFueT4oZWxlbWVudDogRWxlbWVudFJlZjxUPiwgdGFiSW5kZXg6IG51bWJlcikge1xuICBpZiAoaXNJbnB1dEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBlbGVtZW50LnRhYmluZGV4ID0gdGFiSW5kZXg7XG4gIH0gZWxzZSBpZiAoZWxlbWVudCAmJiBpc0lucHV0RWxlbWVudChlbGVtZW50Lm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gdGFiSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS53YXJuKCdUcnlpbmcgdG8gY2hhbmdlIHRhYmluZGV4IG9uIHRoaXMgZWxlbWVudDonLCBlbGVtZW50KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElucHV0RWxlbWVudCBleHRlbmRzIEZvY3VzYWJsZUVsZW1lbnQge1xuICB0YWJpbmRleD86IG51bWJlcjtcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcmVhZG9ubHk/OiBib29sZWFuO1xuICB2YWx1ZTogYW55O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5wdXRFbGVtZW50KG9iamVjdDogYW55KTogb2JqZWN0IGlzIElucHV0RWxlbWVudCB7XG4gIHJldHVybiAoXG4gICAgaXNGb2N1c2FibGVFbGVtZW50KG9iamVjdCkgJiZcbiAgICAoJ3ZhbHVlJyBpbiBvYmplY3QgfHxcbiAgICAgIC8vIGhhcyB2YWx1ZSBpcyBub3QgYWx3YXlzIHNldCAobmVpdGhlciB0YWJpbmRleCkgY2hlY2sgb24gMiBwcm9wZXJ0aWVzIHdpdGggYSBsb2dpY2FsIE9SXG4gICAgICAndGFiaW5kZXgnIGluIG9iamVjdCB8fFxuICAgICAgJ3RhYkluZGV4JyBpbiBvYmplY3QpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc0lucHV0RWxlbWVudDxUID0gYW55PihvYmplY3Q6IEVsZW1lbnRSZWY8VD4pOiBJbnB1dEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICBpZiAob2JqZWN0KSB7XG4gICAgaWYgKGlzSW5wdXRFbGVtZW50KG9iamVjdCkpIHJldHVybiBvYmplY3Q7XG4gICAgaWYgKG9iamVjdC5uYXRpdmVFbGVtZW50ICYmIGlzSW5wdXRFbGVtZW50KG9iamVjdC5uYXRpdmVFbGVtZW50KSkgcmV0dXJuIG9iamVjdC5uYXRpdmVFbGVtZW50O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWJpbmRleENvbXBhcmF0b3IoYTogSW5wdXRFbGVtZW50LCBiOiBJbnB1dEVsZW1lbnQpIHtcbiAgY29uc3QgdmFsdWVBID0gYS50YWJpbmRleCB8fCBhLnRhYkluZGV4O1xuICBjb25zdCB2YWx1ZUIgPSBiLnRhYmluZGV4IHx8IGIudGFiSW5kZXg7XG4gIHJldHVybiB2YWx1ZUEgPT09IHZhbHVlQiA/IDAgOiB2YWx1ZUEgPiB2YWx1ZUIgPyAxIDogLTE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuR2FpbkZvY3VzT3B0aW9ucyB7XG4gIG1pblRhYmluZGV4PzogbnVtYmVyO1xuICBtYXhUYWJpbmRleD86IG51bWJlcjtcbiAgaXNFbXB0eT86IGJvb2xlYW47XG4gIGlzTm90RW1wdHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldEZvY3VzYWJsZUlucHV0T3B0aW9ucyBleHRlbmRzIENhbkdhaW5Gb2N1c09wdGlvbnMge1xuICBzb3J0QnlUYWJJbmRleD86IGJvb2xlYW47XG4gIGRlYnVnPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbkhhdmVGb2N1cyhpbnB1dDogSW5wdXRFbGVtZW50LCBvcHRzPzogQ2FuR2FpbkZvY3VzT3B0aW9ucyk6IGJvb2xlYW4ge1xuICBpZiAoIWlucHV0KSByZXR1cm4gZmFsc2U7XG4gIGlmIChvcHRzPy5pc0VtcHR5ICYmIG9wdHMuaXNOb3RFbXB0eSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgYm90aCBvcHRpb25zIG9ubHlFbXB0eUlucHV0IGFuZCBvbmx5Tm90RW1wdHlJbnB1dCBhdCB0aGUgc2FtZSB0aW1lLiBQbGVhc2UgdXNlIG9ubHkgb25lIG9mIHRoZW0uJyk7XG4gIHJldHVybiAoXG4gICAgLy8gRXhjbHVkZSBkaXNhYmxlZCBlbGVtZW50XG4gICAgIXRvQm9vbGVhbihpbnB1dC5kaXNhYmxlZCwgZmFsc2UpICYmXG4gICAgLy8gRXhjbHVkZSByZWFkb25seSBlbGVtZW50XG4gICAgIXRvQm9vbGVhbihpbnB1dC5yZWFkb25seSwgZmFsc2UpICYmXG4gICAgLy8gRXhjbHVkZSBoaWRkZW4gZWxlbWVudFxuICAgICF0b0Jvb2xlYW4oaW5wdXQuaGlkZGVuLCBmYWxzZSkgJiZcbiAgICAvLyBFeGNsdWRlIG1pblRhYkluZGV4IDwgZWxlbWVudC50YWJJbmRleFxuICAgIChpc05pbChvcHRzPy5taW5UYWJpbmRleCkgfHwgdG9OdW1iZXIoaW5wdXQudGFiSW5kZXgsIGlucHV0LnRhYmluZGV4KSA+IG9wdHMubWluVGFiaW5kZXgpICYmXG4gICAgLy8gRXhjbHVkZSBtYXhUYWJJbmRleCA+IGVsZW1lbnQudGFiSW5kZXhcbiAgICAoaXNOaWwob3B0cz8ubWF4VGFiaW5kZXgpIHx8IHRvTnVtYmVyKGlucHV0LnRhYkluZGV4LCBpbnB1dC50YWJpbmRleCkgPCBvcHRzLm1heFRhYmluZGV4KSAmJlxuICAgIC8vIEV4Y2x1ZGUgbm90IG5pbCBpbnB1dCB2YWx1ZVxuICAgICghb3B0cz8uaXNFbXB0eSB8fCBpc05pbE9yQmxhbmsoaW5wdXQudmFsdWUpKSAmJlxuICAgIC8vIEV4Y2x1ZGUgbmlsIGlucHV0IHZhbHVlXG4gICAgKCFvcHRzPy5pc05vdEVtcHR5IHx8IGlzTm90TmlsT3JCbGFuayhpbnB1dC52YWx1ZSkpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2N1c2FibGVJbnB1dEVsZW1lbnRzKGVsZW1lbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4sIG9wdHM/OiBHZXRGb2N1c2FibGVJbnB1dE9wdGlvbnMpOiBJbnB1dEVsZW1lbnRbXSB7XG4gIG9wdHMgPSB7IHNvcnRCeVRhYkluZGV4OiBmYWxzZSwgLi4ub3B0cyB9O1xuXG4gIC8vIEZvY3VzIHRvIGZpcnN0IGlucHV0XG4gIGNvbnN0IGZpbHRlcmVkRWxlbWVudHM6IElucHV0RWxlbWVudFtdID0gZWxlbWVudHNcblxuICAgIC8vIFRyYW5zZm9ybSB0byBpbnB1dFxuICAgIC5tYXAoYXNJbnB1dEVsZW1lbnQpXG5cbiAgICAuZmlsdGVyKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZWQgPSBjYW5IYXZlRm9jdXMoaW5wdXQsIG9wdHMpO1xuICAgICAgLy8gREVCVUdcbiAgICAgIGlmIChpbnB1dCAmJiBvcHRzLmRlYnVnKVxuICAgICAgICBjb25zb2xlLmRlYnVnKGBbaW5wdXRzXSBGb2N1c2FibGUgaW5wdXQge2NhbkZvY3VzOiAke2luY2x1ZGVkfSwgdGFiSW5kZXg6ICR7aW5wdXQudGFiSW5kZXggfHwgaW5wdXQudGFiaW5kZXh9fWAsIGlucHV0KTtcbiAgICAgIHJldHVybiBpbmNsdWRlZDtcbiAgICB9KTtcblxuICAvLyBTb3J0IGJ5IHRhYkluZGV4XG4gIGlmIChvcHRzLnNvcnRCeVRhYkluZGV4KSB7XG4gICAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHMuc29ydCh0YWJpbmRleENvbXBhcmF0b3IpO1xuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c05leHRJbnB1dDxUID0gYW55PihldmVudDogRXZlbnQgfCB1bmRlZmluZWQsIGVsZW1lbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxUPj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IEdldEZvY3VzYWJsZUlucHV0T3B0aW9ucyk6IGJvb2xlYW4ge1xuICAvLyBDYW5jZWxsaW5nIGV2ZW50IChlLmcuIHdoZW4gZW1pdHRlZCBieSAoa2V5ZG93bi50YWIpIClcbiAgaWYgKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8vIEdldCBjdXJyZW50IGluZGV4XG4gIGNvbnN0IG1pblRhYmluZGV4ID0gZXZlbnQgJiYgaXNJbnB1dEVsZW1lbnQoZXZlbnQudGFyZ2V0KSA/IChldmVudC50YXJnZXQudGFiSW5kZXggPz8gZXZlbnQudGFyZ2V0LnRhYmluZGV4KSA6IHVuZGVmaW5lZDtcblxuICAvLyBHZXQgZm9jdXNhYmxlIGlucHV0IGVsZW1lbnRzXG4gIGNvbnN0IGZvY3VzYWJsZUlucHV0czogSW5wdXRFbGVtZW50W10gPSBnZXRGb2N1c2FibGVJbnB1dEVsZW1lbnRzKGVsZW1lbnRzLCB7IG1pblRhYmluZGV4LCAuLi5vcHRzIH0pO1xuXG4gIGlmIChpc05vdEVtcHR5QXJyYXkoZm9jdXNhYmxlSW5wdXRzKSkge1xuICAgIC8vIEZvY3VzIG9uIGZpcnN0IGlucHV0c1xuICAgIGZvY3VzYWJsZUlucHV0c1swXS5mb2N1cygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9jdXNQcmV2aW91c0lucHV0PFQgPSBhbnk+KGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgZWxlbWVudHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPFQ+Piwgb3B0cz86IEdldEZvY3VzYWJsZUlucHV0T3B0aW9ucyk6IGJvb2xlYW4ge1xuICAvLyBDYW5jZWxsaW5nIGV2ZW50IChlLmcuIHdoZW4gZW1pdHRlZCBieSAoa2V5ZG93bi50YWIpIClcbiAgaWYgKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8vIEdldCBjdXJyZW50IGluZGV4XG4gIGNvbnN0IG1heFRhYmluZGV4ID0gZXZlbnQgJiYgaXNJbnB1dEVsZW1lbnQoZXZlbnQudGFyZ2V0KSA/IGV2ZW50LnRhcmdldC50YWJJbmRleCB8fCBldmVudC50YXJnZXQudGFiaW5kZXggOiB1bmRlZmluZWQ7XG5cbiAgLy8gR2V0IGZvY3VzYWJsZSBpbnB1dCBlbGVtZW50c1xuICBjb25zdCBmb2N1c2FibGVJbnB1dHM6IElucHV0RWxlbWVudFtdID0gZ2V0Rm9jdXNhYmxlSW5wdXRFbGVtZW50cyhlbGVtZW50cywgeyBtYXhUYWJpbmRleCwgLi4ub3B0cyB9KTtcblxuICBpZiAoaXNOb3RFbXB0eUFycmF5KGZvY3VzYWJsZUlucHV0cykpIHtcbiAgICAvLyBGb2N1cyBvbiBsYXN0IGlucHV0c1xuICAgIGZvY3VzYWJsZUlucHV0c1tmb2N1c2FibGVJbnB1dHMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0U2VsZWN0aW9uUmFuZ2VzRnJvbU1hc2sobWFzazogKHN0cmluZyB8IFJlZ0V4cClbXSk6IG51bWJlcltdW10ge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgbGV0IGZpcnN0X2luZGV4OiBudW1iZXI7XG4gIGxldCBsYXN0X2luZGV4OiBudW1iZXI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFzay5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpID09PSAwICYmIG1hc2tbaV0udG9TdHJpbmcoKSA9PT0gJy9bKy1dLycpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcoJ1RPRE8gcHVzaCBzdGFydCBtYXNrJywgeyBpLCBtYXNrOiBtYXNrW2ldLnRvU3RyaW5nKCkgfSk7XG5cbiAgICAgIHJlc3VsdC5wdXNoKFswLCAwXSk7XG4gICAgfSBlbHNlIGlmIChtYXNrW2ldIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBpZiAoaXNOaWwoZmlyc3RfaW5kZXgpKSB7XG4gICAgICAgIGZpcnN0X2luZGV4ID0gaTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzTm90TmlsKGZpcnN0X2luZGV4KSkge1xuICAgICAgICBsYXN0X2luZGV4ID0gaSAtIDE7XG4gICAgICAgIHJlc3VsdC5wdXNoKFtmaXJzdF9pbmRleCwgbGFzdF9pbmRleF0pO1xuICAgICAgICBmaXJzdF9pbmRleCA9IG51bGw7XG4gICAgICAgIGxhc3RfaW5kZXggPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAobWFza1ttYXNrLmxlbmd0aCAtIDFdIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgbGFzdF9pbmRleCA9IG1hc2subGVuZ3RoIC0gMTtcbiAgICByZXN1bHQucHVzaChbZmlyc3RfaW5kZXgsIGxhc3RfaW5kZXhdKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRSYW5nZUZyb21DYXJldEluZGV4KGNhcmV0SW5kZXg6IG51bWJlciwgaW5wdXRSYW5nZXM6IG51bWJlcltdW10pOiBudW1iZXJbXSB7XG4gIGZvciAoY29uc3QgaW5wdXRSYW5nZSBvZiBpbnB1dFJhbmdlcykge1xuICAgIGlmIChjYXJldEluZGV4ID49IGlucHV0UmFuZ2VbMF0gJiYgY2FyZXRJbmRleCA8PSBpbnB1dFJhbmdlWzFdICsgMSkge1xuICAgICAgcmV0dXJuIGlucHV0UmFuZ2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19
|
|
300
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaW5wdXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBb0Isa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUduSCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsS0FBWTtJQUN0RCxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0I7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNuRCxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxNQUEwQixDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFtRDtJQUNwRiwyQ0FBMkM7SUFDM0MsSUFBSSxLQUFLLEVBQUUsTUFBTSxJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUM1QyxPQUFPLENBQUMsSUFBSSxDQUFDLHdHQUF3RyxDQUFDLENBQUM7UUFDdkgsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFeEIsb0JBQW9CO0lBQ3BCLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUU1QyxJQUFJLE9BQU8sS0FBSyxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUM7WUFDSCxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLHFEQUFxRCxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzFFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDO1lBQ0gsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2YsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0RBQWdELEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDckUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsS0FBNkMsRUFDN0MsVUFBa0IsRUFDbEIsUUFBaUIsRUFDakIsU0FBMkM7SUFFM0MsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLENBQUMsaUJBQWlCLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDM0QsYUFBYTtRQUNiLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUU1QyxJQUFJLENBQUM7WUFDSCxLQUFLLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLFFBQVEsSUFBSSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBVTtJQUN6QyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzFDLE9BQU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztJQUNqSixDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNaLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBVSxFQUFFLFFBQWdCO0lBQzNELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksSUFBSSxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDO1lBQ0gsZ0NBQWdDO1lBQ2hDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUM3QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBRXJFLDhDQUE4QztZQUM5QyxJQUFJLE9BQU8sS0FBSyxDQUFDLGlCQUFpQixLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNsRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUMxRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbkQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxLQUFvQixFQUFFLFNBQWlCLEVBQUUsT0FBaUI7SUFDbEcsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQWEsQ0FBQztJQUNsQyxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXhCLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlDLFFBQVE7SUFDUixpREFBaUQ7SUFFakQsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyw0QkFBNEI7SUFFbkUsa0JBQWtCO0lBQ2xCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFlLENBQUM7SUFFcEMsbUJBQW1CO0lBQ25CLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRXRDLElBQUksQ0FBQztRQUNILElBQUksS0FBSyxJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0MsUUFBUTtZQUNSLDZDQUE2QztZQUM3Qyw4Q0FBOEM7WUFDOUMsdUVBQXVFO1lBRXZFLE9BQU8sR0FBRyxPQUFPLEtBQUssS0FBSyxDQUFDO1lBRTVCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZILElBQUksY0FBYyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksY0FBYyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNsSCxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUM1QixnQ0FBZ0M7b0JBQ2hDLElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGNBQWMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDakUsMEJBQTBCO3dCQUMxQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDMUIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDN0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQW9CLEVBQUUsYUFBc0IsRUFBRSxnQkFBeUI7SUFDdkcseUVBQXlFO0lBQ3pFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3pGLHFHQUFxRztRQUNyRyxLQUFLO0lBQ1AsQ0FBQztJQUNELG9CQUFvQjtTQUNmLElBQ0gsYUFBYTtRQUNiLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQ3pILENBQUM7UUFDRCxrRUFBa0U7UUFDbEUsS0FBSztJQUNQLENBQUM7U0FBTSxDQUFDO1FBQ04saUhBQWlIO1FBQ2pILElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDN0ksc0dBQXNHO1lBQ3RHLEtBQUs7UUFDUCxDQUFDO1FBQ0QsK0JBQStCO2FBQzFCLENBQUM7WUFDSiw2SEFBNkg7WUFDN0gsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQVUsT0FBc0IsRUFBRSxPQUFzQixFQUFFLE1BQW9CO0lBQ3RHLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxJQUFJLFlBQVk7UUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNqRCxDQUFDO1FBQ0osT0FBTyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1RCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQVUsT0FBc0IsRUFBRSxRQUFnQjtJQUMzRSxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzlCLENBQUM7U0FBTSxJQUFJLE9BQU8sSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDNUQsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzVDLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RSxDQUFDO0FBQ0gsQ0FBQztBQVVELE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBVztJQUN4QyxPQUFPLENBQ0wsa0JBQWtCLENBQUMsTUFBTSxDQUFDO1FBQzFCLENBQUMsT0FBTyxJQUFJLE1BQU07WUFDaEIseUZBQXlGO1lBQ3pGLFVBQVUsSUFBSSxNQUFNO1lBQ3BCLFVBQVUsSUFBSSxNQUFNLENBQUMsQ0FDeEIsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFVLE1BQXFCO0lBQzNELElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUMxQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7WUFBRSxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFDaEcsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsQ0FBZSxFQUFFLENBQWU7SUFDakUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUN4QyxPQUFPLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBY0QsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFtQixFQUFFLElBQTBCO0lBQzFFLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDekIsSUFBSSxJQUFJLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkdBQTZHLENBQUMsQ0FBQztJQUNqSSxPQUFPO0lBQ0wsMkJBQTJCO0lBQzNCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO1FBQ2pDLDJCQUEyQjtRQUMzQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztRQUNqQyx5QkFBeUI7UUFDekIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7UUFDL0IseUNBQXlDO1FBQ3pDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN6Rix5Q0FBeUM7UUFDekMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3pGLDhCQUE4QjtRQUM5QixDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLDBCQUEwQjtRQUMxQixDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3BELENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLFFBQStCLEVBQUUsSUFBK0I7SUFDeEcsSUFBSSxHQUFHLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0lBRTFDLHVCQUF1QjtJQUN2QixNQUFNLGdCQUFnQixHQUFtQixRQUFRO1FBRS9DLHFCQUFxQjtTQUNwQixHQUFHLENBQUMsY0FBYyxDQUFDO1NBRW5CLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2hCLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsUUFBUTtRQUNSLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLFFBQVEsZUFBZSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVMLG1CQUFtQjtJQUNuQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFVLEtBQXdCLEVBQUUsUUFBa0MsRUFDNUQsSUFBK0I7SUFDckUseURBQXlEO0lBQ3pELElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsTUFBTSxXQUFXLEdBQUcsS0FBSyxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRXpILCtCQUErQjtJQUMvQixNQUFNLGVBQWUsR0FBbUIseUJBQXlCLENBQUMsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUV0RyxJQUFJLGVBQWUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQ3JDLHdCQUF3QjtRQUN4QixlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFVLEtBQXdCLEVBQUUsUUFBa0MsRUFBRSxJQUErQjtJQUN2SSx5REFBeUQ7SUFDekQsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixNQUFNLFdBQVcsR0FBRyxLQUFLLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUV2SCwrQkFBK0I7SUFDL0IsTUFBTSxlQUFlLEdBQW1CLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7SUFFdEcsSUFBSSxlQUFlLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUNyQyx1QkFBdUI7UUFDdkIsZUFBZSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLCtCQUErQixDQUFDLElBQXlCO0lBQ3ZFLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNsQixJQUFJLFdBQW1CLENBQUM7SUFDeEIsSUFBSSxVQUFrQixDQUFDO0lBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQyxRQUFRO1lBQ1IseUVBQXlFO1lBRXpFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksTUFBTSxFQUFFLENBQUM7WUFDckMsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUMxQixVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFlBQVksTUFBTSxFQUFFLENBQUM7UUFDNUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxVQUFrQixFQUFFLFdBQXVCO0lBQ3JGLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFLENBQUM7UUFDckMsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkUsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvY3VzYWJsZUVsZW1lbnQsIGlzRm9jdXNhYmxlRWxlbWVudCB9IGZyb20gJy4vZm9jdXNhYmxlJztcbmltcG9ydCB7IGlzTmlsLCBpc05pbE9yQmxhbmssIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgdG9Cb29sZWFuLCB0b051bWJlciB9IGZyb20gJy4vZnVuY3Rpb25zJztcbmltcG9ydCB7Rm9jdXNPcmlnaW59IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdElucHV0Q29udGVudEZyb21FdmVudChldmVudDogRXZlbnQpOiBib29sZWFuIHtcbiAgaWYgKCFldmVudCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBzZWxlY3RJbnB1dENvbnRlbnQoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0SW5wdXRDb250ZW50KGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCB8IGFueSk6IGJvb2xlYW4ge1xuICAvLyBEZXRlY3QgZGVwcmVjYXRlZCB1c2FnZSAoYmVmb3JlIDE4LjIuMjEpXG4gIGlmIChpbnB1dD8udGFyZ2V0IHx8IGlucHV0IGluc3RhbmNlb2YgRXZlbnQpIHtcbiAgICBjb25zb2xlLndhcm4oJ0RFUFJFQ0FURUQgdXNhZ2Ugc2luY2UgMTguMi4yMSAtIFBsZWFzZSB1c2Ugc2VsZWN0SW5wdXRDb250ZW50RnJvbUV2ZW50KCkgaW5zdGVhZCBzZWxlY3RJbnB1dENvbnRlbnQoKScpO1xuICAgIGlucHV0ID0gaW5wdXQudGFyZ2V0O1xuICB9XG4gIGlmICghaW5wdXQpIHJldHVybiB0cnVlO1xuXG4gIC8vIE5vdGhpbmcgdG8gc2VsZWN0XG4gIGlmIChpc05pbE9yQmxhbmsoaW5wdXQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBpbnB1dC5zZWxlY3RSYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBpbnB1dC5zZWxlY3RSYW5nZShpbnB1dC52YWx1ZS5sZW5ndGgsIDApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgc2VsZWN0IGlucHV0IGNvbnRlbnQsIHVzaW5nIHNlbGVjdFJhbmdlKCknLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbnB1dCAmJiB0eXBlb2YgaW5wdXQuc2VsZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgc2VsZWN0IGlucHV0IGNvbnRlbnQsIHVzaW5nIHNlbGVjdCgpJywgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RJbnB1dFJhbmdlKFxuICBpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQsXG4gIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgZW5kSW5kZXg/OiBudW1iZXIsXG4gIGRpcmVjdGlvbj86ICdiYWNrd2FyZCcgfCAnZm9yd2FyZCcgfCAnbm9uZSdcbikge1xuICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0LnNldFNlbGVjdGlvblJhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gTm8gY29udGVudFxuICAgIGlmIChpc05pbE9yQmxhbmsoaW5wdXQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnRJbmRleCwgZW5kSW5kZXggPz8gc3RhcnRJbmRleCwgZGlyZWN0aW9uKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBzZWxlY3QgaW5wdXQgcmFuZ2UnLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENhcmV0UG9zaXRpb24oaW5wdXQ6IGFueSk6IG51bWJlciB7XG4gIGlmIChpbnB1dCAmJiBpbnB1dC5zZWxlY3Rpb25TdGFydCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGlucHV0LnNlbGVjdGlvbkRpcmVjdGlvbiA/IChpbnB1dC5zZWxlY3Rpb25EaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBpbnB1dC5zZWxlY3Rpb25TdGFydCA6IGlucHV0LnNlbGVjdGlvbkVuZCkgOiBpbnB1dC5zZWxlY3Rpb25TdGFydDtcbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGlucHV0OiBhbnksIHBvc2l0aW9uOiBudW1iZXIpIHtcbiAgaWYgKGlucHV0ICYmIGlucHV0LnNlbGVjdGlvblN0YXJ0ICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2xhbXAgcG9zaXRpb24gdG8gdmFsaWQgcmFuZ2VcbiAgICAgIGNvbnN0IG1heFBvc2l0aW9uID0gaW5wdXQudmFsdWU/Lmxlbmd0aCA/PyAwO1xuICAgICAgY29uc3QgY2xhbXBlZFBvc2l0aW9uID0gTWF0aC5tYXgoMCwgTWF0aC5taW4ocG9zaXRpb24sIG1heFBvc2l0aW9uKSk7XG5cbiAgICAgIC8vIFNldCBjdXJzb3IgcG9zaXRpb24gdXNpbmcgc2V0U2VsZWN0aW9uUmFuZ2VcbiAgICAgIGlmICh0eXBlb2YgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UoY2xhbXBlZFBvc2l0aW9uLCBjbGFtcGVkUG9zaXRpb24pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBzZXQgY2FyZXQgcG9zaXRpb24nLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSW5wdXRDYXJldFRvU2VwYXJhdG9yKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBzZXBhcmF0b3I6IHN0cmluZywgZm9yd2FyZD86IGJvb2xlYW4pIHtcbiAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgIXNlcGFyYXRvcikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBhbnk7XG4gIGlmICghaW5wdXQpIHJldHVybiB0cnVlO1xuXG4gIGNvbnN0IGNhcmV0UG9zaXRpb24gPSBnZXRDYXJldFBvc2l0aW9uKGlucHV0KTtcblxuICAvLyBERUJVR1xuICAvL2NvbnNvbGUuZGVidWcoJ2NhcmV0UG9zaXRpb249JywgY2FyZXRQb3NpdGlvbik7XG5cbiAgaWYgKGNhcmV0UG9zaXRpb24gPT09IC0xKSByZXR1cm4gdHJ1ZTsgLy8gQ2FyZXQgcG9zIG5vdCBmb3VuZDogc2tpcFxuXG4gIC8vIEdldCBpbnB1dCB2YWx1ZVxuICBjb25zdCB2YWx1ZSA9IGlucHV0LnZhbHVlIGFzIHN0cmluZztcblxuICAvLyBObyBjb250ZW50OiBza2lwXG4gIGlmIChpc05pbE9yQmxhbmsodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICBpZiAodmFsdWUgJiYgY2FyZXRQb3NpdGlvbiA8PSB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJJbnB1dCB0ZXh0IHZhbHVlOiBcIiwgdmFsdWUpO1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ3Vyc29yIGF0OiBcIiwgY2FyZXRQb3NpdGlvbik7XG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJUZXh0IGFmdGVyIGN1cnNvcjogXCIsIHZhbHVlLnN1YnN0cmluZyhjYXJldFBvc2l0aW9uKSk7XG5cbiAgICAgIGZvcndhcmQgPSBmb3J3YXJkICE9PSBmYWxzZTtcblxuICAgICAgY29uc3Qgc2VwYXJhdG9ySW5kZXggPSBmb3J3YXJkID8gdmFsdWUuaW5kZXhPZihzZXBhcmF0b3IsIGNhcmV0UG9zaXRpb24pIDogdmFsdWUubGFzdEluZGV4T2Yoc2VwYXJhdG9yLCBjYXJldFBvc2l0aW9uKTtcbiAgICAgIGlmIChzZXBhcmF0b3JJbmRleCAhPT0gLTEgJiYgKChmb3J3YXJkICYmIHNlcGFyYXRvckluZGV4ICsgMSA8IHZhbHVlLmxlbmd0aCkgfHwgKCFmb3J3YXJkICYmIHNlcGFyYXRvckluZGV4ID4gMCkpKSB7XG4gICAgICAgIGlmIChpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgICAgICAgIC8vIE1vdmUgYWZ0ZXIgdGhlIG5leHQgc2VwYXJhdG9yXG4gICAgICAgICAgaWYgKHNlbGVjdElucHV0UmFuZ2UoaW5wdXQsIHNlcGFyYXRvckluZGV4ICsgKGZvcndhcmQgPyAxIDogLTEpKSkge1xuICAgICAgICAgICAgLy8gU3RvcCB0aGUga2V5Ym9hcmQgZXZlbnRcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBtb3ZlIGNhcmV0IHRvIG5leHQgc2VwYXJhdG9yJywgZXJyKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJOdW1iZXJJbnB1dChldmVudDogS2V5Ym9hcmRFdmVudCwgYWxsb3dEZWNpbWFsczogYm9vbGVhbiwgZGVjaW1hbFNlcGFyYXRvcj86IHN0cmluZykge1xuICAvL2lucHV0IG51bWJlciBlbnRlcmVkIG9yIG9uZSBvZiB0aGUgNCBkaXJlY3Rpb24gdXAsIGRvd24sIGxlZnQgYW5kIHJpZ2h0XG4gIGlmICgoZXZlbnQud2hpY2ggPj0gNDggJiYgZXZlbnQud2hpY2ggPD0gNTcpIHx8IChldmVudC53aGljaCA+PSAzNyAmJiBldmVudC53aGljaCA8PSA0MCkpIHtcbiAgICAvL2NvbnNvbGUuZGVidWcoJ2lucHV0IG51bWJlciBlbnRlcmVkIDonICsgZXZlbnQud2hpY2ggKyAnICcgKyBldmVudC5rZXlDb2RlICsgJyAnICsgZXZlbnQuY2hhckNvZGUpO1xuICAgIC8vIE9LXG4gIH1cbiAgLy8gRGVjaW1hbCBzZXBhcmF0b3JcbiAgZWxzZSBpZiAoXG4gICAgYWxsb3dEZWNpbWFscyAmJlxuICAgICgoIWRlY2ltYWxTZXBhcmF0b3IgJiYgKGV2ZW50LmtleSA9PT0gJy4nIHx8IGV2ZW50LmtleSA9PT0gJywnKSkgfHwgKGRlY2ltYWxTZXBhcmF0b3IgJiYgZXZlbnQua2V5ID09PSBkZWNpbWFsU2VwYXJhdG9yKSlcbiAgKSB7XG4gICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBkZWNpbWFsIHNlcGFyYXRvciBlbnRlcmVkIDonICsgZXZlbnQuY29kZSk7XG4gICAgLy8gT0tcbiAgfSBlbHNlIHtcbiAgICAvL2lucHV0IGNvbW1hbmQgZW50ZXJlZCBvZiBkZWxldGUsIGJhY2tzcGFjZSBvciBvbmUgb2YgdGhlIDQgZGlyZWN0aW9uIHVwLCBkb3duLCBsZWZ0IGFuZCByaWdodCwgb3IgbmVnYXRpdmUgc2lnblxuICAgIGlmICgoZXZlbnQua2V5Q29kZSA+PSAzNyAmJiBldmVudC5rZXlDb2RlIDw9IDQwKSB8fCBldmVudC5rZXlDb2RlID09PSA0NiB8fCBldmVudC53aGljaCA9PT0gOCB8fCBldmVudC5rZXlDb2RlID09PSA5IHx8IGV2ZW50LmtleUNvZGUgPT09IDQ1KSB7XG4gICAgICAvL2NvbnNvbGUuZGVidWcoJ2lucHV0IGNvbW1hbmQgZW50ZXJlZCA6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlKTtcbiAgICAgIC8vIE9LXG4gICAgfVxuICAgIC8vIENhbmNlbCBvdGhlciBrZXlib2FyZCBldmVudHNcbiAgICBlbHNlIHtcbiAgICAgIC8vY29uc29sZS5kZWJ1ZygnaW5wdXQgbm90IG51bWJlciBlbnRlcmVkIDonICsgZXZlbnQud2hpY2ggKyAnICcgKyBldmVudC5rZXlDb2RlICsgJyAnICsgZXZlbnQuY2hhckNvZGUgKyAnICcgKyBldmVudC5jb2RlICk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9jdXNJbnB1dDxUID0gYW55PihlbGVtZW50OiBFbGVtZW50UmVmPFQ+LCBvcHRpb25zPzogRm9jdXNPcHRpb25zLCBvcmlnaW4/OiBGb2N1c09yaWdpbikge1xuICBjb25zdCBpbnB1dEVsZW1lbnQgPSBhc0lucHV0RWxlbWVudChlbGVtZW50KTtcbiAgaWYgKGlucHV0RWxlbWVudCkgaW5wdXRFbGVtZW50LmZvY3VzKG9wdGlvbnMsIG9yaWdpbik7XG4gIGVsc2Uge1xuICAgIGNvbnNvbGUud2FybignVHJ5aW5nIHRvIGZvY3VzIG9uIHRoaXMgZWxlbWVudDonLCBlbGVtZW50KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGFiSW5kZXg8VCA9IGFueT4oZWxlbWVudDogRWxlbWVudFJlZjxUPiwgdGFiSW5kZXg6IG51bWJlcikge1xuICBpZiAoaXNJbnB1dEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBlbGVtZW50LnRhYmluZGV4ID0gdGFiSW5kZXg7XG4gIH0gZWxzZSBpZiAoZWxlbWVudCAmJiBpc0lucHV0RWxlbWVudChlbGVtZW50Lm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gdGFiSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS53YXJuKCdUcnlpbmcgdG8gY2hhbmdlIHRhYmluZGV4IG9uIHRoaXMgZWxlbWVudDonLCBlbGVtZW50KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElucHV0RWxlbWVudCBleHRlbmRzIEZvY3VzYWJsZUVsZW1lbnQge1xuICB0YWJpbmRleD86IG51bWJlcjtcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcmVhZG9ubHk/OiBib29sZWFuO1xuICB2YWx1ZTogYW55O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5wdXRFbGVtZW50KG9iamVjdDogYW55KTogb2JqZWN0IGlzIElucHV0RWxlbWVudCB7XG4gIHJldHVybiAoXG4gICAgaXNGb2N1c2FibGVFbGVtZW50KG9iamVjdCkgJiZcbiAgICAoJ3ZhbHVlJyBpbiBvYmplY3QgfHxcbiAgICAgIC8vIGhhcyB2YWx1ZSBpcyBub3QgYWx3YXlzIHNldCAobmVpdGhlciB0YWJpbmRleCkgY2hlY2sgb24gMiBwcm9wZXJ0aWVzIHdpdGggYSBsb2dpY2FsIE9SXG4gICAgICAndGFiaW5kZXgnIGluIG9iamVjdCB8fFxuICAgICAgJ3RhYkluZGV4JyBpbiBvYmplY3QpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc0lucHV0RWxlbWVudDxUID0gYW55PihvYmplY3Q6IEVsZW1lbnRSZWY8VD4pOiBJbnB1dEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICBpZiAob2JqZWN0KSB7XG4gICAgaWYgKGlzSW5wdXRFbGVtZW50KG9iamVjdCkpIHJldHVybiBvYmplY3Q7XG4gICAgaWYgKG9iamVjdC5uYXRpdmVFbGVtZW50ICYmIGlzSW5wdXRFbGVtZW50KG9iamVjdC5uYXRpdmVFbGVtZW50KSkgcmV0dXJuIG9iamVjdC5uYXRpdmVFbGVtZW50O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWJpbmRleENvbXBhcmF0b3IoYTogSW5wdXRFbGVtZW50LCBiOiBJbnB1dEVsZW1lbnQpIHtcbiAgY29uc3QgdmFsdWVBID0gYS50YWJpbmRleCB8fCBhLnRhYkluZGV4O1xuICBjb25zdCB2YWx1ZUIgPSBiLnRhYmluZGV4IHx8IGIudGFiSW5kZXg7XG4gIHJldHVybiB2YWx1ZUEgPT09IHZhbHVlQiA/IDAgOiB2YWx1ZUEgPiB2YWx1ZUIgPyAxIDogLTE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuR2FpbkZvY3VzT3B0aW9ucyB7XG4gIG1pblRhYmluZGV4PzogbnVtYmVyO1xuICBtYXhUYWJpbmRleD86IG51bWJlcjtcbiAgaXNFbXB0eT86IGJvb2xlYW47XG4gIGlzTm90RW1wdHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldEZvY3VzYWJsZUlucHV0T3B0aW9ucyBleHRlbmRzIENhbkdhaW5Gb2N1c09wdGlvbnMge1xuICBzb3J0QnlUYWJJbmRleD86IGJvb2xlYW47XG4gIGRlYnVnPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbkhhdmVGb2N1cyhpbnB1dDogSW5wdXRFbGVtZW50LCBvcHRzPzogQ2FuR2FpbkZvY3VzT3B0aW9ucyk6IGJvb2xlYW4ge1xuICBpZiAoIWlucHV0KSByZXR1cm4gZmFsc2U7XG4gIGlmIChvcHRzPy5pc0VtcHR5ICYmIG9wdHMuaXNOb3RFbXB0eSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgYm90aCBvcHRpb25zIG9ubHlFbXB0eUlucHV0IGFuZCBvbmx5Tm90RW1wdHlJbnB1dCBhdCB0aGUgc2FtZSB0aW1lLiBQbGVhc2UgdXNlIG9ubHkgb25lIG9mIHRoZW0uJyk7XG4gIHJldHVybiAoXG4gICAgLy8gRXhjbHVkZSBkaXNhYmxlZCBlbGVtZW50XG4gICAgIXRvQm9vbGVhbihpbnB1dC5kaXNhYmxlZCwgZmFsc2UpICYmXG4gICAgLy8gRXhjbHVkZSByZWFkb25seSBlbGVtZW50XG4gICAgIXRvQm9vbGVhbihpbnB1dC5yZWFkb25seSwgZmFsc2UpICYmXG4gICAgLy8gRXhjbHVkZSBoaWRkZW4gZWxlbWVudFxuICAgICF0b0Jvb2xlYW4oaW5wdXQuaGlkZGVuLCBmYWxzZSkgJiZcbiAgICAvLyBFeGNsdWRlIG1pblRhYkluZGV4IDwgZWxlbWVudC50YWJJbmRleFxuICAgIChpc05pbChvcHRzPy5taW5UYWJpbmRleCkgfHwgdG9OdW1iZXIoaW5wdXQudGFiSW5kZXgsIGlucHV0LnRhYmluZGV4KSA+IG9wdHMubWluVGFiaW5kZXgpICYmXG4gICAgLy8gRXhjbHVkZSBtYXhUYWJJbmRleCA+IGVsZW1lbnQudGFiSW5kZXhcbiAgICAoaXNOaWwob3B0cz8ubWF4VGFiaW5kZXgpIHx8IHRvTnVtYmVyKGlucHV0LnRhYkluZGV4LCBpbnB1dC50YWJpbmRleCkgPCBvcHRzLm1heFRhYmluZGV4KSAmJlxuICAgIC8vIEV4Y2x1ZGUgbm90IG5pbCBpbnB1dCB2YWx1ZVxuICAgICghb3B0cz8uaXNFbXB0eSB8fCBpc05pbE9yQmxhbmsoaW5wdXQudmFsdWUpKSAmJlxuICAgIC8vIEV4Y2x1ZGUgbmlsIGlucHV0IHZhbHVlXG4gICAgKCFvcHRzPy5pc05vdEVtcHR5IHx8IGlzTm90TmlsT3JCbGFuayhpbnB1dC52YWx1ZSkpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2N1c2FibGVJbnB1dEVsZW1lbnRzKGVsZW1lbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4sIG9wdHM/OiBHZXRGb2N1c2FibGVJbnB1dE9wdGlvbnMpOiBJbnB1dEVsZW1lbnRbXSB7XG4gIG9wdHMgPSB7IHNvcnRCeVRhYkluZGV4OiBmYWxzZSwgLi4ub3B0cyB9O1xuXG4gIC8vIEZvY3VzIHRvIGZpcnN0IGlucHV0XG4gIGNvbnN0IGZpbHRlcmVkRWxlbWVudHM6IElucHV0RWxlbWVudFtdID0gZWxlbWVudHNcblxuICAgIC8vIFRyYW5zZm9ybSB0byBpbnB1dFxuICAgIC5tYXAoYXNJbnB1dEVsZW1lbnQpXG5cbiAgICAuZmlsdGVyKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZWQgPSBjYW5IYXZlRm9jdXMoaW5wdXQsIG9wdHMpO1xuICAgICAgLy8gREVCVUdcbiAgICAgIGlmIChpbnB1dCAmJiBvcHRzLmRlYnVnKVxuICAgICAgICBjb25zb2xlLmRlYnVnKGBbaW5wdXRzXSBGb2N1c2FibGUgaW5wdXQge2NhbkZvY3VzOiAke2luY2x1ZGVkfSwgdGFiSW5kZXg6ICR7aW5wdXQudGFiSW5kZXggfHwgaW5wdXQudGFiaW5kZXh9fWAsIGlucHV0KTtcbiAgICAgIHJldHVybiBpbmNsdWRlZDtcbiAgICB9KTtcblxuICAvLyBTb3J0IGJ5IHRhYkluZGV4XG4gIGlmIChvcHRzLnNvcnRCeVRhYkluZGV4KSB7XG4gICAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHMuc29ydCh0YWJpbmRleENvbXBhcmF0b3IpO1xuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c05leHRJbnB1dDxUID0gYW55PihldmVudDogRXZlbnQgfCB1bmRlZmluZWQsIGVsZW1lbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxUPj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IEdldEZvY3VzYWJsZUlucHV0T3B0aW9ucyk6IGJvb2xlYW4ge1xuICAvLyBDYW5jZWxsaW5nIGV2ZW50IChlLmcuIHdoZW4gZW1pdHRlZCBieSAoa2V5ZG93bi50YWIpIClcbiAgaWYgKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8vIEdldCBjdXJyZW50IGluZGV4XG4gIGNvbnN0IG1pblRhYmluZGV4ID0gZXZlbnQgJiYgaXNJbnB1dEVsZW1lbnQoZXZlbnQudGFyZ2V0KSA/IChldmVudC50YXJnZXQudGFiSW5kZXggPz8gZXZlbnQudGFyZ2V0LnRhYmluZGV4KSA6IHVuZGVmaW5lZDtcblxuICAvLyBHZXQgZm9jdXNhYmxlIGlucHV0IGVsZW1lbnRzXG4gIGNvbnN0IGZvY3VzYWJsZUlucHV0czogSW5wdXRFbGVtZW50W10gPSBnZXRGb2N1c2FibGVJbnB1dEVsZW1lbnRzKGVsZW1lbnRzLCB7IG1pblRhYmluZGV4LCAuLi5vcHRzIH0pO1xuXG4gIGlmIChpc05vdEVtcHR5QXJyYXkoZm9jdXNhYmxlSW5wdXRzKSkge1xuICAgIC8vIEZvY3VzIG9uIGZpcnN0IGlucHV0c1xuICAgIGZvY3VzYWJsZUlucHV0c1swXS5mb2N1cygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9jdXNQcmV2aW91c0lucHV0PFQgPSBhbnk+KGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZCwgZWxlbWVudHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPFQ+Piwgb3B0cz86IEdldEZvY3VzYWJsZUlucHV0T3B0aW9ucyk6IGJvb2xlYW4ge1xuICAvLyBDYW5jZWxsaW5nIGV2ZW50IChlLmcuIHdoZW4gZW1pdHRlZCBieSAoa2V5ZG93bi50YWIpIClcbiAgaWYgKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8vIEdldCBjdXJyZW50IGluZGV4XG4gIGNvbnN0IG1heFRhYmluZGV4ID0gZXZlbnQgJiYgaXNJbnB1dEVsZW1lbnQoZXZlbnQudGFyZ2V0KSA/IGV2ZW50LnRhcmdldC50YWJJbmRleCB8fCBldmVudC50YXJnZXQudGFiaW5kZXggOiB1bmRlZmluZWQ7XG5cbiAgLy8gR2V0IGZvY3VzYWJsZSBpbnB1dCBlbGVtZW50c1xuICBjb25zdCBmb2N1c2FibGVJbnB1dHM6IElucHV0RWxlbWVudFtdID0gZ2V0Rm9jdXNhYmxlSW5wdXRFbGVtZW50cyhlbGVtZW50cywgeyBtYXhUYWJpbmRleCwgLi4ub3B0cyB9KTtcblxuICBpZiAoaXNOb3RFbXB0eUFycmF5KGZvY3VzYWJsZUlucHV0cykpIHtcbiAgICAvLyBGb2N1cyBvbiBsYXN0IGlucHV0c1xuICAgIGZvY3VzYWJsZUlucHV0c1tmb2N1c2FibGVJbnB1dHMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0U2VsZWN0aW9uUmFuZ2VzRnJvbU1hc2sobWFzazogKHN0cmluZyB8IFJlZ0V4cClbXSk6IG51bWJlcltdW10ge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgbGV0IGZpcnN0X2luZGV4OiBudW1iZXI7XG4gIGxldCBsYXN0X2luZGV4OiBudW1iZXI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFzay5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpID09PSAwICYmIG1hc2tbaV0udG9TdHJpbmcoKSA9PT0gJy9bKy1dLycpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcoJ1RPRE8gcHVzaCBzdGFydCBtYXNrJywgeyBpLCBtYXNrOiBtYXNrW2ldLnRvU3RyaW5nKCkgfSk7XG5cbiAgICAgIHJlc3VsdC5wdXNoKFswLCAwXSk7XG4gICAgfSBlbHNlIGlmIChtYXNrW2ldIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBpZiAoaXNOaWwoZmlyc3RfaW5kZXgpKSB7XG4gICAgICAgIGZpcnN0X2luZGV4ID0gaTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzTm90TmlsKGZpcnN0X2luZGV4KSkge1xuICAgICAgICBsYXN0X2luZGV4ID0gaSAtIDE7XG4gICAgICAgIHJlc3VsdC5wdXNoKFtmaXJzdF9pbmRleCwgbGFzdF9pbmRleF0pO1xuICAgICAgICBmaXJzdF9pbmRleCA9IG51bGw7XG4gICAgICAgIGxhc3RfaW5kZXggPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAobWFza1ttYXNrLmxlbmd0aCAtIDFdIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgbGFzdF9pbmRleCA9IG1hc2subGVuZ3RoIC0gMTtcbiAgICByZXN1bHQucHVzaChbZmlyc3RfaW5kZXgsIGxhc3RfaW5kZXhdKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRSYW5nZUZyb21DYXJldEluZGV4KGNhcmV0SW5kZXg6IG51bWJlciwgaW5wdXRSYW5nZXM6IG51bWJlcltdW10pOiBudW1iZXJbXSB7XG4gIGZvciAoY29uc3QgaW5wdXRSYW5nZSBvZiBpbnB1dFJhbmdlcykge1xuICAgIGlmIChjYXJldEluZGV4ID49IGlucHV0UmFuZ2VbMF0gJiYgY2FyZXRJbmRleCA8PSBpbnB1dFJhbmdlWzFdICsgMSkge1xuICAgICAgcmV0dXJuIGlucHV0UmFuZ2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19
|