mis-crystal-design-system 18.1.6-test-1 → 18.1.6-test-2
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/button/button.directive.scss +71 -0
- package/drawer/drawer.scss +20 -0
- package/esm2022/dynamic-form/dynamic-form.component.mjs +34 -5
- package/fesm2022/mis-crystal-design-system-dynamic-form.mjs +33 -4
- package/fesm2022/mis-crystal-design-system-dynamic-form.mjs.map +1 -1
- package/input/mis-input.component.scss +187 -0
- package/modal/modal.scss +9 -0
- package/package.json +7 -7
- package/styles/fonts/icomoon.eot +0 -0
- package/styles/fonts/icomoon.svg +315 -0
- package/styles/fonts/icomoon.ttf +0 -0
- package/styles/fonts/icomoon.woff +0 -0
- package/styles/mis-borders-backgrounds.scss +764 -0
- package/styles/mis-color-constants.scss +353 -0
- package/styles/mis-flex.scss +321 -0
- package/styles/mis-fonts.scss +124 -0
- package/styles/mis-icons.scss +1054 -0
- package/styles/mis-mixins.scss +46 -0
- package/styles/mis-old-icon-styles.scss +0 -0
- package/styles/mis-spacing-sizing.scss +2590 -0
- package/styles/mis-typography.scss +462 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
@import '../styles/mis-color-constants.scss';
|
|
2
|
+
|
|
3
|
+
.mis-btn {
|
|
4
|
+
background: none;
|
|
5
|
+
outline: none;
|
|
6
|
+
border: none;
|
|
7
|
+
cursor: pointer;
|
|
8
|
+
border-radius: 4px;
|
|
9
|
+
vertical-align: middle;
|
|
10
|
+
text-align: center;
|
|
11
|
+
box-sizing: border-box;
|
|
12
|
+
display: flex;
|
|
13
|
+
align-items: center;
|
|
14
|
+
text-decoration: none;
|
|
15
|
+
justify-content: center;
|
|
16
|
+
|
|
17
|
+
span,
|
|
18
|
+
img {
|
|
19
|
+
margin-right: 8px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
padding: 10px 16px;
|
|
23
|
+
font-size: 16px;
|
|
24
|
+
line-height: 24px;
|
|
25
|
+
&.mis-btn-lg {
|
|
26
|
+
padding: 16px;
|
|
27
|
+
font-weight: bold;
|
|
28
|
+
}
|
|
29
|
+
&.mis-btn-sm {
|
|
30
|
+
padding: 6px 12px;
|
|
31
|
+
font-size: 14px;
|
|
32
|
+
line-height: 20px;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
background-color: transparent;
|
|
36
|
+
color: var(--brand-primary, $pmry_500);
|
|
37
|
+
&:hover {
|
|
38
|
+
background-color: var(--brand-primary-hover, $tr_hover);
|
|
39
|
+
}
|
|
40
|
+
&:focus {
|
|
41
|
+
background-color: var(--brand-primary-active, $tr_pressed);
|
|
42
|
+
}
|
|
43
|
+
&:disabled {
|
|
44
|
+
color: var(--text-tertiary, $text-disabled);
|
|
45
|
+
pointer-events: none;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
&.mis-outline {
|
|
49
|
+
border: 1px solid var(--brand-primary, $pmry_500);
|
|
50
|
+
|
|
51
|
+
&:disabled {
|
|
52
|
+
color: var(--text-tertiary, $text-disabled);
|
|
53
|
+
border-color: var(--text-tertiary, $text-disabled);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
&.mis-primary {
|
|
58
|
+
background-color: var(--brand-primary, $pmry_500);
|
|
59
|
+
color: var(--bg-primary, $text_white);
|
|
60
|
+
&:hover {
|
|
61
|
+
background-color: var(--brand-primary-dark, $pmry_600);
|
|
62
|
+
}
|
|
63
|
+
&:focus {
|
|
64
|
+
background-color: var(--brand-primary-darker, $pmry_700);
|
|
65
|
+
}
|
|
66
|
+
&:disabled {
|
|
67
|
+
background-color: var(--border-primary, $grey_seperators);
|
|
68
|
+
color: var(--text-tertiary, $text-disabled);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
.mis-drawer {
|
|
2
|
+
display: block;
|
|
3
|
+
transition: all 300ms ease-out;
|
|
4
|
+
}
|
|
5
|
+
.mis-drawer-overlay {
|
|
6
|
+
background: var(--bg-overlay-light, rgba(0, 0, 0, 0.12));
|
|
7
|
+
}
|
|
8
|
+
mis-datepicker-container {
|
|
9
|
+
z-index: 2100;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
mis-loader {
|
|
13
|
+
z-index: 3000;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@keyframes slideOut {
|
|
17
|
+
to {
|
|
18
|
+
transform: translateX(100%);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -800,11 +800,22 @@ export class DynamicFormComponent {
|
|
|
800
800
|
const formValues = this.formValues();
|
|
801
801
|
const currentForm = this.dynamicFormSignal();
|
|
802
802
|
// Only patch if form exists and this is not an internal update
|
|
803
|
-
if (currentForm
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
803
|
+
if (!currentForm || this.isInternalUpdate || !formValues) {
|
|
804
|
+
return;
|
|
805
|
+
}
|
|
806
|
+
// CRITICAL: Don't patch if user is actively typing in any input field
|
|
807
|
+
// This prevents focus loss when user is typing
|
|
808
|
+
const activeElement = document.activeElement;
|
|
809
|
+
const isUserTyping = activeElement &&
|
|
810
|
+
(activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA') &&
|
|
811
|
+
activeElement.closest('form[formGroup]') !== null;
|
|
812
|
+
if (isUserTyping) {
|
|
813
|
+
// User is actively typing - skip patching to prevent focus loss
|
|
814
|
+
return;
|
|
807
815
|
}
|
|
816
|
+
untracked(() => {
|
|
817
|
+
this.patchFormValues(currentForm, formValues);
|
|
818
|
+
});
|
|
808
819
|
});
|
|
809
820
|
}
|
|
810
821
|
/**
|
|
@@ -948,12 +959,30 @@ export class DynamicFormComponent {
|
|
|
948
959
|
return this.dynamicForm().get("dynamicFields");
|
|
949
960
|
}
|
|
950
961
|
handleSubFieldUpdates(form) {
|
|
962
|
+
// CRITICAL: Don't update subfields if user is actively typing
|
|
963
|
+
// This prevents focus loss when user is typing in any field
|
|
964
|
+
const activeElement = document.activeElement;
|
|
965
|
+
const isUserTyping = activeElement &&
|
|
966
|
+
(activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA') &&
|
|
967
|
+
activeElement.closest('form[formGroup]') !== null;
|
|
968
|
+
if (isUserTyping) {
|
|
969
|
+
// User is actively typing - skip subfield updates to prevent focus loss
|
|
970
|
+
return;
|
|
971
|
+
}
|
|
951
972
|
// Clear any pending updates
|
|
952
973
|
if (this.subFieldUpdateTimeout) {
|
|
953
974
|
clearTimeout(this.subFieldUpdateTimeout);
|
|
954
975
|
}
|
|
955
976
|
// Debounce subfield updates to prevent excessive calls
|
|
956
977
|
this.subFieldUpdateTimeout = setTimeout(() => {
|
|
978
|
+
// Check again after debounce - user might still be typing
|
|
979
|
+
const activeElementAfterDebounce = document.activeElement;
|
|
980
|
+
const stillTyping = activeElementAfterDebounce &&
|
|
981
|
+
(activeElementAfterDebounce.tagName === 'INPUT' || activeElementAfterDebounce.tagName === 'TEXTAREA') &&
|
|
982
|
+
activeElementAfterDebounce.closest('form[formGroup]') !== null;
|
|
983
|
+
if (stillTyping) {
|
|
984
|
+
return;
|
|
985
|
+
}
|
|
957
986
|
const formArray = form.get('dynamicFields');
|
|
958
987
|
if (!formArray)
|
|
959
988
|
return;
|
|
@@ -1251,4 +1280,4 @@ export const dynamicFieldValidator = (validators) => {
|
|
|
1251
1280
|
return errors;
|
|
1252
1281
|
};
|
|
1253
1282
|
};
|
|
1254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBZ0QsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUosT0FBTyxFQUFtQixnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBaUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEosT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sUUFBUSxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8saUJBQWlCLE1BQU0sZ0NBQWdDLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDT3RELDZCQUFzRztJQUNwRyw0QkFNZTs7Ozs7Ozs7OztJQUxiLGNBQWlDO0lBQ2pDLEFBREEsa0RBQWlDLDhSQUkvQjs7O0lBUFIsK0JBQW1QO0lBQ2pQLDZHQUFzRztJQVN4RyxpQkFBTTs7O0lBVHNDLGNBQTZDO0lBQTdDLHFFQUE2Qzs7O0lBWDNGLGlDQUFrSDtJQUM5Ryw0QkFRYTtJQUNmLHFGQUFtUDs7Ozs7OztJQVZ2TyxvQ0FBbUI7SUFFN0IsY0FBaUM7SUFDakMsQUFEQSxrREFBaUMsOEtBSy9CO0lBRzJCLGNBQWtOO0lBQWxOLGl4QkFBa047Ozs7SUFvQm5QLDZCQUF5RTtJQUN2RSxrSUFHQzs7Ozs7Ozs7SUFGQyxjQUEwQztJQUMxQyxBQURBLCtEQUEwQyw4RkFDMEM7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UixLQUFLLFdBQVc7b0JBQ2QsS0FBSyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUE7b0JBQ3ZELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUE7b0JBQ3RELElBQUcsS0FBSzt3QkFBRSxLQUFLLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUE7b0JBQ3hDLE1BQU07Z0JBQ1IsS0FBSyxPQUFPO29CQUNWLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO29CQUNqQyxJQUFHLEtBQUs7d0JBQUUsS0FBSyxHQUFHLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBQyxDQUFBO29CQUNsQyxNQUFNO2dCQUNSLEtBQUssUUFBUTtvQkFDWCxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO29CQUN6RCxJQUFHLEtBQUs7d0JBQUUsS0FBSyxHQUFHLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFBO29CQUNuQyxNQUFNO2dCQUNSO29CQUNFLE1BQU07WUFDVixDQUFDO1lBQ0QsSUFBSSxLQUFLO2dCQUFFLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUE7UUFDN0MsQ0FBQyxDQUFDLENBQUE7UUFDRixPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUMsQ0FBQTtBQUNILENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBIb3N0TGlzdGVuZXIsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgaW5wdXQsIG91dHB1dCwgc2lnbmFsLCBjb21wdXRlZCwgZWZmZWN0LCB1bnRyYWNrZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTnNEeW5hbWljRm9ybSB9IGZyb20gXCIuL2R5bmFtaWMtZm9ybS5uYW1lc3BhY2VcIjtcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZSc7XG5pbXBvcnQgY3VzdG9tUGFyc2VGb3JtYXQgZnJvbSAnZGF5anMvcGx1Z2luL2N1c3RvbVBhcnNlRm9ybWF0J1xuXG5kYXlqcy5leHRlbmQodGltZXpvbmUpO1xuZGF5anMuZXh0ZW5kKGN1c3RvbVBhcnNlRm9ybWF0KTtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtZHluYW1pYy1mb3JtXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZHluYW1pYy1mb3JtLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9keW5hbWljLWZvcm0uY29tcG9uZW50LnNjc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBmb3JtRmllbGRzOiAgRHluYW1pYyBmaWVsZHMgcmVjaWV2ZWQgZnJvbSB0aGUgQVBJIG1ldGFkYXRhIHRvIGJ1aWxkIGEgZHluYW1pYyBmb3JtXG4gICAqIGZvcm1WYWx1ZXM6ICBIb2xkcyB0aGUgdmFsdWUgb2YgdGhlIGR5bmFtaWMgZm9ybSB3aXRoIFwia2V5XCIgYmVpbmcgZHluYW1pYyBmaWVsZCBcInRpdGxlXCJcbiAgICogICAgICAgICAgICAgIGFuZCB2YWx1ZSBiZWluZyB0aGUgdXNlciBpbnB1dC5cbiAgICovXG4gIGZvcm1GaWVsZHMgPSBpbnB1dDxBcnJheTxOc0R5bmFtaWNGb3JtLklEeW5hbWljRmllbGQ+PihbXSk7XG4gIGZvcm1WYWx1ZXMgPSBpbnB1dDx7IFtrZXk6IHN0cmluZ106IGFueSB9Pih7fSk7XG4gIC8vIE5lZWQgdG8gZGVwcmVjYXRlIHRoZXNlIGlucHV0cyBhbmQgdXNlIGNvbnN0YW50cy5cbiAgYWN0aXZlQnRuSWNvblVybCA9IGlucHV0PHN0cmluZz4oXCJcIik7XG4gIGNhbGVuZGFySWNvblVybCA9IGlucHV0PHN0cmluZz4oXCJcIik7XG4gIHJlbW92ZUljb25VcmwgPSBpbnB1dDxzdHJpbmc+KFwiXCIpO1xuICByZW1vdmVTZXByYXRvckZvclN1YkZpZWxkcyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgLyoqXG4gICAqIGR5bmFtaWNGb3JtOiBDb25zdHJ1Y3RlZCB1c2luZyBmb3JtRmllbGRzIGFuZCBmb3JtVmFsdWVzKGluIGNhc2Ugb2YgZWRpdClcbiAgICovXG5cbiAgLyoqXG4gICAqIGZvcm1VcGRhdGVkOiBFbWl0cyBmb3JtVmFsdWVzIE9iamVjdCB3aGVuZXZlciB0aGVyZSBpcyBhIGNoYW5nZSBpbiB0aGUgZHluYW1pYyBmb3JtLlxuICAgKi9cbiAgZm9ybVVwZGF0ZWQgPSBvdXRwdXQ8eyBba2V5OiBzdHJpbmddOiBhbnkgfT4oKTtcbiAgLyoqXG4gICAqIGZvcm1WYWxpZDogRW1pdHMgYm9vbGVhbiBkZXBlbmRpbmcgb24gdmFsaWRpdHkgb2YgdGhlIGZvcm1cbiAgICovXG4gIGZvcm1WYWxpZCA9IG91dHB1dDxib29sZWFuPigpO1xuICAvKipcbiAgICogZm9ybUluaXRpYWxpemVkOiBFbWl0cyBkeW5hbWljIGZvcm0gQVBJIG9uIGZvcm0gaW5pdGlsaXphdGlvblxuICAgKi9cbiAgZm9ybUluaXRpYWxpemVkID0gb3V0cHV0PGFueT4oKTtcbiAgZmllbGRSZW1vdmVkID0gb3V0cHV0PE5zRHluYW1pY0Zvcm0uSUR5bmFtaWNGaWVsZD4oKTtcblxuICBAQ29udGVudENoaWxkKFwiY3VzdG9tSW5wdXRUZXh0TnVtYmVyXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBjdXN0b21JbnB1dFRleHROdW1iZXI6IFRlbXBsYXRlUmVmPEVsZW1lbnQ+O1xuICBcbiAgQENvbnRlbnRDaGlsZChcImN1c3RvbUlucHV0VGV4dGFyZWFcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGN1c3RvbUlucHV0VGV4dGFyZWE6IFRlbXBsYXRlUmVmPEVsZW1lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGQoXCJjdXN0b21JbnB1dERhdGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGN1c3RvbUlucHV0RGF0ZTogVGVtcGxhdGVSZWY8RWxlbWVudD47XG5cbiAgQENvbnRlbnRDaGlsZChcImN1c3RvbUJvb2xlYW5Ub2dnbGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGN1c3RvbUJvb2xlYW5Ub2dnbGU6IFRlbXBsYXRlUmVmPEVsZW1lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGQoXCJjdXN0b21TaW5nbGVTZWxlY3REcm9wZG93blwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgY3VzdG9tU2luZ2xlU2VsZWN0RHJvcGRvd246IFRlbXBsYXRlUmVmPEVsZW1lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGQoXCJjdXN0b21TaW5nbGVTZWxlY3RSYWRpb1wiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgY3VzdG9tU2luZ2xlU2VsZWN0UmFkaW86IFRlbXBsYXRlUmVmPEVsZW1lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGQoXCJjdXN0b21NdWx0aVNlbGVjdENoZWNrYm94XCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBjdXN0b21NdWx0aVNlbGVjdENoZWNrYm94OiBUZW1wbGF0ZVJlZjxFbGVtZW50PjtcblxuICBAQ29udGVudENoaWxkKFwiY3VzdG9tTXVsdGlTZWxlY3REcm9wZG93blwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgY3VzdG9tTXVsdGlTZWxlY3REcm9wZG93bjogVGVtcGxhdGVSZWY8RWxlbWVudD47XG5cbiAgLy8gU2lnbmFsLWJhc2VkIHN0YXRlIG1hbmFnZW1lbnRcbiAgcHJpdmF0ZSByZWFkb25seSBkeW5hbWljRm9ybVNpZ25hbCA9IHNpZ25hbDxVbnR5cGVkRm9ybUdyb3VwIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZHluYW1pY0Zvcm1BUElTaWduYWwgPSBzaWduYWw8TnNEeW5hbWljRm9ybS5JRHluYW1pY0Zvcm1BUEkgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSB2YWx1ZUNoYW5nZXNTdWJzY3JpcHRpb25TaWduYWwgPSBzaWduYWw8U3Vic2NyaXB0aW9uIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcHJldmlvdXNGb3JtRmllbGRzOiBBcnJheTxOc0R5bmFtaWNGb3JtLklEeW5hbWljRmllbGQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaXNJbnRlcm5hbFVwZGF0ZSA9IGZhbHNlOyAvLyBGbGFnIHRvIHByZXZlbnQgcmVnZW5lcmF0aW9uIGR1cmluZyBpbnRlcm5hbCB1cGRhdGVzXG4gIFxuICAvLyBDb21wdXRlZCBwcm9wZXJ0aWVzIGZvciB0ZW1wbGF0ZSBhY2Nlc3NcbiAgZHluYW1pY0Zvcm0gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmR5bmFtaWNGb3JtU2lnbmFsKCkpO1xuICBkeW5hbWljRm9ybUFQSSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZHluYW1pY0Zvcm1BUElTaWduYWwoKSk7XG4gIHZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbiQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvblNpZ25hbCgpKTtcbiAgXG4gIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGhhbmRsZSBib3RoIHNpZ25hbCBhbmQgcHJvcGVydHkgYWNjZXNzXG4gIGdldCBmb3JtRmllbGRzQXJyYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUZpZWxkcygpO1xuICB9XG4gIFxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIFdhdGNoIGZvciBjaGFuZ2VzIGluIGZvcm1GaWVsZHMgKHN0cnVjdHVyZSBjaGFuZ2VzKSAtIHJlZ2VuZXJhdGUgZm9ybVxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy5mb3JtRmllbGRzKCk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGZvcm1GaWVsZHMgc3RydWN0dXJlIGFjdHVhbGx5IGNoYW5nZWRcbiAgICAgIGNvbnN0IGZpZWxkc0NoYW5nZWQgPSAhdGhpcy5wcmV2aW91c0Zvcm1GaWVsZHMgfHwgXG4gICAgICAgIHRoaXMucHJldmlvdXNGb3JtRmllbGRzLmxlbmd0aCAhPT0gZm9ybUZpZWxkcy5sZW5ndGggfHxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5wcmV2aW91c0Zvcm1GaWVsZHMpICE9PSBKU09OLnN0cmluZ2lmeShmb3JtRmllbGRzKTtcbiAgICAgIFxuICAgICAgaWYgKGZvcm1GaWVsZHMgJiYgZmllbGRzQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLnByZXZpb3VzRm9ybUZpZWxkcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZm9ybUZpZWxkcykpOyAvLyBEZWVwIGNvcHlcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuZm9ybVZhbHVlcygpO1xuICAgICAgICBcbiAgICAgICAgLy8gVXNlIHVudHJhY2tlZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIHdoZW4gc2V0dGluZyBzaWduYWxzXG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZ2VuZXJhdGVEeW5hbWljRm9ybShmb3JtRmllbGRzLCBmb3JtVmFsdWVzKTtcbiAgICAgICAgICB0aGlzLmR5bmFtaWNGb3JtU2lnbmFsLnNldChmb3JtKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBJbml0aWFsaXplIHByZXZpb3VzIGZpZWxkIHZhbHVlcyBtYXBcbiAgICAgICAgICB0aGlzLnByZXZpb3VzRmllbGRWYWx1ZXMuY2xlYXIoKTtcbiAgICAgICAgICBjb25zdCBmb3JtQXJyYXkgPSBmb3JtLmdldCgnZHluYW1pY0ZpZWxkcycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgICAgICAgaWYgKGZvcm1BcnJheSkge1xuICAgICAgICAgICAgZm9ybUFycmF5LmNvbnRyb2xzLmZvckVhY2goKGZpZWxkR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGZpZWxkR3JvdXAuZ2V0KCd2YWx1ZScpIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcbiAgICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzRmllbGRWYWx1ZXMuc2V0KGluZGV4LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbnRyb2wudmFsdWUpKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBSZS1zdWJzY3JpYmUgdG8gZm9ybSBjaGFuZ2VzXG4gICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZXNTdWJzY3JpcHRpb25TaWduYWwoKT8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvblNpZ25hbC5zZXQoZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGZvcm1WYWx1ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uRm9ybVZhbHVlQ2hhbmdlcygpO1xuICAgICAgICAgICAgLy8gSGFuZGxlIHN1YmZpZWxkIHVwZGF0ZXMgd2hlbiBwYXJlbnQgZmllbGQgdmFsdWVzIGNoYW5nZVxuICAgICAgICAgICAgdGhpcy5oYW5kbGVTdWJGaWVsZFVwZGF0ZXMoZm9ybSk7XG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEVtaXQgZm9ybSB2YWxpZGl0eSBzdGF0dXNcbiAgICAgICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KGZvcm0udmFsaWQpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgQVBJIHdpdGggdGhlIG5ldyBmb3JtXG4gICAgICAgICAgdGhpcy5keW5hbWljRm9ybUFQSVNpZ25hbC5zZXQoe1xuICAgICAgICAgICAgZGVmYXVsdEZvcm1WYWx1ZXM6ICgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVEeW5hbWljRmllbGRzVmFsdWVPYmplY3QoZm9ybS52YWx1ZS5keW5hbWljRmllbGRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLy8gV2F0Y2ggZm9yIGNoYW5nZXMgaW4gZm9ybVZhbHVlcyAoZGF0YSBjaGFuZ2VzKSAtIHBhdGNoIGV4aXN0aW5nIGZvcm0gdmFsdWVzXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSB0aGlzLmZvcm1WYWx1ZXMoKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRGb3JtID0gdGhpcy5keW5hbWljRm9ybVNpZ25hbCgpO1xuICAgICAgXG4gICAgICAvLyBPbmx5IHBhdGNoIGlmIGZvcm0gZXhpc3RzIGFuZCB0aGlzIGlzIG5vdCBhbiBpbnRlcm5hbCB1cGRhdGVcbiAgICAgIGlmIChjdXJyZW50Rm9ybSAmJiAhdGhpcy5pc0ludGVybmFsVXBkYXRlICYmIGZvcm1WYWx1ZXMpIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnBhdGNoRm9ybVZhbHVlcyhjdXJyZW50Rm9ybSwgZm9ybVZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogUGF0Y2hlcyBmb3JtIHZhbHVlcyB3aXRob3V0IHJlZ2VuZXJhdGluZyB0aGUgZm9ybSBzdHJ1Y3R1cmVcbiAgICogVGhpcyBwcmV2ZW50cyBmb2N1cyBsb3NzIHdoZW4gb25seSB2YWx1ZXMgY2hhbmdlXG4gICAqL1xuICBwcml2YXRlIHBhdGNoRm9ybVZhbHVlcyhmb3JtOiBVbnR5cGVkRm9ybUdyb3VwLCBmb3JtVmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUFycmF5ID0gZm9ybS5nZXQoJ2R5bmFtaWNGaWVsZHMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgIGlmICghZm9ybUFycmF5KSByZXR1cm47XG4gICAgXG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5mb3JtRmllbGRzKCk7XG4gICAgZm9ybUFycmF5LmNvbnRyb2xzLmZvckVhY2goKGZpZWxkR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzW2luZGV4XTtcbiAgICAgIGlmICghZmllbGQpIHJldHVybjtcbiAgICAgIFxuICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IGZvcm1WYWx1ZXNbZmllbGQuY29uZmlnTmFtZV07XG4gICAgICBpZiAoZmllbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmaWVsZEdyb3VwLmdldCgndmFsdWUnKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgY29uc3QgbWFwcGVkVmFsdWUgPSB0aGlzLm1hcEZvcm1WYWx1ZVRvRm9ybUZpZWxkKGZpZWxkLCBmaWVsZFZhbHVlKS52YWx1ZTtcbiAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSBpZiB2YWx1ZSBhY3R1YWxseSBjaGFuZ2VkIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgdXBkYXRlc1xuICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShjb250cm9sLnZhbHVlKSAhPT0gSlNPTi5zdHJpbmdpZnkobWFwcGVkVmFsdWUpKSB7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG1hcHBlZFZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBIYW5kbGUgc3ViRmllbGRzIGlmIHRoZXkgZXhpc3RcbiAgICAgICAgaWYgKGZpZWxkVmFsdWU/LnN1YkZpZWxkcyAmJiBmaWVsZC5zdWJGaWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN1YkR5bmFtaWNGaWVsZHMoZmllbGQsIGZpZWxkR3JvdXAsIGNvbnRyb2w/LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gQnVpbGRpbmcgdGhlIGZvcm0gd2l0aCBwcm9wZXIgbnVsbCBjaGVja3NcbiAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy5mb3JtRmllbGRzKCkgfHwgW107XG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuZm9ybVZhbHVlcygpIHx8IHt9O1xuICAgIFxuICAgIC8vIE9ubHkgY3JlYXRlIGZvcm0gaWYgd2UgaGF2ZSBmb3JtIGZpZWxkc1xuICAgIGlmIChmb3JtRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdlbmVyYXRlRHluYW1pY0Zvcm0oZm9ybUZpZWxkcywgZm9ybVZhbHVlcyk7XG4gICAgICB0aGlzLmR5bmFtaWNGb3JtU2lnbmFsLnNldChmb3JtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIGFuIGVtcHR5IGZvcm0gYXMgZmFsbGJhY2tcbiAgICAgIGNvbnN0IGVtcHR5Rm9ybSA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHtcbiAgICAgICAgZHluYW1pY0ZpZWxkczogbmV3IFVudHlwZWRGb3JtQXJyYXkoW10pXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZHluYW1pY0Zvcm1TaWduYWwuc2V0KGVtcHR5Rm9ybSk7XG4gICAgfVxuXG4gICAgLy8gU3Vic2NyaWJpbmcgdG8gZm9ybSBjaGFuZ2VzIGFuZCBlbWl0aW5nIHZhbHVlcy5cbiAgICBjb25zdCBjdXJyZW50Rm9ybSA9IHRoaXMuZHluYW1pY0Zvcm1TaWduYWwoKTtcbiAgICBpZiAoY3VycmVudEZvcm0pIHtcbiAgICAgIC8vIEluaXRpYWxpemUgcHJldmlvdXMgZmllbGQgdmFsdWVzIG1hcFxuICAgICAgdGhpcy5wcmV2aW91c0ZpZWxkVmFsdWVzLmNsZWFyKCk7XG4gICAgICBjb25zdCBmb3JtQXJyYXkgPSBjdXJyZW50Rm9ybS5nZXQoJ2R5bmFtaWNGaWVsZHMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgICAgaWYgKGZvcm1BcnJheSkge1xuICAgICAgICBmb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoZmllbGRHcm91cDogVW50eXBlZEZvcm1Hcm91cCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmaWVsZEdyb3VwLmdldCgndmFsdWUnKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNGaWVsZFZhbHVlcy5zZXQoaW5kZXgsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29udHJvbC52YWx1ZSkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvblNpZ25hbC5zZXQoY3VycmVudEZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZShmb3JtVmFsdWUgPT4ge1xuICAgICAgICB0aGlzLm9uRm9ybVZhbHVlQ2hhbmdlcygpO1xuICAgICAgICAvLyBIYW5kbGUgc3ViZmllbGQgdXBkYXRlcyB3aGVuIHBhcmVudCBmaWVsZCB2YWx1ZXMgY2hhbmdlXG4gICAgICAgIHRoaXMuaGFuZGxlU3ViRmllbGRVcGRhdGVzKGN1cnJlbnRGb3JtKTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvL2FwaSB0byBleHBvc2UgZnVuY3Rpb25zXG4gICAgdGhpcy5keW5hbWljRm9ybUFQSVNpZ25hbC5zZXQoe1xuICAgICAgZGVmYXVsdEZvcm1WYWx1ZXM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVEeW5hbWljRmllbGRzVmFsdWVPYmplY3QodGhpcy5keW5hbWljRm9ybSgpLnZhbHVlLmR5bmFtaWNGaWVsZHMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZm9ybUluaXRpYWxpemVkLmVtaXQodGhpcy5keW5hbWljRm9ybUFQSSgpKTtcbiAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KHRoaXMuZHluYW1pY0Zvcm0oKS52YWxpZCk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24kKCk/LnVuc3Vic2NyaWJlKCk7XG4gICAgaWYgKHRoaXMuc3ViRmllbGRVcGRhdGVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zdWJGaWVsZFVwZGF0ZVRpbWVvdXQpO1xuICAgIH1cbiAgfVxuICBvbkZvcm1WYWx1ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgLy8gU2V0IGZsYWcgdG8gcHJldmVudCBmb3JtVmFsdWVzIGVmZmVjdCBmcm9tIHRyaWdnZXJpbmcgZHVyaW5nIGludGVybmFsIHVwZGF0ZXNcbiAgICB0aGlzLmlzSW50ZXJuYWxVcGRhdGUgPSB0cnVlO1xuICAgIGxldCBmb3JtVmFsdWVzID0gdGhpcy5nZW5lcmF0ZUR5bmFtaWNGaWVsZHNWYWx1ZU9iamVjdCh0aGlzLmR5bmFtaWNGb3JtKCkudmFsdWUuZHluYW1pY0ZpZWxkcyk7XG4gICAgdGhpcy5mb3JtVmFsaWQuZW1pdCh0aGlzLmR5bmFtaWNGb3JtKCkudmFsaWQpO1xuICAgIHRoaXMuZm9ybVVwZGF0ZWQuZW1pdChmb3JtVmFsdWVzKTtcbiAgICBjb25zb2xlLmxvZyhmb3JtVmFsdWVzKTtcbiAgICAvLyBSZXNldCBmbGFnIGFmdGVyIGEgbWljcm90YXNrIHRvIGFsbG93IGV4dGVybmFsIHVwZGF0ZXNcbiAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuaXNJbnRlcm5hbFVwZGF0ZSA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG4gIGdlbmVyYXRlRHluYW1pY0ZpZWxkc1ZhbHVlT2JqZWN0KGZvcm1WYWx1ZXM6IEFycmF5PGFueT4pOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBsZXQgZHluYW1pY0ZpZWxkc1ZhbHVlID0ge307XG4gICAgZm9ybVZhbHVlcy5mb3JFYWNoKChmaWVsZFZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgaWYodHlwZW9mIGZpZWxkVmFsdWU/LnZhbHVlID09PSAnc3RyaW5nJykgZmllbGRWYWx1ZS52YWx1ZSA9IGZpZWxkVmFsdWU/LnZhbHVlPy50cmltKClcbiAgICAgIGxldCBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMubWFwRm9ybUZpZWxkVG9Gb3JtVmFsdWUodGhpcy5mb3JtRmllbGRzKClbaW5kZXhdLCBmaWVsZFZhbHVlLnZhbHVlKTtcbiAgICAgIGlmIChmaWVsZFZhbHVlLnN1YkZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgZm9ybWF0dGVkU3ViRmllbGRzVmFsdWVzID0ge31cbiAgICAgICAgbGV0IHN1YkZpZWxkID0gdGhpcy5mb3JtRmllbGRzKClbaW5kZXhdLnN1YkZpZWxkc1xuICAgICAgICBpZih0aGlzLmZvcm1GaWVsZHMoKVtpbmRleF0uZmllbGRUeXBlID09PSAnc2luZ2xlU2VsZWN0JyB8fCB0aGlzLmZvcm1GaWVsZHMoKVtpbmRleF0uZmllbGRUeXBlID09PSAnbXVsdGlTZWxlY3QnKSB7XG4gICAgICAgICAgc3ViRmllbGQgPSBzdWJGaWVsZC5maWx0ZXIoKHN1YkZpZWxkKSA9PiBzdWJGaWVsZC5wYXJlbnRDb25maWdWYWx1ZSA9PT0gZmllbGRWYWx1ZS52YWx1ZS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZmllbGRWYWx1ZS5zdWJGaWVsZHMuZm9yRWFjaCgoc3ViRmllbGRWYWx1ZSwgc3ViSW5kZXgpID0+IHtcbiAgICAgICAgICBsZXQgc3ViRm9ybUZpZWxkID0gc3ViRmllbGRbc3ViSW5kZXhdXG4gICAgICAgICAgaWYodHlwZW9mIHN1YkZpZWxkVmFsdWU/LnZhbHVlID09PSAnc3RyaW5nJykgc3ViRmllbGRWYWx1ZS52YWx1ZSA9IHN1YkZpZWxkVmFsdWU/LnZhbHVlPy50cmltKClcbiAgICAgICAgICBmb3JtYXR0ZWRTdWJGaWVsZHNWYWx1ZXNbc3ViRm9ybUZpZWxkLmNvbmZpZ05hbWVdID0gdGhpcy5tYXBGb3JtRmllbGRUb0Zvcm1WYWx1ZShzdWJGb3JtRmllbGQsIHN1YkZpZWxkVmFsdWUpXG4gICAgICAgIH0pXG4gICAgICAgIGR5bmFtaWNGaWVsZHNWYWx1ZVt0aGlzLmZvcm1GaWVsZHMoKVtpbmRleF0uY29uZmlnTmFtZV0gPSB7XG4gICAgICAgICAgdmFsdWU6IGZvcm1hdHRlZFZhbHVlLFxuICAgICAgICAgIHN1YkZpZWxkczogZm9ybWF0dGVkU3ViRmllbGRzVmFsdWVzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBkeW5hbWljRmllbGRzVmFsdWVbdGhpcy5mb3JtRmllbGRzKClbaW5kZXhdLmNvbmZpZ05hbWVdID0gZm9ybWF0dGVkVmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGR5bmFtaWNGaWVsZHNWYWx1ZTtcbiAgfVxuICBnZW5lcmF0ZUR5bmFtaWNGb3JtKFxuICAgIGZvcm1GaWVsZHM6IEFycmF5PE5zRHluYW1pY0Zvcm0uSUR5bmFtaWNGaWVsZD4sXG4gICAgZm9ybVZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxuICApOiBVbnR5cGVkRm9ybUdyb3VwIHtcbiAgICBsZXQgZm9ybUFycmF5ID0gbmV3IFVudHlwZWRGb3JtQXJyYXkoW10pXG5cbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmb3JtRmllbGRzKSB7XG4gICAgICBsZXQgZmllbGRWYWx1ZSA9IGZvcm1WYWx1ZXNbZmllbGQuY29uZmlnTmFtZV07XG4gICAgICBsZXQgZmllbGRDb250cm9sID0gdGhpcy5tYXBGb3JtVmFsdWVUb0Zvcm1GaWVsZChmaWVsZCwgZmllbGRWYWx1ZSk7XG4gICAgICBsZXQgc3ViRmllbGRzQ29udHJvbHMgPSB0aGlzLmdlbmVyYXRlU3ViRHluYW1pY0ZpZWxkcyhmb3JtVmFsdWVzLCBmaWVsZCwgZmllbGRDb250cm9sLnZhbHVlKTtcbiAgICAgIGZvcm1BcnJheS5wdXNoKG5ldyBVbnR5cGVkRm9ybUdyb3VwKHtcbiAgICAgICAgdmFsdWU6IGZpZWxkQ29udHJvbCxcbiAgICAgICAgc3ViRmllbGRzOiBzdWJGaWVsZHNDb250cm9sc1xuICAgICAgfSkpXG4gICAgfSAgXG4gICAgcmV0dXJuIG5ldyBVbnR5cGVkRm9ybUdyb3VwKHtcbiAgICAgIGR5bmFtaWNGaWVsZHM6IGZvcm1BcnJheVxuICAgIH0pXG4gIH1cbiAgXG4gIGdldER5bmFtaWNGaWVsZHNDb250cm9scygpOiBVbnR5cGVkRm9ybUFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5keW5hbWljRm9ybSgpLmdldChcImR5bmFtaWNGaWVsZHNcIikgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZXMgc3ViZmllbGQgdXBkYXRlcyB3aGVuIHBhcmVudCBmaWVsZCB2YWx1ZXMgY2hhbmdlXG4gICAqIFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIGZvcm0gdmFsdWVDaGFuZ2VzIHN1YnNjcmlwdGlvblxuICAgKiBVc2VzIGEgZGVib3VuY2UgbWVjaGFuaXNtIHRvIHByZXZlbnQgZXhjZXNzaXZlIHVwZGF0ZXNcbiAgICovXG4gIHByaXZhdGUgc3ViRmllbGRVcGRhdGVUaW1lb3V0OiBhbnkgPSBudWxsO1xuICBwcml2YXRlIHByZXZpb3VzRmllbGRWYWx1ZXM6IE1hcDxudW1iZXIsIGFueT4gPSBuZXcgTWFwKCk7XG4gIFxuICBwcml2YXRlIGhhbmRsZVN1YkZpZWxkVXBkYXRlcyhmb3JtOiBVbnR5cGVkRm9ybUdyb3VwKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgYW55IHBlbmRpbmcgdXBkYXRlc1xuICAgIGlmICh0aGlzLnN1YkZpZWxkVXBkYXRlVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3ViRmllbGRVcGRhdGVUaW1lb3V0KTtcbiAgICB9XG4gICAgXG4gICAgLy8gRGVib3VuY2Ugc3ViZmllbGQgdXBkYXRlcyB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBjYWxsc1xuICAgIHRoaXMuc3ViRmllbGRVcGRhdGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBmb3JtQXJyYXkgPSBmb3JtLmdldCgnZHluYW1pY0ZpZWxkcycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgICBpZiAoIWZvcm1BcnJheSkgcmV0dXJuO1xuICAgICAgXG4gICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmZvcm1GaWVsZHMoKTtcbiAgICAgIGZvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKChmaWVsZEdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzW2luZGV4XTtcbiAgICAgICAgaWYgKCFmaWVsZCB8fCAhZmllbGQuc3ViRmllbGRzPy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmaWVsZEdyb3VwLmdldCgndmFsdWUnKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gdGhpcy5wcmV2aW91c0ZpZWxkVmFsdWVzLmdldChpbmRleCk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gT25seSB1cGRhdGUgc3ViZmllbGRzIGlmIHBhcmVudCBmaWVsZCB2YWx1ZSBhY3R1YWxseSBjaGFuZ2VkXG4gICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KHByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzRmllbGRWYWx1ZXMuc2V0KGluZGV4LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkpKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3ViRHluYW1pY0ZpZWxkcyhmaWVsZCwgZmllbGRHcm91cCwgY3VycmVudFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIDEwMCk7IC8vIFNtYWxsIGRlYm91bmNlIHRvIGJhdGNoIHVwZGF0ZXNcbiAgfVxuICBcbiAgdXBkYXRlU3ViRHluYW1pY0ZpZWxkcyhcbiAgICBmaWVsZDogTnNEeW5hbWljRm9ybS5JRHluYW1pY0ZpZWxkLFxuICAgIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCxcbiAgICB2YWx1ZTogYW55XG4gICk6IHZvaWQge1xuICAgIGlmIChmaWVsZC5zdWJGaWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFNldCBmbGFnIHRvIHByZXZlbnQgZm9ybSByZWdlbmVyYXRpb24gZHVyaW5nIHN1YmZpZWxkIHVwZGF0ZXNcbiAgICAgIHRoaXMuaXNJbnRlcm5hbFVwZGF0ZSA9IHRydWU7XG4gICAgICBsZXQgc3ViRmllbGRzQ29udHJvbHMgPSB0aGlzLmdlbmVyYXRlU3ViRHluYW1pY0ZpZWxkcyh0aGlzLmZvcm1WYWx1ZXMoKSwgZmllbGQsIHZhbHVlKTtcbiAgICAgIGZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCdzdWJGaWVsZHMnKVxuICAgICAgZm9ybUdyb3VwLmFkZENvbnRyb2woJ3N1YkZpZWxkcycsIHN1YkZpZWxkc0NvbnRyb2xzKVxuICAgICAgLy8gUmVzZXQgZmxhZyBhZnRlciB1cGRhdGVcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmlzSW50ZXJuYWxVcGRhdGUgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICB1cGRhdGVTZWxlY3RlZFZhbHVlRm9yU2luZ2xlU2VsZWN0KFxuICAgIGZpZWxkOiBOc0R5bmFtaWNGb3JtLklEeW5hbWljRmllbGQsXG4gICAgY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sLFxuICAgIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCxcbiAgICB2YWx1ZTogYW55XG4gICk6IHZvaWQge1xuICAgIGlmIChjb250cm9sLnZhbHVlPy52YWx1ZSAhPT0gdmFsdWUudmFsdWUpIHtcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgIHRoaXMudXBkYXRlU3ViRHluYW1pY0ZpZWxkcyhmaWVsZCwgZm9ybUdyb3VwLCB2YWx1ZSk7XG4gICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gIH1cbiAgdXBkYXRlU2VsZWN0ZWRWYWx1ZUZvck11bHRpU2VsZWN0KFxuICAgIGZpZWxkOiBOc0R5bmFtaWNGb3JtLklEeW5hbWljRmllbGQsXG4gICAgY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sLFxuICAgIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCxcbiAgICB2YWx1ZXM6IEFycmF5PGFueT5cbiAgKTogdm9pZCB7XG4gICAgbGV0IHNlbGVjdGVkVmFsdWVzOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBhbnkgfT4gPSBjb250cm9sLnZhbHVlO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgbGV0IGl0ZW1JbmRleCA9IHNlbGVjdGVkVmFsdWVzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0ubGFiZWwgPT09IHZhbHVlLmxhYmVsKTtcbiAgICAgIGlmIChpdGVtSW5kZXggPiAtMSkge1xuICAgICAgICBzZWxlY3RlZFZhbHVlcy5zcGxpY2UoaXRlbUluZGV4LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdGVkVmFsdWVzLnB1c2goeyAuLi52YWx1ZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29udHJvbC5zZXRWYWx1ZShzZWxlY3RlZFZhbHVlcyk7XG4gICAgdGhpcy51cGRhdGVTdWJEeW5hbWljRmllbGRzKGZpZWxkLCBmb3JtR3JvdXAsIHZhbHVlcyk7XG4gICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gIH1cbiAgaXNDaGVja0JveFNlbGVjdGVkKHZhbHVlOiBzdHJpbmcsIHNlbGVjdGVkVmFsdWVzOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5sYWJlbCA9PT0gdmFsdWUpID4gLTE7XG4gIH1cblxuICBmaW5kU2VsZWN0ZWRTdWJGaWVsZENvbmZpZyhzdWJmaWVsZHMsIHZhbHVlLCBzdWJGaWVsZEluZGV4KSB7XG4gICAgdHJ5e1xuICAgICAgY29uc3Qgc2VsZWN0ZWRTdWJGaWVsZENvbmZpZyA9IHN1YmZpZWxkcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnBhcmVudENvbmZpZ1ZhbHVlID09PSB2YWx1ZSlbc3ViRmllbGRJbmRleF07XG4gICAgICByZXR1cm4gc2VsZWN0ZWRTdWJGaWVsZENvbmZpZztcbiAgICB9XG4gICAgY2F0Y2goZSl7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1YmZpZWxkIGluZGV4IG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgfVxuXG4gIG1hdGNoUGFyZW50Q29uZmlnKHN1YmZpZWxkcywgdmFsdWUpIHtcbiAgICBpZiAoIXN1YmZpZWxkcyB8fCBzdWJmaWVsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBzdWJmaWVsZHMuc29tZShpdGVtID0+IGl0ZW0ucGFyZW50Q29uZmlnVmFsdWUgPT09IHZhbHVlKTtcbiAgfVxuXG4gIGdlbmVyYXRlU3ViRHluYW1pY0ZpZWxkcyhcbiAgICBmb3JtVmFsdWVzOiBhbnksXG4gICAgcGFyZW50RmllbGQ6IE5zRHluYW1pY0Zvcm0uSUR5bmFtaWNGaWVsZCxcbiAgICBwYXJlbnRWYWx1ZTogQXJyYXk8eyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIH0+IHwge2xhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfSB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW5cbiAgKTogVW50eXBlZEZvcm1BcnJheSB7XG4gICAgbGV0IGNvbnRyb2xzID0gbmV3IFVudHlwZWRGb3JtQXJyYXkoW10pXG4gICAgbGV0IHN1YkZpZWxkcyA9IHBhcmVudEZpZWxkLnN1YkZpZWxkc1xuICAgIGxldCBzdWJGaWVsZHNWYWx1ZXMgPSBmb3JtVmFsdWVzW3BhcmVudEZpZWxkLmNvbmZpZ05hbWVdPy5zdWJGaWVsZHMgPyBmb3JtVmFsdWVzW3BhcmVudEZpZWxkLmNvbmZpZ05hbWVdLnN1YkZpZWxkcyA6IHt9XG4gICAgaWYoIXN1YkZpZWxkcykgcmV0dXJuIGNvbnRyb2xzO1xuICAgIGlmIChwYXJlbnRGaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGVTZWxlY3QnKSB7XG4gICAgICBzdWJGaWVsZHMgPSBzdWJGaWVsZHMuZmlsdGVyKChzdWJGaWVsZCkgPT4gc3ViRmllbGQucGFyZW50Q29uZmlnVmFsdWUgPT09ICg8e2xhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfT5wYXJlbnRWYWx1ZSk/LnZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocGFyZW50RmllbGQuZmllbGRUeXBlID09PSAnbXVsdGlTZWxlY3QnKSB7XG4gICAgICBsZXQgcGFyZW50VmFsdWVzID0gbmV3IFNldCgoPEFycmF5PHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bWJlciB9Pj5wYXJlbnRWYWx1ZSkubWFwKCh2YWx1ZSkgPT4gdmFsdWUudmFsdWUpKTtcbiAgICAgIHN1YkZpZWxkcyA9IHN1YkZpZWxkcy5maWx0ZXIoKHN1YkZpZWxkKSA9PiBwYXJlbnRWYWx1ZXMuaGFzKHN1YkZpZWxkLnBhcmVudENvbmZpZ1ZhbHVlKSk7XG4gICAgfVxuXG4gICAgaWYgKHN1YkZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGxldCBzdWJGaWVsZCBvZiBzdWJGaWVsZHMpIHtcbiAgICAgICAgICBjb250cm9scy5wdXNoKHRoaXMubWFwRm9ybVZhbHVlVG9Gb3JtRmllbGQoc3ViRmllbGQsIHN1YkZpZWxkc1ZhbHVlc1tzdWJGaWVsZC5jb25maWdOYW1lXSkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICByZXR1cm4gY29udHJvbHM7XG4gIH1cbiAgbWFwRm9ybVZhbHVlVG9Gb3JtRmllbGQoZm9ybUZpZWxkOiBOc0R5bmFtaWNGb3JtLklEeW5hbWljRmllbGQsIGZvcm1WYWx1ZTogYW55KTogYW55IHtcbiAgICBsZXQgdmFsaWRhdG9ycyA9IGZvcm1GaWVsZC52YWxpZGF0b3JzID8gW2R5bmFtaWNGaWVsZFZhbGlkYXRvcihmb3JtRmllbGQudmFsaWRhdG9ycyldOiBbXVxuICAgIGxldCBjb250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsLCB2YWxpZGF0b3JzKTtcblxuICAgIGlmIChmb3JtRmllbGQuZmllbGRUeXBlID09PSBcImlucHV0XCIpIHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGRJbnB1dFR5cGUgPT09IFwidGV4dFwiIHx8IGZvcm1GaWVsZC5maWVsZElucHV0VHlwZSA9PT0gXCJ0ZXh0YXJlYVwiKSBjb250cm9sLnNldFZhbHVlKGZvcm1WYWx1ZSA/IGZvcm1WYWx1ZSA6IFwiXCIpO1xuICAgICAgZWxzZSBpZiAoZm9ybUZpZWxkLmZpZWxkSW5wdXRUeXBlID09PSBcIm51bWJlclwiKSBjb250cm9sLnNldFZhbHVlKGZvcm1WYWx1ZSA/IGZvcm1WYWx1ZSA6IDApO1xuICAgICAgZWxzZSBpZiAoZm9ybUZpZWxkLmZpZWxkSW5wdXRUeXBlID09PSBcImRhdGVcIikge1xuICAgICAgICBpZiAoZm9ybVZhbHVlICYmIHR5cGVvZiBmb3JtVmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBjb25zdCB0aW1lem9uZSA9IChmb3JtRmllbGQuZmllbGRDb25maWcgJiYgZm9ybUZpZWxkLmZpZWxkQ29uZmlnLnRpbWV6b25lKSB8fCAnQXNpYS9Lb2xrYXRhJztcbiAgICAgICAgICBjb25zdCBmb3JtYXQgPSAoZm9ybUZpZWxkLmZpZWxkQ29uZmlnICYmIGZvcm1GaWVsZC5maWVsZENvbmZpZy5mb3JtYXQpIHx8ICdERC9NTS9ZWVlZJztcbiAgICAgICAgICBjb250cm9sLnNldFZhbHVlKGRheWpzKGZvcm1WYWx1ZSkudHoodGltZXpvbmUpLmZvcm1hdChmb3JtYXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtVmFsdWUgJiYgdHlwZW9mIGZvcm1WYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGNvbnN0IHRpbWV6b25lID0gKGZvcm1GaWVsZC5maWVsZENvbmZpZyAmJiBmb3JtRmllbGQuZmllbGRDb25maWcudGltZXpvbmUpIHx8ICdBc2lhL0tvbGthdGEnO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IChmb3JtRmllbGQuZmllbGRDb25maWcgJiYgZm9ybUZpZWxkLmZpZWxkQ29uZmlnLmZvcm1hdCkgfHwgJ0REL01NL1lZWVknO1xuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoZGF5anMudHooZm9ybVZhbHVlLCBmb3JtYXQsIHRpbWV6b25lKS5mb3JtYXQoZm9ybWF0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGltZXpvbmUgPSAoZm9ybUZpZWxkLmZpZWxkQ29uZmlnICYmIGZvcm1GaWVsZC5maWVsZENvbmZpZy50aW1lem9uZSkgfHwgJ0FzaWEvS29sa2F0YSc7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ID0gKGZvcm1GaWVsZC5maWVsZENvbmZpZyAmJiBmb3JtRmllbGQuZmllbGRDb25maWcuZm9ybWF0KSB8fCAnREQvTU0vWVlZWSc7XG4gICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShkYXlqcygpLnR6KHRpbWV6b25lKS5mb3JtYXQoZm9ybWF0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5maWVsZFR5cGUgPT09IFwic2luZ2xlU2VsZWN0XCIpIHtcbiAgICAgIGNvbnN0IGZpbmRTZWxlY3RlZFZhbHVlID0gKCkgPT4ge1xuICAgICAgICBsZXQgaW5kZXggPSBmb3JtRmllbGQuaXRlbXNMaXN0LmZpbmRJbmRleChpdGVtID0+IGl0ZW0udmFsdWUgPT09IGZvcm1WYWx1ZSlcbiAgICAgICAgcmV0dXJuIGluZGV4ID49IDAgPyBmb3JtRmllbGQuaXRlbXNMaXN0W2luZGV4XTogXCJcIjtcbiAgICAgIH1cbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGRJbnB1dFR5cGUgPT09IFwiZHJvcGRvd25cIikge1xuICAgICAgICBpZiAoIWZvcm1WYWx1ZSkgY29udHJvbC5zZXRWYWx1ZShmb3JtRmllbGQuaXRlbXNMaXN0WzBdKTtcbiAgICAgICAgZWxzZSBjb250cm9sLnNldFZhbHVlKGZpbmRTZWxlY3RlZFZhbHVlKCkpXG4gICAgICB9XG4gICAgICBlbHNlIGlmIChmb3JtRmllbGQuZmllbGRJbnB1dFR5cGUgPT09IFwicmFkaW9cIikge1xuICAgICAgICBjb250cm9sLnNldFZhbHVlKGZpbmRTZWxlY3RlZFZhbHVlKCkpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmb3JtRmllbGQuZmllbGRUeXBlID09PSBcIm11bHRpU2VsZWN0XCIpIHtcbiAgICAgIGlmIChmb3JtVmFsdWUgJiYgQXJyYXkuaXNBcnJheShmb3JtVmFsdWUpKSB7XG4gICAgICAgIGxldCBzZWxlY3RlZFZhbHVlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCB2YWx1ZSBvZiBmb3JtVmFsdWUpIHtcbiAgICAgICAgICBsZXQgaW5kZXggPSBmb3JtRmllbGQuaXRlbXNMaXN0LmZpbmRJbmRleChpdGVtID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKTtcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgc2VsZWN0ZWRWYWx1ZXMucHVzaCh7IC4uLmZvcm1GaWVsZC5pdGVtc0xpc3RbaW5kZXhdIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoc2VsZWN0ZWRWYWx1ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udHJvbC5zZXRWYWx1ZShbXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmb3JtRmllbGQuZmllbGRUeXBlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgY29udHJvbC5zZXRWYWx1ZSghIWZvcm1WYWx1ZSk7XG4gICAgfSBlbHNlIGNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgcmV0dXJuIGNvbnRyb2w7XG4gIH1cbiAgbWFwRm9ybUZpZWxkVG9Gb3JtVmFsdWUoZm9ybUZpZWxkOiBOc0R5bmFtaWNGb3JtLklEeW5hbWljRmllbGQsIGZvcm1WYWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAoZm9ybUZpZWxkLmZpZWxkVHlwZSA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkSW5wdXRUeXBlID09PSBcInRleHRcIiB8fCBmb3JtRmllbGQuZmllbGRJbnB1dFR5cGUgPT09IFwidGV4dGFyZWFcIikgcmV0dXJuIGZvcm1WYWx1ZTtcbiAgICAgIGVsc2UgaWYgKGZvcm1GaWVsZC5maWVsZElucHV0VHlwZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuICtmb3JtVmFsdWU7XG4gICAgICBlbHNlIGlmIChmb3JtRmllbGQuZmllbGRJbnB1dFR5cGUgPT09IFwiZGF0ZVwiKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IChmb3JtRmllbGQuZmllbGRDb25maWcgJiYgZm9ybUZpZWxkLmZpZWxkQ29uZmlnLmZvcm1hdCkgfHwgJ0REL01NL1lZWVknO1xuICAgICAgICBjb25zdCB0aW1lem9uZSA9IChmb3JtRmllbGQuZmllbGRDb25maWcgJiYgZm9ybUZpZWxkLmZpZWxkQ29uZmlnLnRpbWV6b25lKSB8fCAnQXNpYS9Lb2xrYXRhJztcbiAgICAgICAgcmV0dXJuIGRheWpzLnR6KGZvcm1WYWx1ZSwgZm9ybWF0LCB0aW1lem9uZSkudmFsdWVPZigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmZpZWxkVHlwZSA9PT0gXCJzaW5nbGVTZWxlY3RcIikge1xuICAgICAgcmV0dXJuIGZvcm1WYWx1ZT8udmFsdWUgPz8gJyc7XG4gICAgfSBlbHNlIGlmIChmb3JtRmllbGQuZmllbGRUeXBlID09PSBcIm11bHRpU2VsZWN0XCIpIHtcbiAgICAgIHJldHVybiBmb3JtVmFsdWU/Lm1hcChpdGVtID0+IGl0ZW0udmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmZpZWxkVHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBmb3JtVmFsdWU7XG4gICAgfSBlbHNlIHJldHVybiBmb3JtVmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGR5bmFtaWNGaWVsZFZhbGlkYXRvciA9ICh2YWxpZGF0b3JzOiBBcnJheTxOc0R5bmFtaWNGb3JtLklEeW5hbWljRmllbGRWYWxpZGF0b3I+KTogVmFsaWRhdG9yRm4gPT4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBsZXQgdmFsdWUgPSBjb250cm9sLnZhbHVlXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFsdWUgPSB2YWx1ZT8udmFsdWUgPyB2YWx1ZS52YWx1ZSA6ICcnXG4gICAgfVxuICAgIGxldCBlcnJvcnMgPSBudWxsXG5cbiAgICB2YWxpZGF0b3JzLmZvckVhY2goKHZhbGlkYXRvcikgPT4ge1xuICAgICAgbGV0IGVycm9yID0gbnVsbFxuICAgICAgbGV0IG1lc3NhZ2UgPSB2YWxpZGF0b3IubWVzc2FnZVxuICAgICAgc3dpdGNoICh2YWxpZGF0b3IudHlwZSkge1xuICAgICAgICBjYXNlIFwiUmVxdWlyZWRcIjpcbiAgICAgICAgICBlcnJvciA9IFZhbGlkYXRvcnMucmVxdWlyZWQoY29udHJvbCk7XG4gICAgICAgICAgaWYgKCFlcnJvciAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICAgIGVycm9yID0geyBSZXF1aXJlZDogbWVzc2FnZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihlcnJvcikgZXJyb3IgPSB7UmVxdWlyZWQ6IG1lc3NhZ2V9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJNaW5MZW5ndGhcIjpcbiAgICAgICAgICBlcnJvciA9IFZhbGlkYXRvcnMubWluTGVuZ3RoKCt2YWxpZGF0b3IudmFsdWUpKGNvbnRyb2wpXG4gICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgnJHswfScsIGVycm9yPy5taW5sZW5ndGgucmVxdWlyZWRMZW5ndGgpXG4gICAgICAgICAgaWYoZXJyb3IpIGVycm9yID0geyBNaW5MZW5ndGg6IG1lc3NhZ2UgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTWF4TGVuZ3RoXCI6XG4gICAgICAgICAgZXJyb3IgPSBWYWxpZGF0b3JzLm1heExlbmd0aCgrdmFsaWRhdG9yLnZhbHVlKShjb250cm9sKVxuICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoJyR7MH0nLCBlcnJvcj8uYWN0dWFsTGVuZ3RoKVxuICAgICAgICAgIGlmKGVycm9yKSBlcnJvciA9IHsgTWF4TGVuZ3RoOiBtZXNzYWdlIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkVtYWlsXCI6XG4gICAgICAgICAgZXJyb3IgPSBWYWxpZGF0b3JzLmVtYWlsKGNvbnRyb2wpXG4gICAgICAgICAgaWYoZXJyb3IpIGVycm9yID0ge0VtYWlsOiBtZXNzYWdlfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ3VzdG9tXCI6XG4gICAgICAgICAgZXJyb3IgPSBWYWxpZGF0b3JzLnBhdHRlcm4oYCR7dmFsaWRhdG9yLnZhbHVlfWApKGNvbnRyb2wpXG4gICAgICAgICAgaWYoZXJyb3IpIGVycm9yID0ge0N1c3RvbTogbWVzc2FnZX1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChlcnJvcikgZXJyb3JzID0geyAuLi5lcnJvcnMsIC4uLmVycm9yIH1cbiAgICB9KVxuICAgIHJldHVybiBlcnJvcnNcbiAgfVxufSIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZHluYW1pY0Zvcm0oKVwiPlxuICA8bmctY29udGFpbmVyIGZvcm1BcnJheU5hbWU9XCJkeW5hbWljRmllbGRzXCI+XG4gICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09XCJpXCIgKm5nRm9yPVwibGV0IGZpZWxkQ29udHJvbCBvZiBnZXREeW5hbWljRmllbGRzQ29udHJvbHMoKS5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImR5bmFtaWNGaWVsZFwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgJGltcGxpY2l0OiBmb3JtRmllbGRzQXJyYXk/LltpXSxcbiAgICAgICAgICBmb3JtR3JvdXA6IGZpZWxkQ29udHJvbCxcbiAgICAgICAgICBjb250cm9sOiBmaWVsZENvbnRyb2wuY29udHJvbHMudmFsdWVcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdWItZHluYW1pYy1mb3JtXCIgKm5nSWY9XCJmaWVsZENvbnRyb2w/LnZhbHVlICYmICghIWZvcm1GaWVsZHNBcnJheT8uW2ldPy5zdWJGaWVsZHMgJiYgZm9ybUZpZWxkc0FycmF5Py5baV0/LnN1YkZpZWxkcz8ubGVuZ3RoID4gMCAmJiBtYXRjaFBhcmVudENvbmZpZyhmb3JtRmllbGRzQXJyYXk/LltpXT8uc3ViRmllbGRzLCBmaWVsZENvbnRyb2w/LmNvbnRyb2xzPy52YWx1ZT8udmFsdWU/LnZhbHVlKSlcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3ViRmllbGRDb250cm9sIG9mIGZpZWxkQ29udHJvbC5jb250cm9scy5zdWJGaWVsZHMuY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJkeW5hbWljRmllbGRcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgJGltcGxpY2l0OiBmaW5kU2VsZWN0ZWRTdWJGaWVsZENvbmZpZyhmb3JtRmllbGRzQXJyYXk/LltpXT8uc3ViRmllbGRzLCBmaWVsZENvbnRyb2wuY29udHJvbHMudmFsdWUudmFsdWUudmFsdWUsaiksXG4gICAgICAgICAgICAgIGNvbnRyb2w6IHN1YkZpZWxkQ29udHJvbFxuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZm9ybT5cblxuXG48bmctdGVtcGxhdGUgI2R5bmFtaWNGaWVsZCBsZXQtZmllbGQgbGV0LWNvbnRyb2w9XCJjb250cm9sXCIgbGV0LWZvcm1ncm91cD1cImZvcm1Hcm91cFwiPlxuXG4gIDwhLS0gZmllbGRUeXBlOiAnaW5wdXQnIGZpZWxkSW5wdXRUeXBlOiAndGV4dCcgfCAnbnVtYmVyJyAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmZpZWxkVHlwZSA9PT0gJ2lucHV0JyAmJiAoZmllbGQuZmllbGRJbnB1dFR5cGUgPT09ICd0ZXh0JyB8fCBmaWVsZC5maWVsZElucHV0VHlwZSA9PT0gJ251bWJlcicpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbUlucHV0VGV4dE51bWJlcjsgZWxzZSBkZWZhdWx0SW5wdXRUZXh0TnVtYmVyXCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tSW5wdXRUZXh0TnVtYmVyXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGQ6IGZpZWxkLCBjb250cm9sOiBjb250cm9sLCBmb3JtZ3JvdXA6IGZvcm1ncm91cCB9XCJcbiAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdElucHV0VGV4dE51bWJlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLWZpZWxkIG11bHRpLWxpbmUtZmllbGQtY29udGFpbmVyXCJcbiAgICAgICAgW25nU3R5bGVdPVwieydib3JkZXItYm90dG9tJzogKGZvcm1ncm91cD8uY29udHJvbHM/LnN1YkZpZWxkcz8uY29udHJvbHM/Lmxlbmd0aCAmJiByZW1vdmVTZXByYXRvckZvclN1YkZpZWxkcykgPyAgJ25vbmUnOicnfVwiPlxuICAgICAgICA8cCBjbGFzcz1cImg3IGZpZWxkLXRpdGxlLXNtXCI+XG4gICAgICAgICAge3sgZmllbGQ/LnRpdGxlIH19IDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycyAmJiBmaWVsZC52YWxpZGF0b3JzLmxlbmd0aCA+IDBcIj4gKjwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleC1iYXNpczogMTAwJVwiPjwvZGl2PlxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dC1maWVsZCBpcC10ZXh0XCIgW3R5cGVdPVwiZmllbGQuZmllbGRJbnB1dFR5cGVcIiBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgW25nU3R5bGVdPVwieydib3JkZXInOiBjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnMgPyAnMXB4IHNvbGlkICNCMDAwMjAnOiAnJ31cIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZC5wbGFjZWhvbGRlclRleHQgPyBmaWVsZC5wbGFjZWhvbGRlclRleHQgOiAnSW5wdXQgVGV4dCdcIiBcbiAgICAgICAgICBbbWluXT1cImZpZWxkLmZpZWxkSW5wdXRUeXBlID09PSAnbnVtYmVyJyA/IDAgOiAnJyBcIi8+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnNcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImR5bmFtaWNGaWVsZEVycm9yc1wiIFxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY29udHJvbC5lcnJvcnMgfVwiXG4gICAgICAgID5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgXG4gIDwhLS0gZmllbGRUeXBlOiAnaW5wdXQnIGZpZWxkSW5wdXRUeXBlOiAndGV4dGFyZWEnIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQuZmllbGRUeXBlID09PSAnaW5wdXQnICYmIGZpZWxkLmZpZWxkSW5wdXRUeXBlID09PSAndGV4dGFyZWEnXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbUlucHV0VGV4dGFyZWE7IGVsc2UgZGVmYXVsdElucHV0VGV4dGFyZWFcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tSW5wdXRUZXh0YXJlYVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQsIGNvbnRyb2w6IGNvbnRyb2wsIGZvcm1ncm91cDogZm9ybWdyb3VwIH1cIlxuICAgID48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdElucHV0VGV4dGFyZWE+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy1maWVsZCBtdWx0aS1saW5lLWZpZWxkLWNvbnRhaW5lclwiXG4gICAgICBbbmdTdHlsZV09XCJ7J2JvcmRlci1ib3R0b20nOiAoZm9ybWdyb3VwPy5jb250cm9scz8uc3ViRmllbGRzPy5jb250cm9scz8ubGVuZ3RoICYmIHJlbW92ZVNlcHJhdG9yRm9yU3ViRmllbGRzKSA/ICAnbm9uZSc6Jyd9XCI+XG4gICAgICAgIDxwIGNsYXNzPVwiaDcgZmllbGQtdGl0bGUtc21cIj5cbiAgICAgICAgICB7eyBmaWVsZC50aXRsZSB9fTxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycyAmJiBmaWVsZC52YWxpZGF0b3JzLmxlbmd0aCA+IDBcIj4gKjwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleC1iYXNpczogMTAwJVwiPjwvZGl2PlxuICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJpbnB1dC1maWVsZCBpcC10ZXh0YXJlYVwiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7J2JvcmRlcic6IGNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9ycyA/ICcxcHggc29saWQgI0IwMDAyMCc6ICcnfVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkLnBsYWNlaG9sZGVyVGV4dCA/IGZpZWxkLnBsYWNlaG9sZGVyVGV4dCA6ICdJbnB1dCBUZXh0J1wiIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZHluYW1pY0ZpZWxkRXJyb3JzXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY29udHJvbC5lcnJvcnMgfVwiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG4gIFxuICA8IS0tIGZpZWxkVHlwZTogJ2lucHV0JyBmaWVsZElucHV0VHlwZTogJ2RhdGUnIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQuZmllbGRUeXBlID09PSAnaW5wdXQnICYmIGZpZWxkLmZpZWxkSW5wdXRUeXBlID09PSAnZGF0ZSdcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tSW5wdXREYXRlOyBlbHNlIGRlZmF1bHRJbnB1dERhdGVcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjdXN0b21JbnB1dERhdGVcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQsIGNvbnRyb2w6IGNvbnRyb2wsIGZvcm1ncm91cDogZm9ybWdyb3VwIH1cIlxuICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5wdXREYXRlPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtZmllbGQgc2luZ2xlLWxpbmUtZmllbGQtY29udGFpbmVyXCJcbiAgICAgIFtuZ1N0eWxlXT1cInsnYm9yZGVyLWJvdHRvbSc6IChmb3JtZ3JvdXA/LmNvbnRyb2xzPy5zdWJGaWVsZHM/LmNvbnRyb2xzPy5sZW5ndGggJiYgcmVtb3ZlU2VwcmF0b3JGb3JTdWJGaWVsZHMpID8gICdub25lJzonJ31cIlxuICAgICAgICAqbmdJZj1cImZpZWxkLmZpZWxkVHlwZSA9PT0gJ2lucHV0JyAmJiBmaWVsZC5maWVsZElucHV0VHlwZSA9PT0gJ2RhdGUnXCI+XG4gICAgICAgIDxwIGNsYXNzPVwiaDZcIj5cbiAgICAgICAgICB7eyBmaWVsZC50aXRsZSB9fSA8c3BhbiAqbmdJZj1cImZpZWxkLnZhbGlkYXRvcnMgJiYgZmllbGQudmFsaWRhdG9ycy5sZW5ndGggPiAwXCI+ICo8L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImRhdGUtcGlja2VyXCIgcmVhZG9ubHkgbWlzVHpEcCBbZHBDb25maWddPVwiZmllbGQuZmllbGRDb25maWdcIlxuICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwiY29udHJvbC5zZXRWYWx1ZSgkZXZlbnQpXCIgW3NlbGVjdGVkRGF0ZV09XCJjb250cm9sLnZhbHVlXCIgW29mZnNldFldPVwiMFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiY29udHJvbC52YWx1ZVwiICNkcCAvPlxuICAgICAgICAgIDxpbWcgYWx0PVwiZGF0YS1waWNrZXJcIiAqbmdJZj1cImNhbGVuZGFySWNvblVybCgpXCIgY2xhc3M9XCJkYXRlLXBpY2tlci1pY29uXCIgW3NyY109XCJjYWxlbmRhckljb25VcmwoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZHAuY2xpY2soKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZHluYW1pY0ZpZWxkRXJyb3JzXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGNvbnRyb2wuZXJyb3JzIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIGZpZWxkVHlwZTogJ2Jvb2xlYW4nIGZpZWxkSW5wdXRUeXBlOiAndG9nZ2xlJyAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmZpZWxkVHlwZSA9PT0gJ2Jvb2xlYW4nICYmIGZpZWxkLmZpZWxkSW5wdXRUeXBlID09PSAndG9nZ2xlJ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21Cb29sZWFuVG9nZ2xlOyBlbHNlIGRlZmF1bHRCb29sZWFuVG9nZ2xlXCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tQm9vbGVhblRvZ2dsZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkOiBmaWVsZCwgY29udHJvbDogY29udHJvbCwgZm9ybWdyb3VwOiBmb3JtZ3JvdXAgfVwiXG4gICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRCb29sZWFuVG9nZ2xlPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtZmllbGQgc2luZ2xlLWxpbmUtZmllbGQtY29udGFpbmVyXCJcbiAgICAgIFtuZ1N0eWxlXT1cInsnYm9yZGVyLWJvdHRvbSc6IChmb3JtZ3JvdXA/LmNvbnRyb2xzPy5zdWJGaWVsZHM/LmNvbnRyb2xzPy5sZW5ndGggJiYgcmVtb3ZlU2VwcmF0b3JGb3JTdWJGaWVsZHMpID8gICdub25lJzonJ31cIj5cbiAgICAgICAgPHAgY2xhc3M9XCJoNlwiPlxuICAgICAgICAgIHt7IGZpZWxkLnRpdGxlIH19PHNwYW4gKm5nSWY9XCJmaWVsZC52YWxpZGF0b3JzICYmIGZpZWxkLnZhbGlkYXRvcnMubGVuZ3RoID4gMFwiPiAqPC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICAgIDxtaXMtc3dpdGNoIFtjb250cm9sXT1cImNvbnRyb2xcIiAodmFsdWVDaGFuZ2VkKT1cInVwZGF0ZVN1YkR5bmFtaWNGaWVsZHMoZmllbGQsIGZvcm1ncm91cCwgJGV2ZW50KVwiPjwvbWlzLXN3aXRjaD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9yc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImR5bmFtaWNGaWVsZEVycm9yc1wiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjb250cm9sLmVycm9ycyB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+ICAgIFxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gZmllbGRUeXBlOiAnc2luZ2xlU2VsZWN0JyBmaWVsZElucHV0VHlwZTogJ2Ryb3Bkb3duJyAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmZpZWxkVHlwZSA9PT0gJ3NpbmdsZVNlbGVjdCcgJiYgZmllbGQuZmllbGRJbnB1dFR5cGUgPT09ICdkcm9wZG93bidcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tU2luZ2xlU2VsZWN0RHJvcGRvd247IGVsc2UgZGVmYXVsdFNpbmdsZVNlbGVjdERyb3Bkb3duXCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tU2luZ2xlU2VsZWN0RHJvcGRvd25cIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQsIGNvbnRyb2w6IGNvbnRyb2wsIGZvcm1ncm91cDogZm9ybWdyb3VwIH1cIlxuICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0U2luZ2xlU2VsZWN0RHJvcGRvd24+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy1maWVsZCBzaW5nbGUtbGluZS1maWVsZC1jb250YWluZXJcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7J2JvcmRlci1ib3R0b20nOiAoZm9ybWdyb3VwPy5jb250cm9scz8uc3ViRmllbGRzPy5jb250cm9scz8ubGVuZ3RoICYmIHJlbW92ZVNlcHJhdG9yRm9yU3ViRmllbGRzKSA/ICAnbm9uZSc6Jyd9XCI+XG4gICAgICAgIDxwIGNsYXNzPVwiaDZcIj5cbiAgICAgICAgICB7eyBmaWVsZC50aXRsZSB9fTxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycyAmJiBmaWVsZC52YWxpZGF0b3JzLmxlbmd0aCA+IDBcIj4gKjwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsncmVtb3ZlYWJsZS1jb250YWluZXInIDogZmllbGQ/LmlzUmVtb3ZlYWJsZX1cIj5cbiAgICAgICAgICA8bWlzLWRyb3Bkb3duIFtzZWFyY2hFbmFibGVkXT1cImZhbHNlXCIgW3dpZHRoXT1cIicxNDBweCdcIiBbZGF0YV09XCJmaWVsZC5pdGVtc0xpc3RcIiBbc2VsZWN0ZWRJdGVtXT1cImNvbnRyb2wudmFsdWVcIlxuICAgICAgICAgIChvbkNoYW5nZSk9XCJ1cGRhdGVTZWxlY3RlZFZhbHVlRm9yU2luZ2xlU2VsZWN0KGZpZWxkLCBjb250cm9sLCBmb3JtZ3JvdXAsICRldmVudCk7XCI+XG4gICAgICAgICAgPC9taXMtZHJvcGRvd24+XG4gICAgICAgICAgPGltZyAqbmdJZj1cImZpZWxkLmlzUmVtb3ZlYWJsZSAmJiByZW1vdmVJY29uVXJsKClcIiBjbGFzcz1cInJlbW92ZS1pY29uXCIgW3NyY109XCJyZW1vdmVJY29uVXJsKClcIiAoY2xpY2spPVwiZmllbGRSZW1vdmVkLmVtaXQoZmllbGQpXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZHluYW1pY0ZpZWxkRXJyb3JzXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGNvbnRyb2wuZXJyb3JzIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lciA+XG4gIFxuXG4gIDwhLS0gZmllbGRUeXBlOiAnc2luZ2xlU2VsZWN0JyBmaWVsZElucHV0VHlwZTogJ3JhZGlvJyAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmZpZWxkVHlwZSA9PT0gJ3NpbmdsZVNlbGVjdCcgJiYgZmllbGQuZmllbGRJbnB1dFR5cGUgPT09ICdyYWRpbydcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tU2luZ2xlU2VsZWN0UmFkaW87IGVsc2UgZGVmYXVsdFNpbmdsZVNlbGVjdFJhZGlvXCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tU2luZ2xlU2VsZWN0UmFkaW9cIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQsIGNvbnRyb2w6IGNvbnRyb2wsIGZvcm1ncm91cDogZm9ybWdyb3VwIH1cIlxuICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0U2luZ2xlU2VsZWN0UmFkaW8+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy1maWVsZCBtdWx0aS1saW5lLWZpZWxkLWNvbnRhaW5lclwiXG4gICAgICBbbmdTdHlsZV09XCJ7J2JvcmRlci1ib3R0b20nOiAoZm9ybWdyb3VwPy5jb250cm9scz8uc3ViRmllbGRzPy5jb250cm9scz8ubGVuZ3RoICYmIHJlbW92ZVNlcHJhdG9yRm9yU3ViRmllbGRzKSA/ICAnbm9uZSc6Jyd9XCI+XG4gICAgICAgIDxwIGNsYXNzPVwiaDcgZmllbGQtdGl0bGUtc21cIj5cbiAgICAgICAgICB7eyBmaWVsZC50aXRsZSB9fTxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycyAmJiBmaWVsZC52YWxpZGF0b3JzLmxlbmd0aCA+IDBcIj4gKjwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleC1iYXNpczogMTAwJVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwiY2hlY2tib3hlcy1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tY2hlY2tib3gtY29tbW9uXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmllbGQuaXRlbXNMaXN0XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NoZWNrYm94LWFjdGl2ZSc6IGl0ZW0ubGFiZWwgPT09IGNvbnRyb2wudmFsdWU/LmxhYmVsIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZVNlbGVjdGVkVmFsdWVGb3JTaW5nbGVTZWxlY3QoZmllbGQsIGNvbnRyb2wsIGZvcm1ncm91cCwgaXRlbSk7XCI+XG4gICAgICAgICAgICA8aW1nICpuZ0lmPVwiKGl0ZW0ubGFiZWwgPT09IGNvbnRyb2wudmFsdWU/LmxhYmVsKSAmJiBhY3RpdmVCdG5JY29uVXJsKClcIiBbc3JjXT1cImFjdGl2ZUJ0bkljb25VcmwoKVwiIGFsdD1cIlwiIC8+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImg2XCI+e3sgaXRlbS5sYWJlbCB9fTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnNcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJkeW5hbWljRmllbGRFcnJvcnNcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY29udHJvbC5lcnJvcnMgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuICBcblxuICA8IS0tIGZpZWxkVHlwZTogJ211bHRpU2VsZWN0JyBmaWVsZElucHV0VHlwZTogJ2NoZWNrYm94JyAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmZpZWxkVHlwZSA9PT0gJ211bHRpU2VsZWN0JyAmJiBmaWVsZC5maWVsZElucHV0VHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21NdWx0aVNlbGVjdENoZWNrYm94OyBlbHNlIGRlZmF1bHRNdWx0aVNlbGVjdENoZWNrYm94XCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tTXVsdGlTZWxlY3RDaGVja2JveFwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkOiBmaWVsZCwgY29udHJvbDogY29udHJvbCwgZm9ybWdyb3VwOiBmb3JtZ3JvdXAgfVwiXG4gICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRNdWx0aVNlbGVjdENoZWNrYm94PlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtZmllbGQgbXVsdGktbGluZS1maWVsZC1jb250YWluZXJcIlxuICAgICAgW25nU3R5bGVdPVwieydib3JkZXItYm90dG9tJzogKGZvcm1ncm91cD8uY29udHJvbHM/LnN1YkZpZWxkcz8uY29udHJvbHM/Lmxlbmd0aCAmJiByZW1vdmVTZXByYXRvckZvclN1YkZpZWxkcykgPyAgJ25vbmUnOicnfVwiPlxuICAgICAgICA8cCBjbGFzcz1cImg3IGZpZWxkLXRpdGxlLXNtXCI+XG4gICAgICAgICAge3sgZmllbGQudGl0bGUgfX08c3BhbiAqbmdJZj1cImZpZWxkLnZhbGlkYXRvcnMgJiYgZmllbGQudmFsaWRhdG9ycy5sZW5ndGggPiAwXCI+ICo8L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdiBzdHlsZT1cImZsZXgtYmFzaXM6IDEwMCVcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cImNoZWNrYm94ZXMtY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLWNoZWNrYm94LWNvbW1vblwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpZWxkLml0ZW1zTGlzdFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjaGVja2JveC1hY3RpdmUnOiBpc0NoZWNrQm94U2VsZWN0ZWQoaXRlbS5sYWJlbCwgY29udHJvbC52YWx1ZSkgfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlU2VsZWN0ZWRWYWx1ZUZvck11bHRpU2VsZWN0KGZpZWxkLCBjb250cm9sLCBmb3JtZ3JvdXAsIFtpdGVtXSlcIj5cbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpc0NoZWNrQm94U2VsZWN0ZWQoaXRlbS5sYWJlbCwgY29udHJvbC52YWx1ZSkgJiYgYWN0aXZlQnRuSWNvblVybCgpXCIgW3NyY109XCJhY3RpdmVCdG5JY29uVXJsKClcIlxuICAgICAgICAgICAgICBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJoNlwiPnt7IGl0ZW0ubGFiZWwgfX08L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZHluYW1pY0ZpZWxkRXJyb3JzXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGNvbnRyb2wuZXJyb3JzIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cblxuXG4gIDwhLS0gZmllbGRUeXBlOiAnbXVsdGlTZWxlY3QnIGZpZWxkSW5wdXRUeXBlOiAnZHJvcGRvd24nIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQuZmllbGRUeXBlID09PSAnbXVsdGlTZWxlY3QnICYmIGZpZWxkLmZpZWxkSW5wdXRUeXBlID09PSAnZHJvcGRvd24nXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbU11bHRpU2VsZWN0RHJvcGRvd247IGVsc2UgZGVmYXVsdE11bHRpU2VsZWN0RHJvcGRvd25cIj5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjdXN0b21NdWx0aVNlbGVjdERyb3Bkb3duXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGQ6IGZpZWxkLCBjb250cm9sOiBjb250cm9sLCBmb3JtZ3JvdXA6IGZvcm1ncm91cCB9XCJcbiAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE11bHRpU2VsZWN0RHJvcGRvd24+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy1maWVsZCBzaW5nbGUtbGluZS1maWVsZC1jb250YWluZXJcIlxuICAgICAgW25nU3R5bGVdPVwieydib3JkZXItYm90dG9tJzogKGZvcm1ncm91cD8uY29udHJvbHM/LnN1YkZpZWxkcz8uY29udHJvbHM/Lmxlbmd0aCAmJiByZW1vdmVTZXByYXRvckZvclN1YkZpZWxkcykgPyAgJ25vbmUnOicnfVwiPlxuICAgICAgICA8cCBjbGFzcz1cImg2XCI+XG4gICAgICAgICAge3sgZmllbGQudGl0bGUgfX08c3BhbiAqbmdJZj1cImZpZWxkLnZhbGlkYXRvcnMgJiYgZmllbGQudmFsaWRhdG9ycy5sZW5ndGggPiAwXCI+ICo8L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPG1pcy1tdWx0aS1zZWxlY3QtZHJvcGRvd24gW3dpZHRoXT1cIicxNDBweCdcIiBbc2hvd1NlbGVjdGVkQ291bnRdPVwidHJ1ZVwiIFtkcm9wZG93bkxpc3RXaWR0aF09XCInMjU2cHgnXCJcbiAgICAgICAgICBbc2VhcmNoRW5hYmxlZF09XCJmYWxzZVwiIFtoaWRlQXBwbHlCdXR0b25dPVwidHJ1ZVwiIFtkYXRhXT1cImZpZWxkLml0ZW1zTGlzdFwiXG4gICAgICAgICAgW3NlbGVjdGVkSXRlbXNdPVwiY29udHJvbC52YWx1ZVwiIChvbkNoYW5nZSk9XCJ1cGRhdGVTZWxlY3RlZFZhbHVlRm9yTXVsdGlTZWxlY3QoZmllbGQsIGNvbnRyb2wsIGZvcm1ncm91cCwgJGV2ZW50KTtcIj48L21pcy1tdWx0aS1zZWxlY3QtZHJvcGRvd24+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnNcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJkeW5hbWljRmllbGRFcnJvcnNcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY29udHJvbC5lcnJvcnMgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuXG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2R5bmFtaWNGaWVsZEVycm9ycyBsZXQtZXJyb3JzPlxuICA8ZGl2IGlkPVwiZXJyb3ItbWVzc2FnZXMtY29udGFpbmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgZXJyb3JzIHwga2V5dmFsdWVcIj5cbiAgICAgIDxwIGNsYXNzPVwiaDhcIj5cbiAgICAgICAge3tcIiDigKIgJm5ic3A7XCIgKyBlcnJvci52YWx1ZX19XG4gICAgICA8L3A+XG4gICAgICA8ZGl2IFtuZ1N0eWxlXT1cInsgJ2ZsZXgtYmFzaXMnOiAnMTAwJScsICdoZWlnaHQnOiAnMCcgfVwiPjwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
|
|
1283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBZ0QsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUosT0FBTyxFQUFtQixnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBaUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEosT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sUUFBUSxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8saUJBQWlCLE1BQU0sZ0NBQWdDLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDT3RELDZCQUFzRztJQUNwRyw0QkFNZTs7Ozs7Ozs7OztJQUxiLGNBQWlDO0lBQ2pDLEFBREEsa0RBQWlDLDhSQUkvQjs7O0lBUFIsK0JBQW1QO0lBQ2pQLDZHQUFzRztJQVN4RyxpQkFBTTs7O0lBVHNDLGNBQTZDO0lBQTdDLHFFQUE2Qzs7O0lBWDNGLGlDQUFrSDtJQUM5Ryw0QkFRYTtJQUNmLHFGQUFtUDs7Ozs7OztJQVZ2TyxvQ0FBbUI7SUFFN0IsY0FBaUM7SUFDakMsQUFEQSxrREFBaUMsOEtBSy9CO0lBRzJCLGNBQWtOO0lBQWxOLGl4QkFBa047Ozs7SUFvQm5QLDZCQUF5RTtJQUN2RSxrSUFHQzs7Ozs7Ozs7SUFGQyxjQUEwQztJQUMxQyxBQURBLCtEQUEwQyw4RkFDMEM7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QUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO29CQUN2RCxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFBO29CQUN0RCxJQUFHLEtBQUs7d0JBQUUsS0FBSyxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFBO29CQUN4QyxNQUFNO2dCQUNSLEtBQUssT0FBTztvQkFDVixLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtvQkFDakMsSUFBRyxLQUFLO3dCQUFFLEtBQUssR0FBRyxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUMsQ0FBQTtvQkFDbEMsTUFBTTtnQkFDUixLQUFLLFFBQVE7b0JBQ1gsS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtvQkFDekQsSUFBRyxLQUFLO3dCQUFFLEtBQUssR0FBRyxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsQ0FBQTtvQkFDbkMsTUFBTTtnQkFDUjtvQkFDRSxNQUFNO1lBQ1YsQ0FBQztZQUNELElBQUksS0FBSztnQkFBRSxNQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFBO1FBQzdDLENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDLENBQUE7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgY29tcHV0ZWQsIGVmZmVjdCwgdW50cmFja2VkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE5zRHluYW1pY0Zvcm0gfSBmcm9tIFwiLi9keW5hbWljLWZvcm0ubmFtZXNwYWNlXCI7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcblxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUnO1xuaW1wb3J0IGN1c3RvbVBhcnNlRm9ybWF0IGZyb20gJ2RheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdCdcblxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKTtcbmRheWpzLmV4dGVuZChjdXN0b21QYXJzZUZvcm1hdCk7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibWlzLWR5bmFtaWMtZm9ybVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vZHluYW1pYy1mb3JtLmNvbXBvbmVudC5zY3NzXCJdXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogZm9ybUZpZWxkczogIER5bmFtaWMgZmllbGRzIHJlY2lldmVkIGZyb20gdGhlIEFQSSBtZXRhZGF0YSB0byBidWlsZCBhIGR5bmFtaWMgZm9ybVxuICAgKiBmb3JtVmFsdWVzOiAgSG9sZHMgdGhlIHZhbHVlIG9mIHRoZSBkeW5hbWljIGZvcm0gd2l0aCBcImtleVwiIGJlaW5nIGR5bmFtaWMgZmllbGQgXCJ0aXRsZVwiXG4gICAqICAgICAgICAgICAgICBhbmQgdmFsdWUgYmVpbmcgdGhlIHVzZXIgaW5wdXQuXG4gICAqL1xuICBmb3JtRmllbGRzID0gaW5wdXQ8QXJyYXk8TnNEeW5hbWljRm9ybS5JRHluYW1pY0ZpZWxkPj4oW10pO1xuICBmb3JtVmFsdWVzID0gaW5wdXQ8eyBba2V5OiBzdHJpbmddOiBhbnkgfT4oe30pO1xuICAvLyBOZWVkIHRvIGRlcHJlY2F0ZSB0aGVzZSBpbnB1dHMgYW5kIHVzZSBjb25zdGFudHMuXG4gIGFjdGl2ZUJ0bkljb25VcmwgPSBpbnB1dDxzdHJpbmc+KFwiXCIpO1xuICBjYWxlbmRhckljb25VcmwgPSBpbnB1dDxzdHJpbmc+KFwiXCIpO1xuICByZW1vdmVJY29uVXJsID0gaW5wdXQ8c3RyaW5nPihcIlwiKTtcbiAgcmVtb3ZlU2VwcmF0b3JGb3JTdWJGaWVsZHMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIC8qKlxuICAgKiBkeW5hbWljRm9ybTogQ29uc3RydWN0ZWQgdXNpbmcgZm9ybUZpZWxkcyBhbmQgZm9ybVZhbHVlcyhpbiBjYXNlIG9mIGVkaXQpXG4gICAqL1xuXG4gIC8qKlxuICAgKiBmb3JtVXBkYXRlZDogRW1pdHMgZm9ybVZhbHVlcyBPYmplY3Qgd2hlbmV2ZXIgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gdGhlIGR5bmFtaWMgZm9ybS5cbiAgICovXG4gIGZvcm1VcGRhdGVkID0gb3V0cHV0PHsgW2tleTogc3RyaW5nXTogYW55IH0+KCk7XG4gIC8qKlxuICAgKiBmb3JtVmFsaWQ6IEVtaXRzIGJvb2xlYW4gZGVwZW5kaW5nIG9uIHZhbGlkaXR5IG9mIHRoZSBmb3JtXG4gICAqL1xuICBmb3JtVmFsaWQgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgLyoqXG4gICAqIGZvcm1Jbml0aWFsaXplZDogRW1pdHMgZHluYW1pYyBmb3JtIEFQSSBvbiBmb3JtIGluaXRpbGl6YXRpb25cbiAgICovXG4gIGZvcm1Jbml0aWFsaXplZCA9IG91dHB1dDxhbnk+KCk7XG4gIGZpZWxkUmVtb3ZlZCA9IG91dHB1dDxOc0R5bmFtaWNGb3JtLklEeW5hbWljRmllbGQ+KCk7XG5cbiAgQENvbnRlbnRDaGlsZChcImN1c3RvbUlucHV0VGV4dE51bWJlclwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgY3VzdG9tSW5wdXRUZXh0TnVtYmVyOiBUZW1wbGF0ZVJlZjxFbGVtZW50PjtcbiAgXG4gIEBDb250ZW50Q2hpbGQoXCJjdXN0b21JbnB1dFRleHRhcmVhXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBjdXN0b21JbnB1dFRleHRhcmVhOiBUZW1wbGF0ZVJlZjxFbGVtZW50PjtcblxuICBAQ29udGVudENoaWxkKFwiY3VzdG9tSW5wdXREYXRlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBjdXN0b21JbnB1dERhdGU6IFRlbXBsYXRlUmVmPEVsZW1lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGQoXCJjdXN0b21Cb29sZWFuVG9nZ2xlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBjdXN0b21Cb29sZWFuVG9nZ2xlOiBUZW1wbGF0ZVJlZjxFbGVtZW50PjtcblxuICBAQ29udGVudENoaWxkKFwiY3VzdG9tU2luZ2xlU2VsZWN0RHJvcGRvd25cIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGN1c3RvbVNpbmdsZVNlbGVjdERyb3Bkb3duOiBUZW1wbGF0ZVJlZjxFbGVtZW50PjtcblxuICBAQ29udGVudENoaWxkKFwiY3VzdG9tU2luZ2xlU2VsZWN0UmFkaW9cIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGN1c3RvbVNpbmdsZVNlbGVjdFJhZGlvOiBUZW1wbGF0ZVJlZjxFbGVtZW50PjtcblxuICBAQ29udGVudENoaWxkKFwiY3VzdG9tTXVsdGlTZWxlY3RDaGVja2JveFwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgY3VzdG9tTXVsdGlTZWxlY3RDaGVja2JveDogVGVtcGxhdGVSZWY8RWxlbWVudD47XG5cbiAgQENvbnRlbnRDaGlsZChcImN1c3RvbU11bHRpU2VsZWN0RHJvcGRvd25cIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGN1c3RvbU11bHRpU2VsZWN0RHJvcGRvd246IFRlbXBsYXRlUmVmPEVsZW1lbnQ+O1xuXG4gIC8vIFNpZ25hbC1iYXNlZCBzdGF0ZSBtYW5hZ2VtZW50XG4gIHByaXZhdGUgcmVhZG9ubHkgZHluYW1pY0Zvcm1TaWduYWwgPSBzaWduYWw8VW50eXBlZEZvcm1Hcm91cCB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IGR5bmFtaWNGb3JtQVBJU2lnbmFsID0gc2lnbmFsPE5zRHluYW1pY0Zvcm0uSUR5bmFtaWNGb3JtQVBJIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uU2lnbmFsID0gc2lnbmFsPFN1YnNjcmlwdGlvbiB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHByZXZpb3VzRm9ybUZpZWxkczogQXJyYXk8TnNEeW5hbWljRm9ybS5JRHluYW1pY0ZpZWxkPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzSW50ZXJuYWxVcGRhdGUgPSBmYWxzZTsgLy8gRmxhZyB0byBwcmV2ZW50IHJlZ2VuZXJhdGlvbiBkdXJpbmcgaW50ZXJuYWwgdXBkYXRlc1xuICBcbiAgLy8gQ29tcHV0ZWQgcHJvcGVydGllcyBmb3IgdGVtcGxhdGUgYWNjZXNzXG4gIGR5bmFtaWNGb3JtID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5keW5hbWljRm9ybVNpZ25hbCgpKTtcbiAgZHluYW1pY0Zvcm1BUEkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmR5bmFtaWNGb3JtQVBJU2lnbmFsKCkpO1xuICB2YWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24kID0gY29tcHV0ZWQoKCkgPT4gdGhpcy52YWx1ZUNoYW5nZXNTdWJzY3JpcHRpb25TaWduYWwoKSk7XG4gIFxuICAvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5OiBoYW5kbGUgYm90aCBzaWduYWwgYW5kIHByb3BlcnR5IGFjY2Vzc1xuICBnZXQgZm9ybUZpZWxkc0FycmF5KCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1GaWVsZHMoKTtcbiAgfVxuICBcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBXYXRjaCBmb3IgY2hhbmdlcyBpbiBmb3JtRmllbGRzIChzdHJ1Y3R1cmUgY2hhbmdlcykgLSByZWdlbmVyYXRlIGZvcm1cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZm9ybUZpZWxkcyA9IHRoaXMuZm9ybUZpZWxkcygpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBmb3JtRmllbGRzIHN0cnVjdHVyZSBhY3R1YWxseSBjaGFuZ2VkXG4gICAgICBjb25zdCBmaWVsZHNDaGFuZ2VkID0gIXRoaXMucHJldmlvdXNGb3JtRmllbGRzIHx8IFxuICAgICAgICB0aGlzLnByZXZpb3VzRm9ybUZpZWxkcy5sZW5ndGggIT09IGZvcm1GaWVsZHMubGVuZ3RoIHx8XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMucHJldmlvdXNGb3JtRmllbGRzKSAhPT0gSlNPTi5zdHJpbmdpZnkoZm9ybUZpZWxkcyk7XG4gICAgICBcbiAgICAgIGlmIChmb3JtRmllbGRzICYmIGZpZWxkc0NoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1GaWVsZHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZvcm1GaWVsZHMpKTsgLy8gRGVlcCBjb3B5XG4gICAgICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSB0aGlzLmZvcm1WYWx1ZXMoKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFVzZSB1bnRyYWNrZWQgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyB3aGVuIHNldHRpbmcgc2lnbmFsc1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdlbmVyYXRlRHluYW1pY0Zvcm0oZm9ybUZpZWxkcywgZm9ybVZhbHVlcyk7XG4gICAgICAgICAgdGhpcy5keW5hbWljRm9ybVNpZ25hbC5zZXQoZm9ybSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gSW5pdGlhbGl6ZSBwcmV2aW91cyBmaWVsZCB2YWx1ZXMgbWFwXG4gICAgICAgICAgdGhpcy5wcmV2aW91c0ZpZWxkVmFsdWVzLmNsZWFyKCk7XG4gICAgICAgICAgY29uc3QgZm9ybUFycmF5ID0gZm9ybS5nZXQoJ2R5bmFtaWNGaWVsZHMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgICAgICAgIGlmIChmb3JtQXJyYXkpIHtcbiAgICAgICAgICAgIGZvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKChmaWVsZEdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmaWVsZEdyb3VwLmdldCgndmFsdWUnKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgICAgICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c0ZpZWxkVmFsdWVzLnNldChpbmRleCwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb250cm9sLnZhbHVlKSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gUmUtc3Vic2NyaWJlIHRvIGZvcm0gY2hhbmdlc1xuICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uU2lnbmFsKCk/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZXNTdWJzY3JpcHRpb25TaWduYWwuc2V0KGZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZShmb3JtVmFsdWUgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkZvcm1WYWx1ZUNoYW5nZXMoKTtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBzdWJmaWVsZCB1cGRhdGVzIHdoZW4gcGFyZW50IGZpZWxkIHZhbHVlcyBjaGFuZ2VcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU3ViRmllbGRVcGRhdGVzKGZvcm0pO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBFbWl0IGZvcm0gdmFsaWRpdHkgc3RhdHVzXG4gICAgICAgICAgdGhpcy5mb3JtVmFsaWQuZW1pdChmb3JtLnZhbGlkKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIEFQSSB3aXRoIHRoZSBuZXcgZm9ybVxuICAgICAgICAgIHRoaXMuZHluYW1pY0Zvcm1BUElTaWduYWwuc2V0KHtcbiAgICAgICAgICAgIGRlZmF1bHRGb3JtVmFsdWVzOiAoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlRHluYW1pY0ZpZWxkc1ZhbHVlT2JqZWN0KGZvcm0udmFsdWUuZHluYW1pY0ZpZWxkcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8vIFdhdGNoIGZvciBjaGFuZ2VzIGluIGZvcm1WYWx1ZXMgKGRhdGEgY2hhbmdlcykgLSBwYXRjaCBleGlzdGluZyBmb3JtIHZhbHVlc1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBmb3JtVmFsdWVzID0gdGhpcy5mb3JtVmFsdWVzKCk7XG4gICAgICBjb25zdCBjdXJyZW50Rm9ybSA9IHRoaXMuZHluYW1pY0Zvcm1TaWduYWwoKTtcbiAgICAgIFxuICAgICAgLy8gT25seSBwYXRjaCBpZiBmb3JtIGV4aXN0cyBhbmQgdGhpcyBpcyBub3QgYW4gaW50ZXJuYWwgdXBkYXRlXG4gICAgICBpZiAoIWN1cnJlbnRGb3JtIHx8IHRoaXMuaXNJbnRlcm5hbFVwZGF0ZSB8fCAhZm9ybVZhbHVlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENSSVRJQ0FMOiBEb24ndCBwYXRjaCBpZiB1c2VyIGlzIGFjdGl2ZWx5IHR5cGluZyBpbiBhbnkgaW5wdXQgZmllbGRcbiAgICAgIC8vIFRoaXMgcHJldmVudHMgZm9jdXMgbG9zcyB3aGVuIHVzZXIgaXMgdHlwaW5nXG4gICAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgIGNvbnN0IGlzVXNlclR5cGluZyA9IGFjdGl2ZUVsZW1lbnQgJiYgXG4gICAgICAgIChhY3RpdmVFbGVtZW50LnRhZ05hbWUgPT09ICdJTlBVVCcgfHwgYWN0aXZlRWxlbWVudC50YWdOYW1lID09PSAnVEVYVEFSRUEnKSAmJlxuICAgICAgICBhY3RpdmVFbGVtZW50LmNsb3Nlc3QoJ2Zvcm1bZm9ybUdyb3VwXScpICE9PSBudWxsO1xuICAgICAgXG4gICAgICBpZiAoaXNVc2VyVHlwaW5nKSB7XG4gICAgICAgIC8vIFVzZXIgaXMgYWN0aXZlbHkgdHlwaW5nIC0gc2tpcCBwYXRjaGluZyB0byBwcmV2ZW50IGZvY3VzIGxvc3NcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBhdGNoRm9ybVZhbHVlcyhjdXJyZW50Rm9ybSwgZm9ybVZhbHVlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFBhdGNoZXMgZm9ybSB2YWx1ZXMgd2l0aG91dCByZWdlbmVyYXRpbmcgdGhlIGZvcm0gc3RydWN0dXJlXG4gICAqIFRoaXMgcHJldmVudHMgZm9jdXMgbG9zcyB3aGVuIG9ubHkgdmFsdWVzIGNoYW5nZVxuICAgKi9cbiAgcHJpdmF0ZSBwYXRjaEZvcm1WYWx1ZXMoZm9ybTogVW50eXBlZEZvcm1Hcm91cCwgZm9ybVZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1BcnJheSA9IGZvcm0uZ2V0KCdkeW5hbWljRmllbGRzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgICBpZiAoIWZvcm1BcnJheSkgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZm9ybUZpZWxkcygpO1xuICAgIGZvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKChmaWVsZEdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBmaWVsZCA9IGZpZWxkc1tpbmRleF07XG4gICAgICBpZiAoIWZpZWxkKSByZXR1cm47XG4gICAgICBcbiAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSBmb3JtVmFsdWVzW2ZpZWxkLmNvbmZpZ05hbWVdO1xuICAgICAgaWYgKGZpZWxkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBjb250cm9sID0gZmllbGRHcm91cC5nZXQoJ3ZhbHVlJykgYXMgVW50eXBlZEZvcm1Db250cm9sO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgIGNvbnN0IG1hcHBlZFZhbHVlID0gdGhpcy5tYXBGb3JtVmFsdWVUb0Zvcm1GaWVsZChmaWVsZCwgZmllbGRWYWx1ZSkudmFsdWU7XG4gICAgICAgICAgLy8gT25seSB1cGRhdGUgaWYgdmFsdWUgYWN0dWFsbHkgY2hhbmdlZCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHVwZGF0ZXNcbiAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoY29udHJvbC52YWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KG1hcHBlZFZhbHVlKSkge1xuICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShtYXBwZWRWYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gSGFuZGxlIHN1YkZpZWxkcyBpZiB0aGV5IGV4aXN0XG4gICAgICAgIGlmIChmaWVsZFZhbHVlPy5zdWJGaWVsZHMgJiYgZmllbGQuc3ViRmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdWJEeW5hbWljRmllbGRzKGZpZWxkLCBmaWVsZEdyb3VwLCBjb250cm9sPy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEJ1aWxkaW5nIHRoZSBmb3JtIHdpdGggcHJvcGVyIG51bGwgY2hlY2tzXG4gICAgY29uc3QgZm9ybUZpZWxkcyA9IHRoaXMuZm9ybUZpZWxkcygpIHx8IFtdO1xuICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSB0aGlzLmZvcm1WYWx1ZXMoKSB8fCB7fTtcbiAgICBcbiAgICAvLyBPbmx5IGNyZWF0ZSBmb3JtIGlmIHdlIGhhdmUgZm9ybSBmaWVsZHNcbiAgICBpZiAoZm9ybUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5nZW5lcmF0ZUR5bmFtaWNGb3JtKGZvcm1GaWVsZHMsIGZvcm1WYWx1ZXMpO1xuICAgICAgdGhpcy5keW5hbWljRm9ybVNpZ25hbC5zZXQoZm9ybSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBhbiBlbXB0eSBmb3JtIGFzIGZhbGxiYWNrXG4gICAgICBjb25zdCBlbXB0eUZvcm0gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XG4gICAgICAgIGR5bmFtaWNGaWVsZHM6IG5ldyBVbnR5cGVkRm9ybUFycmF5KFtdKVxuICAgICAgfSk7XG4gICAgICB0aGlzLmR5bmFtaWNGb3JtU2lnbmFsLnNldChlbXB0eUZvcm0pO1xuICAgIH1cblxuICAgIC8vIFN1YnNjcmliaW5nIHRvIGZvcm0gY2hhbmdlcyBhbmQgZW1pdGluZyB2YWx1ZXMuXG4gICAgY29uc3QgY3VycmVudEZvcm0gPSB0aGlzLmR5bmFtaWNGb3JtU2lnbmFsKCk7XG4gICAgaWYgKGN1cnJlbnRGb3JtKSB7XG4gICAgICAvLyBJbml0aWFsaXplIHByZXZpb3VzIGZpZWxkIHZhbHVlcyBtYXBcbiAgICAgIHRoaXMucHJldmlvdXNGaWVsZFZhbHVlcy5jbGVhcigpO1xuICAgICAgY29uc3QgZm9ybUFycmF5ID0gY3VycmVudEZvcm0uZ2V0KCdkeW5hbWljRmllbGRzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgICAgIGlmIChmb3JtQXJyYXkpIHtcbiAgICAgICAgZm9ybUFycmF5LmNvbnRyb2xzLmZvckVhY2goKGZpZWxkR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gZmllbGRHcm91cC5nZXQoJ3ZhbHVlJykgYXMgVW50eXBlZEZvcm1Db250cm9sO1xuICAgICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzRmllbGRWYWx1ZXMuc2V0KGluZGV4LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbnRyb2wudmFsdWUpKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy52YWx1ZUNoYW5nZXNTdWJzY3JpcHRpb25TaWduYWwuc2V0KGN1cnJlbnRGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZm9ybVZhbHVlID0+IHtcbiAgICAgICAgdGhpcy5vbkZvcm1WYWx1ZUNoYW5nZXMoKTtcbiAgICAgICAgLy8gSGFuZGxlIHN1YmZpZWxkIHVwZGF0ZXMgd2hlbiBwYXJlbnQgZmllbGQgdmFsdWVzIGNoYW5nZVxuICAgICAgICB0aGlzLmhhbmRsZVN1YkZpZWxkVXBkYXRlcyhjdXJyZW50Rm9ybSk7XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgLy9hcGkgdG8gZXhwb3NlIGZ1bmN0aW9uc1xuICAgIHRoaXMuZHluYW1pY0Zvcm1BUElTaWduYWwuc2V0KHtcbiAgICAgIGRlZmF1bHRGb3JtVmFsdWVzOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlRHluYW1pY0ZpZWxkc1ZhbHVlT2JqZWN0KHRoaXMuZHluYW1pY0Zvcm0oKS52YWx1ZS5keW5hbWljRmllbGRzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmZvcm1Jbml0aWFsaXplZC5lbWl0KHRoaXMuZHluYW1pY0Zvcm1BUEkoKSk7XG4gICAgdGhpcy5mb3JtVmFsaWQuZW1pdCh0aGlzLmR5bmFtaWNGb3JtKCkudmFsaWQpO1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uJCgpPy51bnN1YnNjcmliZSgpO1xuICAgIGlmICh0aGlzLnN1YkZpZWxkVXBkYXRlVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3ViRmllbGRVcGRhdGVUaW1lb3V0KTtcbiAgICB9XG4gIH1cbiAgb25Gb3JtVmFsdWVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIC8vIFNldCBmbGFnIHRvIHByZXZlbnQgZm9ybVZhbHVlcyBlZmZlY3QgZnJvbSB0cmlnZ2VyaW5nIGR1cmluZyBpbnRlcm5hbCB1cGRhdGVzXG4gICAgdGhpcy5pc0ludGVybmFsVXBkYXRlID0gdHJ1ZTtcbiAgICBsZXQgZm9ybVZhbHVlcyA9IHRoaXMuZ2VuZXJhdGVEeW5hbWljRmllbGRzVmFsdWVPYmplY3QodGhpcy5keW5hbWljRm9ybSgpLnZhbHVlLmR5bmFtaWNGaWVsZHMpO1xuICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQodGhpcy5keW5hbWljRm9ybSgpLnZhbGlkKTtcbiAgICB0aGlzLmZvcm1VcGRhdGVkLmVtaXQoZm9ybVZhbHVlcyk7XG4gICAgY29uc29sZS5sb2coZm9ybVZhbHVlcyk7XG4gICAgLy8gUmVzZXQgZmxhZyBhZnRlciBhIG1pY3JvdGFzayB0byBhbGxvdyBleHRlcm5hbCB1cGRhdGVzXG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmlzSW50ZXJuYWxVcGRhdGUgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuICBnZW5lcmF0ZUR5bmFtaWNGaWVsZHNWYWx1ZU9iamVjdChmb3JtVmFsdWVzOiBBcnJheTxhbnk+KTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgbGV0IGR5bmFtaWNGaWVsZHNWYWx1ZSA9IHt9O1xuICAgIGZvcm1WYWx1ZXMuZm9yRWFjaCgoZmllbGRWYWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgIGlmKHR5cGVvZiBmaWVsZFZhbHVlPy52YWx1ZSA9PT0gJ3N0cmluZycpIGZpZWxkVmFsdWUudmFsdWUgPSBmaWVsZFZhbHVlPy52YWx1ZT8udHJpbSgpXG4gICAgICBsZXQgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLm1hcEZvcm1GaWVsZFRvRm9ybVZhbHVlKHRoaXMuZm9ybUZpZWxkcygpW2luZGV4XSwgZmllbGRWYWx1ZS52YWx1ZSk7XG4gICAgICBpZiAoZmllbGRWYWx1ZS5zdWJGaWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IGZvcm1hdHRlZFN1YkZpZWxkc1ZhbHVlcyA9IHt9XG4gICAgICAgIGxldCBzdWJGaWVsZCA9IHRoaXMuZm9ybUZpZWxkcygpW2luZGV4XS5zdWJGaWVsZHNcbiAgICAgICAgaWYodGhpcy5mb3JtRmllbGRzKClbaW5kZXhdLmZpZWxkVHlwZSA9PT0gJ3NpbmdsZVNlbGVjdCcgfHwgdGhpcy5mb3JtRmllbGRzKClbaW5kZXhdLmZpZWxkVHlwZSA9PT0gJ211bHRpU2VsZWN0Jykge1xuICAgICAgICAgIHN1YkZpZWxkID0gc3ViRmllbGQuZmlsdGVyKChzdWJGaWVsZCkgPT4gc3ViRmllbGQucGFyZW50Q29uZmlnVmFsdWUgPT09IGZpZWxkVmFsdWUudmFsdWUudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGZpZWxkVmFsdWUuc3ViRmllbGRzLmZvckVhY2goKHN1YkZpZWxkVmFsdWUsIHN1YkluZGV4KSA9PiB7XG4gICAgICAgICAgbGV0IHN1YkZvcm1GaWVsZCA9IHN1YkZpZWxkW3N1YkluZGV4XVxuICAgICAgICAgIGlmKHR5cGVvZiBzdWJGaWVsZFZhbHVlPy52YWx1ZSA9PT0gJ3N0cmluZycpIHN1YkZpZWxkVmFsdWUudmFsdWUgPSBzdWJGaWVsZFZhbHVlPy52YWx1ZT8udHJpbSgpXG4gICAgICAgICAgZm9ybWF0dGVkU3ViRmllbGRzVmFsdWVzW3N1YkZvcm1GaWVsZC5jb25maWdOYW1lXSA9IHRoaXMubWFwRm9ybUZpZWxkVG9Gb3JtVmFsdWUoc3ViRm9ybUZpZWxkLCBzdWJGaWVsZFZhbHVlKVxuICAgICAgICB9KVxuICAgICAgICBkeW5hbWljRmllbGRzVmFsdWVbdGhpcy5mb3JtRmllbGRzKClbaW5kZXhdLmNvbmZpZ05hbWVdID0ge1xuICAgICAgICAgIHZhbHVlOiBmb3JtYXR0ZWRWYWx1ZSxcbiAgICAgICAgICBzdWJGaWVsZHM6IGZvcm1hdHRlZFN1YkZpZWxkc1ZhbHVlc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZHluYW1pY0ZpZWxkc1ZhbHVlW3RoaXMuZm9ybUZpZWxkcygpW2luZGV4XS5jb25maWdOYW1lXSA9IGZvcm1hdHRlZFZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkeW5hbWljRmllbGRzVmFsdWU7XG4gIH1cbiAgZ2VuZXJhdGVEeW5hbWljRm9ybShcbiAgICBmb3JtRmllbGRzOiBBcnJheTxOc0R5bmFtaWNGb3JtLklEeW5hbWljRmllbGQ+LFxuICAgIGZvcm1WYWx1ZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH1cbiAgKTogVW50eXBlZEZvcm1Hcm91cCB7XG4gICAgbGV0IGZvcm1BcnJheSA9IG5ldyBVbnR5cGVkRm9ybUFycmF5KFtdKVxuXG4gICAgZm9yIChsZXQgZmllbGQgb2YgZm9ybUZpZWxkcykge1xuICAgICAgbGV0IGZpZWxkVmFsdWUgPSBmb3JtVmFsdWVzW2ZpZWxkLmNvbmZpZ05hbWVdO1xuICAgICAgbGV0IGZpZWxkQ29udHJvbCA9IHRoaXMubWFwRm9ybVZhbHVlVG9Gb3JtRmllbGQoZmllbGQsIGZpZWxkVmFsdWUpO1xuICAgICAgbGV0IHN1YkZpZWxkc0NvbnRyb2xzID0gdGhpcy5nZW5lcmF0ZVN1YkR5bmFtaWNGaWVsZHMoZm9ybVZhbHVlcywgZmllbGQsIGZpZWxkQ29udHJvbC52YWx1ZSk7XG4gICAgICBmb3JtQXJyYXkucHVzaChuZXcgVW50eXBlZEZvcm1Hcm91cCh7XG4gICAgICAgIHZhbHVlOiBmaWVsZENvbnRyb2wsXG4gICAgICAgIHN1YkZpZWxkczogc3ViRmllbGRzQ29udHJvbHNcbiAgICAgIH0pKVxuICAgIH0gIFxuICAgIHJldHVybiBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XG4gICAgICBkeW5hbWljRmllbGRzOiBmb3JtQXJyYXlcbiAgICB9KVxuICB9XG4gIFxuICBnZXREeW5hbWljRmllbGRzQ29udHJvbHMoKTogVW50eXBlZEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZHluYW1pY0Zvcm0oKS5nZXQoXCJkeW5hbWljRmllbGRzXCIpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIYW5kbGVzIHN1YmZpZWxkIHVwZGF0ZXMgd2hlbiBwYXJlbnQgZmllbGQgdmFsdWVzIGNoYW5nZVxuICAgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmb3JtIHZhbHVlQ2hhbmdlcyBzdWJzY3JpcHRpb25cbiAgICogVXNlcyBhIGRlYm91bmNlIG1lY2hhbmlzbSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSB1cGRhdGVzXG4gICAqL1xuICBwcml2YXRlIHN1YkZpZWxkVXBkYXRlVGltZW91dDogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBwcmV2aW91c0ZpZWxkVmFsdWVzOiBNYXA8bnVtYmVyLCBhbnk+ID0gbmV3IE1hcCgpO1xuICBcbiAgcHJpdmF0ZSBoYW5kbGVTdWJGaWVsZFVwZGF0ZXMoZm9ybTogVW50eXBlZEZvcm1Hcm91cCk6IHZvaWQge1xuICAgIC8vIENSSVRJQ0FMOiBEb24ndCB1cGRhdGUgc3ViZmllbGRzIGlmIHVzZXIgaXMgYWN0aXZlbHkgdHlwaW5nXG4gICAgLy8gVGhpcyBwcmV2ZW50cyBmb2N1cyBsb3NzIHdoZW4gdXNlciBpcyB0eXBpbmcgaW4gYW55IGZpZWxkXG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgaXNVc2VyVHlwaW5nID0gYWN0aXZlRWxlbWVudCAmJiBcbiAgICAgIChhY3RpdmVFbGVtZW50LnRhZ05hbWUgPT09ICdJTlBVVCcgfHwgYWN0aXZlRWxlbWVudC50YWdOYW1lID09PSAnVEVYVEFSRUEnKSAmJlxuICAgICAgYWN0aXZlRWxlbWVudC5jbG9zZXN0KCdmb3JtW2Zvcm1Hcm91cF0nKSAhPT0gbnVsbDtcbiAgICBcbiAgICBpZiAoaXNVc2VyVHlwaW5nKSB7XG4gICAgICAvLyBVc2VyIGlzIGFjdGl2ZWx5IHR5cGluZyAtIHNraXAgc3ViZmllbGQgdXBkYXRlcyB0byBwcmV2ZW50IGZvY3VzIGxvc3NcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2xlYXIgYW55IHBlbmRpbmcgdXBkYXRlc1xuICAgIGlmICh0aGlzLnN1YkZpZWxkVXBkYXRlVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3ViRmllbGRVcGRhdGVUaW1lb3V0KTtcbiAgICB9XG4gICAgXG4gICAgLy8gRGVib3VuY2Ugc3ViZmllbGQgdXBkYXRlcyB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBjYWxsc1xuICAgIHRoaXMuc3ViRmllbGRVcGRhdGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBDaGVjayBhZ2FpbiBhZnRlciBkZWJvdW5jZSAtIHVzZXIgbWlnaHQgc3RpbGwgYmUgdHlwaW5nXG4gICAgICBjb25zdCBhY3RpdmVFbGVtZW50QWZ0ZXJEZWJvdW5jZSA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBzdGlsbFR5cGluZyA9IGFjdGl2ZUVsZW1lbnRBZnRlckRlYm91bmNlICYmIFxuICAgICAgICAoYWN0aXZlRWxlbWVudEFmdGVyRGVib3VuY2UudGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCBhY3RpdmVFbGVtZW50QWZ0ZXJEZWJvdW5jZS50YWdOYW1lID09PSAnVEVYVEFSRUEnKSAmJlxuICAgICAgICBhY3RpdmVFbGVtZW50QWZ0ZXJEZWJvdW5jZS5jbG9zZXN0KCdmb3JtW2Zvcm1Hcm91cF0nKSAhPT0gbnVsbDtcbiAgICAgIFxuICAgICAgaWYgKHN0aWxsVHlwaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgZm9ybUFycmF5ID0gZm9ybS5nZXQoJ2R5bmFtaWNGaWVsZHMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgICAgaWYgKCFmb3JtQXJyYXkpIHJldHVybjtcbiAgICAgIFxuICAgICAgY29uc3QgZmllbGRzID0gdGhpcy5mb3JtRmllbGRzKCk7XG4gICAgICBmb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoZmllbGRHcm91cDogVW50eXBlZEZvcm1Hcm91cCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkc1tpbmRleF07XG4gICAgICAgIGlmICghZmllbGQgfHwgIWZpZWxkLnN1YkZpZWxkcz8ubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIFxuICAgICAgICBjb25zdCBjb250cm9sID0gZmllbGRHcm91cC5nZXQoJ3ZhbHVlJykgYXMgVW50eXBlZEZvcm1Db250cm9sO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHRoaXMucHJldmlvdXNGaWVsZFZhbHVlcy5nZXQoaW5kZXgpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIHN1YmZpZWxkcyBpZiBwYXJlbnQgZmllbGQgdmFsdWUgYWN0dWFsbHkgY2hhbmdlZFxuICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpICE9PSBKU09OLnN0cmluZ2lmeShwcmV2aW91c1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0ZpZWxkVmFsdWVzLnNldChpbmRleCwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN1YkR5bmFtaWNGaWVsZHMoZmllbGQsIGZpZWxkR3JvdXAsIGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAxMDApOyAvLyBTbWFsbCBkZWJvdW5jZSB0byBiYXRjaCB1cGRhdGVzXG4gIH1cbiAgXG4gIHVwZGF0ZVN1YkR5bmFtaWNGaWVsZHMoXG4gICAgZmllbGQ6IE5zRHluYW1pY0Zvcm0uSUR5bmFtaWNGaWVsZCxcbiAgICBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXG4gICAgdmFsdWU6IGFueVxuICApOiB2b2lkIHtcbiAgICBpZiAoZmllbGQuc3ViRmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBTZXQgZmxhZyB0byBwcmV2ZW50IGZvcm0gcmVnZW5lcmF0aW9uIGR1cmluZyBzdWJmaWVsZCB1cGRhdGVzXG4gICAgICB0aGlzLmlzSW50ZXJuYWxVcGRhdGUgPSB0cnVlO1xuICAgICAgbGV0IHN1YkZpZWxkc0NvbnRyb2xzID0gdGhpcy5nZW5lcmF0ZVN1YkR5bmFtaWNGaWVsZHModGhpcy5mb3JtVmFsdWVzKCksIGZpZWxkLCB2YWx1ZSk7XG4gICAgICBmb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgnc3ViRmllbGRzJylcbiAgICAgIGZvcm1Hcm91cC5hZGRDb250cm9sKCdzdWJGaWVsZHMnLCBzdWJGaWVsZHNDb250cm9scylcbiAgICAgIC8vIFJlc2V0IGZsYWcgYWZ0ZXIgdXBkYXRlXG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5pc0ludGVybmFsVXBkYXRlID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgdXBkYXRlU2VsZWN0ZWRWYWx1ZUZvclNpbmdsZVNlbGVjdChcbiAgICBmaWVsZDogTnNEeW5hbWljRm9ybS5JRHluYW1pY0ZpZWxkLFxuICAgIGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCxcbiAgICBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXG4gICAgdmFsdWU6IGFueVxuICApOiB2b2lkIHtcbiAgICBpZiAoY29udHJvbC52YWx1ZT8udmFsdWUgIT09IHZhbHVlLnZhbHVlKSB7XG4gICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBjb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLnVwZGF0ZVN1YkR5bmFtaWNGaWVsZHMoZmllbGQsIGZvcm1Hcm91cCwgdmFsdWUpO1xuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICB9XG4gIHVwZGF0ZVNlbGVjdGVkVmFsdWVGb3JNdWx0aVNlbGVjdChcbiAgICBmaWVsZDogTnNEeW5hbWljRm9ybS5JRHluYW1pY0ZpZWxkLFxuICAgIGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCxcbiAgICBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXG4gICAgdmFsdWVzOiBBcnJheTxhbnk+XG4gICk6IHZvaWQge1xuICAgIGxldCBzZWxlY3RlZFZhbHVlczogQXJyYXk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogYW55IH0+ID0gY29udHJvbC52YWx1ZTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGxldCBpdGVtSW5kZXggPSBzZWxlY3RlZFZhbHVlcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmxhYmVsID09PSB2YWx1ZS5sYWJlbCk7XG4gICAgICBpZiAoaXRlbUluZGV4ID4gLTEpIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZXMuc3BsaWNlKGl0ZW1JbmRleCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RlZFZhbHVlcy5wdXNoKHsgLi4udmFsdWUgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnRyb2wuc2V0VmFsdWUoc2VsZWN0ZWRWYWx1ZXMpO1xuICAgIHRoaXMudXBkYXRlU3ViRHluYW1pY0ZpZWxkcyhmaWVsZCwgZm9ybUdyb3VwLCB2YWx1ZXMpO1xuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICB9XG4gIGlzQ2hlY2tCb3hTZWxlY3RlZCh2YWx1ZTogc3RyaW5nLCBzZWxlY3RlZFZhbHVlczogQXJyYXk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNlbGVjdGVkVmFsdWVzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0ubGFiZWwgPT09IHZhbHVlKSA+IC0xO1xuICB9XG5cbiAgZmluZFNlbGVjdGVkU3ViRmllbGRDb25maWcoc3ViZmllbGRzLCB2YWx1ZSwgc3ViRmllbGRJbmRleCkge1xuICAgIHRyeXtcbiAgICAgIGNvbnN0IHNlbGVjdGVkU3ViRmllbGRDb25maWcgPSBzdWJmaWVsZHMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wYXJlbnRDb25maWdWYWx1ZSA9PT0gdmFsdWUpW3N1YkZpZWxkSW5kZXhdO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkU3ViRmllbGRDb25maWc7XG4gICAgfVxuICAgIGNhdGNoKGUpe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdWJmaWVsZCBpbmRleCBub3QgZm91bmQnKTtcbiAgICB9XG4gIH1cblxuICBtYXRjaFBhcmVudENvbmZpZyhzdWJmaWVsZHMsIHZhbHVlKSB7XG4gICAgaWYgKCFzdWJmaWVsZHMgfHwgc3ViZmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc3ViZmllbGRzLnNvbWUoaXRlbSA9PiBpdGVtLnBhcmVudENvbmZpZ1ZhbHVlID09PSB2YWx1ZSk7XG4gIH1cblxuICBnZW5lcmF0ZVN1YkR5bmFtaWNGaWVsZHMoXG4gICAgZm9ybVZhbHVlczogYW55LFxuICAgIHBhcmVudEZpZWxkOiBOc0R5bmFtaWNGb3JtLklEeW5hbWljRmllbGQsXG4gICAgcGFyZW50VmFsdWU6IEFycmF5PHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bWJlciB9PiB8IHtsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH0gfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuXG4gICk6IFVudHlwZWRGb3JtQXJyYXkge1xuICAgIGxldCBjb250cm9scyA9IG5ldyBVbnR5cGVkRm9ybUFycmF5KFtdKVxuICAgIGxldCBzdWJGaWVsZHMgPSBwYXJlbnRGaWVsZC5zdWJGaWVsZHNcbiAgICBsZXQgc3ViRmllbGRzVmFsdWVzID0gZm9ybVZhbHVlc1twYXJlbnRGaWVsZC5jb25maWdOYW1lXT8uc3ViRmllbGRzID8gZm9ybVZhbHVlc1twYXJlbnRGaWVsZC5jb25maWdOYW1lXS5zdWJGaWVsZHMgOiB7fVxuICAgIGlmKCFzdWJGaWVsZHMpIHJldHVybiBjb250cm9scztcbiAgICBpZiAocGFyZW50RmllbGQuZmllbGRUeXBlID09PSAnc2luZ2xlU2VsZWN0Jykge1xuICAgICAgc3ViRmllbGRzID0gc3ViRmllbGRzLmZpbHRlcigoc3ViRmllbGQpID0+IHN1YkZpZWxkLnBhcmVudENvbmZpZ1ZhbHVlID09PSAoPHtsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH0+cGFyZW50VmFsdWUpPy52YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHBhcmVudEZpZWxkLmZpZWxkVHlwZSA9PT0gJ211bHRpU2VsZWN0Jykge1xuICAgICAgbGV0IHBhcmVudFZhbHVlcyA9IG5ldyBTZXQoKDxBcnJheTx7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfT4+cGFyZW50VmFsdWUpLm1hcCgodmFsdWUpID0+IHZhbHVlLnZhbHVlKSk7XG4gICAgICBzdWJGaWVsZHMgPSBzdWJGaWVsZHMuZmlsdGVyKChzdWJGaWVsZCkgPT4gcGFyZW50VmFsdWVzLmhhcyhzdWJGaWVsZC5wYXJlbnRDb25maWdWYWx1ZSkpO1xuICAgIH1cblxuICAgIGlmIChzdWJGaWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChsZXQgc3ViRmllbGQgb2Ygc3ViRmllbGRzKSB7XG4gICAgICAgICAgY29udHJvbHMucHVzaCh0aGlzLm1hcEZvcm1WYWx1ZVRvRm9ybUZpZWxkKHN1YkZpZWxkLCBzdWJGaWVsZHNWYWx1ZXNbc3ViRmllbGQuY29uZmlnTmFtZV0pKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgcmV0dXJuIGNvbnRyb2xzO1xuICB9XG4gIG1hcEZvcm1WYWx1ZVRvRm9ybUZpZWxkKGZvcm1GaWVsZDogTnNEeW5hbWljRm9ybS5JRHluYW1pY0ZpZWxkLCBmb3JtVmFsdWU6IGFueSk6IGFueSB7XG4gICAgbGV0IHZhbGlkYXRvcnMgPSBmb3JtRmllbGQudmFsaWRhdG9ycyA/IFtkeW5hbWljRmllbGRWYWxpZGF0b3IoZm9ybUZpZWxkLnZhbGlkYXRvcnMpXTogW11cbiAgICBsZXQgY29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobnVsbCwgdmFsaWRhdG9ycyk7XG5cbiAgICBpZiAoZm9ybUZpZWxkLmZpZWxkVHlwZSA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkSW5wdXRUeXBlID09PSBcInRleHRcIiB8fCBmb3JtRmllbGQuZmllbGRJbnB1dFR5cGUgPT09IFwidGV4dGFyZWFcIikgY29udHJvbC5zZXRWYWx1ZShmb3JtVmFsdWUgPyBmb3JtVmFsdWUgOiBcIlwiKTtcbiAgICAgIGVsc2UgaWYgKGZvcm1GaWVsZC5maWVsZElucHV0VHlwZSA9PT0gXCJudW1iZXJcIikgY29udHJvbC5zZXRWYWx1ZShmb3JtVmFsdWUgPyBmb3JtVmFsdWUgOiAwKTtcbiAgICAgIGVsc2UgaWYgKGZvcm1GaWVsZC5maWVsZElucHV0VHlwZSA9PT0gXCJkYXRlXCIpIHtcbiAgICAgICAgaWYgKGZvcm1WYWx1ZSAmJiB0eXBlb2YgZm9ybVZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgY29uc3QgdGltZXpvbmUgPSAoZm9ybUZpZWxkLmZpZWxkQ29uZmlnICYmIGZvcm1GaWVsZC5maWVsZENvbmZpZy50aW1lem9uZSkgfHwgJ0FzaWEvS29sa2F0YSc7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ID0gKGZvcm1GaWVsZC5maWVsZENvbmZpZyAmJiBmb3JtRmllbGQuZmllbGRDb25maWcuZm9ybWF0KSB8fCAnREQvTU0vWVlZWSc7XG4gICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShkYXlqcyhmb3JtVmFsdWUpLnR6KHRpbWV6b25lKS5mb3JtYXQoZm9ybWF0KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybVZhbHVlICYmIHR5cGVvZiBmb3JtVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBjb25zdCB0aW1lem9uZSA9IChmb3JtRmllbGQuZmllbGRDb25maWcgJiYgZm9ybUZpZWxkLmZpZWxkQ29uZmlnLnRpbWV6b25lKSB8fCAnQXNpYS9Lb2xrYXRhJztcbiAgICAgICAgICBjb25zdCBmb3JtYXQgPSAoZm9ybUZpZWxkLmZpZWxkQ29uZmlnICYmIGZvcm1GaWVsZC5maWVsZENvbmZpZy5mb3JtYXQpIHx8ICdERC9NTS9ZWVlZJztcbiAgICAgICAgICBjb250cm9sLnNldFZhbHVlKGRheWpzLnR6KGZvcm1WYWx1ZSwgZm9ybWF0LCB0aW1lem9uZSkuZm9ybWF0KGZvcm1hdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHRpbWV6b25lID0gKGZvcm1GaWVsZC5maWVsZENvbmZpZyAmJiBmb3JtRmllbGQuZmllbGRDb25maWcudGltZXpvbmUpIHx8ICdBc2lhL0tvbGthdGEnO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IChmb3JtRmllbGQuZmllbGRDb25maWcgJiYgZm9ybUZpZWxkLmZpZWxkQ29uZmlnLmZvcm1hdCkgfHwgJ0REL01NL1lZWVknO1xuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoZGF5anMoKS50eih0aW1lem9uZSkuZm9ybWF0KGZvcm1hdCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmb3JtRmllbGQuZmllbGRUeXBlID09PSBcInNpbmdsZVNlbGVjdFwiKSB7XG4gICAgICBjb25zdCBmaW5kU2VsZWN0ZWRWYWx1ZSA9ICgpID0+IHtcbiAgICAgICAgbGV0IGluZGV4ID0gZm9ybUZpZWxkLml0ZW1zTGlzdC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnZhbHVlID09PSBmb3JtVmFsdWUpXG4gICAgICAgIHJldHVybiBpbmRleCA+PSAwID8gZm9ybUZpZWxkLml0ZW1zTGlzdFtpbmRleF06IFwiXCI7XG4gICAgICB9XG4gICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkSW5wdXRUeXBlID09PSBcImRyb3Bkb3duXCIpIHtcbiAgICAgICAgaWYgKCFmb3JtVmFsdWUpIGNvbnRyb2wuc2V0VmFsdWUoZm9ybUZpZWxkLml0ZW1zTGlzdFswXSk7XG4gICAgICAgIGVsc2UgY29udHJvbC5zZXRWYWx1ZShmaW5kU2VsZWN0ZWRWYWx1ZSgpKVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZm9ybUZpZWxkLmZpZWxkSW5wdXRUeXBlID09PSBcInJhZGlvXCIpIHtcbiAgICAgICAgY29udHJvbC5zZXRWYWx1ZShmaW5kU2VsZWN0ZWRWYWx1ZSgpKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmZpZWxkVHlwZSA9PT0gXCJtdWx0aVNlbGVjdFwiKSB7XG4gICAgICBpZiAoZm9ybVZhbHVlICYmIEFycmF5LmlzQXJyYXkoZm9ybVZhbHVlKSkge1xuICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgdmFsdWUgb2YgZm9ybVZhbHVlKSB7XG4gICAgICAgICAgbGV0IGluZGV4ID0gZm9ybUZpZWxkLml0ZW1zTGlzdC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSk7XG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHNlbGVjdGVkVmFsdWVzLnB1c2goeyAuLi5mb3JtRmllbGQuaXRlbXNMaXN0W2luZGV4XSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb250cm9sLnNldFZhbHVlKHNlbGVjdGVkVmFsdWVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoW10pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmZpZWxkVHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUoISFmb3JtVmFsdWUpO1xuICAgIH0gZWxzZSBjb250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgIHJldHVybiBjb250cm9sO1xuICB9XG4gIG1hcEZvcm1GaWVsZFRvRm9ybVZhbHVlKGZvcm1GaWVsZDogTnNEeW5hbWljRm9ybS5JRHluYW1pY0ZpZWxkLCBmb3JtVmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKGZvcm1GaWVsZC5maWVsZFR5cGUgPT09IFwiaW5wdXRcIikge1xuICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZElucHV0VHlwZSA9PT0gXCJ0ZXh0XCIgfHwgZm9ybUZpZWxkLmZpZWxkSW5wdXRUeXBlID09PSBcInRleHRhcmVhXCIpIHJldHVybiBmb3JtVmFsdWU7XG4gICAgICBlbHNlIGlmIChmb3JtRmllbGQuZmllbGRJbnB1dFR5cGUgPT09IFwibnVtYmVyXCIpIHJldHVybiArZm9ybVZhbHVlO1xuICAgICAgZWxzZSBpZiAoZm9ybUZpZWxkLmZpZWxkSW5wdXRUeXBlID09PSBcImRhdGVcIikge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSAoZm9ybUZpZWxkLmZpZWxkQ29uZmlnICYmIGZvcm1GaWVsZC5maWVsZENvbmZpZy5mb3JtYXQpIHx8ICdERC9NTS9ZWVlZJztcbiAgICAgICAgY29uc3QgdGltZXpvbmUgPSAoZm9ybUZpZWxkLmZpZWxkQ29uZmlnICYmIGZvcm1GaWVsZC5maWVsZENvbmZpZy50aW1lem9uZSkgfHwgJ0FzaWEvS29sa2F0YSc7XG4gICAgICAgIHJldHVybiBkYXlqcy50eihmb3JtVmFsdWUsIGZvcm1hdCwgdGltZXpvbmUpLnZhbHVlT2YoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5maWVsZFR5cGUgPT09IFwic2luZ2xlU2VsZWN0XCIpIHtcbiAgICAgIHJldHVybiBmb3JtVmFsdWU/LnZhbHVlID8/ICcnO1xuICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmZpZWxkVHlwZSA9PT0gXCJtdWx0aVNlbGVjdFwiKSB7XG4gICAgICByZXR1cm4gZm9ybVZhbHVlPy5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5maWVsZFR5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gZm9ybVZhbHVlO1xuICAgIH0gZWxzZSByZXR1cm4gZm9ybVZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBkeW5hbWljRmllbGRWYWxpZGF0b3IgPSAodmFsaWRhdG9yczogQXJyYXk8TnNEeW5hbWljRm9ybS5JRHluYW1pY0ZpZWxkVmFsaWRhdG9yPik6IFZhbGlkYXRvckZuID0+IHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgbGV0IHZhbHVlID0gY29udHJvbC52YWx1ZVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhbHVlID0gdmFsdWU/LnZhbHVlID8gdmFsdWUudmFsdWUgOiAnJ1xuICAgIH1cbiAgICBsZXQgZXJyb3JzID0gbnVsbFxuXG4gICAgdmFsaWRhdG9ycy5mb3JFYWNoKCh2YWxpZGF0b3IpID0+IHtcbiAgICAgIGxldCBlcnJvciA9IG51bGxcbiAgICAgIGxldCBtZXNzYWdlID0gdmFsaWRhdG9yLm1lc3NhZ2VcbiAgICAgIHN3aXRjaCAodmFsaWRhdG9yLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcIlJlcXVpcmVkXCI6XG4gICAgICAgICAgZXJyb3IgPSBWYWxpZGF0b3JzLnJlcXVpcmVkKGNvbnRyb2wpO1xuICAgICAgICAgIGlmICghZXJyb3IgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICBlcnJvciA9IHsgUmVxdWlyZWQ6IG1lc3NhZ2UgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZXJyb3IpIGVycm9yID0ge1JlcXVpcmVkOiBtZXNzYWdlfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTWluTGVuZ3RoXCI6XG4gICAgICAgICAgZXJyb3IgPSBWYWxpZGF0b3JzLm1pbkxlbmd0aCgrdmFsaWRhdG9yLnZhbHVlKShjb250cm9sKVxuICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoJyR7MH0nLCBlcnJvcj8ubWlubGVuZ3RoLnJlcXVpcmVkTGVuZ3RoKVxuICAgICAgICAgIGlmKGVycm9yKSBlcnJvciA9IHsgTWluTGVuZ3RoOiBtZXNzYWdlIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIk1heExlbmd0aFwiOlxuICAgICAgICAgIGVycm9yID0gVmFsaWRhdG9ycy5tYXhMZW5ndGgoK3ZhbGlkYXRvci52YWx1ZSkoY29udHJvbClcbiAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKCckezB9JywgZXJyb3I/LmFjdHVhbExlbmd0aClcbiAgICAgICAgICBpZihlcnJvcikgZXJyb3IgPSB7IE1heExlbmd0aDogbWVzc2FnZSB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJFbWFpbFwiOlxuICAgICAgICAgIGVycm9yID0gVmFsaWRhdG9ycy5lbWFpbChjb250cm9sKVxuICAgICAgICAgIGlmKGVycm9yKSBlcnJvciA9IHtFbWFpbDogbWVzc2FnZX1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkN1c3RvbVwiOlxuICAgICAgICAgIGVycm9yID0gVmFsaWRhdG9ycy5wYXR0ZXJuKGAke3ZhbGlkYXRvci52YWx1ZX1gKShjb250cm9sKVxuICAgICAgICAgIGlmKGVycm9yKSBlcnJvciA9IHtDdXN0b206IG1lc3NhZ2V9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoZXJyb3IpIGVycm9ycyA9IHsgLi4uZXJyb3JzLCAuLi5lcnJvciB9XG4gICAgfSlcbiAgICByZXR1cm4gZXJyb3JzXG4gIH1cbn0iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImR5bmFtaWNGb3JtKClcIj5cbiAgPG5nLWNvbnRhaW5lciBmb3JtQXJyYXlOYW1lPVwiZHluYW1pY0ZpZWxkc1wiPlxuICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiICpuZ0Zvcj1cImxldCBmaWVsZENvbnRyb2wgb2YgZ2V0RHluYW1pY0ZpZWxkc0NvbnRyb2xzKCkuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJkeW5hbWljRmllbGRcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICRpbXBsaWNpdDogZm9ybUZpZWxkc0FycmF5Py5baV0sXG4gICAgICAgICAgZm9ybUdyb3VwOiBmaWVsZENvbnRyb2wsXG4gICAgICAgICAgY29udHJvbDogZmllbGRDb250cm9sLmNvbnRyb2xzLnZhbHVlXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3ViLWR5bmFtaWMtZm9ybVwiICpuZ0lmPVwiZmllbGRDb250cm9sPy52YWx1ZSAmJiAoISFmb3JtRmllbGRzQXJyYXk/LltpXT8uc3ViRmllbGRzICYmIGZvcm1GaWVsZHNBcnJheT8uW2ldPy5zdWJGaWVsZHM/Lmxlbmd0aCA+IDAgJiYgbWF0Y2hQYXJlbnRDb25maWcoZm9ybUZpZWxkc0FycmF5Py5baV0/LnN1YkZpZWxkcywgZmllbGRDb250cm9sPy5jb250cm9scz8udmFsdWU/LnZhbHVlPy52YWx1ZSkpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1YkZpZWxkQ29udHJvbCBvZiBmaWVsZENvbnRyb2wuY29udHJvbHMuc3ViRmllbGRzLmNvbnRyb2xzOyBsZXQgaiA9IGluZGV4XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZHluYW1pY0ZpZWxkXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogZmluZFNlbGVjdGVkU3ViRmllbGRDb25maWcoZm9ybUZpZWxkc0FycmF5Py5baV0/LnN1YkZpZWxkcywgZmllbGRDb250cm9sLmNvbnRyb2xzLnZhbHVlLnZhbHVlLnZhbHVlLGopLFxuICAgICAgICAgICAgICBjb250cm9sOiBzdWJGaWVsZENvbnRyb2xcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Zvcm0+XG5cblxuPG5nLXRlbXBsYXRlICNkeW5hbWljRmllbGQgbGV0LWZpZWxkIGxldC1jb250cm9sPVwiY29udHJvbFwiIGxldC1mb3JtZ3JvdXA9XCJmb3JtR3JvdXBcIj5cblxuICA8IS0tIGZpZWxkVHlwZTogJ2lucHV0JyBmaWVsZElucHV0VHlwZTogJ3RleHQnIHwgJ251bWJlcicgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZC5maWVsZFR5cGUgPT09ICdpbnB1dCcgJiYgKGZpZWxkLmZpZWxkSW5wdXRUeXBlID09PSAndGV4dCcgfHwgZmllbGQuZmllbGRJbnB1dFR5cGUgPT09ICdudW1iZXInKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21JbnB1dFRleHROdW1iZXI7IGVsc2UgZGVmYXVsdElucHV0VGV4dE51bWJlclwiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbUlucHV0VGV4dE51bWJlclwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkOiBmaWVsZCwgY29udHJvbDogY29udHJvbCwgZm9ybWdyb3VwOiBmb3JtZ3JvdXAgfVwiXG4gICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRJbnB1dFRleHROdW1iZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy1maWVsZCBtdWx0aS1saW5lLWZpZWxkLWNvbnRhaW5lclwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsnYm9yZGVyLWJvdHRvbSc6IChmb3JtZ3JvdXA/LmNvbnRyb2xzPy5zdWJGaWVsZHM/LmNvbnRyb2xzPy5sZW5ndGggJiYgcmVtb3ZlU2VwcmF0b3JGb3JTdWJGaWVsZHMpID8gICdub25lJzonJ31cIj5cbiAgICAgICAgPHAgY2xhc3M9XCJoNyBmaWVsZC10aXRsZS1zbVwiPlxuICAgICAgICAgIHt7IGZpZWxkPy50aXRsZSB9fSA8c3BhbiAqbmdJZj1cImZpZWxkLnZhbGlkYXRvcnMgJiYgZmllbGQudmFsaWRhdG9ycy5sZW5ndGggPiAwXCI+ICo8L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdiBzdHlsZT1cImZsZXgtYmFzaXM6IDEwMCVcIj48L2Rpdj5cbiAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXQtZmllbGQgaXAtdGV4dFwiIFt0eXBlXT1cImZpZWxkLmZpZWxkSW5wdXRUeXBlXCIgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgIFtuZ1N0eWxlXT1cInsnYm9yZGVyJzogY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzID8gJzFweCBzb2xpZCAjQjAwMDIwJzogJyd9XCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQucGxhY2Vob2xkZXJUZXh0ID8gZmllbGQucGxhY2Vob2xkZXJUZXh0IDogJ0lucHV0IFRleHQnXCIgXG4gICAgICAgICAgW21pbl09XCJmaWVsZC5maWVsZElucHV0VHlwZSA9PT0gJ251bWJlcicgPyAwIDogJycgXCIvPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJkeW5hbWljRmllbGRFcnJvcnNcIiBcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGNvbnRyb2wuZXJyb3JzIH1cIlxuICAgICAgICA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG4gIFxuICA8IS0tIGZpZWxkVHlwZTogJ2lucHV0JyBmaWVsZElucHV0VHlwZTogJ3RleHRhcmVhJyAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmZpZWxkVHlwZSA9PT0gJ2lucHV0JyAmJiBmaWVsZC5maWVsZElucHV0VHlwZSA9PT0gJ3RleHRhcmVhJ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21JbnB1dFRleHRhcmVhOyBlbHNlIGRlZmF1bHRJbnB1dFRleHRhcmVhXCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbUlucHV0VGV4dGFyZWFcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGQ6IGZpZWxkLCBjb250cm9sOiBjb250cm9sLCBmb3JtZ3JvdXA6IGZvcm1ncm91cCB9XCJcbiAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRJbnB1dFRleHRhcmVhPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtZmllbGQgbXVsdGktbGluZS1maWVsZC1jb250YWluZXJcIlxuICAgICAgW25nU3R5bGVdPVwieydib3JkZXItYm90dG9tJzogKGZvcm1ncm91cD8uY29udHJvbHM/LnN1YkZpZWxkcz8uY29udHJvbHM/Lmxlbmd0aCAmJiByZW1vdmVTZXByYXRvckZvclN1YkZpZWxkcykgPyAgJ25vbmUnOicnfVwiPlxuICAgICAgICA8cCBjbGFzcz1cImg3IGZpZWxkLXRpdGxlLXNtXCI+XG4gICAgICAgICAge3sgZmllbGQudGl0bGUgfX08c3BhbiAqbmdJZj1cImZpZWxkLnZhbGlkYXRvcnMgJiYgZmllbGQudmFsaWRhdG9ycy5sZW5ndGggPiAwXCI+ICo8L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdiBzdHlsZT1cImZsZXgtYmFzaXM6IDEwMCVcIj48L2Rpdj5cbiAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiaW5wdXQtZmllbGQgaXAtdGV4dGFyZWFcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgW25nU3R5bGVdPVwieydib3JkZXInOiBjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnMgPyAnMXB4IHNvbGlkICNCMDAwMjAnOiAnJ31cIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZC5wbGFjZWhvbGRlclRleHQgPyBmaWVsZC5wbGFjZWhvbGRlclRleHQgOiAnSW5wdXQgVGV4dCdcIiBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9yc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImR5bmFtaWNGaWVsZEVycm9yc1wiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGNvbnRyb2wuZXJyb3JzIH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuICBcbiAgPCEtLSBmaWVsZFR5cGU6ICdpbnB1dCcgZmllbGRJbnB1dFR5cGU6ICdkYXRlJyAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmZpZWxkVHlwZSA9PT0gJ2lucHV0JyAmJiBmaWVsZC5maWVsZElucHV0VHlwZSA9PT0gJ2RhdGUnXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbUlucHV0RGF0ZTsgZWxzZSBkZWZhdWx0SW5wdXREYXRlXCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tSW5wdXREYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGQ6IGZpZWxkLCBjb250cm9sOiBjb250cm9sLCBmb3JtZ3JvdXA6IGZvcm1ncm91cCB9XCJcbiAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdElucHV0RGF0ZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLWZpZWxkIHNpbmdsZS1saW5lLWZpZWxkLWNvbnRhaW5lclwiXG4gICAgICBbbmdTdHlsZV09XCJ7J2JvcmRlci1ib3R0b20nOiAoZm9ybWdyb3VwPy5jb250cm9scz8uc3ViRmllbGRzPy5jb250cm9scz8ubGVuZ3RoICYmIHJlbW92ZVNlcHJhdG9yRm9yU3ViRmllbGRzKSA/ICAnbm9uZSc6Jyd9XCJcbiAgICAgICAgKm5nSWY9XCJmaWVsZC5maWVsZFR5cGUgPT09ICdpbnB1dCcgJiYgZmllbGQuZmllbGRJbnB1dFR5cGUgPT09ICdkYXRlJ1wiPlxuICAgICAgICA8cCBjbGFzcz1cImg2XCI+XG4gICAgICAgICAge3sgZmllbGQudGl0bGUgfX0gPHNwYW4gKm5nSWY9XCJmaWVsZC52YWxpZGF0b3JzICYmIGZpZWxkLnZhbGlkYXRvcnMubGVuZ3RoID4gMFwiPiAqPC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1jb250YWluZXJcIj5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJkYXRlLXBpY2tlclwiIHJlYWRvbmx5IG1pc1R6RHAgW2RwQ29uZmlnXT1cImZpZWxkLmZpZWxkQ29uZmlnXCJcbiAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cImNvbnRyb2wuc2V0VmFsdWUoJGV2ZW50KVwiIFtzZWxlY3RlZERhdGVdPVwiY29udHJvbC52YWx1ZVwiIFtvZmZzZXRZXT1cIjBcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImNvbnRyb2wudmFsdWVcIiAjZHAgLz5cbiAgICAgICAgICA8aW1nIGFsdD1cImRhdGEtcGlja2VyXCIgKm5nSWY9XCJjYWxlbmRhckljb25VcmwoKVwiIGNsYXNzPVwiZGF0ZS1waWNrZXItaWNvblwiIFtzcmNdPVwiY2FsZW5kYXJJY29uVXJsKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImRwLmNsaWNrKClcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9yc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImR5bmFtaWNGaWVsZEVycm9yc1wiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjb250cm9sLmVycm9ycyB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBmaWVsZFR5cGU6ICdib29sZWFuJyBmaWVsZElucHV0VHlwZTogJ3RvZ2dsZScgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZC5maWVsZFR5cGUgPT09ICdib29sZWFuJyAmJiBmaWVsZC5maWVsZElucHV0VHlwZSA9PT0gJ3RvZ2dsZSdcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tQm9vbGVhblRvZ2dsZTsgZWxzZSBkZWZhdWx0Qm9vbGVhblRvZ2dsZVwiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbUJvb2xlYW5Ub2dnbGVcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQsIGNvbnRyb2w6IGNvbnRyb2wsIGZvcm1ncm91cDogZm9ybWdyb3VwIH1cIlxuICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Qm9vbGVhblRvZ2dsZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLWZpZWxkIHNpbmdsZS1saW5lLWZpZWxkLWNvbnRhaW5lclwiXG4gICAgICBbbmdTdHlsZV09XCJ7J2JvcmRlci1ib3R0b20nOiAoZm9ybWdyb3VwPy5jb250cm9scz8uc3ViRmllbGRzPy5jb250cm9scz8ubGVuZ3RoICYmIHJlbW92ZVNlcHJhdG9yRm9yU3ViRmllbGRzKSA/ICAnbm9uZSc6Jyd9XCI+XG4gICAgICAgIDxwIGNsYXNzPVwiaDZcIj5cbiAgICAgICAgICB7eyBmaWVsZC50aXRsZSB9fTxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycyAmJiBmaWVsZC52YWxpZGF0b3JzLmxlbmd0aCA+IDBcIj4gKjwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgICA8bWlzLXN3aXRjaCBbY29udHJvbF09XCJjb250cm9sXCIgKHZhbHVlQ2hhbmdlZCk9XCJ1cGRhdGVTdWJEeW5hbWljRmllbGRzKGZpZWxkLCBmb3JtZ3JvdXAsICRldmVudClcIj48L21pcy1zd2l0Y2g+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnNcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJkeW5hbWljRmllbGRFcnJvcnNcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY29udHJvbC5lcnJvcnMgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PiAgICBcbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIGZpZWxkVHlwZTogJ3NpbmdsZVNlbGVjdCcgZmllbGRJbnB1dFR5cGU6ICdkcm9wZG93bicgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGVTZWxlY3QnICYmIGZpZWxkLmZpZWxkSW5wdXRUeXBlID09PSAnZHJvcGRvd24nXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbVNpbmdsZVNlbGVjdERyb3Bkb3duOyBlbHNlIGRlZmF1bHRTaW5nbGVTZWxlY3REcm9wZG93blwiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbVNpbmdsZVNlbGVjdERyb3Bkb3duXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGQ6IGZpZWxkLCBjb250cm9sOiBjb250cm9sLCBmb3JtZ3JvdXA6IGZvcm1ncm91cCB9XCJcbiAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFNpbmdsZVNlbGVjdERyb3Bkb3duPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtZmllbGQgc2luZ2xlLWxpbmUtZmllbGQtY29udGFpbmVyXCJcbiAgICAgICAgW25nU3R5bGVdPVwieydib3JkZXItYm90dG9tJzogKGZvcm1ncm91cD8uY29udHJvbHM/LnN1YkZpZWxkcz8uY29udHJvbHM/Lmxlbmd0aCAmJiByZW1vdmVTZXByYXRvckZvclN1YkZpZWxkcykgPyAgJ25vbmUnOicnfVwiPlxuICAgICAgICA8cCBjbGFzcz1cImg2XCI+XG4gICAgICAgICAge3sgZmllbGQudGl0bGUgfX08c3BhbiAqbmdJZj1cImZpZWxkLnZhbGlkYXRvcnMgJiYgZmllbGQudmFsaWRhdG9ycy5sZW5ndGggPiAwXCI+ICo8L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J3JlbW92ZWFibGUtY29udGFpbmVyJyA6IGZpZWxkPy5pc1JlbW92ZWFibGV9XCI+XG4gICAgICAgICAgPG1pcy1kcm9wZG93biBbc2VhcmNoRW5hYmxlZF09XCJmYWxzZVwiIFt3aWR0aF09XCInMTQwcHgnXCIgW2RhdGFdPVwiZmllbGQuaXRlbXNMaXN0XCIgW3NlbGVjdGVkSXRlbV09XCJjb250cm9sLnZhbHVlXCJcbiAgICAgICAgICAob25DaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWRWYWx1ZUZvclNpbmdsZVNlbGVjdChmaWVsZCwgY29udHJvbCwgZm9ybWdyb3VwLCAkZXZlbnQpO1wiPlxuICAgICAgICAgIDwvbWlzLWRyb3Bkb3duPlxuICAgICAgICAgIDxpbWcgKm5nSWY9XCJmaWVsZC5pc1JlbW92ZWFibGUgJiYgcmVtb3ZlSWNvblVybCgpXCIgY2xhc3M9XCJyZW1vdmUtaWNvblwiIFtzcmNdPVwicmVtb3ZlSWNvblVybCgpXCIgKGNsaWNrKT1cImZpZWxkUmVtb3ZlZC5lbWl0KGZpZWxkKVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9yc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImR5bmFtaWNGaWVsZEVycm9yc1wiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjb250cm9sLmVycm9ycyB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXIgPlxuICBcblxuICA8IS0tIGZpZWxkVHlwZTogJ3NpbmdsZVNlbGVjdCcgZmllbGRJbnB1dFR5cGU6ICdyYWRpbycgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGVTZWxlY3QnICYmIGZpZWxkLmZpZWxkSW5wdXRUeXBlID09PSAncmFkaW8nXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbVNpbmdsZVNlbGVjdFJhZGlvOyBlbHNlIGRlZmF1bHRTaW5nbGVTZWxlY3RSYWRpb1wiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbVNpbmdsZVNlbGVjdFJhZGlvXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGQ6IGZpZWxkLCBjb250cm9sOiBjb250cm9sLCBmb3JtZ3JvdXA6IGZvcm1ncm91cCB9XCJcbiAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFNpbmdsZVNlbGVjdFJhZGlvPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtZmllbGQgbXVsdGktbGluZS1maWVsZC1jb250YWluZXJcIlxuICAgICAgW25nU3R5bGVdPVwieydib3JkZXItYm90dG9tJzogKGZvcm1ncm91cD8uY29udHJvbHM/LnN1YkZpZWxkcz8uY29udHJvbHM/Lmxlbmd0aCAmJiByZW1vdmVTZXByYXRvckZvclN1YkZpZWxkcykgPyAgJ25vbmUnOicnfVwiPlxuICAgICAgICA8cCBjbGFzcz1cImg3IGZpZWxkLXRpdGxlLXNtXCI+XG4gICAgICAgICAge3sgZmllbGQudGl0bGUgfX08c3BhbiAqbmdJZj1cImZpZWxkLnZhbGlkYXRvcnMgJiYgZmllbGQudmFsaWRhdG9ycy5sZW5ndGggPiAwXCI+ICo8L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdiBzdHlsZT1cImZsZXgtYmFzaXM6IDEwMCVcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cImNoZWNrYm94ZXMtY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLWNoZWNrYm94LWNvbW1vblwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpZWxkLml0ZW1zTGlzdFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjaGVja2JveC1hY3RpdmUnOiBpdGVtLmxhYmVsID09PSBjb250cm9sLnZhbHVlPy5sYWJlbCB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVTZWxlY3RlZFZhbHVlRm9yU2luZ2xlU2VsZWN0KGZpZWxkLCBjb250cm9sLCBmb3JtZ3JvdXAsIGl0ZW0pO1wiPlxuICAgICAgICAgICAgPGltZyAqbmdJZj1cIihpdGVtLmxhYmVsID09PSBjb250cm9sLnZhbHVlPy5sYWJlbCkgJiYgYWN0aXZlQnRuSWNvblVybCgpXCIgW3NyY109XCJhY3RpdmVCdG5JY29uVXJsKClcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJoNlwiPnt7IGl0ZW0ubGFiZWwgfX08L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZHluYW1pY0ZpZWxkRXJyb3JzXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGNvbnRyb2wuZXJyb3JzIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgXG5cbiAgPCEtLSBmaWVsZFR5cGU6ICdtdWx0aVNlbGVjdCcgZmllbGRJbnB1dFR5cGU6ICdjaGVja2JveCcgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZC5maWVsZFR5cGUgPT09ICdtdWx0aVNlbGVjdCcgJiYgZmllbGQuZmllbGRJbnB1dFR5cGUgPT09ICdjaGVja2JveCdcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tTXVsdGlTZWxlY3RDaGVja2JveDsgZWxzZSBkZWZhdWx0TXVsdGlTZWxlY3RDaGVja2JveFwiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbU11bHRpU2VsZWN0Q2hlY2tib3hcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQsIGNvbnRyb2w6IGNvbnRyb2wsIGZvcm1ncm91cDogZm9ybWdyb3VwIH1cIlxuICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TXVsdGlTZWxlY3RDaGVja2JveD5cbiAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLWZpZWxkIG11bHRpLWxpbmUtZmllbGQtY29udGFpbmVyXCJcbiAgICAgIFtuZ1N0eWxlXT1cInsnYm9yZGVyLWJvdHRvbSc6IChmb3JtZ3JvdXA/LmNvbnRyb2xzPy5zdWJGaWVsZHM/LmNvbnRyb2xzPy5sZW5ndGggJiYgcmVtb3ZlU2VwcmF0b3JGb3JTdWJGaWVsZHMpID8gICdub25lJzonJ31cIj5cbiAgICAgICAgPHAgY2xhc3M9XCJoNyBmaWVsZC10aXRsZS1zbVwiPlxuICAgICAgICAgIHt7IGZpZWxkLnRpdGxlIH19PHNwYW4gKm5nSWY9XCJmaWVsZC52YWxpZGF0b3JzICYmIGZpZWxkLnZhbGlkYXRvcnMubGVuZ3RoID4gMFwiPiAqPC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4LWJhc2lzOiAxMDAlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJjaGVja2JveGVzLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYWRpby1jaGVja2JveC1jb21tb25cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWVsZC5pdGVtc0xpc3RcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY2hlY2tib3gtYWN0aXZlJzogaXNDaGVja0JveFNlbGVjdGVkKGl0ZW0ubGFiZWwsIGNvbnRyb2wudmFsdWUpIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZVNlbGVjdGVkVmFsdWVGb3JNdWx0aVNlbGVjdChmaWVsZCwgY29udHJvbCwgZm9ybWdyb3VwLCBbaXRlbV0pXCI+XG4gICAgICAgICAgICA8aW1nICpuZ0lmPVwiaXNDaGVja0JveFNlbGVjdGVkKGl0ZW0ubGFiZWwsIGNvbnRyb2wudmFsdWUpICYmIGFjdGl2ZUJ0bkljb25VcmwoKVwiIFtzcmNdPVwiYWN0aXZlQnRuSWNvblVybCgpXCJcbiAgICAgICAgICAgICAgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiaDZcIj57eyBpdGVtLmxhYmVsIH19PC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9yc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImR5bmFtaWNGaWVsZEVycm9yc1wiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjb250cm9sLmVycm9ycyB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG5cblxuICA8IS0tIGZpZWxkVHlwZTogJ211bHRpU2VsZWN0JyBmaWVsZElucHV0VHlwZTogJ2Ryb3Bkb3duJyAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmZpZWxkVHlwZSA9PT0gJ211bHRpU2VsZWN0JyAmJiBmaWVsZC5maWVsZElucHV0VHlwZSA9PT0gJ2Ryb3Bkb3duJ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21NdWx0aVNlbGVjdERyb3Bkb3duOyBlbHNlIGRlZmF1bHRNdWx0aVNlbGVjdERyb3Bkb3duXCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tTXVsdGlTZWxlY3REcm9wZG93blwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkOiBmaWVsZCwgY29udHJvbDogY29udHJvbCwgZm9ybWdyb3VwOiBmb3JtZ3JvdXAgfVwiXG4gICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRNdWx0aVNlbGVjdERyb3Bkb3duPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtZmllbGQgc2luZ2xlLWxpbmUtZmllbGQtY29udGFpbmVyXCJcbiAgICAgIFtuZ1N0eWxlXT1cInsnYm9yZGVyLWJvdHRvbSc6IChmb3JtZ3JvdXA/LmNvbnRyb2xzPy5zdWJGaWVsZHM/LmNvbnRyb2xzPy5sZW5ndGggJiYgcmVtb3ZlU2VwcmF0b3JGb3JTdWJGaWVsZHMpID8gICdub25lJzonJ31cIj5cbiAgICAgICAgPHAgY2xhc3M9XCJoNlwiPlxuICAgICAgICAgIHt7IGZpZWxkLnRpdGxlIH19PHNwYW4gKm5nSWY9XCJmaWVsZC52YWxpZGF0b3JzICYmIGZpZWxkLnZhbGlkYXRvcnMubGVuZ3RoID4gMFwiPiAqPC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICAgIDxtaXMtbXVsdGktc2VsZWN0LWRyb3Bkb3duIFt3aWR0aF09XCInMTQwcHgnXCIgW3Nob3dTZWxlY3RlZENvdW50XT1cInRydWVcIiBbZHJvcGRvd25MaXN0V2lkdGhdPVwiJzI1NnB4J1wiXG4gICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwiZmFsc2VcIiBbaGlkZUFwcGx5QnV0dG9uXT1cInRydWVcIiBbZGF0YV09XCJmaWVsZC5pdGVtc0xpc3RcIlxuICAgICAgICAgIFtzZWxlY3RlZEl0ZW1zXT1cImNvbnRyb2wudmFsdWVcIiAob25DaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWRWYWx1ZUZvck11bHRpU2VsZWN0KGZpZWxkLCBjb250cm9sLCBmb3JtZ3JvdXAsICRldmVudCk7XCI+PC9taXMtbXVsdGktc2VsZWN0LWRyb3Bkb3duPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZHluYW1pY0ZpZWxkRXJyb3JzXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGNvbnRyb2wuZXJyb3JzIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cblxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkeW5hbWljRmllbGRFcnJvcnMgbGV0LWVycm9ycz5cbiAgPGRpdiBpZD1cImVycm9yLW1lc3NhZ2VzLWNvbnRhaW5lclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVycm9yIG9mIGVycm9ycyB8IGtleXZhbHVlXCI+XG4gICAgICA8cCBjbGFzcz1cImg4XCI+XG4gICAgICAgIHt7XCIg4oCiICZuYnNwO1wiICsgZXJyb3IudmFsdWV9fVxuICAgICAgPC9wPlxuICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7ICdmbGV4LWJhc2lzJzogJzEwMCUnLCAnaGVpZ2h0JzogJzAnIH1cIj48L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
@@ -808,11 +808,22 @@ class DynamicFormComponent {
|
|
|
808
808
|
const formValues = this.formValues();
|
|
809
809
|
const currentForm = this.dynamicFormSignal();
|
|
810
810
|
// Only patch if form exists and this is not an internal update
|
|
811
|
-
if (currentForm
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
811
|
+
if (!currentForm || this.isInternalUpdate || !formValues) {
|
|
812
|
+
return;
|
|
813
|
+
}
|
|
814
|
+
// CRITICAL: Don't patch if user is actively typing in any input field
|
|
815
|
+
// This prevents focus loss when user is typing
|
|
816
|
+
const activeElement = document.activeElement;
|
|
817
|
+
const isUserTyping = activeElement &&
|
|
818
|
+
(activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA') &&
|
|
819
|
+
activeElement.closest('form[formGroup]') !== null;
|
|
820
|
+
if (isUserTyping) {
|
|
821
|
+
// User is actively typing - skip patching to prevent focus loss
|
|
822
|
+
return;
|
|
815
823
|
}
|
|
824
|
+
untracked(() => {
|
|
825
|
+
this.patchFormValues(currentForm, formValues);
|
|
826
|
+
});
|
|
816
827
|
});
|
|
817
828
|
}
|
|
818
829
|
/**
|
|
@@ -956,12 +967,30 @@ class DynamicFormComponent {
|
|
|
956
967
|
return this.dynamicForm().get("dynamicFields");
|
|
957
968
|
}
|
|
958
969
|
handleSubFieldUpdates(form) {
|
|
970
|
+
// CRITICAL: Don't update subfields if user is actively typing
|
|
971
|
+
// This prevents focus loss when user is typing in any field
|
|
972
|
+
const activeElement = document.activeElement;
|
|
973
|
+
const isUserTyping = activeElement &&
|
|
974
|
+
(activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA') &&
|
|
975
|
+
activeElement.closest('form[formGroup]') !== null;
|
|
976
|
+
if (isUserTyping) {
|
|
977
|
+
// User is actively typing - skip subfield updates to prevent focus loss
|
|
978
|
+
return;
|
|
979
|
+
}
|
|
959
980
|
// Clear any pending updates
|
|
960
981
|
if (this.subFieldUpdateTimeout) {
|
|
961
982
|
clearTimeout(this.subFieldUpdateTimeout);
|
|
962
983
|
}
|
|
963
984
|
// Debounce subfield updates to prevent excessive calls
|
|
964
985
|
this.subFieldUpdateTimeout = setTimeout(() => {
|
|
986
|
+
// Check again after debounce - user might still be typing
|
|
987
|
+
const activeElementAfterDebounce = document.activeElement;
|
|
988
|
+
const stillTyping = activeElementAfterDebounce &&
|
|
989
|
+
(activeElementAfterDebounce.tagName === 'INPUT' || activeElementAfterDebounce.tagName === 'TEXTAREA') &&
|
|
990
|
+
activeElementAfterDebounce.closest('form[formGroup]') !== null;
|
|
991
|
+
if (stillTyping) {
|
|
992
|
+
return;
|
|
993
|
+
}
|
|
965
994
|
const formArray = form.get('dynamicFields');
|
|
966
995
|
if (!formArray)
|
|
967
996
|
return;
|