@cqa-lib/cqa-ui 1.1.410 → 1.1.412

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/esm2020/lib/execution-screen/basic-step/basic-step.component.mjs +1 -1
  2. package/esm2020/lib/execution-screen/condition-debug-step/condition-branch-editor.component.mjs +413 -0
  3. package/esm2020/lib/execution-screen/condition-debug-step/condition-debug-step.component.mjs +904 -0
  4. package/esm2020/lib/execution-screen/condition-step/condition-step.component.mjs +1 -1
  5. package/esm2020/lib/execution-screen/execution-step.models.mjs +1 -1
  6. package/esm2020/lib/execution-screen/jump-to-step-modal/jump-to-step-modal.component.mjs +46 -8
  7. package/esm2020/lib/execution-screen/loop-step/loop-step.component.mjs +9 -3
  8. package/esm2020/lib/execution-screen/step-group/step-group.component.mjs +9 -3
  9. package/esm2020/lib/execution-screen/step-renderer/step-renderer.component.mjs +27 -3
  10. package/esm2020/lib/test-case-details/test-case-step-components.token.mjs +1 -1
  11. package/esm2020/lib/ui-kit.module.mjs +17 -1
  12. package/esm2020/public-api.mjs +3 -1
  13. package/fesm2015/cqa-lib-cqa-ui.mjs +1403 -17
  14. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  15. package/fesm2020/cqa-lib-cqa-ui.mjs +1397 -16
  16. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  17. package/lib/execution-screen/condition-debug-step/condition-branch-editor.component.d.ts +131 -0
  18. package/lib/execution-screen/condition-debug-step/condition-debug-step.component.d.ts +221 -0
  19. package/lib/execution-screen/execution-step.models.d.ts +5 -0
  20. package/lib/execution-screen/loop-step/loop-step.component.d.ts +7 -1
  21. package/lib/execution-screen/step-group/step-group.component.d.ts +7 -1
  22. package/lib/execution-screen/step-renderer/step-renderer.component.d.ts +7 -1
  23. package/lib/test-case-details/test-case-step-components.token.d.ts +1 -0
  24. package/lib/ui-kit.module.d.ts +116 -114
  25. package/package.json +1 -1
  26. package/public-api.d.ts +2 -0
  27. package/styles.css +1 -1
@@ -98,14 +98,52 @@ export class JumpToStepModalComponent {
98
98
  groupName: meta.groupName,
99
99
  });
100
100
  }
101
- for (const arr of [s.children || [], s.nestedSteps || [], s.steps || []]) {
102
- if (arr?.length)
103
- out.push(...collectSteps(arr, seen));
101
+ // For steps with conditionData (CONDITION_IF), skip generic children/nestedSteps
102
+ // (they may contain all branch steps in a flat structure causing duplicates with wrong numbers).
103
+ // Use conditionData exclusively for condition steps.
104
+ const hasConditionData = s.conditionData && typeof s.conditionData === 'object' && Object.keys(s.conditionData).length > 0;
105
+ if (!hasConditionData) {
106
+ for (const arr of [s.children || [], s.nestedSteps || [], s.steps || []]) {
107
+ if (arr?.length)
108
+ out.push(...collectSteps(arr, seen));
109
+ }
110
+ if (s.branches && Array.isArray(s.branches)) {
111
+ for (const b of s.branches) {
112
+ if (b?.subSteps?.length)
113
+ out.push(...collectSteps(b.subSteps, seen));
114
+ }
115
+ }
104
116
  }
105
- if (s.branches && Array.isArray(s.branches)) {
106
- for (const b of s.branches) {
107
- if (b?.subSteps?.length)
108
- out.push(...collectSteps(b.subSteps, seen));
117
+ if (hasConditionData) {
118
+ const branchIds = (s.ifChildData && s.ifChildData.length > 0)
119
+ ? s.ifChildData.map(String)
120
+ : Object.keys(s.conditionData);
121
+ for (const branchId of branchIds) {
122
+ const branchData = s.conditionData[branchId];
123
+ if (!branchData)
124
+ continue;
125
+ // Add the branch step itself (ELSE IF / ELSE)
126
+ const branchRawId = branchData?.id ?? branchData?.step_id;
127
+ const branchNumId = branchRawId != null ? Number(branchRawId) : NaN;
128
+ if (Number.isFinite(branchNumId) && !seen.has(branchNumId)) {
129
+ seen.add(branchNumId);
130
+ const branchMeta = metaByStepId.get(branchNumId);
131
+ if (branchMeta && matchesSearch(branchMeta)) {
132
+ out.push({
133
+ id: String(branchNumId),
134
+ stepId: branchNumId,
135
+ stepNumber: branchMeta.stepNumber,
136
+ description: this.stripHtml(branchMeta.label || ('Step ' + branchMeta.stepNumber)),
137
+ status: branchMeta.status,
138
+ isPrerequisite: branchMeta.isPrerequisite,
139
+ groupName: branchMeta.groupName,
140
+ });
141
+ }
142
+ }
143
+ // Recurse into branch children
144
+ const branchChildren = branchData.children || branchData.nestedSteps || [];
145
+ if (branchChildren.length)
146
+ out.push(...collectSteps(branchChildren, seen));
109
147
  }
110
148
  }
111
149
  }
@@ -254,4 +292,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
254
292
  }], onSelect: [{
255
293
  type: Output
256
294
  }] } });
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianVtcC10by1zdGVwLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9qdW1wLXRvLXN0ZXAtbW9kYWwvanVtcC10by1zdGVwLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9qdW1wLXRvLXN0ZXAtbW9kYWwvanVtcC10by1zdGVwLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQStDLE1BQU0sZUFBZSxDQUFDOzs7OztBQXVDcEgsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxZQUE2QixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUVuRCxnQ0FBZ0M7UUFDdkIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUVqQyxrQkFBa0I7UUFDVCxVQUFLLEdBQVcsY0FBYyxDQUFDO1FBRXhDLHVGQUF1RjtRQUM5RSxVQUFLLEdBQXFCLEVBQUUsQ0FBQztRQUV0QyxxR0FBcUc7UUFDNUYsc0JBQWlCLEdBQTRCLEVBQUUsQ0FBQztRQUV6RCxrSEFBa0g7UUFDekcsY0FBUyxHQUF5QixFQUFFLENBQUM7UUFFOUMsOEJBQThCO1FBQ3JCLHNCQUFpQixHQUFXLG1DQUFtQyxDQUFDO1FBRXpFLDhCQUE4QjtRQUNyQiwwQkFBcUIsR0FBVyxnQkFBZ0IsQ0FBQztRQUUxRCwyQkFBMkI7UUFDbEIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFFbEMsZ0NBQWdDO1FBQ3ZCLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBRXRDLGdFQUFnRTtRQUN2RCxzQkFBaUIsR0FBWSxJQUFJLENBQUM7UUFFM0MscUNBQXFDO1FBQ3JDLGtCQUFhLEdBQXFCLEVBQUUsQ0FBQztRQUVyQyw4RUFB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LE1BQU07Z0JBR0csUUFBUTtzQkFBakIsTUFBTTtnQkFHRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgU3RlcEl0ZW1TdGF0dXMgPSAncGFzc2VkJyB8ICdjdXJyZW50JyB8ICdwZW5kaW5nJyB8ICdmYWlsZWQnIHwgJ3J1bm5pbmcnIHwgJ3NraXBwZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEp1bXBUb1N0ZXBJdGVtIHtcbiAgaWQ6IHN0cmluZztcbiAgc3RlcE51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGF0dXM6IFN0ZXBJdGVtU3RhdHVzO1xuICAvKiogU3RlcCBpZCBmb3Igc2VsZWN0aW9uLiBXaGVuIG1pc3NpbmcsIGRlcml2ZWQgZnJvbSBpZC4gKi9cbiAgc3RlcElkPzogbnVtYmVyO1xuICAvKiogT3B0aW9uYWwgZmxhZyB0byBpbmRpY2F0ZSB0aGlzIGl0ZW0gcmVwcmVzZW50cyBhIHByZXJlcXVpc2l0ZSBzdGVwLiAqL1xuICBpc1ByZXJlcXVpc2l0ZT86IGJvb2xlYW47XG4gIC8qKiBPcHRpb25hbCBncm91cCBuYW1lIChlLmcuIHByZXJlcXVpc2l0ZSB0ZXN0IGNhc2UgbmFtZSkgZm9yIHZpc3VhbCBncm91cGluZy4gKi9cbiAgZ3JvdXBOYW1lPzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiBhbnk7IC8vIEFsbG93IGFkZGl0aW9uYWwgcHJvcGVydGllc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEp1bXBUb1N0ZXBTdGVwTWV0YSB7XG4gIHN0ZXBJZDogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nO1xuICBzdGVwTnVtYmVyOiBzdHJpbmc7XG4gIHN0YXR1czogU3RlcEl0ZW1TdGF0dXM7XG4gIGlzUHJlcmVxdWlzaXRlPzogYm9vbGVhbjtcbiAgZ3JvdXBOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVkVGVzdENhc2VHcm91cCB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGlzUHJlcmVxdWlzaXRlPzogYm9vbGVhbjtcbiAgc3RlcHM/OiBhbnlbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWp1bXAtdG8tc3RlcC1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9qdW1wLXRvLXN0ZXAtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgSnVtcFRvU3RlcE1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBtb2RhbCBpcyBvcGVuICovXG4gIEBJbnB1dCgpIGlzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBNb2RhbCB0aXRsZSAqL1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gJ0p1bXAgdG8gU3RlcCc7XG5cbiAgLyoqIExpc3Qgb2Ygc3RlcCBpdGVtcyB0byBkaXNwbGF5IChsZWdhY3k7IHVzZWQgd2hlbiBjb21iaW5lZFRlc3RDYXNlcyBub3QgcHJvdmlkZWQpICovXG4gIEBJbnB1dCgpIGl0ZW1zOiBKdW1wVG9TdGVwSXRlbVtdID0gW107XG5cbiAgLyoqIENvbWJpbmVkIHRlc3QgY2FzZXMgZm9yIGFjY29yZGlvbiBsYXlvdXQuIFdoZW4gcHJvdmlkZWQgd2l0aCBzdGVwc01ldGEsIHVzZWQgaW5zdGVhZCBvZiBpdGVtcy4gKi9cbiAgQElucHV0KCkgY29tYmluZWRUZXN0Q2FzZXM6IENvbWJpbmVkVGVzdENhc2VHcm91cFtdID0gW107XG5cbiAgLyoqIFByZS1jb21wdXRlZCBzdGVwIG1ldGFkYXRhIChzdGVwTnVtYmVyLCBzdGF0dXMsIGV0Yy4pIGZvciBlYWNoIHN0ZXAuIFJlcXVpcmVkIHdoZW4gdXNpbmcgY29tYmluZWRUZXN0Q2FzZXMuICovXG4gIEBJbnB1dCgpIHN0ZXBzTWV0YTogSnVtcFRvU3RlcFN0ZXBNZXRhW10gPSBbXTtcblxuICAvKiogU2VhcmNoIHBsYWNlaG9sZGVyIHRleHQgKi9cbiAgQElucHV0KCkgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWFyY2ggc3RlcHMgYnkgbmFtZSBvciBudW1iZXIuLi4nO1xuXG4gIC8qKiBTZWFyY2ggRW1wdHkgU3RhdGUgdGV4dCAqL1xuICBASW5wdXQoKSBzZWFyY2hFbXB0eVN0YXRlTGFiZWw6IHN0cmluZyA9ICdObyBzdGVwcyBmb3VuZCc7XG5cbiAgLyoqIEN1cnJlbnQgc2VhcmNoIHZhbHVlICovXG4gIEBJbnB1dCgpIHNlYXJjaFZhbHVlOiBzdHJpbmcgPSAnJztcblxuICAvKiogV2hldGhlciBzZWFyY2ggaXMgZW5hYmxlZCAqL1xuICBASW5wdXQoKSBlbmFibGVTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgcHJlcmVxdWlzaXRlIHN0ZXBzIHNlY3Rpb24uIERlZmF1bHQgdHJ1ZS4gKi9cbiAgQElucHV0KCkgc2hvd1ByZXJlcXVpc2l0ZXM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKiBGaWx0ZXJlZCBpdGVtcyBiYXNlZCBvbiBzZWFyY2ggKi9cbiAgZmlsdGVyZWRJdGVtczogSnVtcFRvU3RlcEl0ZW1bXSA9IFtdO1xuXG4gIC8qKiBQcmVyZXF1aXNpdGUgZ3JvdXBzIGZvciBhY2NvcmRpb246IGVhY2ggcHJlcmVxdWlzaXRlIHRlc3QgY2FzZSBieSBuYW1lLiAqL1xuICBwcmVyZXF1aXNpdGVHcm91cHM6IHsgbmFtZTogc3RyaW5nOyBpdGVtczogSnVtcFRvU3RlcEl0ZW1bXSB9W10gPSBbXTtcblxuICAvKiogRmlsdGVyZWQgbm9uLXByZXJlcXVpc2l0ZSBzdGVwIGl0ZW1zLiAqL1xuICBmaWx0ZXJlZFN0ZXBJdGVtczogSnVtcFRvU3RlcEl0ZW1bXSA9IFtdO1xuXG4gIC8qKiBFeHBhbmRlZCBwcmVyZXF1aXNpdGUgZ3JvdXAgbmFtZXMuIFdoZW4gZW1wdHksIGFsbCBncm91cHMgYXJlIGNvbGxhcHNlZCBieSBkZWZhdWx0LiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cGFuZGVkR3JvdXBOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gbW9kYWwgc2hvdWxkIGJlIGNsb3NlZCAqL1xuICBAT3V0cHV0KCkgb25DbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIHNlYXJjaCB2YWx1ZSBjaGFuZ2VzICovXG4gIEBPdXRwdXQoKSBvblNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gYSBzdGVwIGl0ZW0gaXMgc2VsZWN0ZWQgKi9cbiAgQE91dHB1dCgpIG9uU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxKdW1wVG9TdGVwSXRlbT4oKTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10gfHwgY2hhbmdlc1snY29tYmluZWRUZXN0Q2FzZXMnXSB8fCBjaGFuZ2VzWydzdGVwc01ldGEnXSB8fCBjaGFuZ2VzWydzZWFyY2hWYWx1ZSddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkSXRlbXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpbHRlcmVkSXRlbXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tYmluZWRUZXN0Q2FzZXM/Lmxlbmd0aCAmJiB0aGlzLnN0ZXBzTWV0YT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmJ1aWxkRnJvbUNvbWJpbmVkVGVzdENhc2VzKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYnVpbGRGcm9tSXRlbXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gW107XG4gICAgICB0aGlzLnByZXJlcXVpc2l0ZUdyb3VwcyA9IFtdO1xuICAgICAgdGhpcy5maWx0ZXJlZFN0ZXBJdGVtcyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGcm9tQ29tYmluZWRUZXN0Q2FzZXMoKTogdm9pZCB7XG4gICAgY29uc3QgbWV0YUJ5U3RlcElkID0gbmV3IE1hcDxudW1iZXIsIEp1bXBUb1N0ZXBTdGVwTWV0YT4oKTtcbiAgICB0aGlzLnN0ZXBzTWV0YS5mb3JFYWNoKG0gPT4gbWV0YUJ5U3RlcElkLnNldChtLnN0ZXBJZCwgbSkpO1xuXG4gICAgY29uc3Qgc2VhcmNoVGVybSA9ICh0aGlzLnNlYXJjaFZhbHVlIHx8ICcnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBjb25zdCBtYXRjaGVzU2VhcmNoID0gKG1ldGE6IEp1bXBUb1N0ZXBTdGVwTWV0YSk6IGJvb2xlYW4gPT4ge1xuICAgICAgaWYgKCFzZWFyY2hUZXJtKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFN0cmluZyhtZXRhLnN0ZXBOdW1iZXIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybSkgfHxcbiAgICAgICAgKG1ldGEubGFiZWwgfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybSlcbiAgICAgICk7XG4gICAgfTtcblxuICAgIHRoaXMucHJlcmVxdWlzaXRlR3JvdXBzID0gW107XG4gICAgdGhpcy5maWx0ZXJlZFN0ZXBJdGVtcyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLmNvbWJpbmVkVGVzdENhc2VzKSB7XG4gICAgICBpZiAoIWdyb3VwPy5zdGVwcz8ubGVuZ3RoKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgZ3JvdXBOYW1lID0gKGdyb3VwLm5hbWUgfHwgJ1ByZXJlcXVpc2l0ZScpLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBpc1ByZXJlcSA9ICEhZ3JvdXAuaXNQcmVyZXF1aXNpdGU7XG5cbiAgICAgIGNvbnN0IGNvbGxlY3RTdGVwcyA9IChzdGVwczogYW55W10sIHNlZW46IFNldDxudW1iZXI+KTogSnVtcFRvU3RlcEl0ZW1bXSA9PiB7XG4gICAgICAgIGNvbnN0IG91dDogSnVtcFRvU3RlcEl0ZW1bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHMgb2Ygc3RlcHMpIHtcbiAgICAgICAgICBpZiAoIXMpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IGlkID0gcz8uaWQgPz8gcz8uc3RlcF9pZDtcbiAgICAgICAgICBjb25zdCBudW1JZCA9IGlkICE9IG51bGwgPyBOdW1iZXIoaWQpIDogTmFOO1xuICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG51bUlkKSB8fCBzZWVuLmhhcyhudW1JZCkpIGNvbnRpbnVlO1xuICAgICAgICAgIHNlZW4uYWRkKG51bUlkKTtcblxuICAgICAgICAgIGNvbnN0IG1ldGEgPSBtZXRhQnlTdGVwSWQuZ2V0KG51bUlkKTtcbiAgICAgICAgICBpZiAobWV0YSAmJiBtYXRjaGVzU2VhcmNoKG1ldGEpKSB7XG4gICAgICAgICAgICBvdXQucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBTdHJpbmcobnVtSWQpLFxuICAgICAgICAgICAgICBzdGVwSWQ6IG51bUlkLFxuICAgICAgICAgICAgICBzdGVwTnVtYmVyOiBtZXRhLnN0ZXBOdW1iZXIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLnN0cmlwSHRtbChtZXRhLmxhYmVsIHx8ICgnU3RlcCAnICsgbWV0YS5zdGVwTnVtYmVyKSksXG4gICAgICAgICAgICAgIHN0YXR1czogbWV0YS5zdGF0dXMsXG4gICAgICAgICAgICAgIGlzUHJlcmVxdWlzaXRlOiBtZXRhLmlzUHJlcmVxdWlzaXRlLFxuICAgICAgICAgICAgICBncm91cE5hbWU6IG1ldGEuZ3JvdXBOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCBhcnIgb2YgW3MuY2hpbGRyZW4gfHwgW10sIHMubmVzdGVkU3RlcHMgfHwgW10sIHMuc3RlcHMgfHwgW11dKSB7XG4gICAgICAgICAgICBpZiAoYXJyPy5sZW5ndGgpIG91dC5wdXNoKC4uLmNvbGxlY3RTdGVwcyhhcnIsIHNlZW4pKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMuYnJhbmNoZXMgJiYgQXJyYXkuaXNBcnJheShzLmJyYW5jaGVzKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBiIG9mIHMuYnJhbmNoZXMpIHtcbiAgICAgICAgICAgICAgaWYgKGI/LnN1YlN0ZXBzPy5sZW5ndGgpIG91dC5wdXNoKC4uLmNvbGxlY3RTdGVwcyhiLnN1YlN0ZXBzLCBzZWVuKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzZWVuID0gbmV3IFNldDxudW1iZXI+KCk7XG4gICAgICBjb25zdCBpdGVtcyA9IGNvbGxlY3RTdGVwcyhncm91cC5zdGVwcywgc2Vlbik7XG5cbiAgICAgIGlmIChpc1ByZXJlcSAmJiB0aGlzLnNob3dQcmVyZXF1aXNpdGVzKSB7XG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnByZXJlcXVpc2l0ZUdyb3Vwcy5wdXNoKHsgbmFtZTogZ3JvdXBOYW1lLCBpdGVtcyB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghaXNQcmVyZXEpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZFN0ZXBJdGVtcy5wdXNoKC4uLml0ZW1zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBbXG4gICAgICAuLi50aGlzLnByZXJlcXVpc2l0ZUdyb3Vwcy5yZWR1Y2U8SnVtcFRvU3RlcEl0ZW1bXT4oKGFjYywgZykgPT4gYWNjLmNvbmNhdChnLml0ZW1zKSwgW10pLFxuICAgICAgLi4udGhpcy5maWx0ZXJlZFN0ZXBJdGVtcyxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZyb21JdGVtcygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hUZXJtID0gKHRoaXMuc2VhcmNoVmFsdWUgfHwgJycpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGlmICghc2VhcmNoVGVybSkge1xuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gWy4uLnRoaXMuaXRlbXNdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcE51bWJlck1hdGNoID0gU3RyaW5nKGl0ZW0uc3RlcE51bWJlcikudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXJtKTtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb25NYXRjaCA9IChpdGVtLmRlc2NyaXB0aW9uIHx8ICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0pO1xuICAgICAgICByZXR1cm4gc3RlcE51bWJlck1hdGNoIHx8IGRlc2NyaXB0aW9uTWF0Y2g7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVyZXFJdGVtcyA9IHRoaXMuZmlsdGVyZWRJdGVtcy5maWx0ZXIoaSA9PiBpLmlzUHJlcmVxdWlzaXRlID09PSB0cnVlKTtcbiAgICBjb25zdCBncm91cHMgPSBuZXcgTWFwPHN0cmluZywgSnVtcFRvU3RlcEl0ZW1bXT4oKTtcbiAgICBwcmVyZXFJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IChpdGVtLmdyb3VwTmFtZSB8fCAnUHJlcmVxdWlzaXRlJykudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gZ3JvdXBzLmdldChuYW1lKTtcbiAgICAgIGlmIChleGlzdGluZykgZXhpc3RpbmcucHVzaChpdGVtKTtcbiAgICAgIGVsc2UgZ3JvdXBzLnNldChuYW1lLCBbaXRlbV0pO1xuICAgIH0pO1xuICAgIHRoaXMucHJlcmVxdWlzaXRlR3JvdXBzID0gQXJyYXkuZnJvbShncm91cHMuZW50cmllcygpKS5tYXAoKFtuYW1lLCBpdGVtc10pID0+ICh7IG5hbWUsIGl0ZW1zIH0pKTtcbiAgICB0aGlzLmZpbHRlcmVkU3RlcEl0ZW1zID0gdGhpcy5maWx0ZXJlZEl0ZW1zLmZpbHRlcihpID0+IGkuaXNQcmVyZXF1aXNpdGUgIT09IHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpcEh0bWwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWh0bWwpIHJldHVybiAnJztcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gKGRpdi50ZXh0Q29udGVudCB8fCBkaXYuaW5uZXJUZXh0IHx8ICcnKS50cmltKCk7XG4gIH1cblxuICBpc0dyb3VwRXhwYW5kZWQobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRHcm91cE5hbWVzLmhhcyhuYW1lKTtcbiAgfVxuXG4gIHRvZ2dsZUdyb3VwKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV4cGFuZGVkR3JvdXBOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWRHcm91cE5hbWVzLmRlbGV0ZShuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5leHBhbmRlZEdyb3VwTmFtZXMuYWRkKG5hbWUpO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uU2VhcmNoVmFsdWVDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkSXRlbXMoKTtcbiAgICB0aGlzLm9uU2VhcmNoLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgb25JdGVtQ2xpY2soaXRlbTogSnVtcFRvU3RlcEl0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLm9uU2VsZWN0LmVtaXQoaXRlbSk7XG4gIH1cblxuICBvbkJhY2tkcm9wQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgXG4gICAgaWYgKHRhcmdldCA9PT0gY3VycmVudFRhcmdldCB8fCB0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtb2RhbC1iYWNrZHJvcCcpKSB7XG4gICAgICB0aGlzLmhhbmRsZUNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5vbkNsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIGdldFN0YXR1c0JhZGdlQ2xhc3NlcyhzdGF0dXM6IFN0ZXBJdGVtU3RhdHVzKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlQ2xhc3NlcyA9ICdjcWEtaW5saW5lLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXJvdW5kZWQtWzZweF0gY3FhLXRleHQteHMgY3FhLWZvbnQtbWVkaXVtIGNxYS1weS1bNHB4XSBjcWEtcHgtMyc7XG4gICAgXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ3Bhc3NlZCc6XG4gICAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3Nlc30gY3FhLWJnLWdyZWVuLTEwMCBjcWEtdGV4dC1ncmVlbi04MDBgO1xuICAgICAgY2FzZSAnY3VycmVudCc6XG4gICAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3Nlc30gY3FhLWJnLWJsdWUtMTAwIGNxYS10ZXh0LWJsdWUtODAwYDtcbiAgICAgIGNhc2UgJ3BlbmRpbmcnOlxuICAgICAgICByZXR1cm4gYCR7YmFzZUNsYXNzZXN9IGNxYS1iZy1ncmF5LTEwMCBjcWEtdGV4dC1ncmF5LTgwMGA7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gYCR7YmFzZUNsYXNzZXN9IGNxYS1iZy1yZWQtMTAwIGNxYS10ZXh0LXJlZC04MDBgO1xuICAgICAgY2FzZSAncnVubmluZyc6XG4gICAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3Nlc30gY3FhLWJnLWJsdWUtMTAwIGNxYS10ZXh0LWJsdWUtODAwYDtcbiAgICAgIGNhc2UgJ3NraXBwZWQnOlxuICAgICAgICByZXR1cm4gYCR7YmFzZUNsYXNzZXN9IGNxYS1iZy1ncmF5LTEwMCBjcWEtdGV4dC1ncmF5LTgwMGA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYCR7YmFzZUNsYXNzZXN9IGNxYS1iZy1ncmF5LTEwMCBjcWEtdGV4dC1ncmF5LTgwMGA7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGhhc0l0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkSXRlbXMgJiYgdGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXQgaXRlbXNDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkSXRlbXMgPyB0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoIDogMDtcbiAgfVxuXG4gIC8qKiBDb252ZXJ0IHN0ZXBOdW1iZXIgdG8gc3RyaW5nIGZvciB0aGUgYmFkZ2UgbGFiZWwgKFN0cmluZygpIGlzIG5vdCBhdmFpbGFibGUgaW4gdGVtcGxhdGVzKSAqL1xuICB0b0xhYmVsKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiAnJyArIHZhbHVlO1xuICB9XG5cbiAgdHJhY2tCeUl0ZW1JZChpbmRleDogbnVtYmVyLCBpdGVtOiBKdW1wVG9TdGVwSXRlbSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cbn1cblxuIiwiPGRpdiAqbmdJZj1cImlzT3BlblwiXG4gIGNsYXNzPVwibW9kYWwtYmFja2Ryb3AgY3FhLWZpeGVkIGNxYS1pbnNldC0wIGNxYS1iZy1ibGFjayBjcWEtYmctb3BhY2l0eS01MCBjcWEtei01MCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcC00XCJcbiAgKGNsaWNrKT1cIm9uQmFja2Ryb3BDbGljaygkZXZlbnQpXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNxYS1yb3VuZGVkLWxnIGNxYS1iZy13aGl0ZSBjcWEtc2hhZG93LWxnICBjcWEtdy1mdWxsIGNxYS1tYXgtdy1bNTAwcHhdIGNxYS1vdmVyZmxvdy1oaWRkZW4gY3FhLWZsZXggY3FhLWZsZXgtY29sXCJcbiAgICBzdHlsZT1cImJveC1zaGFkb3c6IDBweCA4cHggOHB4IC00cHggIzEwMTgyODA4OyBtYXgtaGVpZ2h0OiA5MHZoO1wiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuXG4gICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtcHgtNiBjcWEtcHQtNiBjcWEtcGItNFwiPlxuICAgICAgPGgyIGNsYXNzPVwiY3FhLXRleHQtYmFzZSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzBBMEEwQV0gY3FhLWxlYWRpbmctWzI0cHhdIGNxYS1mb250LWludGVyXCI+XG4gICAgICAgIHt7IHRpdGxlIH19XG4gICAgICA8L2gyPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy02IGNxYS1oLTYgY3FhLXAtMCBjcWEtYm9yZGVyLTAgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtdGV4dC1ncmF5LTUwMCBob3ZlcjpjcWEtdGV4dC1ncmF5LTcwMCBjcWEtdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xvc2UoKVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZSBtb2RhbFwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCIhY3FhLXctNSAhY3FhLWgtNSAhY3FhLXRleHQtWzIwcHhdICFjcWEtYmxvY2sgIWNxYS1sZWFkaW5nLW5vbmVcIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuXG4gICAgPCEtLSBTZWFyY2ggQmFyIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJlbmFibGVTZWFyY2hcIiBjbGFzcz1cImNxYS1weC02IGNxYS1wYi00XCI+XG4gICAgICA8Y3FhLXNlYXJjaC1iYXJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uU2VhcmNoVmFsdWVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtc2VhcmNoLWJhcj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRGl2aWRlciBiZWxvdyBzZWFyY2ggLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS0tbXgtMiBjcWEtdy1bY2FsYygxMDAlKzFyZW0pXSBjcWEtZmxleC1zaHJpbmstMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1oLXB4IGNxYS13LWZ1bGwgY3FhLWJnLVsjRTVFN0VCXVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj48L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU3RlcHMgTGlzdCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtb3ZlcmZsb3cteS1hdXRvIGNxYS1vdmVyZmxvdy14LWhpZGRlbiBjcWEtcHgtNiBjcWEtcHQtMlwiIHN0eWxlPVwic2Nyb2xsYmFyLXdpZHRoOiB0aGluO1wiPlxuICAgICAgPCEtLSBFbXB0eSBTdGF0ZSAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCIhaGFzSXRlbXNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcHktMTIgY3FhLXRleHQtY2VudGVyXCI+XG4gICAgICAgIDxwIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLXRleHQtZ3JheS01MDAgY3FhLWZvbnQtaW50ZXJcIj5cbiAgICAgICAgIHt7c2VhcmNoRW1wdHlTdGF0ZUxhYmVsIHx8ICdObyBEYXRhIGZvdW5kLid9fVxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTdGVwcyBMaXN0IC0tPlxuICAgICAgPGRpdiAqbmdJZj1cImhhc0l0ZW1zXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0zXCI+XG5cbiAgICAgICAgPCEtLSBQcmVyZXF1aXNpdGUgc3RlcHM6IGFjY29yZGlvbiBieSB0ZXN0IGNhc2UgbmFtZSAoc3R5bGVkIGxpa2UgY3FhLW1haW4tc3RlcC1jb2xsYXBzZSkgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UHJlcmVxdWlzaXRlcyAmJiBwcmVyZXF1aXNpdGVHcm91cHM/Lmxlbmd0aFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1tYi0xXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiBwcmVyZXF1aXNpdGVHcm91cHNcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLW10LTIgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMyBjcWEtcHgtMyBjcWEtcHktMiBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLWJnLVsjRUVGMkZGXSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNDNkQyRkZdIGNxYS1ib3JkZXItc29saWQgY3FhLXctZnVsbFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUdyb3VwKGdyb3VwLm5hbWUpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cImlzR3JvdXBFeHBhbmRlZChncm91cC5uYW1lKVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTQgNkw4IDEwTDEyIDZcIiBzdHJva2U9XCIjNEYzOUY2XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMTdweF0gY3FhLXRleHQtWyMzMTJDODVdIGNxYS1mbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ3JvdXAubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzR3JvdXBFeHBhbmRlZChncm91cC5uYW1lKVwiIGNsYXNzPVwiY3FhLW10LTIgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMiBjcWEtcHgtMi41XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ3JvdXAuaXRlbXM7IHRyYWNrQnk6IHRyYWNrQnlJdGVtSWRcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1weC0zIGNxYS1weS0zIGNxYS13LWZ1bGwgY3FhLXRleHQtbGVmdCBjcWEtYm9yZGVyLTAgY3FhLWJnLXRyYW5zcGFyZW50IGhvdmVyOmNxYS1iZy1ncmF5LTUwIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtdHJhbnNpdGlvbi1jb2xvcnMgY3FhLXJvdW5kZWQtbWQgY3FhLW1pbi13LTBcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcm91bmRlZC1bNnB4XSBjcWEtdGV4dC14cyBjcWEtZm9udC1tZWRpdW0gY3FhLXB5LVs0cHhdIGNxYS1weC1bMTBweF0gY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFMkU4RjBdIGNxYS10ZXh0LVsjM0Y0M0VFXSBjcWEtYmctWyNGOEY5RkZdXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDMycHg7XCI+e3sgaXRlbS5zdGVwTnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZmxleC0xIGNxYS10ZXh0LXNtIGNxYS10ZXh0LVsjMEEwQTBBXSBjcWEtZm9udC1pbnRlciBjcWEtZm9udC1ub3JtYWwgY3FhLWxlYWRpbmctWzIwcHhdIGNxYS1taW4tdy0wIGNxYS10cnVuY2F0ZVwiPnt7IGl0ZW0uZGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mbGV4LXNocmluay0wXCIgW25nQ2xhc3NdPVwiZ2V0U3RhdHVzQmFkZ2VDbGFzc2VzKGl0ZW0uc3RhdHVzKVwiPnt7IGl0ZW0uc3RhdHVzIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJlZFN0ZXBJdGVtcz8ubGVuZ3RoXCIgY2xhc3M9XCJjcWEtaC1weCBjcWEtdy1mdWxsIGNxYS1iZy1bI0U1RTdFQl0gY3FhLW15LTEgY3FhLW1iLTJcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+PC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gTWFpbiB0ZXN0IHN0ZXBzIHNlY3Rpb24gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJlZFN0ZXBJdGVtcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1tYi0xXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLXVwcGVyY2FzZSBjcWEtdHJhY2tpbmctd2lkZVwiPlxuICAgICAgICAgICAgICBUZXN0IHN0ZXBzXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTFcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRTdGVwSXRlbXM7IHRyYWNrQnk6IHRyYWNrQnlJdGVtSWRcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtcHgtMyBjcWEtcHktMyBjcWEtdy1mdWxsIGNxYS10ZXh0LWxlZnQgY3FhLWJvcmRlci0wIGNxYS1iZy10cmFuc3BhcmVudCBob3ZlcjpjcWEtYmctZ3JheS01MCBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXRyYW5zaXRpb24tY29sb3JzIGNxYS1yb3VuZGVkLW1kIGNxYS1taW4tdy0wXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCI+XG5cbiAgICAgICAgICAgICAgPCEtLSBTdGVwIE51bWJlciBCYWRnZSAtLT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtaW5saW5lLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXJvdW5kZWQtWzZweF0gY3FhLXRleHQteHMgY3FhLWZvbnQtbWVkaXVtIGNxYS1weS1bNHB4XSBjcWEtcHgtWzEwcHhdIGNxYS1mbGV4LXNocmluay0wIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTJFOEYwXSBjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLWJnLVsjRjhGOUZGXVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDMycHg7XCI+XG4gICAgICAgICAgICAgICAge3sgaXRlbS5zdGVwTnVtYmVyIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICA8IS0tIFN0ZXAgRGVzY3JpcHRpb24gLS0+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtdGV4dC1zbSBjcWEtdGV4dC1bIzBBMEEwQV0gY3FhLWZvbnQtaW50ZXIgY3FhLWZvbnQtbm9ybWFsIGNxYS1sZWFkaW5nLVsyMHB4XSBjcWEtbWluLXctMCBjcWEtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICA8IS0tIFN0YXR1cyBCYWRnZSAtLT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZmxleC1zaHJpbmstMFwiIFtuZ0NsYXNzXT1cImdldFN0YXR1c0JhZGdlQ2xhc3NlcyhpdGVtLnN0YXR1cylcIj5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLnN0YXR1cyB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRm9vdGVyIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJoYXNJdGVtc1wiIGNsYXNzPVwiY3FhLXB4LTYgY3FhLXBiLTUgY3FhLXB0LTNcIj5cbiAgICAgIDxwIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM2QjcyODBdIGNxYS1mb250LWludGVyIGNxYS1mb250LW5vcm1hbFwiPlxuICAgICAgICB7eyBpdGVtc0NvdW50IH19IHt7IGl0ZW1zQ291bnQgPT09IDEgPyAnc3RlcCcgOiAnc3RlcHMnIH19IGZvdW5kXG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
295
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianVtcC10by1zdGVwLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9qdW1wLXRvLXN0ZXAtbW9kYWwvanVtcC10by1zdGVwLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9qdW1wLXRvLXN0ZXAtbW9kYWwvanVtcC10by1zdGVwLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQStDLE1BQU0sZUFBZSxDQUFDOzs7OztBQXVDcEgsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxZQUE2QixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUVuRCxnQ0FBZ0M7UUFDdkIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUVqQyxrQkFBa0I7UUFDVCxVQUFLLEdBQVcsY0FBYyxDQUFDO1FBRXhDLHVGQUF1RjtRQUM5RSxVQUFLLEdBQXFCLEVBQUUsQ0FBQztRQUV0QyxxR0FBcUc7UUFDNUYsc0JBQWlCLEdBQTRCLEVBQUUsQ0FBQztRQUV6RCxrSEFBa0g7UUFDekcsY0FBUyxHQUF5QixFQUFFLENBQUM7UUFFOUMsOEJBQThCO1FBQ3JCLHNCQUFpQixHQUFXLG1DQUFtQyxDQUFDO1FBRXpFLDhCQUE4QjtRQUNyQiwwQkFBcUIsR0FBVyxnQkFBZ0IsQ0FBQztRQUUxRCwyQkFBMkI7UUFDbEIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFFbEMsZ0NBQWdDO1FBQ3ZCLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBRXRDLGdFQUFnRTtRQUN2RCxzQkFBaUIsR0FBWSxJQUFJLENBQUM7UUFFM0MscUNBQXFDO1FBQ3JDLGtCQUFhLEdBQXFCLEVBQUUsQ0FBQztRQUVyQyw4RUFB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UUFDWixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELGdHQUFnRztJQUNoRyxPQUFPLENBQUMsS0FBc0I7UUFDNUIsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYSxFQUFFLElBQW9CO1FBQy9DLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixDQUFDOztxSEE3UlUsd0JBQXdCO3lHQUF4Qix3QkFBd0IsaWdCQ3ZDckMsbTZOQWdJQTsyRkR6RmEsd0JBQXdCO2tCQU5wQyxTQUFTOytCQUNFLHdCQUF3QixRQUc1QixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7d0dBTXJCLE1BQU07c0JBQWQsS0FBSztnQkFHRyxLQUFLO3NCQUFiLEtBQUs7Z0JBR0csS0FBSztzQkFBYixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFlSSxPQUFPO3NCQUFoQixNQUFNO2dCQUdHLFFBQVE7c0JBQWpCLE1BQU07Z0JBR0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIFN0ZXBJdGVtU3RhdHVzID0gJ3Bhc3NlZCcgfCAnY3VycmVudCcgfCAncGVuZGluZycgfCAnZmFpbGVkJyB8ICdydW5uaW5nJyB8ICdza2lwcGVkJztcblxuZXhwb3J0IGludGVyZmFjZSBKdW1wVG9TdGVwSXRlbSB7XG4gIGlkOiBzdHJpbmc7XG4gIHN0ZXBOdW1iZXI6IHN0cmluZyB8IG51bWJlcjtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhdHVzOiBTdGVwSXRlbVN0YXR1cztcbiAgLyoqIFN0ZXAgaWQgZm9yIHNlbGVjdGlvbi4gV2hlbiBtaXNzaW5nLCBkZXJpdmVkIGZyb20gaWQuICovXG4gIHN0ZXBJZD86IG51bWJlcjtcbiAgLyoqIE9wdGlvbmFsIGZsYWcgdG8gaW5kaWNhdGUgdGhpcyBpdGVtIHJlcHJlc2VudHMgYSBwcmVyZXF1aXNpdGUgc3RlcC4gKi9cbiAgaXNQcmVyZXF1aXNpdGU/OiBib29sZWFuO1xuICAvKiogT3B0aW9uYWwgZ3JvdXAgbmFtZSAoZS5nLiBwcmVyZXF1aXNpdGUgdGVzdCBjYXNlIG5hbWUpIGZvciB2aXN1YWwgZ3JvdXBpbmcuICovXG4gIGdyb3VwTmFtZT86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogYW55OyAvLyBBbGxvdyBhZGRpdGlvbmFsIHByb3BlcnRpZXNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKdW1wVG9TdGVwU3RlcE1ldGEge1xuICBzdGVwSWQ6IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZztcbiAgc3RlcE51bWJlcjogc3RyaW5nO1xuICBzdGF0dXM6IFN0ZXBJdGVtU3RhdHVzO1xuICBpc1ByZXJlcXVpc2l0ZT86IGJvb2xlYW47XG4gIGdyb3VwTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21iaW5lZFRlc3RDYXNlR3JvdXAge1xuICBuYW1lPzogc3RyaW5nO1xuICBpc1ByZXJlcXVpc2l0ZT86IGJvb2xlYW47XG4gIHN0ZXBzPzogYW55W107XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1qdW1wLXRvLXN0ZXAtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vanVtcC10by1zdGVwLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9XG59KVxuZXhwb3J0IGNsYXNzIEp1bXBUb1N0ZXBNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICAvKiogV2hldGhlciB0aGUgbW9kYWwgaXMgb3BlbiAqL1xuICBASW5wdXQoKSBpc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogTW9kYWwgdGl0bGUgKi9cbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICdKdW1wIHRvIFN0ZXAnO1xuXG4gIC8qKiBMaXN0IG9mIHN0ZXAgaXRlbXMgdG8gZGlzcGxheSAobGVnYWN5OyB1c2VkIHdoZW4gY29tYmluZWRUZXN0Q2FzZXMgbm90IHByb3ZpZGVkKSAqL1xuICBASW5wdXQoKSBpdGVtczogSnVtcFRvU3RlcEl0ZW1bXSA9IFtdO1xuXG4gIC8qKiBDb21iaW5lZCB0ZXN0IGNhc2VzIGZvciBhY2NvcmRpb24gbGF5b3V0LiBXaGVuIHByb3ZpZGVkIHdpdGggc3RlcHNNZXRhLCB1c2VkIGluc3RlYWQgb2YgaXRlbXMuICovXG4gIEBJbnB1dCgpIGNvbWJpbmVkVGVzdENhc2VzOiBDb21iaW5lZFRlc3RDYXNlR3JvdXBbXSA9IFtdO1xuXG4gIC8qKiBQcmUtY29tcHV0ZWQgc3RlcCBtZXRhZGF0YSAoc3RlcE51bWJlciwgc3RhdHVzLCBldGMuKSBmb3IgZWFjaCBzdGVwLiBSZXF1aXJlZCB3aGVuIHVzaW5nIGNvbWJpbmVkVGVzdENhc2VzLiAqL1xuICBASW5wdXQoKSBzdGVwc01ldGE6IEp1bXBUb1N0ZXBTdGVwTWV0YVtdID0gW107XG5cbiAgLyoqIFNlYXJjaCBwbGFjZWhvbGRlciB0ZXh0ICovXG4gIEBJbnB1dCgpIHNlYXJjaFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VhcmNoIHN0ZXBzIGJ5IG5hbWUgb3IgbnVtYmVyLi4uJztcblxuICAvKiogU2VhcmNoIEVtcHR5IFN0YXRlIHRleHQgKi9cbiAgQElucHV0KCkgc2VhcmNoRW1wdHlTdGF0ZUxhYmVsOiBzdHJpbmcgPSAnTm8gc3RlcHMgZm91bmQnO1xuXG4gIC8qKiBDdXJyZW50IHNlYXJjaCB2YWx1ZSAqL1xuICBASW5wdXQoKSBzZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XG5cbiAgLyoqIFdoZXRoZXIgc2VhcmNoIGlzIGVuYWJsZWQgKi9cbiAgQElucHV0KCkgZW5hYmxlU2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKiogV2hldGhlciB0byBzaG93IHByZXJlcXVpc2l0ZSBzdGVwcyBzZWN0aW9uLiBEZWZhdWx0IHRydWUuICovXG4gIEBJbnB1dCgpIHNob3dQcmVyZXF1aXNpdGVzOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKiogRmlsdGVyZWQgaXRlbXMgYmFzZWQgb24gc2VhcmNoICovXG4gIGZpbHRlcmVkSXRlbXM6IEp1bXBUb1N0ZXBJdGVtW10gPSBbXTtcblxuICAvKiogUHJlcmVxdWlzaXRlIGdyb3VwcyBmb3IgYWNjb3JkaW9uOiBlYWNoIHByZXJlcXVpc2l0ZSB0ZXN0IGNhc2UgYnkgbmFtZS4gKi9cbiAgcHJlcmVxdWlzaXRlR3JvdXBzOiB7IG5hbWU6IHN0cmluZzsgaXRlbXM6IEp1bXBUb1N0ZXBJdGVtW10gfVtdID0gW107XG5cbiAgLyoqIEZpbHRlcmVkIG5vbi1wcmVyZXF1aXNpdGUgc3RlcCBpdGVtcy4gKi9cbiAgZmlsdGVyZWRTdGVwSXRlbXM6IEp1bXBUb1N0ZXBJdGVtW10gPSBbXTtcblxuICAvKiogRXhwYW5kZWQgcHJlcmVxdWlzaXRlIGdyb3VwIG5hbWVzLiBXaGVuIGVtcHR5LCBhbGwgZ3JvdXBzIGFyZSBjb2xsYXBzZWQgYnkgZGVmYXVsdC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBleHBhbmRlZEdyb3VwTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIG1vZGFsIHNob3VsZCBiZSBjbG9zZWQgKi9cbiAgQE91dHB1dCgpIG9uQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiBzZWFyY2ggdmFsdWUgY2hhbmdlcyAqL1xuICBAT3V0cHV0KCkgb25TZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGEgc3RlcCBpdGVtIGlzIHNlbGVjdGVkICovXG4gIEBPdXRwdXQoKSBvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8SnVtcFRvU3RlcEl0ZW0+KCk7XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydpdGVtcyddIHx8IGNoYW5nZXNbJ2NvbWJpbmVkVGVzdENhc2VzJ10gfHwgY2hhbmdlc1snc3RlcHNNZXRhJ10gfHwgY2hhbmdlc1snc2VhcmNoVmFsdWUnXSkge1xuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWx0ZXJlZEl0ZW1zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbWJpbmVkVGVzdENhc2VzPy5sZW5ndGggJiYgdGhpcy5zdGVwc01ldGE/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5idWlsZEZyb21Db21iaW5lZFRlc3RDYXNlcygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmJ1aWxkRnJvbUl0ZW1zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFtdO1xuICAgICAgdGhpcy5wcmVyZXF1aXNpdGVHcm91cHMgPSBbXTtcbiAgICAgIHRoaXMuZmlsdGVyZWRTdGVwSXRlbXMgPSBbXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRnJvbUNvbWJpbmVkVGVzdENhc2VzKCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldGFCeVN0ZXBJZCA9IG5ldyBNYXA8bnVtYmVyLCBKdW1wVG9TdGVwU3RlcE1ldGE+KCk7XG4gICAgdGhpcy5zdGVwc01ldGEuZm9yRWFjaChtID0+IG1ldGFCeVN0ZXBJZC5zZXQobS5zdGVwSWQsIG0pKTtcblxuICAgIGNvbnN0IHNlYXJjaFRlcm0gPSAodGhpcy5zZWFyY2hWYWx1ZSB8fCAnJykudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgY29uc3QgbWF0Y2hlc1NlYXJjaCA9IChtZXRhOiBKdW1wVG9TdGVwU3RlcE1ldGEpOiBib29sZWFuID0+IHtcbiAgICAgIGlmICghc2VhcmNoVGVybSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBTdHJpbmcobWV0YS5zdGVwTnVtYmVyKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0pIHx8XG4gICAgICAgIChtZXRhLmxhYmVsIHx8ICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0pXG4gICAgICApO1xuICAgIH07XG5cbiAgICB0aGlzLnByZXJlcXVpc2l0ZUdyb3VwcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRTdGVwSXRlbXMgPSBbXTtcblxuICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgdGhpcy5jb21iaW5lZFRlc3RDYXNlcykge1xuICAgICAgaWYgKCFncm91cD8uc3RlcHM/Lmxlbmd0aCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGdyb3VwTmFtZSA9IChncm91cC5uYW1lIHx8ICdQcmVyZXF1aXNpdGUnKS50b1N0cmluZygpO1xuICAgICAgY29uc3QgaXNQcmVyZXEgPSAhIWdyb3VwLmlzUHJlcmVxdWlzaXRlO1xuXG4gICAgICBjb25zdCBjb2xsZWN0U3RlcHMgPSAoc3RlcHM6IGFueVtdLCBzZWVuOiBTZXQ8bnVtYmVyPik6IEp1bXBUb1N0ZXBJdGVtW10gPT4ge1xuICAgICAgICBjb25zdCBvdXQ6IEp1bXBUb1N0ZXBJdGVtW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBzIG9mIHN0ZXBzKSB7XG4gICAgICAgICAgaWYgKCFzKSBjb250aW51ZTtcbiAgICAgICAgICBjb25zdCBpZCA9IHM/LmlkID8/IHM/LnN0ZXBfaWQ7XG4gICAgICAgICAgY29uc3QgbnVtSWQgPSBpZCAhPSBudWxsID8gTnVtYmVyKGlkKSA6IE5hTjtcbiAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShudW1JZCkgfHwgc2Vlbi5oYXMobnVtSWQpKSBjb250aW51ZTtcbiAgICAgICAgICBzZWVuLmFkZChudW1JZCk7XG5cbiAgICAgICAgICBjb25zdCBtZXRhID0gbWV0YUJ5U3RlcElkLmdldChudW1JZCk7XG4gICAgICAgICAgaWYgKG1ldGEgJiYgbWF0Y2hlc1NlYXJjaChtZXRhKSkge1xuICAgICAgICAgICAgb3V0LnB1c2goe1xuICAgICAgICAgICAgICBpZDogU3RyaW5nKG51bUlkKSxcbiAgICAgICAgICAgICAgc3RlcElkOiBudW1JZCxcbiAgICAgICAgICAgICAgc3RlcE51bWJlcjogbWV0YS5zdGVwTnVtYmVyLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5zdHJpcEh0bWwobWV0YS5sYWJlbCB8fCAoJ1N0ZXAgJyArIG1ldGEuc3RlcE51bWJlcikpLFxuICAgICAgICAgICAgICBzdGF0dXM6IG1ldGEuc3RhdHVzLFxuICAgICAgICAgICAgICBpc1ByZXJlcXVpc2l0ZTogbWV0YS5pc1ByZXJlcXVpc2l0ZSxcbiAgICAgICAgICAgICAgZ3JvdXBOYW1lOiBtZXRhLmdyb3VwTmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZvciBzdGVwcyB3aXRoIGNvbmRpdGlvbkRhdGEgKENPTkRJVElPTl9JRiksIHNraXAgZ2VuZXJpYyBjaGlsZHJlbi9uZXN0ZWRTdGVwc1xuICAgICAgICAgIC8vICh0aGV5IG1heSBjb250YWluIGFsbCBicmFuY2ggc3RlcHMgaW4gYSBmbGF0IHN0cnVjdHVyZSBjYXVzaW5nIGR1cGxpY2F0ZXMgd2l0aCB3cm9uZyBudW1iZXJzKS5cbiAgICAgICAgICAvLyBVc2UgY29uZGl0aW9uRGF0YSBleGNsdXNpdmVseSBmb3IgY29uZGl0aW9uIHN0ZXBzLlxuICAgICAgICAgIGNvbnN0IGhhc0NvbmRpdGlvbkRhdGEgPSBzLmNvbmRpdGlvbkRhdGEgJiYgdHlwZW9mIHMuY29uZGl0aW9uRGF0YSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMocy5jb25kaXRpb25EYXRhKS5sZW5ndGggPiAwO1xuICAgICAgICAgIGlmICghaGFzQ29uZGl0aW9uRGF0YSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBhcnIgb2YgW3MuY2hpbGRyZW4gfHwgW10sIHMubmVzdGVkU3RlcHMgfHwgW10sIHMuc3RlcHMgfHwgW11dKSB7XG4gICAgICAgICAgICAgIGlmIChhcnI/Lmxlbmd0aCkgb3V0LnB1c2goLi4uY29sbGVjdFN0ZXBzKGFyciwgc2VlbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMuYnJhbmNoZXMgJiYgQXJyYXkuaXNBcnJheShzLmJyYW5jaGVzKSkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGIgb2Ygcy5icmFuY2hlcykge1xuICAgICAgICAgICAgICAgIGlmIChiPy5zdWJTdGVwcz8ubGVuZ3RoKSBvdXQucHVzaCguLi5jb2xsZWN0U3RlcHMoYi5zdWJTdGVwcywgc2VlbikpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYXNDb25kaXRpb25EYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBicmFuY2hJZHM6IHN0cmluZ1tdID0gKHMuaWZDaGlsZERhdGEgJiYgcy5pZkNoaWxkRGF0YS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICA/IHMuaWZDaGlsZERhdGEubWFwKFN0cmluZylcbiAgICAgICAgICAgICAgOiBPYmplY3Qua2V5cyhzLmNvbmRpdGlvbkRhdGEpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBicmFuY2hJZCBvZiBicmFuY2hJZHMpIHtcbiAgICAgICAgICAgICAgY29uc3QgYnJhbmNoRGF0YSA9IChzLmNvbmRpdGlvbkRhdGEgYXMgYW55KVticmFuY2hJZF07XG4gICAgICAgICAgICAgIGlmICghYnJhbmNoRGF0YSkgY29udGludWU7XG4gICAgICAgICAgICAgIC8vIEFkZCB0aGUgYnJhbmNoIHN0ZXAgaXRzZWxmIChFTFNFIElGIC8gRUxTRSlcbiAgICAgICAgICAgICAgY29uc3QgYnJhbmNoUmF3SWQgPSBicmFuY2hEYXRhPy5pZCA/PyBicmFuY2hEYXRhPy5zdGVwX2lkO1xuICAgICAgICAgICAgICBjb25zdCBicmFuY2hOdW1JZCA9IGJyYW5jaFJhd0lkICE9IG51bGwgPyBOdW1iZXIoYnJhbmNoUmF3SWQpIDogTmFOO1xuICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGJyYW5jaE51bUlkKSAmJiAhc2Vlbi5oYXMoYnJhbmNoTnVtSWQpKSB7XG4gICAgICAgICAgICAgICAgc2Vlbi5hZGQoYnJhbmNoTnVtSWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJyYW5jaE1ldGEgPSBtZXRhQnlTdGVwSWQuZ2V0KGJyYW5jaE51bUlkKTtcbiAgICAgICAgICAgICAgICBpZiAoYnJhbmNoTWV0YSAmJiBtYXRjaGVzU2VhcmNoKGJyYW5jaE1ldGEpKSB7XG4gICAgICAgICAgICAgICAgICBvdXQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBTdHJpbmcoYnJhbmNoTnVtSWQpLFxuICAgICAgICAgICAgICAgICAgICBzdGVwSWQ6IGJyYW5jaE51bUlkLFxuICAgICAgICAgICAgICAgICAgICBzdGVwTnVtYmVyOiBicmFuY2hNZXRhLnN0ZXBOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLnN0cmlwSHRtbChicmFuY2hNZXRhLmxhYmVsIHx8ICgnU3RlcCAnICsgYnJhbmNoTWV0YS5zdGVwTnVtYmVyKSksXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogYnJhbmNoTWV0YS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgIGlzUHJlcmVxdWlzaXRlOiBicmFuY2hNZXRhLmlzUHJlcmVxdWlzaXRlLFxuICAgICAgICAgICAgICAgICAgICBncm91cE5hbWU6IGJyYW5jaE1ldGEuZ3JvdXBOYW1lLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2UgaW50byBicmFuY2ggY2hpbGRyZW5cbiAgICAgICAgICAgICAgY29uc3QgYnJhbmNoQ2hpbGRyZW46IGFueVtdID0gYnJhbmNoRGF0YS5jaGlsZHJlbiB8fCBicmFuY2hEYXRhLm5lc3RlZFN0ZXBzIHx8IFtdO1xuICAgICAgICAgICAgICBpZiAoYnJhbmNoQ2hpbGRyZW4ubGVuZ3RoKSBvdXQucHVzaCguLi5jb2xsZWN0U3RlcHMoYnJhbmNoQ2hpbGRyZW4sIHNlZW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgICAgIGNvbnN0IGl0ZW1zID0gY29sbGVjdFN0ZXBzKGdyb3VwLnN0ZXBzLCBzZWVuKTtcblxuICAgICAgaWYgKGlzUHJlcmVxICYmIHRoaXMuc2hvd1ByZXJlcXVpc2l0ZXMpIHtcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMucHJlcmVxdWlzaXRlR3JvdXBzLnB1c2goeyBuYW1lOiBncm91cE5hbWUsIGl0ZW1zIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFpc1ByZXJlcSkge1xuICAgICAgICB0aGlzLmZpbHRlcmVkU3RlcEl0ZW1zLnB1c2goLi4uaXRlbXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFtcbiAgICAgIC4uLnRoaXMucHJlcmVxdWlzaXRlR3JvdXBzLnJlZHVjZTxKdW1wVG9TdGVwSXRlbVtdPigoYWNjLCBnKSA9PiBhY2MuY29uY2F0KGcuaXRlbXMpLCBbXSksXG4gICAgICAuLi50aGlzLmZpbHRlcmVkU3RlcEl0ZW1zLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRnJvbUl0ZW1zKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlYXJjaFRlcm0gPSAodGhpcy5zZWFyY2hWYWx1ZSB8fCAnJykudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgaWYgKCFzZWFyY2hUZXJtKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBbLi4udGhpcy5pdGVtc107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBzdGVwTnVtYmVyTWF0Y2ggPSBTdHJpbmcoaXRlbS5zdGVwTnVtYmVyKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0pO1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbk1hdGNoID0gKGl0ZW0uZGVzY3JpcHRpb24gfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybSk7XG4gICAgICAgIHJldHVybiBzdGVwTnVtYmVyTWF0Y2ggfHwgZGVzY3JpcHRpb25NYXRjaDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXJlcUl0ZW1zID0gdGhpcy5maWx0ZXJlZEl0ZW1zLmZpbHRlcihpID0+IGkuaXNQcmVyZXF1aXNpdGUgPT09IHRydWUpO1xuICAgIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBKdW1wVG9TdGVwSXRlbVtdPigpO1xuICAgIHByZXJlcUl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gKGl0ZW0uZ3JvdXBOYW1lIHx8ICdQcmVyZXF1aXNpdGUnKS50b1N0cmluZygpO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBncm91cHMuZ2V0KG5hbWUpO1xuICAgICAgaWYgKGV4aXN0aW5nKSBleGlzdGluZy5wdXNoKGl0ZW0pO1xuICAgICAgZWxzZSBncm91cHMuc2V0KG5hbWUsIFtpdGVtXSk7XG4gICAgfSk7XG4gICAgdGhpcy5wcmVyZXF1aXNpdGVHcm91cHMgPSBBcnJheS5mcm9tKGdyb3Vwcy5lbnRyaWVzKCkpLm1hcCgoW25hbWUsIGl0ZW1zXSkgPT4gKHsgbmFtZSwgaXRlbXMgfSkpO1xuICAgIHRoaXMuZmlsdGVyZWRTdGVwSXRlbXMgPSB0aGlzLmZpbHRlcmVkSXRlbXMuZmlsdGVyKGkgPT4gaS5pc1ByZXJlcXVpc2l0ZSAhPT0gdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHN0cmlwSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghaHRtbCkgcmV0dXJuICcnO1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi5pbm5lckhUTUwgPSBodG1sO1xuICAgIHJldHVybiAoZGl2LnRleHRDb250ZW50IHx8IGRpdi5pbm5lclRleHQgfHwgJycpLnRyaW0oKTtcbiAgfVxuXG4gIGlzR3JvdXBFeHBhbmRlZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRlZEdyb3VwTmFtZXMuaGFzKG5hbWUpO1xuICB9XG5cbiAgdG9nZ2xlR3JvdXAobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZXhwYW5kZWRHcm91cE5hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgdGhpcy5leHBhbmRlZEdyb3VwTmFtZXMuZGVsZXRlKG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4cGFuZGVkR3JvdXBOYW1lcy5hZGQobmFtZSk7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25TZWFyY2hWYWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgIHRoaXMub25TZWFyY2guZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBvbkl0ZW1DbGljayhpdGVtOiBKdW1wVG9TdGVwSXRlbSk6IHZvaWQge1xuICAgIHRoaXMub25TZWxlY3QuZW1pdChpdGVtKTtcbiAgfVxuXG4gIG9uQmFja2Ryb3BDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBcbiAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0IHx8IHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ21vZGFsLWJhY2tkcm9wJykpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2xvc2UuZW1pdCgpO1xuICB9XG5cbiAgZ2V0U3RhdHVzQmFkZ2VDbGFzc2VzKHN0YXR1czogU3RlcEl0ZW1TdGF0dXMpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VDbGFzc2VzID0gJ2NxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcm91bmRlZC1bNnB4XSBjcWEtdGV4dC14cyBjcWEtZm9udC1tZWRpdW0gY3FhLXB5LVs0cHhdIGNxYS1weC0zJztcbiAgICBcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAncGFzc2VkJzpcbiAgICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc2VzfSBjcWEtYmctZ3JlZW4tMTAwIGNxYS10ZXh0LWdyZWVuLTgwMGA7XG4gICAgICBjYXNlICdjdXJyZW50JzpcbiAgICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc2VzfSBjcWEtYmctYmx1ZS0xMDAgY3FhLXRleHQtYmx1ZS04MDBgO1xuICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3Nlc30gY3FhLWJnLWdyYXktMTAwIGNxYS10ZXh0LWdyYXktODAwYDtcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3Nlc30gY3FhLWJnLXJlZC0xMDAgY3FhLXRleHQtcmVkLTgwMGA7XG4gICAgICBjYXNlICdydW5uaW5nJzpcbiAgICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc2VzfSBjcWEtYmctYmx1ZS0xMDAgY3FhLXRleHQtYmx1ZS04MDBgO1xuICAgICAgY2FzZSAnc2tpcHBlZCc6XG4gICAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3Nlc30gY3FhLWJnLWdyYXktMTAwIGNxYS10ZXh0LWdyYXktODAwYDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3Nlc30gY3FhLWJnLWdyYXktMTAwIGNxYS10ZXh0LWdyYXktODAwYDtcbiAgICB9XG4gIH1cblxuICBnZXQgaGFzSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRJdGVtcyAmJiB0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBpdGVtc0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRJdGVtcyA/IHRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGggOiAwO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgc3RlcE51bWJlciB0byBzdHJpbmcgZm9yIHRoZSBiYWRnZSBsYWJlbCAoU3RyaW5nKCkgaXMgbm90IGF2YWlsYWJsZSBpbiB0ZW1wbGF0ZXMpICovXG4gIHRvTGFiZWwodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuICcnICsgdmFsdWU7XG4gIH1cblxuICB0cmFja0J5SXRlbUlkKGluZGV4OiBudW1iZXIsIGl0ZW06IEp1bXBUb1N0ZXBJdGVtKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXRlbS5pZDtcbiAgfVxufVxuXG4iLCI8ZGl2ICpuZ0lmPVwiaXNPcGVuXCJcbiAgY2xhc3M9XCJtb2RhbC1iYWNrZHJvcCBjcWEtZml4ZWQgY3FhLWluc2V0LTAgY3FhLWJnLWJsYWNrIGNxYS1iZy1vcGFjaXR5LTUwIGNxYS16LTUwIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1wLTRcIlxuICAoY2xpY2spPVwib25CYWNrZHJvcENsaWNrKCRldmVudClcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3FhLXJvdW5kZWQtbGcgY3FhLWJnLXdoaXRlIGNxYS1zaGFkb3ctbGcgIGNxYS13LWZ1bGwgY3FhLW1heC13LVs1MDBweF0gY3FhLW92ZXJmbG93LWhpZGRlbiBjcWEtZmxleCBjcWEtZmxleC1jb2xcIlxuICAgIHN0eWxlPVwiYm94LXNoYWRvdzogMHB4IDhweCA4cHggLTRweCAjMTAxODI4MDg7IG1heC1oZWlnaHQ6IDkwdmg7XCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1weC02IGNxYS1wdC02IGNxYS1wYi00XCI+XG4gICAgICA8aDIgY2xhc3M9XCJjcWEtdGV4dC1iYXNlIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMEEwQTBBXSBjcWEtbGVhZGluZy1bMjRweF0gY3FhLWZvbnQtaW50ZXJcIj5cbiAgICAgICAge3sgdGl0bGUgfX1cbiAgICAgIDwvaDI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS13LTYgY3FhLWgtNiBjcWEtcC0wIGNxYS1ib3JkZXItMCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10ZXh0LWdyYXktNTAwIGhvdmVyOmNxYS10ZXh0LWdyYXktNzAwIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVDbG9zZSgpXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlIG1vZGFsXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIiFjcWEtdy01ICFjcWEtaC01ICFjcWEtdGV4dC1bMjBweF0gIWNxYS1ibG9jayAhY3FhLWxlYWRpbmctbm9uZVwiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG5cbiAgICA8IS0tIFNlYXJjaCBCYXIgLS0+XG4gICAgPGRpdiAqbmdJZj1cImVuYWJsZVNlYXJjaFwiIGNsYXNzPVwiY3FhLXB4LTYgY3FhLXBiLTRcIj5cbiAgICAgIDxjcWEtc2VhcmNoLWJhclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXJcIlxuICAgICAgICBbdmFsdWVdPVwic2VhcmNoVmFsdWVcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25TZWFyY2hWYWx1ZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1zZWFyY2gtYmFyPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBEaXZpZGVyIGJlbG93IHNlYXJjaCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLS1teC0yIGNxYS13LVtjYWxjKDEwMCUrMXJlbSldIGNxYS1mbGV4LXNocmluay0wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWgtcHggY3FhLXctZnVsbCBjcWEtYmctWyNFNUU3RUJdXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTdGVwcyBMaXN0IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1vdmVyZmxvdy15LWF1dG8gY3FhLW92ZXJmbG93LXgtaGlkZGVuIGNxYS1weC02IGNxYS1wdC0yXCIgc3R5bGU9XCJzY3JvbGxiYXItd2lkdGg6IHRoaW47XCI+XG4gICAgICA8IS0tIEVtcHR5IFN0YXRlIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cIiFoYXNJdGVtc1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1weS0xMiBjcWEtdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1ncmF5LTUwMCBjcWEtZm9udC1pbnRlclwiPlxuICAgICAgICAge3tzZWFyY2hFbXB0eVN0YXRlTGFiZWwgfHwgJ05vIERhdGEgZm91bmQuJ319XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFN0ZXBzIExpc3QgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaGFzSXRlbXNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTNcIj5cblxuICAgICAgICA8IS0tIFByZXJlcXVpc2l0ZSBzdGVwczogYWNjb3JkaW9uIGJ5IHRlc3QgY2FzZSBuYW1lIChzdHlsZWQgbGlrZSBjcWEtbWFpbi1zdGVwLWNvbGxhcHNlKSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dQcmVyZXF1aXNpdGVzICYmIHByZXJlcXVpc2l0ZUdyb3Vwcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLW1iLTFcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIHByZXJlcXVpc2l0ZUdyb3Vwc1wiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtbXQtMiBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC0zIGNxYS1weC0zIGNxYS1weS0yIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtYmctWyNFRUYyRkZdIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0M2RDJGRl0gY3FhLWJvcmRlci1zb2xpZCBjcWEtdy1mdWxsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlR3JvdXAoZ3JvdXAubmFtZSlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBbY2xhc3MuY3FhLXJvdGF0ZS0xODBdPVwiaXNHcm91cEV4cGFuZGVkKGdyb3VwLm5hbWUpXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNCA2TDggMTBMMTIgNlwiIHN0cm9rZT1cIiM0RjM5RjZcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsxN3B4XSBjcWEtdGV4dC1bIzMxMkM4NV0gY3FhLWZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBncm91cC5uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNHcm91cEV4cGFuZGVkKGdyb3VwLm5hbWUpXCIgY2xhc3M9XCJjcWEtbXQtMiBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1weC0yLjVcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBncm91cC5pdGVtczsgdHJhY2tCeTogdHJhY2tCeUl0ZW1JZFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLXB4LTMgY3FhLXB5LTMgY3FhLXctZnVsbCBjcWEtdGV4dC1sZWZ0IGNxYS1ib3JkZXItMCBjcWEtYmctdHJhbnNwYXJlbnQgaG92ZXI6Y3FhLWJnLWdyYXktNTAgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10cmFuc2l0aW9uLWNvbG9ycyBjcWEtcm91bmRlZC1tZCBjcWEtbWluLXctMFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWlubGluZS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1yb3VuZGVkLVs2cHhdIGNxYS10ZXh0LXhzIGNxYS1mb250LW1lZGl1bSBjcWEtcHktWzRweF0gY3FhLXB4LVsxMHB4XSBjcWEtZmxleC1zaHJpbmstMCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0UyRThGMF0gY3FhLXRleHQtWyMzRjQzRUVdIGNxYS1iZy1bI0Y4RjlGRl1cIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMzJweDtcIj57eyBpdGVtLnN0ZXBOdW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLXRleHQtc20gY3FhLXRleHQtWyMwQTBBMEFdIGNxYS1mb250LWludGVyIGNxYS1mb250LW5vcm1hbCBjcWEtbGVhZGluZy1bMjBweF0gY3FhLW1pbi13LTAgY3FhLXRydW5jYXRlXCI+e3sgaXRlbS5kZXNjcmlwdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXgtc2hyaW5rLTBcIiBbbmdDbGFzc109XCJnZXRTdGF0dXNCYWRnZUNsYXNzZXMoaXRlbS5zdGF0dXMpXCI+e3sgaXRlbS5zdGF0dXMgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImZpbHRlcmVkU3RlcEl0ZW1zPy5sZW5ndGhcIiBjbGFzcz1cImNxYS1oLXB4IGNxYS13LWZ1bGwgY3FhLWJnLVsjRTVFN0VCXSBjcWEtbXktMSBjcWEtbWItMlwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBNYWluIHRlc3Qgc3RlcHMgc2VjdGlvbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcmVkU3RlcEl0ZW1zPy5sZW5ndGhcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTFcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtdXBwZXJjYXNlIGNxYS10cmFja2luZy13aWRlXCI+XG4gICAgICAgICAgICAgIFRlc3Qgc3RlcHNcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMVwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZFN0ZXBJdGVtczsgdHJhY2tCeTogdHJhY2tCeUl0ZW1JZFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1weC0zIGNxYS1weS0zIGNxYS13LWZ1bGwgY3FhLXRleHQtbGVmdCBjcWEtYm9yZGVyLTAgY3FhLWJnLXRyYW5zcGFyZW50IGhvdmVyOmNxYS1iZy1ncmF5LTUwIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtdHJhbnNpdGlvbi1jb2xvcnMgY3FhLXJvdW5kZWQtbWQgY3FhLW1pbi13LTBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIj5cblxuICAgICAgICAgICAgICA8IS0tIFN0ZXAgTnVtYmVyIEJhZGdlIC0tPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcm91bmRlZC1bNnB4XSBjcWEtdGV4dC14cyBjcWEtZm9udC1tZWRpdW0gY3FhLXB5LVs0cHhdIGNxYS1weC1bMTBweF0gY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFMkU4RjBdIGNxYS10ZXh0LVsjM0Y0M0VFXSBjcWEtYmctWyNGOEY5RkZdXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMzJweDtcIj5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLnN0ZXBOdW1iZXIgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDwhLS0gU3RlcCBEZXNjcmlwdGlvbiAtLT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZmxleC0xIGNxYS10ZXh0LXNtIGNxYS10ZXh0LVsjMEEwQTBBXSBjcWEtZm9udC1pbnRlciBjcWEtZm9udC1ub3JtYWwgY3FhLWxlYWRpbmctWzIwcHhdIGNxYS1taW4tdy0wIGNxYS10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0uZGVzY3JpcHRpb24gfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDwhLS0gU3RhdHVzIEJhZGdlIC0tPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mbGV4LXNocmluay0wXCIgW25nQ2xhc3NdPVwiZ2V0U3RhdHVzQmFkZ2VDbGFzc2VzKGl0ZW0uc3RhdHVzKVwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0uc3RhdHVzIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBGb290ZXIgLS0+XG4gICAgPGRpdiAqbmdJZj1cImhhc0l0ZW1zXCIgY2xhc3M9XCJjcWEtcHgtNiBjcWEtcGItNSBjcWEtcHQtM1wiPlxuICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLWZvbnQtaW50ZXIgY3FhLWZvbnQtbm9ybWFsXCI+XG4gICAgICAgIHt7IGl0ZW1zQ291bnQgfX0ge3sgaXRlbXNDb3VudCA9PT0gMSA/ICdzdGVwJyA6ICdzdGVwcycgfX0gZm91bmRcbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==