@angular/material-experimental 13.1.0-next.2 → 13.1.0-next.3
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/esm2020/mdc-form-field/form-field.mjs +2 -1
- package/esm2020/mdc-list/list-option.mjs +2 -1
- package/esm2020/mdc-list/selection-list.mjs +2 -1
- package/esm2020/version.mjs +1 -1
- package/fesm2015/material-experimental.mjs +1 -1
- package/fesm2015/material-experimental.mjs.map +1 -1
- package/fesm2015/mdc-form-field.mjs +2 -0
- package/fesm2015/mdc-form-field.mjs.map +1 -1
- package/fesm2015/mdc-list.mjs +2 -0
- package/fesm2015/mdc-list.mjs.map +1 -1
- package/fesm2020/material-experimental.mjs +1 -1
- package/fesm2020/material-experimental.mjs.map +1 -1
- package/fesm2020/mdc-form-field.mjs +1 -0
- package/fesm2020/mdc-form-field.mjs.map +1 -1
- package/fesm2020/mdc-list.mjs +2 -0
- package/fesm2020/mdc-list.mjs.map +1 -1
- package/mdc-slider/_slider-theme.scss +1 -1
- package/package.json +2 -2
|
@@ -263,6 +263,7 @@ export class MatFormField {
|
|
|
263
263
|
this._assertFormFieldControl();
|
|
264
264
|
}
|
|
265
265
|
ngOnDestroy() {
|
|
266
|
+
this._foundation?.destroy();
|
|
266
267
|
this._destroyed.next();
|
|
267
268
|
this._destroyed.complete();
|
|
268
269
|
}
|
|
@@ -655,4 +656,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
|
|
|
655
656
|
}], hintLabel: [{
|
|
656
657
|
type: Input
|
|
657
658
|
}] } });
|
|
658
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC1leHBlcmltZW50YWwvbWRjLWZvcm0tZmllbGQvZm9ybS1maWVsZC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC1leHBlcmltZW50YWwvbWRjLWZvcm0tZmllbGQvZm9ybS1maWVsZC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUlMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUNMLE1BQU0sRUFFTixRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUNMLGtDQUFrQyxFQUNsQyxrQ0FBa0MsRUFDbEMsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixtQkFBbUIsR0FDcEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBRUwsc0JBQXNCLEVBQ3RCLE9BQU8sSUFBSSxtQkFBbUIsR0FDL0IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLFNBQVMsRUFBVyxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFlLHFCQUFxQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7QUFrQjFFOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLElBQUksY0FBYyxDQUM5RCxnQ0FBZ0MsQ0FDakMsQ0FBQztBQUVGLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQUVyQixpREFBaUQ7QUFDakQsTUFBTSxrQkFBa0IsR0FBMkIsTUFBTSxDQUFDO0FBRTFELGlEQUFpRDtBQUNqRCxNQUFNLG1CQUFtQixHQUFtQixNQUFNLENBQUM7QUFFbkQ7Ozs7R0FJRztBQUNILE1BQU0sdUNBQXVDLEdBQUcsa0JBQWtCLENBQUM7QUFFbkU7OztHQUdHO0FBQ0gsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLENBQUM7QUFFdEMscUZBQXFGO0FBdUNyRixNQUFNLE9BQU8sWUFBWTtJQStMdkIsWUFDVSxXQUF1QixFQUN2QixrQkFBcUMsRUFDckMsT0FBZSxFQUNmLElBQW9CLEVBQ3BCLFNBQW1CLEVBR25CLFNBQXNDLEVBQ0ksY0FBdUIsRUFDL0MsU0FBZTtRQVRqQyxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixTQUFJLEdBQUosSUFBSSxDQUFnQjtRQUNwQixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBR25CLGNBQVMsR0FBVCxTQUFTLENBQTZCO1FBQ0ksbUJBQWMsR0FBZCxjQUFjLENBQVM7UUFDL0MsY0FBUyxHQUFULFNBQVMsQ0FBTTtRQTdLM0MsNENBQTRDO1FBQ25DLFVBQUssR0FBaUIsU0FBUyxDQUFDO1FBb0NqQyxnQkFBVyxHQUEyQixrQkFBa0IsQ0FBQztRQVd6RCxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBRXhCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXZCLCtDQUErQztRQUN0QyxhQUFRLEdBQUcsNEJBQTRCLFlBQVksRUFBRSxFQUFFLENBQUM7UUFFakUsZ0NBQWdDO1FBQ3ZCLGlCQUFZLEdBQUcsZ0JBQWdCLFlBQVksRUFBRSxFQUFFLENBQUM7UUFFekQsc0RBQXNEO1FBQ3RELDZCQUF3QixHQUFHLEVBQUUsQ0FBQztRQUU5QixrQ0FBa0M7UUFDbEMsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBVWYsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDakMsZUFBVSxHQUFtQixJQUFJLENBQUM7UUFHbEMsMkNBQXNDLEdBQUcsS0FBSyxDQUFDO1FBQy9DLGFBQVEsR0FBd0I7WUFDdEMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDN0UsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDbkYsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFFbEYsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPO1lBQ3RDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBRXBDLHNGQUFzRjtZQUN0Rix3RkFBd0Y7WUFDeEYsMEZBQTBGO1lBQzFGLDZGQUE2RjtZQUM3Riw2RkFBNkY7WUFDN0YsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7WUFFcEIsK0VBQStFO1lBQy9FLHdFQUF3RTtZQUN4RSx1RUFBdUU7WUFDdkUsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7WUFFcEIsd0ZBQXdGO1lBQ3hGLHVGQUF1RjtZQUN2Rix1RkFBdUY7WUFDdkYsc0ZBQXNGO1lBQ3RGLHdGQUF3RjtZQUN4RiwyRkFBMkY7WUFDM0YseUZBQXlGO1lBQ3pGLDZFQUE2RTtZQUM3RSxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUV0QixzRkFBc0Y7WUFDdEYsa0ZBQWtGO1lBQ2xGLHNGQUFzRjtZQUN0RixrREFBa0Q7WUFDbEQsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztZQUMxQixZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztZQUN0QixZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztZQUV0QixrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQ3pFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUU7WUFFN0UsNkVBQTZFO1lBQzdFLDZFQUE2RTtZQUM3RSxnRkFBZ0Y7WUFDaEYsNEVBQTRFO1lBQzVFLDBFQUEwRTtZQUMxRSw4RUFBOEU7WUFDOUUsd0NBQXdDO1lBQ3hDLCtCQUErQixFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7WUFDekMsaUNBQWlDLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztZQUUzQyx3RkFBd0Y7WUFDeEYscUZBQXFGO1lBQ3JGLHNGQUFzRjtZQUN0RiwwQ0FBMEM7WUFDMUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7WUFFMUIsMkZBQTJGO1lBQzNGLHlGQUF5RjtZQUN6RixnRUFBZ0U7WUFDaEUsNEJBQTRCLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztZQUV0Qyw2RkFBNkY7WUFDN0YsMkZBQTJGO1lBQzNGLDRGQUE0RjtZQUM1Riw4RUFBOEU7WUFDOUUscUNBQXFDLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztZQUMvQyxtQ0FBbUMsRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO1lBRTdDLHNGQUFzRjtZQUN0Rix5RkFBeUY7WUFDekYsb0ZBQW9GO1lBQ3BGLGtDQUFrQztZQUNsQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO1lBQ3BELHdDQUF3QyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQVc7WUFFM0QsK0VBQStFO1lBQy9FLHVFQUF1RTtZQUN2RSxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUztZQUM3QixlQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUztTQUNqQyxDQUFDO1FBY0EsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRTtZQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUM7U0FDeEM7UUFFRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxFQUFFLGtCQUFrQixJQUFJLEtBQUssQ0FBQztJQUNwRSxDQUFDO0lBOUxELG9EQUFvRDtJQUNwRCxJQUNJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxrQkFBa0IsQ0FBQyxLQUFjO1FBQ25DLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBTUQsd0VBQXdFO0lBQ3hFLElBQ0ksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsSUFBSSxtQkFBbUIsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsS0FBcUI7UUFDbEMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixrRkFBa0Y7WUFDbEYscUZBQXFGO1lBQ3JGLHVGQUF1RjtZQUN2RiwyRUFBMkU7WUFDM0UsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUdELHVDQUF1QztJQUN2QyxJQUNJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLEtBQTZCO1FBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksa0JBQWtCLENBQUM7UUFDaEcsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRTtZQUNuRSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUVqQywwRkFBMEY7WUFDMUYsdUZBQXVGO1lBQ3ZGLHVGQUF1RjtZQUN2RixJQUFJLENBQUMsc0NBQXNDLEdBQUcsSUFBSSxDQUFDO1NBQ3BEO0lBQ0gsQ0FBQztJQUdELG9DQUFvQztJQUNwQyxJQUNJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLEtBQWE7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFvQkQsMENBQTBDO0lBQzFDLElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUE2R0QsZUFBZTtRQUNiLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFN0QsMEZBQTBGO1FBQzFGLDRGQUE0RjtRQUM1Rix5RkFBeUY7UUFDekYsMkZBQTJGO1FBQzNGLDRGQUE0RjtRQUM1RixxREFBcUQ7UUFDckQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRTtZQUNyRCxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1NBQ3BDLENBQUMsQ0FBQztRQUVILGdGQUFnRjtRQUNoRix1RkFBdUY7UUFDdkYsbUZBQW1GO1FBQ25GLHFFQUFxRTtRQUNyRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBRTNELDRFQUE0RTtRQUM1RSx1RUFBdUU7UUFDdkUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsaUZBQWlGO1FBQ2pGLGdFQUFnRTtRQUNoRSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNqQywyREFBMkQ7UUFDM0Qsc0VBQXNFO1FBQ3RFLGdGQUFnRjtRQUNoRiwwRkFBMEY7UUFDMUYsK0VBQStFO1FBQy9FLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNuQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLHFDQUFxQztZQUNyQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDekQ7UUFDRCwwRUFBMEU7UUFDMUUsSUFBSSxDQUFDLHdCQUF3QixHQUFHLE9BQU8sQ0FBQztRQUN4Qyx1RkFBdUY7UUFDdkYsd0ZBQXdGO1FBQ3hGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQywwQ0FBMEMsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN6RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gseUJBQXlCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzdDLENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsb0JBQW9CO1FBQ2xCLGtGQUFrRjtRQUNsRix3RkFBd0Y7UUFDeEYsd0ZBQXdGO1FBQ3hGLHNGQUFzRjtRQUN0RiwyRkFBMkY7UUFDM0YsMkZBQTJGO1FBQzNGLHdFQUF3RTtRQUN4RSxxRkFBcUY7UUFDckYsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxxREFBcUQ7SUFDN0Msa0JBQWtCO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFOUIsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQzFDLDJCQUEyQixPQUFPLENBQUMsV0FBVyxFQUFFLENBQ2pELENBQUM7U0FDSDtRQUVELHdGQUF3RjtRQUN4RixPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsNkNBQTZDO1FBQzdDLElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRTtZQUN2RCxPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVk7aUJBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUNoQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7U0FDNUQ7SUFDSCxDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsb0RBQW9EO0lBQzVDLDBCQUEwQjtRQUNoQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNsQyxtRkFBbUY7UUFDbkYsbUZBQW1GO1FBQ25GLHlDQUF5QztRQUN6QyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQy9FLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssb0JBQW9CO1FBQzFCLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN6QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxpRUFBaUU7UUFDakUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCw4REFBOEQ7SUFDdEQsdUJBQXVCO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxTQUFTLEtBQUssV0FBVyxJQUFJLFNBQVMsQ0FBQyxFQUFFO1lBQ3JFLE1BQU0sa0NBQWtDLEVBQUUsQ0FBQztTQUM1QztJQUNILENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsdUZBQXVGO1FBQ3ZGLG9GQUFvRjtRQUNwRix1RkFBdUY7UUFDdkYsNEZBQTRGO1FBQzVGLDRGQUE0RjtRQUM1RixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUM3QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ2xDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ2xGLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLDBDQUEwQztRQUNoRCx1RUFBdUU7UUFDdkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUNwQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsR0FBRyxJQUFJLENBQUMsQ0FDM0QsQ0FBQztRQUVGLGlGQUFpRjtRQUNqRix5RUFBeUU7UUFDekUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNwRSxJQUFJLElBQUksQ0FBQyxzQ0FBc0MsRUFBRTtvQkFDL0MsSUFBSSxDQUFDLHNDQUFzQyxHQUFHLEtBQUssQ0FBQztvQkFDcEQsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7aUJBQ2xDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTthQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ2hDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCw2REFBNkQ7SUFDN0Qsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUM7SUFDdEMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsdUJBQXVCO1FBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQy9GLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNqRSxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ3JFLENBQUM7SUFFRCw2RkFBNkY7SUFDN0YsY0FBYyxDQUFDLElBQXFCO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDakUsT0FBTyxTQUFTLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxxREFBcUQ7SUFDckQscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVO1lBQ3RGLENBQUMsQ0FBQyxPQUFPO1lBQ1QsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNiLENBQUM7SUFFRCw0REFBNEQ7SUFDNUQseUJBQXlCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQy9DLE9BQU87U0FDUjtRQUNELHlGQUF5RjtRQUN6RiwyRkFBMkY7UUFDM0YsOEZBQThGO1FBQzlGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxHQUFHLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztJQUM3RixDQUFDO0lBRUQsMEVBQTBFO0lBQ2xFLGFBQWE7UUFDbkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGNBQWM7UUFDcEIsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsT0FBTyxTQUFTLEtBQUssV0FBVyxJQUFJLFNBQVMsQ0FBQyxFQUFFO1lBQ3pFLElBQUksU0FBa0IsQ0FBQztZQUN2QixJQUFJLE9BQWdCLENBQUM7WUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFhLEVBQUUsRUFBRTtnQkFDM0MsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sRUFBRTtvQkFDMUIsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTt3QkFDL0IsTUFBTSxrQ0FBa0MsQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDbkQ7b0JBQ0QsU0FBUyxHQUFHLElBQUksQ0FBQztpQkFDbEI7cUJBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRTtvQkFDL0IsSUFBSSxPQUFPLEVBQUU7d0JBQ1gsTUFBTSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDakQ7b0JBQ0QsT0FBTyxHQUFHLElBQUksQ0FBQztpQkFDaEI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLG1CQUFtQjtRQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxHQUFHLEdBQWEsRUFBRSxDQUFDO1lBRXZCLHFGQUFxRjtZQUNyRixJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CO2dCQUNqQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEtBQUssUUFBUSxFQUNyRDtnQkFDQSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUMzRDtZQUVELElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLEtBQUssTUFBTSxFQUFFO2dCQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYTtvQkFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUM7b0JBQ3pELENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ1QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWE7b0JBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDO29CQUN2RCxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUVULElBQUksU0FBUyxFQUFFO29CQUNiLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN4QjtxQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQzFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUM3QjtnQkFFRCxJQUFJLE9BQU8sRUFBRTtvQkFDWCxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDdEI7YUFDRjtpQkFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQzlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3pEO1lBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLHlCQUF5QjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzVFLE9BQU87U0FDUjtRQUNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO1FBQ2xELDJFQUEyRTtRQUMzRSxpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO1lBQzdELGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNuQyxPQUFPO1NBQ1I7UUFDRCw2RUFBNkU7UUFDN0UscURBQXFEO1FBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsc0NBQXNDLEdBQUcsSUFBSSxDQUFDO1lBQ25ELE9BQU87U0FDUjtRQUNELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsQ0FBQztRQUNyRSxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLENBQUM7UUFDckUsTUFBTSx3QkFBd0IsR0FBRyxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDekYsTUFBTSx3QkFBd0IsR0FBRyxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDekYsZ0ZBQWdGO1FBQ2hGLDRFQUE0RTtRQUM1RSxNQUFNLHFCQUFxQixHQUN6QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyw4RUFBOEU7WUFDOUUsMkNBQTJDO1lBQzNDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLEdBQUcsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEYsd0JBQXdCLENBQUMsQ0FBQztRQUU5QixvRkFBb0Y7UUFDcEYscUZBQXFGO1FBQ3JGLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsdUNBQXVDLGVBQWUscUJBQXFCLEtBQUssQ0FBQztJQUN0SCxDQUFDO0lBRUQsNERBQTREO0lBQ3BELGdCQUFnQjtRQUN0QixNQUFNLE9BQU8sR0FBZ0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDNUQsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQ3ZCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2Qyw2RUFBNkU7WUFDN0UscUVBQXFFO1lBQ3JFLE9BQU8sUUFBUSxJQUFJLFFBQVEsS0FBSyxPQUFPLENBQUM7U0FDekM7UUFDRCxvRkFBb0Y7UUFDcEYsNEZBQTRGO1FBQzVGLE9BQU8sUUFBUSxDQUFDLGVBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELENBQUM7O3lHQTVsQlUsWUFBWSx5SkFzTWIsOEJBQThCLDZCQUVsQixxQkFBcUIsNkJBQ2pDLFFBQVE7NkZBek1QLFlBQVkseTdDQUZaLENBQUMsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUMsQ0FBQyw0RUFZbkQsUUFBUSxvRkFDUixRQUFRLGtHQUNSLG1CQUFtQixxRUFDaEIsVUFBVSxxRUFDVixVQUFVLG9FQUNWLFNBQVMsbUVBQ1QsT0FBTyxzWkFWYix5QkFBeUIsa0ZBQ3pCLDBCQUEwQiw4RUFDMUIsc0JBQXNCLDRFQ3JKbkMseXlJQXVGQSxnMmdDRHFCYyxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDOzJGQWlDNUMsWUFBWTtrQkF0Q3hCLFNBQVM7K0JBQ0UsZ0JBQWdCLFlBQ2hCLGNBQWMsY0FHWixDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLFFBQ2pEO3dCQUNKLE9BQU8sRUFBRSxvQkFBb0I7d0JBQzdCLCtDQUErQyxFQUFFLHNCQUFzQjt3QkFDdkUsNENBQTRDLEVBQUUsZ0JBQWdCO3dCQUM5RCw0Q0FBNEMsRUFBRSxnQkFBZ0I7d0JBRTlELDJGQUEyRjt3QkFDM0YsdUZBQXVGO3dCQUN2Riw4RUFBOEU7d0JBQzlFLGdDQUFnQyxFQUFFLHFCQUFxQjt3QkFDdkQsaUNBQWlDLEVBQUUsbUJBQW1CO3dCQUN0RCxtQ0FBbUMsRUFBRSxxQkFBcUI7d0JBQzFELHNDQUFzQyxFQUFFLHFDQUFxQzt3QkFDN0Usd0NBQXdDLEVBQUUsc0JBQXNCO3dCQUNoRSwyQ0FBMkMsRUFBRSx5QkFBeUI7d0JBQ3RFLHlDQUF5QyxFQUFFLDZDQUE2Qzt3QkFDeEYscUJBQXFCLEVBQUUsa0JBQWtCO3dCQUN6QyxxQkFBcUIsRUFBRSx3Q0FBd0M7d0JBQy9ELG9CQUFvQixFQUFFLG9CQUFvQjt3QkFDMUMsa0JBQWtCLEVBQUUsa0JBQWtCO3dCQUN0QyxzQkFBc0IsRUFBRSw2QkFBNkI7d0JBQ3JELG9CQUFvQixFQUFFLDJCQUEyQjt3QkFDakQscUJBQXFCLEVBQUUsNEJBQTRCO3dCQUNuRCxrQkFBa0IsRUFBRSx5QkFBeUI7d0JBQzdDLGtCQUFrQixFQUFFLHlCQUF5Qjt3QkFDN0Msb0JBQW9CLEVBQUUsMkJBQTJCO3dCQUNqRCxvQkFBb0IsRUFBRSwyQkFBMkI7cUJBQ2xELGlCQUNjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxjQUFjLEVBQUMsQ0FBQzs7MEJBdU05RCxRQUFROzswQkFDUixNQUFNOzJCQUFDLDhCQUE4Qjs7MEJBRXJDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMscUJBQXFCOzswQkFDeEMsTUFBTTsyQkFBQyxRQUFROzRDQXRNTSxVQUFVO3NCQUFqQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ1ksb0JBQW9CO3NCQUFyRCxTQUFTO3VCQUFDLHFCQUFxQjtnQkFDRSxvQkFBb0I7c0JBQXJELFNBQVM7dUJBQUMscUJBQXFCO2dCQUNNLGNBQWM7c0JBQW5ELFNBQVM7dUJBQUMseUJBQXlCO2dCQUNHLGVBQWU7c0JBQXJELFNBQVM7dUJBQUMsMEJBQTBCO2dCQUNGLFdBQVc7c0JBQTdDLFNBQVM7dUJBQUMsc0JBQXNCO2dCQUVULG9CQUFvQjtzQkFBM0MsWUFBWTt1QkFBQyxRQUFRO2dCQUNrQixpQkFBaUI7c0JBQXhELFlBQVk7dUJBQUMsUUFBUSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDSCxpQkFBaUI7c0JBQW5ELFlBQVk7dUJBQUMsbUJBQW1CO2dCQUNpQixlQUFlO3NCQUFoRSxlQUFlO3VCQUFDLFVBQVUsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUM7Z0JBQ0UsZUFBZTtzQkFBaEUsZUFBZTt1QkFBQyxVQUFVLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDO2dCQUNDLGNBQWM7c0JBQTlELGVBQWU7dUJBQUMsU0FBUyxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQztnQkFDQSxhQUFhO3NCQUEzRCxlQUFlO3VCQUFDLE9BQU8sRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUM7Z0JBSXpDLGtCQUFrQjtzQkFEckIsS0FBSztnQkFVRyxLQUFLO3NCQUFiLEtBQUs7Z0JBSUYsVUFBVTtzQkFEYixLQUFLO2dCQWtCRixVQUFVO3NCQURiLEtBQUs7Z0JBb0JGLFNBQVM7c0JBRFosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtEaXJlY3Rpb25hbGl0eX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmdDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1RoZW1lUGFsZXR0ZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtZXhwZXJpbWVudGFsL21kYy1jb3JlJztcbmltcG9ydCB7XG4gIGdldE1hdEZvcm1GaWVsZER1cGxpY2F0ZWRIaW50RXJyb3IsXG4gIGdldE1hdEZvcm1GaWVsZE1pc3NpbmdDb250cm9sRXJyb3IsXG4gIE1BVF9GT1JNX0ZJRUxELFxuICBtYXRGb3JtRmllbGRBbmltYXRpb25zLFxuICBNYXRGb3JtRmllbGRDb250cm9sLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7QU5JTUFUSU9OX01PRFVMRV9UWVBFfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgTURDVGV4dEZpZWxkQWRhcHRlcixcbiAgTURDVGV4dEZpZWxkRm91bmRhdGlvbixcbiAgbnVtYmVycyBhcyBtZGNUZXh0RmllbGROdW1iZXJzLFxufSBmcm9tICdAbWF0ZXJpYWwvdGV4dGZpZWxkJztcbmltcG9ydCB7bWVyZ2UsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHt0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TUFUX0VSUk9SLCBNYXRFcnJvcn0gZnJvbSAnLi9kaXJlY3RpdmVzL2Vycm9yJztcbmltcG9ydCB7TWF0Rm9ybUZpZWxkRmxvYXRpbmdMYWJlbH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Zsb2F0aW5nLWxhYmVsJztcbmltcG9ydCB7TWF0SGludH0gZnJvbSAnLi9kaXJlY3RpdmVzL2hpbnQnO1xuaW1wb3J0IHtNYXRMYWJlbH0gZnJvbSAnLi9kaXJlY3RpdmVzL2xhYmVsJztcbmltcG9ydCB7TWF0Rm9ybUZpZWxkTGluZVJpcHBsZX0gZnJvbSAnLi9kaXJlY3RpdmVzL2xpbmUtcmlwcGxlJztcbmltcG9ydCB7TWF0Rm9ybUZpZWxkTm90Y2hlZE91dGxpbmV9IGZyb20gJy4vZGlyZWN0aXZlcy9ub3RjaGVkLW91dGxpbmUnO1xuaW1wb3J0IHtNQVRfUFJFRklYLCBNYXRQcmVmaXh9IGZyb20gJy4vZGlyZWN0aXZlcy9wcmVmaXgnO1xuaW1wb3J0IHtNQVRfU1VGRklYLCBNYXRTdWZmaXh9IGZyb20gJy4vZGlyZWN0aXZlcy9zdWZmaXgnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Qm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHl9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbi8qKiBUeXBlIGZvciB0aGUgYXZhaWxhYmxlIGZsb2F0TGFiZWwgdmFsdWVzLiAqL1xuZXhwb3J0IHR5cGUgRmxvYXRMYWJlbFR5cGUgPSAnYWx3YXlzJyB8ICdhdXRvJztcblxuLyoqIFBvc3NpYmxlIGFwcGVhcmFuY2Ugc3R5bGVzIGZvciB0aGUgZm9ybSBmaWVsZC4gKi9cbmV4cG9ydCB0eXBlIE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgPSAnZmlsbCcgfCAnb3V0bGluZSc7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZGVmYXVsdCBvcHRpb25zIGZvciB0aGUgZm9ybSBmaWVsZCB0aGF0IGNhbiBiZSBjb25maWd1cmVkXG4gKiB1c2luZyB0aGUgYE1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OU2AgaW5qZWN0aW9uIHRva2VuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hdEZvcm1GaWVsZERlZmF1bHRPcHRpb25zIHtcbiAgYXBwZWFyYW5jZT86IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIGhpZGVSZXF1aXJlZE1hcmtlcj86IGJvb2xlYW47XG4gIGZsb2F0TGFiZWw/OiBGbG9hdExhYmVsVHlwZTtcbn1cblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlXG4gKiBkZWZhdWx0IG9wdGlvbnMgZm9yIGFsbCBmb3JtIGZpZWxkIHdpdGhpbiBhbiBhcHAuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWF0Rm9ybUZpZWxkRGVmYXVsdE9wdGlvbnM+KFxuICAnTUFUX0ZPUk1fRklFTERfREVGQVVMVF9PUFRJT05TJyxcbik7XG5cbmxldCBuZXh0VW5pcXVlSWQgPSAwO1xuXG4vKiogRGVmYXVsdCBhcHBlYXJhbmNlIHVzZWQgYnkgdGhlIGZvcm0tZmllbGQuICovXG5jb25zdCBERUZBVUxUX0FQUEVBUkFOQ0U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgPSAnZmlsbCc7XG5cbi8qKiBEZWZhdWx0IGFwcGVhcmFuY2UgdXNlZCBieSB0aGUgZm9ybS1maWVsZC4gKi9cbmNvbnN0IERFRkFVTFRfRkxPQVRfTEFCRUw6IEZsb2F0TGFiZWxUeXBlID0gJ2F1dG8nO1xuXG4vKipcbiAqIERlZmF1bHQgdHJhbnNmb3JtIGZvciBkb2NrZWQgZmxvYXRpbmcgbGFiZWxzIGluIGEgTURDIHRleHQtZmllbGQuIFRoaXMgdmFsdWUgaGFzIGJlZW5cbiAqIGV4dHJhY3RlZCBmcm9tIHRoZSBNREMgdGV4dC1maWVsZCBzdHlsZXMgYmVjYXVzZSB3ZSBwcm9ncmFtbWF0aWNhbGx5IG1vZGlmeSB0aGUgZG9ja2VkXG4gKiBsYWJlbCB0cmFuc2Zvcm0sIGJ1dCBkbyBub3Qgd2FudCB0byBhY2NpZGVudGFsbHkgZGlzY2FyZCB0aGUgZGVmYXVsdCBsYWJlbCB0cmFuc2Zvcm0uXG4gKi9cbmNvbnN0IEZMT0FUSU5HX0xBQkVMX0RFRkFVTFRfRE9DS0VEX1RSQU5TRk9STSA9IGB0cmFuc2xhdGVZKC01MCUpYDtcblxuLyoqXG4gKiBIb3Jpem9udGFsIHBhZGRpbmcgaW4gcGl4ZWxzIHVzZWQgYnkgdGhlIE1EQyBmb3IgdGhlIHdyYXBwZXIgY29udGFpbmluZyBpbmZpeC5cbiAqIFRoaXMgdmFsdWUgaXMgZXh0cmFjdGVkIGZyb20gTURDJ3MgU2FzcyB2YXJpYWJsZXMuIFNlZSBgJHBhZGRpbmctaG9yaXpvbnRhbGAuXG4gKi9cbmNvbnN0IFdSQVBQRVJfSE9SSVpPTlRBTF9QQURESU5HID0gMTY7XG5cbi8qKiBDb250YWluZXIgZm9yIGZvcm0gY29udHJvbHMgdGhhdCBhcHBsaWVzIE1hdGVyaWFsIERlc2lnbiBzdHlsaW5nIGFuZCBiZWhhdmlvci4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1mb3JtLWZpZWxkJyxcbiAgZXhwb3J0QXM6ICdtYXRGb3JtRmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1maWVsZC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1maWVsZC5jc3MnXSxcbiAgYW5pbWF0aW9uczogW21hdEZvcm1GaWVsZEFuaW1hdGlvbnMudHJhbnNpdGlvbk1lc3NhZ2VzXSxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdtYXQtbWRjLWZvcm0tZmllbGQnLFxuICAgICdbY2xhc3MubWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLWFsd2F5cy1mbG9hdF0nOiAnX3Nob3VsZEFsd2F5c0Zsb2F0KCknLFxuICAgICdbY2xhc3MubWF0LW1kYy1mb3JtLWZpZWxkLWhhcy1pY29uLXByZWZpeF0nOiAnX2hhc0ljb25QcmVmaXgnLFxuICAgICdbY2xhc3MubWF0LW1kYy1mb3JtLWZpZWxkLWhhcy1pY29uLXN1ZmZpeF0nOiAnX2hhc0ljb25TdWZmaXgnLFxuXG4gICAgLy8gTm90ZSB0aGF0IHRoZXNlIGNsYXNzZXMgcmV1c2UgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIG5vbi1NREMgdmVyc2lvbiwgYmVjYXVzZSB0aGV5IGNhbiBiZVxuICAgIC8vIGNvbnNpZGVyZWQgYSBwdWJsaWMgQVBJIHNpbmNlIGN1c3RvbSBmb3JtIGNvbnRyb2xzIG1heSB1c2UgdGhlbSB0byBzdHlsZSB0aGVtc2VsdmVzLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL3B1bGwvMjA1MDIjZGlzY3Vzc2lvbl9yNDg2MTI0OTAxLlxuICAgICdbY2xhc3MubWF0LWZvcm0tZmllbGQtaW52YWxpZF0nOiAnX2NvbnRyb2wuZXJyb3JTdGF0ZScsXG4gICAgJ1tjbGFzcy5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZF0nOiAnX2NvbnRyb2wuZGlzYWJsZWQnLFxuICAgICdbY2xhc3MubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGxlZF0nOiAnX2NvbnRyb2wuYXV0b2ZpbGxlZCcsXG4gICAgJ1tjbGFzcy5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zXSc6ICdfYW5pbWF0aW9uTW9kZSA9PT0gXCJOb29wQW5pbWF0aW9uc1wiJyxcbiAgICAnW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbF0nOiAnYXBwZWFyYW5jZSA9PSBcImZpbGxcIicsXG4gICAgJ1tjbGFzcy5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVdJzogJ2FwcGVhcmFuY2UgPT0gXCJvdXRsaW5lXCInLFxuICAgICdbY2xhc3MubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlcl0nOiAnX2hhc0Zsb2F0aW5nTGFiZWwoKSAmJiAhX3Nob3VsZExhYmVsRmxvYXQoKScsXG4gICAgJ1tjbGFzcy5tYXQtZm9jdXNlZF0nOiAnX2NvbnRyb2wuZm9jdXNlZCcsXG4gICAgJ1tjbGFzcy5tYXQtcHJpbWFyeV0nOiAnY29sb3IgIT09IFwiYWNjZW50XCIgJiYgY29sb3IgIT09IFwid2FyblwiJyxcbiAgICAnW2NsYXNzLm1hdC1hY2NlbnRdJzogJ2NvbG9yID09PSBcImFjY2VudFwiJyxcbiAgICAnW2NsYXNzLm1hdC13YXJuXSc6ICdjb2xvciA9PT0gXCJ3YXJuXCInLFxuICAgICdbY2xhc3MubmctdW50b3VjaGVkXSc6ICdfc2hvdWxkRm9yd2FyZChcInVudG91Y2hlZFwiKScsXG4gICAgJ1tjbGFzcy5uZy10b3VjaGVkXSc6ICdfc2hvdWxkRm9yd2FyZChcInRvdWNoZWRcIiknLFxuICAgICdbY2xhc3MubmctcHJpc3RpbmVdJzogJ19zaG91bGRGb3J3YXJkKFwicHJpc3RpbmVcIiknLFxuICAgICdbY2xhc3MubmctZGlydHldJzogJ19zaG91bGRGb3J3YXJkKFwiZGlydHlcIiknLFxuICAgICdbY2xhc3MubmctdmFsaWRdJzogJ19zaG91bGRGb3J3YXJkKFwidmFsaWRcIiknLFxuICAgICdbY2xhc3MubmctaW52YWxpZF0nOiAnX3Nob3VsZEZvcndhcmQoXCJpbnZhbGlkXCIpJyxcbiAgICAnW2NsYXNzLm5nLXBlbmRpbmddJzogJ19zaG91bGRGb3J3YXJkKFwicGVuZGluZ1wiKScsXG4gIH0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFt7cHJvdmlkZTogTUFUX0ZPUk1fRklFTEQsIHVzZUV4aXN0aW5nOiBNYXRGb3JtRmllbGR9XSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0Rm9ybUZpZWxkXG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRDaGVja2VkLCBBZnRlckNvbnRlbnRJbml0XG57XG4gIEBWaWV3Q2hpbGQoJ3RleHRGaWVsZCcpIF90ZXh0RmllbGQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdpY29uUHJlZml4Q29udGFpbmVyJykgX2ljb25QcmVmaXhDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCd0ZXh0UHJlZml4Q29udGFpbmVyJykgX3RleHRQcmVmaXhDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKE1hdEZvcm1GaWVsZEZsb2F0aW5nTGFiZWwpIF9mbG9hdGluZ0xhYmVsOiBNYXRGb3JtRmllbGRGbG9hdGluZ0xhYmVsIHwgdW5kZWZpbmVkO1xuICBAVmlld0NoaWxkKE1hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lKSBfbm90Y2hlZE91dGxpbmU6IE1hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lIHwgdW5kZWZpbmVkO1xuICBAVmlld0NoaWxkKE1hdEZvcm1GaWVsZExpbmVSaXBwbGUpIF9saW5lUmlwcGxlOiBNYXRGb3JtRmllbGRMaW5lUmlwcGxlIHwgdW5kZWZpbmVkO1xuXG4gIEBDb250ZW50Q2hpbGQoTWF0TGFiZWwpIF9sYWJlbENoaWxkTm9uU3RhdGljOiBNYXRMYWJlbCB8IHVuZGVmaW5lZDtcbiAgQENvbnRlbnRDaGlsZChNYXRMYWJlbCwge3N0YXRpYzogdHJ1ZX0pIF9sYWJlbENoaWxkU3RhdGljOiBNYXRMYWJlbCB8IHVuZGVmaW5lZDtcbiAgQENvbnRlbnRDaGlsZChNYXRGb3JtRmllbGRDb250cm9sKSBfZm9ybUZpZWxkQ29udHJvbDogTWF0Rm9ybUZpZWxkQ29udHJvbDxhbnk+O1xuICBAQ29udGVudENoaWxkcmVuKE1BVF9QUkVGSVgsIHtkZXNjZW5kYW50czogdHJ1ZX0pIF9wcmVmaXhDaGlsZHJlbjogUXVlcnlMaXN0PE1hdFByZWZpeD47XG4gIEBDb250ZW50Q2hpbGRyZW4oTUFUX1NVRkZJWCwge2Rlc2NlbmRhbnRzOiB0cnVlfSkgX3N1ZmZpeENoaWxkcmVuOiBRdWVyeUxpc3Q8TWF0U3VmZml4PjtcbiAgQENvbnRlbnRDaGlsZHJlbihNQVRfRVJST1IsIHtkZXNjZW5kYW50czogdHJ1ZX0pIF9lcnJvckNoaWxkcmVuOiBRdWVyeUxpc3Q8TWF0RXJyb3I+O1xuICBAQ29udGVudENoaWxkcmVuKE1hdEhpbnQsIHtkZXNjZW5kYW50czogdHJ1ZX0pIF9oaW50Q2hpbGRyZW46IFF1ZXJ5TGlzdDxNYXRIaW50PjtcblxuICAvKiogV2hldGhlciB0aGUgcmVxdWlyZWQgbWFya2VyIHNob3VsZCBiZSBoaWRkZW4uICovXG4gIEBJbnB1dCgpXG4gIGdldCBoaWRlUmVxdWlyZWRNYXJrZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcjtcbiAgfVxuICBzZXQgaGlkZVJlcXVpcmVkTWFya2VyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faGlkZVJlcXVpcmVkTWFya2VyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9oaWRlUmVxdWlyZWRNYXJrZXI6IGJvb2xlYW47XG5cbiAgLyoqIFRoZSBjb2xvciBwYWxldHRlIGZvciB0aGUgZm9ybS1maWVsZC4gKi9cbiAgQElucHV0KCkgY29sb3I6IFRoZW1lUGFsZXR0ZSA9ICdwcmltYXJ5JztcblxuICAvKiogV2hldGhlciB0aGUgbGFiZWwgc2hvdWxkIGFsd2F5cyBmbG9hdCBvciBmbG9hdCBhcyB0aGUgdXNlciB0eXBlcy4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGZsb2F0TGFiZWwoKTogRmxvYXRMYWJlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9mbG9hdExhYmVsIHx8IHRoaXMuX2RlZmF1bHRzPy5mbG9hdExhYmVsIHx8IERFRkFVTFRfRkxPQVRfTEFCRUw7XG4gIH1cbiAgc2V0IGZsb2F0TGFiZWwodmFsdWU6IEZsb2F0TGFiZWxUeXBlKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9mbG9hdExhYmVsKSB7XG4gICAgICB0aGlzLl9mbG9hdExhYmVsID0gdmFsdWU7XG4gICAgICAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEN1c3RvbSBmb3JtLWZpZWxkIGNvbnRyb2xzIG9yIGRpcmVjdGl2ZXMgbWlnaHQgc2V0XG4gICAgICAvLyB0aGUgXCJmbG9hdExhYmVsXCIgaW5wdXQgYW5kIGV4cGVjdCB0aGUgZm9ybS1maWVsZCB2aWV3IHRvIGJlIHVwZGF0ZWQgYXV0b21hdGljYWxseS5cbiAgICAgIC8vIGUuZy4gYXV0b2NvbXBsZXRlIHRyaWdnZXIuIElkZWFsbHkgd2UnZCBnZXQgcmlkIG9mIHRoaXMgYW5kIHRoZSBjb25zdW1lcnMgd291bGQganVzdFxuICAgICAgLy8gZW1pdCB0aGUgXCJzdGF0ZUNoYW5nZXNcIiBvYnNlcnZhYmxlLiBUT0RPKGRldnZlcnNpb24pOiBjb25zaWRlciByZW1vdmluZy5cbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9mbG9hdExhYmVsOiBGbG9hdExhYmVsVHlwZTtcblxuICAvKiogVGhlIGZvcm0tZmllbGQgYXBwZWFyYW5jZSBzdHlsZS4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGFwcGVhcmFuY2UoKTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVhcmFuY2U7XG4gIH1cbiAgc2V0IGFwcGVhcmFuY2UodmFsdWU6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UpIHtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuX2FwcGVhcmFuY2U7XG4gICAgdGhpcy5fYXBwZWFyYW5jZSA9IHZhbHVlIHx8ICh0aGlzLl9kZWZhdWx0cyAmJiB0aGlzLl9kZWZhdWx0cy5hcHBlYXJhbmNlKSB8fCBERUZBVUxUX0FQUEVBUkFOQ0U7XG4gICAgaWYgKHRoaXMuX2FwcGVhcmFuY2UgPT09ICdvdXRsaW5lJyAmJiB0aGlzLl9hcHBlYXJhbmNlICE9PSBvbGRWYWx1ZSkge1xuICAgICAgdGhpcy5fcmVmcmVzaE91dGxpbmVOb3RjaFdpZHRoKCk7XG5cbiAgICAgIC8vIElmIHRoZSBhcHBlYXJhbmNlIGhhcyBiZWVuIHN3aXRjaGVkIHRvIGBvdXRsaW5lYCwgdGhlIGxhYmVsIG9mZnNldCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgICAgLy8gVGhlIHVwZGF0ZSBjYW4gaGFwcGVuIG9uY2UgdGhlIHZpZXcgaGFzIGJlZW4gcmUtY2hlY2tlZCwgYnV0IG5vdCBpbW1lZGlhdGVseSBiZWNhdXNlXG4gICAgICAvLyB0aGUgdmlldyBoYXMgbm90IGJlZW4gdXBkYXRlZCBhbmQgdGhlIG5vdGNoZWQtb3V0bGluZSBmbG9hdGluZyBsYWJlbCBpcyBub3QgcHJlc2VudC5cbiAgICAgIHRoaXMuX25lZWRzT3V0bGluZUxhYmVsT2Zmc2V0VXBkYXRlT25TdGFibGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9hcHBlYXJhbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlID0gREVGQVVMVF9BUFBFQVJBTkNFO1xuXG4gIC8qKiBUZXh0IGZvciB0aGUgZm9ybSBmaWVsZCBoaW50LiAqL1xuICBASW5wdXQoKVxuICBnZXQgaGludExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2hpbnRMYWJlbDtcbiAgfVxuICBzZXQgaGludExhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9oaW50TGFiZWwgPSB2YWx1ZTtcbiAgICB0aGlzLl9wcm9jZXNzSGludHMoKTtcbiAgfVxuICBwcml2YXRlIF9oaW50TGFiZWwgPSAnJztcblxuICBfaGFzSWNvblByZWZpeCA9IGZhbHNlO1xuICBfaGFzVGV4dFByZWZpeCA9IGZhbHNlO1xuICBfaGFzSWNvblN1ZmZpeCA9IGZhbHNlO1xuICBfaGFzVGV4dFN1ZmZpeCA9IGZhbHNlO1xuXG4gIC8vIFVuaXF1ZSBpZCBmb3IgdGhlIGludGVybmFsIGZvcm0gZmllbGQgbGFiZWwuXG4gIHJlYWRvbmx5IF9sYWJlbElkID0gYG1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC0ke25leHRVbmlxdWVJZCsrfWA7XG5cbiAgLy8gVW5pcXVlIGlkIGZvciB0aGUgaGludCBsYWJlbC5cbiAgcmVhZG9ubHkgX2hpbnRMYWJlbElkID0gYG1hdC1tZGMtaGludC0ke25leHRVbmlxdWVJZCsrfWA7XG5cbiAgLyoqIFN0YXRlIG9mIHRoZSBtYXQtaGludCBhbmQgbWF0LWVycm9yIGFuaW1hdGlvbnMuICovXG4gIF9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZSA9ICcnO1xuXG4gIC8qKiBXaWR0aCBvZiB0aGUgb3V0bGluZSBub3RjaC4gKi9cbiAgX291dGxpbmVOb3RjaFdpZHRoID0gMDtcblxuICAvKiogR2V0cyB0aGUgY3VycmVudCBmb3JtIGZpZWxkIGNvbnRyb2wgKi9cbiAgZ2V0IF9jb250cm9sKCk6IE1hdEZvcm1GaWVsZENvbnRyb2w8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2V4cGxpY2l0Rm9ybUZpZWxkQ29udHJvbCB8fCB0aGlzLl9mb3JtRmllbGRDb250cm9sO1xuICB9XG4gIHNldCBfY29udHJvbCh2YWx1ZSkge1xuICAgIHRoaXMuX2V4cGxpY2l0Rm9ybUZpZWxkQ29udHJvbCA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfaXNGb2N1c2VkOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2V4cGxpY2l0Rm9ybUZpZWxkQ29udHJvbDogTWF0Rm9ybUZpZWxkQ29udHJvbDxhbnk+O1xuICBwcml2YXRlIF9mb3VuZGF0aW9uOiBNRENUZXh0RmllbGRGb3VuZGF0aW9uO1xuICBwcml2YXRlIF9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlID0gZmFsc2U7XG4gIHByaXZhdGUgX2FkYXB0ZXI6IE1EQ1RleHRGaWVsZEFkYXB0ZXIgPSB7XG4gICAgYWRkQ2xhc3M6IGNsYXNzTmFtZSA9PiB0aGlzLl90ZXh0RmllbGQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSksXG4gICAgcmVtb3ZlQ2xhc3M6IGNsYXNzTmFtZSA9PiB0aGlzLl90ZXh0RmllbGQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSksXG4gICAgaGFzQ2xhc3M6IGNsYXNzTmFtZSA9PiB0aGlzLl90ZXh0RmllbGQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSxcblxuICAgIGhhc0xhYmVsOiAoKSA9PiB0aGlzLl9oYXNGbG9hdGluZ0xhYmVsKCksXG4gICAgaXNGb2N1c2VkOiAoKSA9PiB0aGlzLl9jb250cm9sLmZvY3VzZWQsXG4gICAgaGFzT3V0bGluZTogKCkgPT4gdGhpcy5faGFzT3V0bGluZSgpLFxuXG4gICAgLy8gTURDIHRleHQtZmllbGQgd2lsbCBjYWxsIHRoaXMgbWV0aG9kIG9uIGZvY3VzLCBibHVyIGFuZCB2YWx1ZSBjaGFuZ2UuIEl0IGV4cGVjdHMgdXNcbiAgICAvLyB0byB1cGRhdGUgdGhlIGZsb2F0aW5nIGxhYmVsIHN0YXRlIGFjY29yZGluZ2x5LiBUaG91Z2ggd2UgbWFrZSB0aGlzIGEgbm9vcCBiZWNhdXNlIHdlXG4gICAgLy8gd2FudCB0byByZWFjdCB0byBmbG9hdGluZyBsYWJlbCBzdGF0ZSBjaGFuZ2VzIHRocm91Z2ggY2hhbmdlIGRldGVjdGlvbi4gUmVseWluZyBvbiB0aGlzXG4gICAgLy8gYWRhcHRlciBtZXRob2Qgd291bGQgbWVhbiB0aGF0IHRoZSBsYWJlbCB3b3VsZCBub3QgdXBkYXRlIGlmIHRoZSBjdXN0b20gZm9ybS1maWVsZCBjb250cm9sXG4gICAgLy8gc2V0cyBcInNob3VsZExhYmVsRmxvYXRcIiB0byB0cnVlLCBvciBpZiB0aGUgXCJmbG9hdExhYmVsXCIgaW5wdXQgYmluZGluZyBjaGFuZ2VzIHRvIFwiYWx3YXlzXCIuXG4gICAgZmxvYXRMYWJlbDogKCkgPT4ge30sXG5cbiAgICAvLyBMYWJlbCBzaGFraW5nIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiBJdCB3aWxsIHJlcXVpcmUgYSBuZXcgQVBJIGZvciBmb3JtIGZpZWxkXG4gICAgLy8gY29udHJvbHMgdG8gdHJpZ2dlciB0aGUgc2hha2luZy4gVGhpcyBjYW4gYmUgYSBmZWF0dXJlIGluIHRoZSBmdXR1cmUuXG4gICAgLy8gVE9ETyhkZXZ2ZXJzaW9uKTogZXhwbG9yZSBvcHRpb25zIG9uIGhvdyB0byBpbnRlZ3JhdGUgbGFiZWwgc2hha2luZy5cbiAgICBzaGFrZUxhYmVsOiAoKSA9PiB7fSxcblxuICAgIC8vIE1EQyBieSBkZWZhdWx0IHVwZGF0ZXMgdGhlIG5vdGNoZWQtb3V0bGluZSB3aGVuZXZlciB0aGUgdGV4dC1maWVsZCByZWNlaXZlcyBmb2N1cywgb3JcbiAgICAvLyBpcyBiZWluZyBibHVycmVkLiBJdCBhbHNvIGNvbXB1dGVzIHRoZSBsYWJlbCB3aWR0aCBldmVyeSB0aW1lIHRoZSBub3RjaCBpcyBvcGVuZWQgb3JcbiAgICAvLyBjbG9zZWQuIFRoaXMgd29ya3MgZmluZSBpbiB0aGUgc3RhbmRhcmQgTURDIHRleHQtZmllbGQsIGJ1dCBub3QgaW4gQW5ndWxhciB3aGVyZSB0aGVcbiAgICAvLyBmbG9hdGluZyBsYWJlbCBjb3VsZCBjaGFuZ2UgdGhyb3VnaCBpbnRlcnBvbGF0aW9uLiBXZSB3YW50IHRvIGJlIGFibGUgdG8gdXBkYXRlIHRoZVxuICAgIC8vIG5vdGNoZWQgb3V0bGluZSB3aGVuZXZlciB0aGUgbGFiZWwgY29udGVudCBjaGFuZ2VzLiBBZGRpdGlvbmFsbHksIHJlbHlpbmcgb24gZm9jdXMgb3JcbiAgICAvLyBibHVyIHRvIG9wZW4gYW5kIGNsb3NlIHRoZSBub3RjaCBkb2VzIG5vdCB3b3JrIGZvciB1cyBzaW5jZSBhYnN0cmFjdCBmb3JtLWZpZWxkIGNvbnRyb2xzXG4gICAgLy8gaGF2ZSB0aGUgYWJpbGl0eSB0byBjb250cm9sIHRoZSBmbG9hdGluZyBsYWJlbCBzdGF0ZSAoaS5lLiBgc2hvdWxkTGFiZWxGbG9hdGApLCBhbmQgd2VcbiAgICAvLyB3YW50IHRvIHVwZGF0ZSB0aGUgbm90Y2ggd2hlbmV2ZXIgdGhlIGBfc2hvdWxkTGFiZWxGbG9hdCgpYCB2YWx1ZSBjaGFuZ2VzLlxuICAgIGdldExhYmVsV2lkdGg6ICgpID0+IDAsXG5cbiAgICAvLyBXZSBkb24ndCB1c2UgYHNldExhYmVsUmVxdWlyZWRgIGFzIGl0IHJlbGllcyBvbiBhIG11dGF0aW9uIG9ic2VydmVyIGZvciBkZXRlcm1pbmluZ1xuICAgIC8vIHdoZW4gdGhlIGByZXF1aXJlZGAgc3RhdGUgY2hhbmdlcy4gVGhpcyBpcyBub3QgcmVsaWFibGUgYW5kIGZsZXhpYmxlIGVub3VnaCBmb3JcbiAgICAvLyBvdXIgZm9ybSBmaWVsZCwgYXMgd2Ugc3VwcG9ydCBjdXN0b20gY29udHJvbHMgYW5kIGRldGVjdCB0aGUgcmVxdWlyZWQgc3RhdGUgdGhyb3VnaFxuICAgIC8vIGEgcHVibGljIHByb3BlcnR5IGluIHRoZSBhYnN0cmFjdCBmb3JtIGNvbnRyb2wuXG4gICAgc2V0TGFiZWxSZXF1aXJlZDogKCkgPT4ge30sXG4gICAgbm90Y2hPdXRsaW5lOiAoKSA9PiB7fSxcbiAgICBjbG9zZU91dGxpbmU6ICgpID0+IHt9LFxuXG4gICAgYWN0aXZhdGVMaW5lUmlwcGxlOiAoKSA9PiB0aGlzLl9saW5lUmlwcGxlICYmIHRoaXMuX2xpbmVSaXBwbGUuYWN0aXZhdGUoKSxcbiAgICBkZWFjdGl2YXRlTGluZVJpcHBsZTogKCkgPT4gdGhpcy5fbGluZVJpcHBsZSAmJiB0aGlzLl9saW5lUmlwcGxlLmRlYWN0aXZhdGUoKSxcblxuICAgIC8vIFRoZSBmb3VuZGF0aW9uIHRyaWVzIHRvIHJlZ2lzdGVyIGV2ZW50cyBvbiB0aGUgaW5wdXQuIFRoaXMgaXMgbm90IG1hdGNoaW5nXG4gICAgLy8gb3VyIGNvbmNlcHQgb2YgYWJzdHJhY3QgZm9ybSBmaWVsZCBjb250cm9scy4gV2UgaGFuZGxlIGVhY2ggZXZlbnQgbWFudWFsbHlcbiAgICAvLyBpbiBcInN0YXRlQ2hhbmdlc1wiIGJhc2VkIG9uIHRoZSBmb3JtLWZpZWxkIGNvbnRyb2wgc3RhdGUuIFRoZSBmb2xsb3dpbmcgZXZlbnRzXG4gICAgLy8gbmVlZCB0byBiZSBoYW5kbGVkOiBmb2N1cywgYmx1ci4gV2UgZG8gbm90IGhhbmRsZSB0aGUgXCJpbnB1dFwiIGV2ZW50IHNpbmNlXG4gICAgLy8gdGhhdCBvbmUgaXMgb25seSBuZWVkZWQgZm9yIHRoZSB0ZXh0LWZpZWxkIGNoYXJhY3RlciBjb3VudCwgd2hpY2ggd2UgZG9cbiAgICAvLyBub3QgaW1wbGVtZW50IGFzIHBhcnQgb2YgdGhlIGZvcm0tZmllbGQsIGJ1dCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgbWFudWFsbHlcbiAgICAvLyBieSBjb25zdW1lcnMgdXNpbmcgdGVtcGxhdGUgYmluZGluZ3MuXG4gICAgcmVnaXN0ZXJJbnB1dEludGVyYWN0aW9uSGFuZGxlcjogKCkgPT4ge30sXG4gICAgZGVyZWdpc3RlcklucHV0SW50ZXJhY3Rpb25IYW5kbGVyOiAoKSA9PiB7fSxcblxuICAgIC8vIFdlIGRvIG5vdCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBuYXRpdmUgaW5wdXQgc2luY2Ugd2Ugd29yayB3aXRoIGFic3RyYWN0IGZvcm0gZmllbGRcbiAgICAvLyBjb250cm9scy4gTURDIG5lZWRzIGEgcmVmZXJlbmNlIHRvIHRoZSBuYXRpdmUgaW5wdXQgb3B0aW9uYWxseSB0byBoYW5kbGUgY2hhcmFjdGVyXG4gICAgLy8gY291bnRpbmcgYW5kIHZhbHVlIHVwZGF0aW5nLiBUaGVzZSBhcmUgYm90aCB0aGluZ3Mgd2UgZG8gbm90IGhhbmRsZSBmcm9tIHdpdGhpbiB0aGVcbiAgICAvLyBmb3JtLWZpZWxkLCBzbyB3ZSBjYW4ganVzdCByZXR1cm4gbnVsbC5cbiAgICBnZXROYXRpdmVJbnB1dDogKCkgPT4gbnVsbCxcblxuICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgbmV2ZXIgYmUgY2FsbGVkIHNpbmNlIHdlIGRvIG5vdCBoYXZlIHRoZSBhYmlsaXR5IHRvIGFkZCBldmVudCBsaXN0ZW5lcnNcbiAgICAvLyB0byB0aGUgbmF0aXZlIGlucHV0LiBUaGlzIGlzIGJlY2F1c2UgdGhlIGZvcm0gY29udHJvbCBpcyBub3QgbmVjZXNzYXJpbHkgYW4gaW5wdXQsIGFuZFxuICAgIC8vIHRoZSBmb3JtIGZpZWxkIGRlYWxzIHdpdGggYWJzdHJhY3QgZm9ybSBjb250cm9scyBvZiBhbnkgdHlwZS5cbiAgICBzZXRMaW5lUmlwcGxlVHJhbnNmb3JtT3JpZ2luOiAoKSA9PiB7fSxcblxuICAgIC8vIFRoZSBmb3VuZGF0aW9uIHRyaWVzIHRvIHJlZ2lzdGVyIGNsaWNrIGFuZCBrZXlib2FyZCBldmVudHMgb24gdGhlIGZvcm0tZmllbGQgdG8gZmlndXJlIG91dFxuICAgIC8vIGlmIHRoZSBpbnB1dCB2YWx1ZSBjaGFuZ2VzIHRocm91Z2ggdXNlciBpbnRlcmFjdGlvbi4gQmFzZWQgb24gdGhhdCwgdGhlIGZvdW5kYXRpb24gdHJpZXNcbiAgICAvLyB0byBmb2N1cyB0aGUgaW5wdXQuIFNpbmNlIHdlIGRvIG5vdCBoYW5kbGUgdGhlIGlucHV0IHZhbHVlIGFzIHBhcnQgb2YgdGhlIGZvcm0tZmllbGQsIG5vclxuICAgIC8vIGl0J3MgZ3VhcmFudGVlZCB0byBiZSBhbiBpbnB1dCAoc2VlIGFkYXB0ZXIgbWV0aG9kcyBhYm92ZSksIHRoaXMgaXMgYSBub29wLlxuICAgIGRlcmVnaXN0ZXJUZXh0RmllbGRJbnRlcmFjdGlvbkhhbmRsZXI6ICgpID0+IHt9LFxuICAgIHJlZ2lzdGVyVGV4dEZpZWxkSW50ZXJhY3Rpb25IYW5kbGVyOiAoKSA9PiB7fSxcblxuICAgIC8vIFRoZSBmb3VuZGF0aW9uIHRyaWVzIHRvIHNldHVwIGEgXCJNdXRhdGlvbk9ic2VydmVyXCIgaW4gb3JkZXIgdG8gd2F0Y2ggZm9yIGF0dHJpYnV0ZXNcbiAgICAvLyBsaWtlIFwibWF4bGVuZ3RoXCIgb3IgXCJwYXR0ZXJuXCIgdG8gY2hhbmdlLiBUaGUgZm91bmRhdGlvbiB3aWxsIHVwZGF0ZSB0aGUgdmFsaWRpdHkgc3RhdGVcbiAgICAvLyBiYXNlZCBvbiB0aGF0LiBXZSBkbyBub3QgbmVlZCB0aGlzIGxvZ2ljIHNpbmNlIHdlIGhhbmRsZSB0aGUgdmFsaWRpdHkgdGhyb3VnaCB0aGVcbiAgICAvLyBhYnN0cmFjdCBmb3JtIGNvbnRyb2wgaW5zdGFuY2UuXG4gICAgZGVyZWdpc3RlclZhbGlkYXRpb25BdHRyaWJ1dGVDaGFuZ2VIYW5kbGVyOiAoKSA9PiB7fSxcbiAgICByZWdpc3RlclZhbGlkYXRpb25BdHRyaWJ1dGVDaGFuZ2VIYW5kbGVyOiAoKSA9PiBudWxsIGFzIGFueSxcblxuICAgIC8vIFVzZWQgYnkgZm91bmRhdGlvbiB0byBkeW5hbWljYWxseSByZW1vdmUgYXJpYS1kZXNjcmliZWRieSB3aGVuIHRoZSBoaW50IHRleHRcbiAgICAvLyBpcyBzaG93biBvbmx5IG9uIGludmFsaWQgc3RhdGUsIHdoaWNoIHNob3VsZCBub3QgYmUgYXBwbGljYWJsZSBoZXJlLlxuICAgIHNldElucHV0QXR0cjogKCkgPT4gdW5kZWZpbmVkLFxuICAgIHJlbW92ZUlucHV0QXR0cjogKCkgPT4gdW5kZWZpbmVkLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgX2RpcjogRGlyZWN0aW9uYWxpdHksXG4gICAgcHJpdmF0ZSBfcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMpXG4gICAgcHJpdmF0ZSBfZGVmYXVsdHM/OiBNYXRGb3JtRmllbGREZWZhdWx0T3B0aW9ucyxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFOSU1BVElPTl9NT0RVTEVfVFlQRSkgcHVibGljIF9hbmltYXRpb25Nb2RlPzogc3RyaW5nLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50PzogYW55LFxuICApIHtcbiAgICBpZiAoX2RlZmF1bHRzICYmIF9kZWZhdWx0cy5hcHBlYXJhbmNlKSB7XG4gICAgICB0aGlzLmFwcGVhcmFuY2UgPSBfZGVmYXVsdHMuYXBwZWFyYW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLl9oaWRlUmVxdWlyZWRNYXJrZXIgPSBfZGVmYXVsdHM/LmhpZGVSZXF1aXJlZE1hcmtlciA/PyBmYWxzZTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLl9mb3VuZGF0aW9uID0gbmV3IE1EQ1RleHRGaWVsZEZvdW5kYXRpb24odGhpcy5fYWRhcHRlcik7XG5cbiAgICAvLyBNREMgdXNlcyB0aGUgXCJzaG91bGRGbG9hdFwiIGdldHRlciB0byBrbm93IHdoZXRoZXIgdGhlIGxhYmVsIGlzIGN1cnJlbnRseSBmbG9hdGluZy4gVGhpc1xuICAgIC8vIGRvZXMgbm90IG1hdGNoIG91ciBpbXBsZW1lbnRhdGlvbiBvZiB3aGVuIHRoZSBsYWJlbCBmbG9hdHMgYmVjYXVzZSB3ZSBzdXBwb3J0IG1vcmUgY2FzZXMuXG4gICAgLy8gRm9yIGV4YW1wbGUsIGNvbnN1bWVycyBjYW4gc2V0IFwiQElucHV0IGZsb2F0TGFiZWxcIiB0byBhbHdheXMsIG9yIHRoZSBjdXN0b20gZm9ybS1maWVsZFxuICAgIC8vIGNvbnRyb2wgY2FuIHNldCBcIk1hdEZvcm1GaWVsZENvbnRyb2wjc2hvdWxkTGFiZWxGbG9hdFwiIHRvIHRydWUuIFRvIGVuc3VyZSB0aGF0IE1EQyBrbm93c1xuICAgIC8vIHdoZW4gdGhlIGxhYmVsIGlzIGZsb2F0aW5nLCB3ZSBvdmVyd3JpdGUgdGhlIHByb3BlcnR5IHRvIGJlIGJhc2VkIG9uIHRoZSBtZXRob2Qgd2UgdXNlIHRvXG4gICAgLy8gZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBmbG9hdGluZyBsYWJlbC5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5fZm91bmRhdGlvbiwgJ3Nob3VsZEZsb2F0Jywge1xuICAgICAgZ2V0OiAoKSA9PiB0aGlzLl9zaG91bGRMYWJlbEZsb2F0KCksXG4gICAgfSk7XG5cbiAgICAvLyBCeSBkZWZhdWx0LCB0aGUgZm91bmRhdGlvbiBkZXRlcm1pbmVzIHRoZSB2YWxpZGl0eSBvZiB0aGUgdGV4dC1maWVsZCBmcm9tIHRoZVxuICAgIC8vIHNwZWNpZmllZCBuYXRpdmUgaW5wdXQuIFNpbmNlIHdlIGRvbid0IHBhc3MgYSBuYXRpdmUgaW5wdXQgdG8gdGhlIGZvdW5kYXRpb24gYmVjYXVzZVxuICAgIC8vIGFic3RyYWN0IGZvcm0gY29udHJvbHMgYXJlIG5vdCBuZWNlc3NhcmlseSBjb25zaXN0aW5nIG9mIGFuIGlucHV0LCB3ZSBoYW5kbGUgdGhlXG4gICAgLy8gdGV4dC1maWVsZCB2YWxpZGl0eSB0aHJvdWdoIHRoZSBhYnN0cmFjdCBmb3JtLWZpZWxkIGNvbnRyb2wgc3RhdGUuXG4gICAgdGhpcy5fZm91bmRhdGlvbi5pc1ZhbGlkID0gKCkgPT4gIXRoaXMuX2NvbnRyb2wuZXJyb3JTdGF0ZTtcblxuICAgIC8vIEluaXRpYWwgZm9jdXMgc3RhdGUgc3luYy4gVGhpcyBoYXBwZW5zIHJhcmVseSwgYnV0IHdlIHdhbnQgdG8gYWNjb3VudCBmb3JcbiAgICAvLyBpdCBpbiBjYXNlIHRoZSBmb3JtLWZpZWxkIGNvbnRyb2wgaGFzIFwiZm9jdXNlZFwiIHNldCB0byB0cnVlIG9uIGluaXQuXG4gICAgdGhpcy5fdXBkYXRlRm9jdXNTdGF0ZSgpO1xuICAgIC8vIEluaXRpYWwgbm90Y2ggd2lkdGggdXBkYXRlLiBUaGlzIGlzIG5lZWRlZCBpbiBjYXNlIHRoZSB0ZXh0LWZpZWxkIGxhYmVsIGZsb2F0c1xuICAgIC8vIG9uIGluaXRpYWxpemF0aW9uLCBhbmQgcmVuZGVycyBpbnNpZGUgb2YgdGhlIG5vdGNoZWQgb3V0bGluZS5cbiAgICB0aGlzLl9yZWZyZXNoT3V0bGluZU5vdGNoV2lkdGgoKTtcbiAgICAvLyBNYWtlIHN1cmUgZm9udHMgYXJlIGxvYWRlZCBiZWZvcmUgY2FsY3VsYXRpbmcgdGhlIHdpZHRoLlxuICAgIC8vIHpvbmUuanMgY3VycmVudGx5IGRvZXNuJ3QgcGF0Y2ggdGhlIEZvbnRGYWNlU2V0IEFQSSBzbyB0d28gY2FsbHMgdG9cbiAgICAvLyBfcmVmcmVzaE91dGxpbmVOb3RjaFdpZHRoIGlzIG5lZWRlZCBmb3IgdGhpcyB0byB3b3JrIHByb3Blcmx5IGluIGFzeW5jIHRlc3RzLlxuICAgIC8vIEZ1cnRoZXJtb3JlIGlmIHRoZSBmb250IHRha2VzIGEgbG9uZyB0aW1lIHRvIGxvYWQgd2Ugd2FudCB0aGUgb3V0bGluZSBub3RjaCB0byBiZSBjbG9zZVxuICAgIC8vIHRvIHRoZSBjb3JyZWN0IHdpZHRoIGZyb20gdGhlIHN0YXJ0IHRoZW4gY29ycmVjdCBpdHNlbGYgd2hlbiB0aGUgZm9udHMgbG9hZC5cbiAgICBpZiAodGhpcy5fZG9jdW1lbnQ/LmZvbnRzPy5yZWFkeSkge1xuICAgICAgdGhpcy5fZG9jdW1lbnQuZm9udHMucmVhZHkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX3JlZnJlc2hPdXRsaW5lTm90Y2hXaWR0aCgpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb250RmFjZVNldCBpcyBub3Qgc3VwcG9ydGVkIGluIElFXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3JlZnJlc2hPdXRsaW5lTm90Y2hXaWR0aCgpLCAxMDApO1xuICAgIH1cbiAgICAvLyBFbmFibGUgYW5pbWF0aW9ucyBub3cuIFRoaXMgZW5zdXJlcyB3ZSBkb24ndCBhbmltYXRlIG9uIGluaXRpYWwgcmVuZGVyLlxuICAgIHRoaXMuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlID0gJ2VudGVyJztcbiAgICAvLyBCZWNhdXNlIHRoZSBhYm92ZSBjaGFuZ2VzIGEgdmFsdWUgdXNlZCBpbiB0aGUgdGVtcGxhdGUgYWZ0ZXIgaXQgd2FzIGNoZWNrZWQsIHdlIG5lZWRcbiAgICAvLyB0byB0cmlnZ2VyIENEIG9yIHRoZSBjaGFuZ2UgbWlnaHQgbm90IGJlIHJlZmxlY3RlZCBpZiB0aGVyZSBpcyBubyBvdGhlciBDRCBzY2hlZHVsZWQuXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuX2Fzc2VydEZvcm1GaWVsZENvbnRyb2woKTtcbiAgICB0aGlzLl9pbml0aWFsaXplQ29udHJvbCgpO1xuICAgIHRoaXMuX2luaXRpYWxpemVTdWJzY3JpcHQoKTtcbiAgICB0aGlzLl9pbml0aWFsaXplUHJlZml4QW5kU3VmZml4KCk7XG4gICAgdGhpcy5faW5pdGlhbGl6ZU91dGxpbmVMYWJlbE9mZnNldFN1YnNjcmlwdGlvbnMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICB0aGlzLl9hc3NlcnRGb3JtRmllbGRDb250cm9sKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95ZWQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGlkIG9mIHRoZSBsYWJlbCBlbGVtZW50LiBJZiBubyBsYWJlbCBpcyBwcmVzZW50LCByZXR1cm5zIGBudWxsYC5cbiAgICovXG4gIGdldExhYmVsSWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0Zsb2F0aW5nTGFiZWwoKSA/IHRoaXMuX2xhYmVsSWQgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW4gRWxlbWVudFJlZiBmb3IgdGhlIGVsZW1lbnQgdGhhdCBhIG92ZXJsYXkgYXR0YWNoZWQgdG8gdGhlIGZvcm0tZmllbGRcbiAgICogc2hvdWxkIGJlIHBvc2l0aW9uZWQgcmVsYXRpdmUgdG8uXG4gICAqL1xuICBnZXRDb25uZWN0ZWRPdmVybGF5T3JpZ2luKCk6IEVsZW1lbnRSZWYge1xuICAgIHJldHVybiB0aGlzLl90ZXh0RmllbGQgfHwgdGhpcy5fZWxlbWVudFJlZjtcbiAgfVxuXG4gIC8qKiBBbmltYXRlcyB0aGUgcGxhY2Vob2xkZXIgdXAgYW5kIGxvY2tzIGl0IGluIHBvc2l0aW9uLiAqL1xuICBfYW5pbWF0ZUFuZExvY2tMYWJlbCgpOiB2b2lkIHtcbiAgICAvLyBUaGlzIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5LiBDb25zdW1lcnMgb2YgdGhlIGZvcm0tZmllbGQgbWlnaHQgdXNlXG4gICAgLy8gdGhpcyBtZXRob2QuIGUuZy4gdGhlIGF1dG9jb21wbGV0ZSB0cmlnZ2VyLiBUaGlzIG1ldGhvZCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgbm9uLU1EQ1xuICAgIC8vIGZvcm0tZmllbGQgYmVjYXVzZSBzZXR0aW5nIFwiZmxvYXRMYWJlbFwiIHRvIFwiYWx3YXlzXCIgY2F1c2VkIHRoZSBsYWJlbCB0byBmbG9hdCB3aXRob3V0XG4gICAgLy8gYW5pbWF0aW9uLiBUaGlzIGlzIGRpZmZlcmVudCBpbiBNREMgd2hlcmUgdGhlIGxhYmVsIGFsd2F5cyBhbmltYXRlcywgc28gdGhpcyBtZXRob2RcbiAgICAvLyBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LiBUaGVyZSBkb2Vzbid0IHNlZW0gYW55IGJlbmVmaXQgaW4gYWRkaW5nIGxvZ2ljIHRvIGFsbG93IGNoYW5naW5nXG4gICAgLy8gdGhlIGZsb2F0aW5nIGxhYmVsIHN0YXRlIHdpdGhvdXQgYW5pbWF0aW9ucy4gVGhlIG5vbi1NREMgaW1wbGVtZW50YXRpb24gd2FzIGluY29uc2lzdGVudFxuICAgIC8vIGJlY2F1c2UgaXQgYWx3YXlzIGFuaW1hdGVzIGlmIFwiZmxvYXRMYWJlbFwiIGlzIHNldCBhd2F5IGZyb20gXCJhbHdheXNcIi5cbiAgICAvLyBUT0RPKGRldnZlcnNpb24pOiBjb25zaWRlciByZW1vdmluZyB0aGlzIG1ldGhvZCB3aGVuIHJlbGVhc2luZyB0aGUgTURDIGZvcm0tZmllbGQuXG4gICAgaWYgKHRoaXMuX2hhc0Zsb2F0aW5nTGFiZWwoKSkge1xuICAgICAgdGhpcy5mbG9hdExhYmVsID0gJ2Fsd2F5cyc7XG4gICAgfVxuICB9XG5cbiAgLyoqIEluaXRpYWxpemVzIHRoZSByZWdpc3RlcmVkIGZvcm0tZmllbGQgY29udHJvbC4gKi9cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZUNvbnRyb2woKSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuX2NvbnRyb2w7XG5cbiAgICBpZiAoY29udHJvbC5jb250cm9sVHlwZSkge1xuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoXG4gICAgICAgIGBtYXQtbWRjLWZvcm0tZmllbGQtdHlwZS0ke2NvbnRyb2wuY29udHJvbFR5cGV9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gU3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gdGhlIGNoaWxkIGNvbnRyb2wgc3RhdGUgaW4gb3JkZXIgdG8gdXBkYXRlIHRoZSBmb3JtIGZpZWxkIFVJLlxuICAgIGNvbnRyb2wuc3RhdGVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl91cGRhdGVGb2N1c1N0YXRlKCk7XG4gICAgICB0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgLy8gUnVuIGNoYW5nZSBkZXRlY3Rpb24gaWYgdGhlIHZhbHVlIGNoYW5nZXMuXG4gICAgaWYgKGNvbnRyb2wubmdDb250cm9sICYmIGNvbnRyb2wubmdDb250cm9sLnZhbHVlQ2hhbmdlcykge1xuICAgICAgY29udHJvbC5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jaGVja1ByZWZpeEFuZFN1ZmZpeFR5cGVzKCkge1xuICAgIHRoaXMuX2hhc0ljb25QcmVmaXggPSAhIXRoaXMuX3ByZWZpeENoaWxkcmVuLmZpbmQocCA9PiAhcC5faXNUZXh0KTtcbiAgICB0aGlzLl9oYXNUZXh0UHJlZml4ID0gISF0aGlzLl9wcmVmaXhDaGlsZHJlbi5maW5kKHAgPT4gcC5faXNUZXh0KTtcbiAgICB0aGlzLl9oYXNJY29uU3VmZml4ID0gISF0aGlzLl9zdWZmaXhDaGlsZHJlbi5maW5kKHMgPT4gIXMuX2lzVGV4dCk7XG4gICAgdGhpcy5faGFzVGV4dFN1ZmZpeCA9ICEhdGhpcy5fc3VmZml4Q2hpbGRyZW4uZmluZChzID0+IHMuX2lzVGV4dCk7XG4gIH1cblxuICAvKiogSW5pdGlhbGl6ZXMgdGhlIHByZWZpeCBhbmQgc3VmZml4IGNvbnRhaW5lcnMuICovXG4gIHByaXZhdGUgX2luaXRpYWxpemVQcmVmaXhBbmRTdWZmaXgoKSB7XG4gICAgdGhpcy5fY2hlY2tQcmVmaXhBbmRTdWZmaXhUeXBlcygpO1xuICAgIC8vIE1hcmsgdGhlIGZvcm0tZmllbGQgYXMgZGlydHkgd2hlbmV2ZXIgdGhlIHByZWZpeCBvciBzdWZmaXggY2hpbGRyZW4gY2hhbmdlLiBUaGlzXG4gICAgLy8gaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgY29uZGl0aW9uYWxseSBkaXNwbGF5IHRoZSBwcmVmaXgvc3VmZml4IGNvbnRhaW5lcnMgYmFzZWRcbiAgICAvLyBvbiB3aGV0aGVyIHRoZXJlIGlzIHByb2plY3RlZCBjb250ZW50LlxuICAgIG1lcmdlKHRoaXMuX3ByZWZpeENoaWxkcmVuLmNoYW5nZXMsIHRoaXMuX3N1ZmZpeENoaWxkcmVuLmNoYW5nZXMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9jaGVja1ByZWZpeEFuZFN1ZmZpeFR5cGVzKCk7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgc3Vic2NyaXB0IGJ5IHZhbGlkYXRpbmcgaGludHMgYW5kIHN5bmNocm9uaXppbmcgXCJhcmlhLWRlc2NyaWJlZGJ5XCIgaWRzXG4gICAqIHdpdGggdGhlIGN1c3RvbSBmb3JtLWZpZWxkIGNvbnRyb2wuIEFsc28gc3Vic2NyaWJlcyB0byBoaW50IGFuZCBlcnJvciBjaGFuZ2VzIGluIG9yZGVyXG4gICAqIHRvIGJlIGFibGUgdG8gdmFsaWRhdGUgYW5kIHN5bmNocm9uaXplIGlkcyBvbiBjaGFuZ2UuXG4gICAqL1xuICBwcml2YXRlIF9pbml0aWFsaXplU3Vic2NyaXB0KCkge1xuICAgIC8vIFJlLXZhbGlkYXRlIHdoZW4gdGhlIG51bWJlciBvZiBoaW50cyBjaGFuZ2VzLlxuICAgIHRoaXMuX2hpbnRDaGlsZHJlbi5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9wcm9jZXNzSGludHMoKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBhcmlhLWRlc2NyaWJlZCBieSB3aGVuIHRoZSBudW1iZXIgb2YgZXJyb3JzIGNoYW5nZXMuXG4gICAgdGhpcy5fZXJyb3JDaGlsZHJlbi5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgLy8gSW5pdGlhbCBtYXQtaGludCB2YWxpZGF0aW9uIGFuZCBzdWJzY3JpcHQgZGVzY3JpYmVkQnlJZHMgc3luYy5cbiAgICB0aGlzLl92YWxpZGF0ZUhpbnRzKCk7XG4gICAgdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCk7XG4gIH1cblxuICAvKiogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBmb3JtIGZpZWxkJ3MgY29udHJvbCBpcyBtaXNzaW5nLiAqL1xuICBwcml2YXRlIF9hc3NlcnRGb3JtRmllbGRDb250cm9sKCkge1xuICAgIGlmICghdGhpcy5fY29udHJvbCAmJiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSkge1xuICAgICAgdGhyb3cgZ2V0TWF0Rm9ybUZpZWxkTWlzc2luZ0NvbnRyb2xFcnJvcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUZvY3VzU3RhdGUoKSB7XG4gICAgLy8gVXN1YWxseSB0aGUgTURDIGZvdW5kYXRpb24gd291bGQgY2FsbCBcImFjdGl2YXRlRm9jdXNcIiBhbmQgXCJkZWFjdGl2YXRlRm9jdXNcIiB3aGVuZXZlclxuICAgIC8vIGNlcnRhaW4gRE9NIGV2ZW50cyBhcmUgZW1pdHRlZC4gVGhpcyBpcyBub3QgcG9zc2libGUgaW4gb3VyIGltcGxlbWVudGF0aW9uIG9mIHRoZVxuICAgIC8vIGZvcm0tZmllbGQgYmVjYXVzZSB3ZSBzdXBwb3J0IGFic3RyYWN0IGZvcm0gZmllbGQgY29udHJvbHMgd2hpY2ggYXJlIG5vdCBuZWNlc3NhcmlseVxuICAgIC8vIG9mIHR5cGUgaW5wdXQsIG5vciBkbyB3ZSBoYXZlIGEgcmVmZXJlbmNlIHRvIGEgbmF0aXZlIGZvcm0tZmllbGQgY29udHJvbCBlbGVtZW50LiBJbnN0ZWFkXG4gICAgLy8gd2UgaGFuZGxlIHRoZSBmb2N1cyBieSBjaGVja2luZyBpZiB0aGUgYWJzdHJhY3QgZm9ybS1maWVsZCBjb250cm9sIGZvY3VzZWQgc3RhdGUgY2hhbmdlcy5cbiAgICBpZiAodGhpcy5fY29udHJvbC5mb2N1c2VkICYmICF0aGlzLl9pc0ZvY3VzZWQpIHtcbiAgICAgIHRoaXMuX2lzRm9jdXNlZCA9IHRydWU7XG4gICAgICB0aGlzLl9mb3VuZGF0aW9uLmFjdGl2YXRlRm9jdXMoKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLl9jb250cm9sLmZvY3VzZWQgJiYgKHRoaXMuX2lzRm9jdXNlZCB8fCB0aGlzLl9pc0ZvY3VzZWQgPT09IG51bGwpKSB7XG4gICAgICB0aGlzLl9pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2ZvdW5kYXRpb24uZGVhY3RpdmF0ZUZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmbG9hdGluZyBsYWJlbCBpbiB0aGUgZG9ja2VkIHN0YXRlIG5lZWRzIHRvIGFjY291bnQgZm9yIHByZWZpeGVzLiBUaGUgaG9yaXpvbnRhbCBvZmZzZXRcbiAgICogaXMgY2FsY3VsYXRlZCB3aGVuZXZlciB0aGUgYXBwZWFyYW5jZSBjaGFuZ2VzIHRvIGBvdXRsaW5lYCwgdGhlIHByZWZpeGVzIGNoYW5nZSwgb3Igd2hlbiB0aGVcbiAgICogZm9ybS1maWVsZCBpcyBhZGRlZCB0byB0aGUgRE9NLiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFsbCBzdWJzY3JpcHRpb25zIHdoaWNoIGFyZSBuZWVkZWQgdG9cbiAgICogdHJpZ2dlciB0aGUgbGFiZWwgb2Zmc2V0IHVwZGF0ZS4gSW4gZ2VuZXJhbCwgd2Ugd2FudCB0byBhdm9pZCBwZXJmb3JtaW5nIG1lYXN1cmVtZW50cyBvZnRlbixcbiAgICogc28gd2UgcmVseSBvbiB0aGUgYE5nWm9uZWAgYXMgaW5kaWNhdG9yIHdoZW4gdGhlIG9mZnNldCBzaG91bGQgYmUgcmVjYWxjdWxhdGVkLCBpbnN0ZWFkIG9mXG4gICAqIGNoZWNraW5nIGV2ZXJ5IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUuXG4gICAqL1xuICBwcml2YXRlIF9pbml0aWFsaXplT3V0bGluZUxhYmVsT2Zmc2V0U3Vic2NyaXB0aW9ucygpIHtcbiAgICAvLyBXaGVuZXZlciB0aGUgcHJlZml4IGNoYW5nZXMsIHNjaGVkdWxlIGFuIHVwZGF0ZSBvZiB0aGUgbGFiZWwgb2Zmc2V0LlxuICAgIHRoaXMuX3ByZWZpeENoaWxkcmVuLmNoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgKCkgPT4gKHRoaXMuX25lZWRzT3V0bGluZUxhYmVsT2Zmc2V0VXBkYXRlT25TdGFibGUgPSB0cnVlKSxcbiAgICApO1xuXG4gICAgLy8gTm90ZSB0aGF0IHdlIGhhdmUgdG8gcnVuIG91dHNpZGUgb2YgdGhlIGBOZ1pvbmVgIGV4cGxpY2l0bHksIGluIG9yZGVyIHRvIGF2b2lkXG4gICAgLy8gdGhyb3dpbmcgdXNlcnMgaW50byBhbiBpbmZpbml0ZSBsb29wIGlmIGB6b25lLXBhdGNoLXJ4anNgIGlzIGluY2x1ZGVkLlxuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX25lZWRzT3V0bGluZUxhYmVsT2Zmc2V0VXBkYXRlT25TdGFibGUpIHtcbiAgICAgICAgICB0aGlzLl9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlT3V0bGluZUxhYmVsT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlyLmNoYW5nZVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+ICh0aGlzLl9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlID0gdHJ1ZSkpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGZsb2F0aW5nIGxhYmVsIHNob3VsZCBhbHdheXMgZmxvYXQgb3Igbm90LiAqL1xuICBfc2hvdWxkQWx3YXlzRmxvYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmxvYXRMYWJlbCA9PT0gJ2Fsd2F5cyc7XG4gIH1cblxuICBfaGFzT3V0bGluZSgpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBlYXJhbmNlID09PSAnb3V0bGluZSc7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbGFiZWwgc2hvdWxkIGRpc3BsYXkgaW4gdGhlIGluZml4LiBMYWJlbHMgaW4gdGhlIG91dGxpbmUgYXBwZWFyYW5jZSBhcmVcbiAgICogZGlzcGxheWVkIGFzIHBhcnQgb2YgdGhlIG5vdGNoZWQtb3V0bGluZSBhbmQgYXJlIGhvcml6b250YWxseSBvZmZzZXQgdG8gYWNjb3VudCBmb3JcbiAgICogZm9ybS1maWVsZCBwcmVmaXggY29udGVudC4gVGhpcyB3b24ndCB3b3JrIGluIHNlcnZlciBzaWRlIHJlbmRlcmluZyBzaW5jZSB3ZSBjYW5ub3RcbiAgICogbWVhc3VyZSB0aGUgd2lkdGggb2YgdGhlIHByZWZpeCBjb250YWluZXIuIFRvIG1ha2UgdGhlIGRvY2tlZCBsYWJlbCBhcHBlYXIgYXMgaWYgdGhlXG4gICAqIHJpZ2h0IG9mZnNldCBoYXMgYmVlbiBjYWxjdWxhdGVkLCB3ZSBmb3JjaWJseSByZW5kZXIgdGhlIGxhYmVsIGluc2lkZSB0aGUgaW5maXguIFNpbmNlXG4gICAqIHRoZSBsYWJlbCBpcyBwYXJ0IG9mIHRoZSBpbmZpeCwgdGhlIGxhYmVsIGNhbm5vdCBvdmVyZmxvdyB0aGUgcHJlZml4IGNvbnRlbnQuXG4gICAqL1xuICBfZm9yY2VEaXNwbGF5SW5maXhMYWJlbCgpIHtcbiAgICByZXR1cm4gIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciAmJiB0aGlzLl9wcmVmaXhDaGlsZHJlbi5sZW5ndGggJiYgIXRoaXMuX3Nob3VsZExhYmVsRmxvYXQoKTtcbiAgfVxuXG4gIF9oYXNGbG9hdGluZ0xhYmVsKCkge1xuICAgIHJldHVybiAhIXRoaXMuX2xhYmVsQ2hpbGROb25TdGF0aWMgfHwgISF0aGlzLl9sYWJlbENoaWxkU3RhdGljO1xuICB9XG5cbiAgX3Nob3VsZExhYmVsRmxvYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2wuc2hvdWxkTGFiZWxGbG9hdCB8fCB0aGlzLl9zaG91bGRBbHdheXNGbG9hdCgpO1xuICB9XG5cbiAgLyoqIERldGVybWluZXMgd2hldGhlciBhIGNsYXNzIGZyb20gdGhlIE5nQ29udHJvbCBzaG91bGQgYmUgZm9yd2FyZGVkIHRvIHRoZSBob3N0IGVsZW1lbnQuICovXG4gIF9zaG91bGRGb3J3YXJkKHByb3A6IGtleW9mIE5nQ29udHJvbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5nQ29udHJvbCA9IHRoaXMuX2NvbnRyb2wgPyB0aGlzLl9jb250cm9sLm5nQ29udHJvbCA6IG51bGw7XG4gICAgcmV0dXJuIG5nQ29udHJvbCAmJiBuZ0NvbnRyb2xbcHJvcF07XG4gIH1cblxuICAvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGRpc3BsYXkgaGludHMgb3IgZXJyb3JzLiAqL1xuICBfZ2V0RGlzcGxheWVkTWVzc2FnZXMoKTogJ2Vycm9yJyB8ICdoaW50JyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vycm9yQ2hpbGRyZW4gJiYgdGhpcy5fZXJyb3JDaGlsZHJlbi5sZW5ndGggPiAwICYmIHRoaXMuX2NvbnRyb2wuZXJyb3JTdGF0ZVxuICAgICAgPyAnZXJyb3InXG4gICAgICA6ICdoaW50JztcbiAgfVxuXG4gIC8qKiBSZWZyZXNoZXMgdGhlIHdpZHRoIG9mIHRoZSBvdXRsaW5lLW5vdGNoLCBpZiBwcmVzZW50LiAqL1xuICBfcmVmcmVzaE91dGxpbmVOb3RjaFdpZHRoKCkge1xuICAgIGlmICghdGhpcy5faGFzT3V0bGluZSgpIHx8ICF0aGlzLl9mbG9hdGluZ0xhYmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFRoZSBvdXRsaW5lIG5vdGNoIHNob3VsZCBiZSBiYXNlZCBvbiB0aGUgbGFiZWwgd2lkdGgsIGJ1dCBuZWVkcyB0byByZXNwZWN0IHRoZSBzY2FsaW5nXG4gICAgLy8gYXBwbGllZCB0byB0aGUgbGFiZWwgaWYgaXQgYWN0aXZlbHkgZmxvYXRzLiBTaW5jZSB0aGUgbGFiZWwgYWx3YXlzIGZsb2F0cyB3aGVuIHRoZSBub3RjaFxuICAgIC8vIGlzIG9wZW4sIHRoZSBNREMgdGV4dC1maWVsZCBmbG9hdGluZyBsYWJlbCBzY2FsaW5nIGlzIHJlc3BlY3RlZCBpbiBub3RjaCB3aWR0aCBjYWxjdWxhdGlvbi5cbiAgICB0aGlzLl9vdXRsaW5lTm90Y2hXaWR0aCA9IHRoaXMuX2Zsb2F0aW5nTGFiZWwuZ2V0V2lkdGgoKSAqIG1kY1RleHRGaWVsZE51bWJlcnMuTEFCRUxfU0NBTEU7XG4gIH1cblxuICAvKiogRG9lcyBhbnkgZXh0cmEgcHJvY2Vzc2luZyB0aGF0IGlzIHJlcXVpcmVkIHdoZW4gaGFuZGxpbmcgdGhlIGhpbnRzLiAqL1xuICBwcml2YXRlIF9wcm9jZXNzSGludHMoKSB7XG4gICAgdGhpcy5fdmFsaWRhdGVIaW50cygpO1xuICAgIHRoaXMuX3N5bmNEZXNjcmliZWRCeUlkcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSB0aGF0IHRoZXJlIGlzIGEgbWF4aW11bSBvZiBvbmUgb2YgZWFjaCBcIm1hdC1oaW50XCIgYWxpZ25tZW50IHNwZWNpZmllZC4gVGhlIGhpbnRcbiAgICogbGFiZWwgc3BlY2lmaWVkIHNldCB0aHJvdWdoIHRoZSBpbnB1dCBpcyBiZWluZyBjb25zaWRlcmVkIGFzIFwic3RhcnRcIiBhbGlnbmVkLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBhIG5vb3AgaWYgQW5ndWxhciBydW5zIGluIHByb2R1Y3Rpb24gbW9kZS5cbiAgICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlSGludHMoKSB7XG4gICAgaWYgKHRoaXMuX2hpbnRDaGlsZHJlbiAmJiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSkge1xuICAgICAgbGV0IHN0YXJ0SGludDogTWF0SGludDtcbiAgICAgIGxldCBlbmRIaW50OiBNYXRIaW50O1xuICAgICAgdGhpcy5faGludENoaWxkcmVuLmZvckVhY2goKGhpbnQ6IE1hdEhpbnQpID0+IHtcbiAgICAgICAgaWYgKGhpbnQuYWxpZ24gPT09ICdzdGFydCcpIHtcbiAgICAgICAgICBpZiAoc3RhcnRIaW50IHx8IHRoaXMuaGludExhYmVsKSB7XG4gICAgICAgICAgICB0aHJvdyBnZXRNYXRGb3JtRmllbGREdXBsaWNhdGVkSGludEVycm9yKCdzdGFydCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFydEhpbnQgPSBoaW50O1xuICAgICAgICB9IGVsc2UgaWYgKGhpbnQuYWxpZ24gPT09ICdlbmQnKSB7XG4gICAgICAgICAgaWYgKGVuZEhpbnQpIHtcbiAgICAgICAgICAgIHRocm93IGdldE1hdEZvcm1GaWVsZER1cGxpY2F0ZWRIaW50RXJyb3IoJ2VuZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbmRIaW50ID0gaGludDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGxpc3Qgb2YgZWxlbWVudCBJRHMgdGhhdCBkZXNjcmliZSB0aGUgY2hpbGQgY29udHJvbC4gVGhpcyBhbGxvd3MgdGhlIGNvbnRyb2wgdG8gdXBkYXRlXG4gICAqIGl0cyBgYXJpYS1kZXNjcmliZWRieWAgYXR0cmlidXRlIGFjY29yZGluZ2x5LlxuICAgKi9cbiAgcHJpdmF0ZSBfc3luY0Rlc2NyaWJlZEJ5SWRzKCkge1xuICAgIGlmICh0aGlzLl9jb250cm9sKSB7XG4gICAgICBsZXQgaWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAvLyBUT0RPKHdhZ25lcm1hY2llbCk6IFJlbW92ZSB0aGUgdHlwZSBjaGVjayB3aGVuIHdlIGZpbmQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBidWcuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeSAmJlxuICAgICAgICB0eXBlb2YgdGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5ID09PSAnc3RyaW5nJ1xuICAgICAgKSB7XG4gICAgICAgIGlkcy5wdXNoKC4uLnRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeS5zcGxpdCgnICcpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2dldERpc3BsYXllZE1lc3NhZ2VzKCkgPT09ICdoaW50Jykge1xuICAgICAgICBjb25zdCBzdGFydEhpbnQgPSB0aGlzLl9oaW50Q2hpbGRyZW5cbiAgICAgICAgICA/IHRoaXMuX2hpbnRDaGlsZHJlbi5maW5kKGhpbnQgPT4gaGludC5hbGlnbiA9PT0gJ3N0YXJ0JylcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNvbnN0IGVuZEhpbnQgPSB0aGlzLl9oaW50Q2hpbGRyZW5cbiAgICAgICAgICA/IHRoaXMuX2hpbnRDaGlsZHJlbi5maW5kKGhpbnQgPT4gaGludC5hbGlnbiA9PT0gJ2VuZCcpXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGlmIChzdGFydEhpbnQpIHtcbiAgICAgICAgICBpZHMucHVzaChzdGFydEhpbnQuaWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2hpbnRMYWJlbCkge1xuICAgICAgICAgIGlkcy5wdXNoKHRoaXMuX2hpbnRMYWJlbElkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbmRIaW50KSB7XG4gICAgICAgICAgaWRzLnB1c2goZW5kSGludC5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fZXJyb3JDaGlsZHJlbikge1xuICAgICAgICBpZHMucHVzaCguLi50aGlzLl9lcnJvckNoaWxkcmVuLm1hcChlcnJvciA9PiBlcnJvci5pZCkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jb250cm9sLnNldERlc2NyaWJlZEJ5SWRzKGlkcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGhvcml6b250YWwgb2Zmc2V0IG9mIHRoZSBsYWJlbCBpbiB0aGUgb3V0bGluZSBhcHBlYXJhbmNlLiBJbiB0aGUgb3V0bGluZVxuICAgKiBhcHBlYXJhbmNlLCB0aGUgbm90Y2hlZC1vdXRsaW5lIGFuZCBsYWJlbCBhcmUgbm90IHJlbGF0aXZlIHRvIHRoZSBpbmZpeCBjb250YWluZXIgYmVjYXVzZVxuICAgKiB0aGUgb3V0bGluZSBpbnRlbmRzIHRvIHN1cnJvdW5kIHByZWZpeGVzLCBzdWZmaXhlcyBhbmQgdGhlIGluZml4LiBUaGlzIG1lYW5zIHRoYXQgdGhlXG4gICAqIGZsb2F0aW5nIGxhYmVsIGJ5IGRlZmF1bHQgb3ZlcmxhcHMgcHJlZml4ZXMgaW4gdGhlIGRvY2tlZCBzdGF0ZS4gVG8gYXZvaWQgdGhpcywgd2UgbmVlZCB0b1xuICAgKiBob3Jpem9udGFsbHkgb2Zmc2V0IHRoZSBsYWJlbCBieSB0aGUgd2lkdGggb2YgdGhlIHByZWZpeCBjb250YWluZXIuIFRoZSBNREMgdGV4dC1maWVsZCBkb2VzXG4gICAqIG5vdCBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSB0aGV5IHVzZSBhIGZpeGVkIHdpZHRoIGZvciBwcmVmaXhlcy4gSGVuY2UsIHRoZXkgY2FuIHNpbXBseVxuICAgKiBpbmNvcnBvcmF0ZSB0aGUgaG9yaXpvbnRhbCBvZmZzZXQgaW50byB0aGVpciBkZWZhdWx0IHRleHQtZmllbGQgc3R5bGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlT3V0bGluZUxhYmVsT2Zmc2V0KCkge1xuICAgIGlmICghdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyIHx8ICF0aGlzLl9oYXNPdXRsaW5lKCkgfHwgIXRoaXMuX2Zsb2F0aW5nTGFiZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmxvYXRpbmdMYWJlbCA9IHRoaXMuX2Zsb2F0aW5nTGFiZWwuZWxlbWVudDtcbiAgICAvLyBJZiBubyBwcmVmaXggaXMgZGlzcGxheWVkLCByZXNldCB0aGUgb3V0bGluZSBsYWJlbCBvZmZzZXQgZnJvbSBwb3RlbnRpYWxcbiAgICAvLyBwcmV2aW91cyBsYWJlbCBvZmZzZXQgdXBkYXRlcy5cbiAgICBpZiAoISh0aGlzLl9pY29uUHJlZml4Q29udGFpbmVyIHx8IHRoaXMuX3RleHRQcmVmaXhDb250YWluZXIpKSB7XG4gICAgICBmbG9hdGluZ0xhYmVsLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJZiB0aGUgZm9ybS1maWVsZCBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIERPTSB5ZXQgKGUuZy4gaW4gYSB0YWIpLCB3ZSBkZWZlclxuICAgIC8vIHRoZSBsYWJlbCBvZmZzZXQgdXBkYXRlIHVudGlsIHRoZSB6b25lIHN0YWJpbGl6ZXMuXG4gICAgaWYgKCF0aGlzLl9pc0F0dGFjaGVkVG9Eb20oKSkge1xuICAgICAgdGhpcy5fbmVlZHNPdXRsaW5lTGFiZWxPZmZzZXRVcGRhdGVPblN0YWJsZSA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGljb25QcmVmaXhDb250YWluZXIgPSB0aGlzLl9pY29uUHJlZml4Q29udGFpbmVyPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHRleHRQcmVmaXhDb250YWluZXIgPSB0aGlzLl90ZXh0UHJlZml4Q29udGFpbmVyPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGljb25QcmVmaXhDb250YWluZXJXaWR0aCA9IGljb25QcmVmaXhDb250YWluZXI/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoID8/IDA7XG4gICAgY29uc3QgdGV4dFByZWZpeENvbnRhaW5lcldpZHRoID0gdGV4dFByZWZpeENvbnRhaW5lcj8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPz8gMDtcbiAgICAvLyBJZiB0aGUgZGlyZWN0aW9uYWxpdHkgaXMgUlRMLCB0aGUgeC1heGlzIHRyYW5zZm9ybSBuZWVkcyB0byBiZSBpbnZlcnRlZC4gVGhpc1xuICAgIC8vIGlzIGJlY2F1c2UgYHRyYW5zZm9ybVhgIGRvZXMgbm90IGNoYW5nZSBiYXNlZCBvbiB0aGUgcGFnZSBkaXJlY3Rpb25hbGl0eS5cbiAgICBjb25zdCBsYWJlbEhvcml6b250YWxPZmZzZXQgPVxuICAgICAgKHRoaXMuX2Rpci52YWx1ZSA9PT0gJ3J0bCcgPyAtMSA6IDEpICpcbiAgICAgIC8vIElmIHRoZXJlJ3MgYW4gaWNvbiBwcmVmaXgsIHdlIHN1YnRyYWN0IHRoZSBkZWZhdWx0IGhvcml6b250YWwgcGFkZGluZyBhcyB3ZVxuICAgICAgLy8gcmVzZXQgdGhlIGhvcml6b250YWwgcGFkZGluZyBpbiBDU1MgdG9vLlxuICAgICAgKChpY29uUHJlZml4Q29udGFpbmVyID8gaWNvblByZWZpeENvbnRhaW5lcldpZHRoIC0gV1JBUFBFUl9IT1JJWk9OVEFMX1BBRERJTkcgOiAwKSArXG4gICAgICAgIHRleHRQcmVmaXhDb250YWluZXJXaWR0aCk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHRyYW5zZm9ybSB0aGUgZmxvYXRpbmcgbGFiZWwgdG8gYWNjb3VudCBmb3IgdGhlIHByZWZpeCBjb250YWluZXIuIE5vdGVcbiAgICAvLyB0aGF0IHdlIGRvIG5vdCB3YW50IHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCB0cmFuc2Zvcm0gZm9yIGRvY2tlZCBmbG9hdGluZyBsYWJlbHMuXG4gICAgZmxvYXRpbmdMYWJlbC5zdHlsZS50cmFuc2Zvcm0gPSBgJHtGTE9BVElOR19MQUJFTF9ERUZBVUxUX0RPQ0tFRF9UUkFOU0ZPUk19IHRyYW5zbGF0ZVgoJHtsYWJlbEhvcml6b250YWxPZmZzZXR9cHgpYDtcbiAgfVxuXG4gIC8qKiBDaGVja3Mgd2hldGhlciB0aGUgZm9ybSBmaWVsZCBpcyBhdHRhY2hlZCB0byB0aGUgRE9NLiAqL1xuICBwcml2YXRlIF9pc0F0dGFjaGVkVG9Eb20oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGVsZW1lbnQuZ2V0Um9vdE5vZGUpIHtcbiAgICAgIGNvbnN0IHJvb3ROb2RlID0gZWxlbWVudC5nZXRSb290Tm9kZSgpO1xuICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgaW5zaWRlIHRoZSBET00gdGhlIHJvb3Qgbm9kZSB3aWxsIGJlIGVpdGhlciB0aGUgZG9jdW1lbnRcbiAgICAgIC8vIG9yIHRoZSBjbG9zZXN0IHNoYWRvdyByb290LCBvdGhlcndpc2UgaXQnbGwgYmUgdGhlIGVsZW1lbnQgaXRzZWxmLlxuICAgICAgcmV0dXJuIHJvb3ROb2RlICYmIHJvb3ROb2RlICE9PSBlbGVtZW50O1xuICAgIH1cbiAgICAvLyBPdGhlcndpc2UgZmFsbCBiYWNrIHRvIGNoZWNraW5nIGlmIGl0J3MgaW4gdGhlIGRvY3VtZW50LiBUaGlzIGRvZXNuJ3QgYWNjb3VudCBmb3JcbiAgICAvLyBzaGFkb3cgRE9NLCBob3dldmVyIGJyb3dzZXIgdGhhdCBzdXBwb3J0IHNoYWRvdyBET00gc2hvdWxkIHN1cHBvcnQgYGdldFJvb3ROb2RlYCBhcyB3ZWxsLlxuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQhLmNvbnRhaW5zKGVsZW1lbnQpO1xuICB9XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2hpZGVSZXF1aXJlZE1hcmtlcjogQm9vbGVhbklucHV0O1xufVxuIiwiPG5nLXRlbXBsYXRlICNsYWJlbFRlbXBsYXRlPlxuICA8IS0tXG4gICAgTURDIHJlY29tbWVuZHMgdGhhdCB0aGUgdGV4dC1maWVsZCBpcyBhIGA8bGFiZWw+YCBlbGVtZW50LiBUaGlzIHJhdGhlciBjb21wbGljYXRlcyB0aGVcbiAgICBzZXR1cCBiZWNhdXNlIGl0IHdvdWxkIHJlcXVpcmUgZXZlcnkgZm9ybS1maWVsZCBjb250cm9sIHRvIGV4cGxpY2l0bHkgc2V0IGBhcmlhLWxhYmVsbGVkYnlgLlxuICAgIFRoaXMgaXMgYmVjYXVzZSB0aGUgYDxsYWJlbD5gIGl0c2VsZiBjb250YWlucyBtb3JlIHRoYW4gdGhlIGFjdHVhbCBsYWJlbCAoZS5nLiBwcmVmaXgsIHN1ZmZpeFxuICAgIG9yIG90aGVyIHByb2plY3RlZCBjb250ZW50KSwgYW5kIHNjcmVlbiByZWFkZXJzIGNvdWxkIHBvdGVudGlhbGx5IHJlYWQgb3V0IHVuZGVzaXJlZCBjb250ZW50LlxuICAgIEV4Y2x1ZGluZyBlbGVtZW50cyBmcm9tIGJlaW5nIHByaW50ZWQgb3V0IHJlcXVpcmVzIHRoZW0gdG8gYmUgbWFya2VkIHdpdGggYGFyaWEtaGlkZGVuYCwgb3JcbiAgICB0aGUgZm9ybSBjb250cm9sIGlzIHNldCB0byBhIHNjb3BlZCBlbGVtZW50IGZvciB0aGUgbGFiZWwgKHVzaW5nIGBhcmlhLWxhYmVsbGVkYnlgKS4gQm90aCBvZlxuICAgIHRoZXNlIG9wdGlvbnMgc2VlbSB0byBjb21wbGljYXRlIHRoZSBzZXR1cCBiZWNhdXNlIHdlIGtub3cgZXhhY3RseSB3aGF0IGNvbnRlbnQgaXMgcmVuZGVyZWRcbiAgICBhcyBwYXJ0IG9mIHRoZSBsYWJlbCwgYW5kIHdlIGRvbid0IHdhbnQgdG8gc3BlbmQgcmVzb3VyY2VzIG9uIHdhbGtpbmcgdGhyb3VnaCBwcm9qZWN0ZWQgY29udGVudFxuICAgIHRvIHNldCBgYXJpYS1oaWRkZW5gLiBOb3IgZG8gd2Ugd2FudCB0byBzZXQgYGFyaWEtbGFiZWxsZWRieWAgb24gZXZlcnkgZm9ybSBjb250cm9sIGlmIHdlIGNvdWxkXG4gICAgc2ltcGx5IGxpbmsgdGhlIGxhYmVsIHRvIHRoZSBjb250cm9sIHVzaW5nIHRoZSBsYWJlbCBgZm9yYCBhdHRyaWJ1dGUuXG5cbiAgICAqTm90ZSo6IFdlIGFkZCBhcmlhLW93bnMgYXMgYSB3b3JrYXJvdW5kIGZvciBhbiBpc3N1ZSBpbiBKQVdTICYgTlZEQSB3aGVyZSB0aGUgbGFiZWwgaXNuJ3RcbiAgICByZWFkIGlmIGl0IGNvbWVzIGJlZm9yZSB0aGUgY29udHJvbCBpbiB0aGUgRE9NLlxuICAtLT5cbiAgPGxhYmVsIG1hdEZvcm1GaWVsZEZsb2F0aW5nTGFiZWxcbiAgICAgICAgIFtmbG9hdGluZ109XCJfc2hvdWxkTGFiZWxGbG9hdCgpXCJcbiAgICAgICAgIFtyZXF1aXJlZF09XCIhaGlkZVJlcXVpcmVkTWFya2VyICYmIF9jb250cm9sLnJlcXVpcmVkXCJcbiAgICAgICAgICpuZ0lmPVwiX2hhc0Zsb2F0aW5nTGFiZWwoKVwiXG4gICAgICAgICAoY2RrT2JzZXJ2ZUNvbnRlbnQpPVwiX3JlZnJlc2hPdXRsaW5lTm90Y2hXaWR0aCgpXCJcbiAgICAgICAgIFtjZGtPYnNlcnZlQ29udGVudERpc2FibGVkXT1cIiFfaGFzT3V0bGluZSgpXCJcbiAgICAgICAgIFtpZF09XCJfbGFiZWxJZFwiXG4gICAgICAgICBbYXR0ci5mb3JdPVwiX2NvbnRyb2wuaWRcIlxuICAgICAgICAgW2F0dHIuYXJpYS1vd25zXT1cIl9jb250cm9sLmlkXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWxhYmVsXCI+PC9uZy1jb250ZW50PlxuICA8L2xhYmVsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cIm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyIG1kYy10ZXh0LWZpZWxkXCIgI3RleHRGaWVsZFxuICAgICBbY2xhc3MubWRjLXRleHQtZmllbGQtLWZpbGxlZF09XCIhX2hhc091dGxpbmUoKVwiXG4gICAgIFtjbGFzcy5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWRdPVwiX2hhc091dGxpbmUoKVwiXG4gICAgIFtjbGFzcy5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWxdPVwiIV9oYXNGbG9hdGluZ0xhYmVsKClcIlxuICAgICBbY2xhc3MubWRjLXRleHQtZmllbGQtLWRpc2FibGVkXT1cIl9jb250cm9sLmRpc2FibGVkXCJcbiAgICAgW2NsYXNzLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkXT1cIl9jb250cm9sLmVycm9yU3RhdGVcIlxuICAgICAoY2xpY2spPVwiX2NvbnRyb2wub25Db250YWluZXJDbGljayAmJiBfY29udHJvbC5vbkNvbnRhaW5lckNsaWNrKCRldmVudClcIj5cbiAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1mb2N1cy1vdmVybGF5XCIgKm5nSWY9XCIhX2hhc091dGxpbmUoKSAmJiAhX2NvbnRyb2wuZGlzYWJsZWRcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1mbGV4XCI+XG4gICAgPGRpdiAqbmdJZj1cIl9oYXNPdXRsaW5lKClcIiBtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZVxuICAgICAgICAgW21hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lT3Blbl09XCJfc2hvdWxkTGFiZWxGbG9hdCgpXCJcbiAgICAgICAgIFttYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZVdpZHRoXT1cIl9vdXRsaW5lTm90Y2hXaWR0aFwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFfZm9yY2VEaXNwbGF5SW5maXhMYWJlbCgpXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLWljb24tcHJlZml4XCIgKm5nSWY9XCJfaGFzSWNvblByZWZpeFwiICNpY29uUHJlZml4Q29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFByZWZpeF0sIFttYXRJY29uUHJlZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLXRleHQtcHJlZml4XCIgKm5nSWY9XCJfaGFzVGV4dFByZWZpeFwiICN0ZXh0UHJlZml4Q29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFRleHRQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeFwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFfaGFzT3V0bGluZSgpIHx8IF9mb3JjZURpc3BsYXlJbmZpeExhYmVsKClcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC10ZXh0LXN1ZmZpeFwiICpuZ0lmPVwiX2hhc1RleHRTdWZmaXhcIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRUZXh0U3VmZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4XCIgKm5nSWY9XCJfaGFzSWNvblN1ZmZpeFwiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBtYXRGb3JtRmllbGRMaW5lUmlwcGxlICpuZ0lmPVwiIV9oYXNPdXRsaW5lKClcIj48L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyIG1hdC1tZGMtZm9ybS1maWVsZC1ib3R0b20tYWxpZ25cIlxuICAgICBbbmdTd2l0Y2hdPVwiX2dldERpc3BsYXllZE1lc3NhZ2VzKClcIj5cbiAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1lcnJvci13cmFwcGVyXCIgKm5nU3dpdGNoQ2FzZT1cIidlcnJvcidcIlxuICAgICAgIFtAdHJhbnNpdGlvbk1lc3NhZ2VzXT1cIl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1lcnJvclwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJcIiAqbmdTd2l0Y2hDYXNlPVwiJ2hpbnQnXCJcbiAgICAgICBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJfc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGVcIj5cbiAgICA8bWF0LWhpbnQgKm5nSWY9XCJoaW50TGFiZWxcIiBbaWRdPVwiX2hpbnRMYWJlbElkXCI+e3toaW50TGFiZWx9fTwvbWF0LWhpbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWhpbnQ6bm90KFthbGlnbj0nZW5kJ10pXCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC1zcGFjZXJcIj48L2Rpdj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtaGludFthbGlnbj0nZW5kJ11cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
659
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC1leHBlcmltZW50YWwvbWRjLWZvcm0tZmllbGQvZm9ybS1maWVsZC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC1leHBlcmltZW50YWwvbWRjLWZvcm0tZmllbGQvZm9ybS1maWVsZC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUlMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUNMLE1BQU0sRUFFTixRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUNMLGtDQUFrQyxFQUNsQyxrQ0FBa0MsRUFDbEMsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixtQkFBbUIsR0FDcEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBRUwsc0JBQXNCLEVBQ3RCLE9BQU8sSUFBSSxtQkFBbUIsR0FDL0IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLFNBQVMsRUFBVyxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDZC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Y0FBYztzQkFBbkQsU0FBUzt1QkFBQyx5QkFBeUI7Z0JBQ0csZUFBZTtzQkFBckQsU0FBUzt1QkFBQywwQkFBMEI7Z0JBQ0YsV0FBVztzQkFBN0MsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBRVQsb0JBQW9CO3NCQUEzQyxZQUFZO3VCQUFDLFFBQVE7Z0JBQ2tCLGlCQUFpQjtzQkFBeEQsWUFBWTt1QkFBQyxRQUFRLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUNILGlCQUFpQjtzQkFBbkQsWUFBWTt1QkFBQyxtQkFBbUI7Z0JBQ2lCLGVBQWU7c0JBQWhFLGVBQWU7dUJBQUMsVUFBVSxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQztnQkFDRSxlQUFlO3NCQUFoRSxlQUFlO3VCQUFDLFVBQVUsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUM7Z0JBQ0MsY0FBYztzQkFBOUQsZUFBZTt1QkFBQyxTQUFTLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDO2dCQUNBLGFBQWE7c0JBQTNELGVBQWU7dUJBQUMsT0FBTyxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQztnQkFJekMsa0JBQWtCO3NCQURyQixLQUFLO2dCQVVHLEtBQUs7c0JBQWIsS0FBSztnQkFJRixVQUFVO3NCQURiLEtBQUs7Z0JBa0JGLFVBQVU7c0JBRGIsS0FBSztnQkFvQkYsU0FBUztzQkFEWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge0RpcmVjdGlvbmFsaXR5fSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQge1BsYXRmb3JtfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZ0NvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7VGhlbWVQYWxldHRlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC1leHBlcmltZW50YWwvbWRjLWNvcmUnO1xuaW1wb3J0IHtcbiAgZ2V0TWF0Rm9ybUZpZWxkRHVwbGljYXRlZEhpbnRFcnJvcixcbiAgZ2V0TWF0Rm9ybUZpZWxkTWlzc2luZ0NvbnRyb2xFcnJvcixcbiAgTUFUX0ZPUk1fRklFTEQsXG4gIG1hdEZvcm1GaWVsZEFuaW1hdGlvbnMsXG4gIE1hdEZvcm1GaWVsZENvbnRyb2wsXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHtBTklNQVRJT05fTU9EVUxFX1RZUEV9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQge1xuICBNRENUZXh0RmllbGRBZGFwdGVyLFxuICBNRENUZXh0RmllbGRGb3VuZGF0aW9uLFxuICBudW1iZXJzIGFzIG1kY1RleHRGaWVsZE51bWJlcnMsXG59IGZyb20gJ0BtYXRlcmlhbC90ZXh0ZmllbGQnO1xuaW1wb3J0IHttZXJnZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3Rha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtNQVRfRVJST1IsIE1hdEVycm9yfSBmcm9tICcuL2RpcmVjdGl2ZXMvZXJyb3InO1xuaW1wb3J0IHtNYXRGb3JtRmllbGRGbG9hdGluZ0xhYmVsfSBmcm9tICcuL2RpcmVjdGl2ZXMvZmxvYXRpbmctbGFiZWwnO1xuaW1wb3J0IHtNYXRIaW50fSBmcm9tICcuL2RpcmVjdGl2ZXMvaGludCc7XG5pbXBvcnQge01hdExhYmVsfSBmcm9tICcuL2RpcmVjdGl2ZXMvbGFiZWwnO1xuaW1wb3J0IHtNYXRGb3JtRmllbGRMaW5lUmlwcGxlfSBmcm9tICcuL2RpcmVjdGl2ZXMvbGluZS1yaXBwbGUnO1xuaW1wb3J0IHtNYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZX0gZnJvbSAnLi9kaXJlY3RpdmVzL25vdGNoZWQtb3V0bGluZSc7XG5pbXBvcnQge01BVF9QUkVGSVgsIE1hdFByZWZpeH0gZnJvbSAnLi9kaXJlY3RpdmVzL3ByZWZpeCc7XG5pbXBvcnQge01BVF9TVUZGSVgsIE1hdFN1ZmZpeH0gZnJvbSAnLi9kaXJlY3RpdmVzL3N1ZmZpeCc7XG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxuLyoqIFR5cGUgZm9yIHRoZSBhdmFpbGFibGUgZmxvYXRMYWJlbCB2YWx1ZXMuICovXG5leHBvcnQgdHlwZSBGbG9hdExhYmVsVHlwZSA9ICdhbHdheXMnIHwgJ2F1dG8nO1xuXG4vKiogUG9zc2libGUgYXBwZWFyYW5jZSBzdHlsZXMgZm9yIHRoZSBmb3JtIGZpZWxkLiAqL1xuZXhwb3J0IHR5cGUgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSA9ICdmaWxsJyB8ICdvdXRsaW5lJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIHRoZSBmb3JtIGZpZWxkIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWRcbiAqIHVzaW5nIHRoZSBgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9PUFRJT05TYCBpbmplY3Rpb24gdG9rZW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF0Rm9ybUZpZWxkRGVmYXVsdE9wdGlvbnMge1xuICBhcHBlYXJhbmNlPzogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcbiAgaGlkZVJlcXVpcmVkTWFya2VyPzogYm9vbGVhbjtcbiAgZmxvYXRMYWJlbD86IEZsb2F0TGFiZWxUeXBlO1xufVxuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGVcbiAqIGRlZmF1bHQgb3B0aW9ucyBmb3IgYWxsIGZvcm0gZmllbGQgd2l0aGluIGFuIGFwcC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxNYXRGb3JtRmllbGREZWZhdWx0T3B0aW9ucz4oXG4gICdNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMnLFxuKTtcblxubGV0IG5leHRVbmlxdWVJZCA9IDA7XG5cbi8qKiBEZWZhdWx0IGFwcGVhcmFuY2UgdXNlZCBieSB0aGUgZm9ybS1maWVsZC4gKi9cbmNvbnN0IERFRkFVTFRfQVBQRUFSQU5DRTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSA9ICdmaWxsJztcblxuLyoqIERlZmF1bHQgYXBwZWFyYW5jZSB1c2VkIGJ5IHRoZSBmb3JtLWZpZWxkLiAqL1xuY29uc3QgREVGQVVMVF9GTE9BVF9MQUJFTDogRmxvYXRMYWJlbFR5cGUgPSAnYXV0byc7XG5cbi8qKlxuICogRGVmYXVsdCB0cmFuc2Zvcm0gZm9yIGRvY2tlZCBmbG9hdGluZyBsYWJlbHMgaW4gYSBNREMgdGV4dC1maWVsZC4gVGhpcyB2YWx1ZSBoYXMgYmVlblxuICogZXh0cmFjdGVkIGZyb20gdGhlIE1EQyB0ZXh0LWZpZWxkIHN0eWxlcyBiZWNhdXNlIHdlIHByb2dyYW1tYXRpY2FsbHkgbW9kaWZ5IHRoZSBkb2NrZWRcbiAqIGxhYmVsIHRyYW5zZm9ybSwgYnV0IGRvIG5vdCB3YW50IHRvIGFjY2lkZW50YWxseSBkaXNjYXJkIHRoZSBkZWZhdWx0IGxhYmVsIHRyYW5zZm9ybS5cbiAqL1xuY29uc3QgRkxPQVRJTkdfTEFCRUxfREVGQVVMVF9ET0NLRURfVFJBTlNGT1JNID0gYHRyYW5zbGF0ZVkoLTUwJSlgO1xuXG4vKipcbiAqIEhvcml6b250YWwgcGFkZGluZyBpbiBwaXhlbHMgdXNlZCBieSB0aGUgTURDIGZvciB0aGUgd3JhcHBlciBjb250YWluaW5nIGluZml4LlxuICogVGhpcyB2YWx1ZSBpcyBleHRyYWN0ZWQgZnJvbSBNREMncyBTYXNzIHZhcmlhYmxlcy4gU2VlIGAkcGFkZGluZy1ob3Jpem9udGFsYC5cbiAqL1xuY29uc3QgV1JBUFBFUl9IT1JJWk9OVEFMX1BBRERJTkcgPSAxNjtcblxuLyoqIENvbnRhaW5lciBmb3IgZm9ybSBjb250cm9scyB0aGF0IGFwcGxpZXMgTWF0ZXJpYWwgRGVzaWduIHN0eWxpbmcgYW5kIGJlaGF2aW9yLiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LWZvcm0tZmllbGQnLFxuICBleHBvcnRBczogJ21hdEZvcm1GaWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWZpZWxkLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLWZpZWxkLmNzcyddLFxuICBhbmltYXRpb25zOiBbbWF0Rm9ybUZpZWxkQW5pbWF0aW9ucy50cmFuc2l0aW9uTWVzc2FnZXNdLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ21hdC1tZGMtZm9ybS1maWVsZCcsXG4gICAgJ1tjbGFzcy5tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtYWx3YXlzLWZsb2F0XSc6ICdfc2hvdWxkQWx3YXlzRmxvYXQoKScsXG4gICAgJ1tjbGFzcy5tYXQtbWRjLWZvcm0tZmllbGQtaGFzLWljb24tcHJlZml4XSc6ICdfaGFzSWNvblByZWZpeCcsXG4gICAgJ1tjbGFzcy5tYXQtbWRjLWZvcm0tZmllbGQtaGFzLWljb24tc3VmZml4XSc6ICdfaGFzSWNvblN1ZmZpeCcsXG5cbiAgICAvLyBOb3RlIHRoYXQgdGhlc2UgY2xhc3NlcyByZXVzZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgbm9uLU1EQyB2ZXJzaW9uLCBiZWNhdXNlIHRoZXkgY2FuIGJlXG4gICAgLy8gY29uc2lkZXJlZCBhIHB1YmxpYyBBUEkgc2luY2UgY3VzdG9tIGZvcm0gY29udHJvbHMgbWF5IHVzZSB0aGVtIHRvIHN0eWxlIHRoZW1zZWx2ZXMuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvcHVsbC8yMDUwMiNkaXNjdXNzaW9uX3I0ODYxMjQ5MDEuXG4gICAgJ1tjbGFzcy5tYXQtZm9ybS1maWVsZC1pbnZhbGlkXSc6ICdfY29udHJvbC5lcnJvclN0YXRlJyxcbiAgICAnW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkXSc6ICdfY29udHJvbC5kaXNhYmxlZCcsXG4gICAgJ1tjbGFzcy5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbGVkXSc6ICdfY29udHJvbC5hdXRvZmlsbGVkJyxcbiAgICAnW2NsYXNzLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnNdJzogJ19hbmltYXRpb25Nb2RlID09PSBcIk5vb3BBbmltYXRpb25zXCInLFxuICAgICdbY2xhc3MubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsXSc6ICdhcHBlYXJhbmNlID09IFwiZmlsbFwiJyxcbiAgICAnW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZV0nOiAnYXBwZWFyYW5jZSA9PSBcIm91dGxpbmVcIicsXG4gICAgJ1tjbGFzcy5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyXSc6ICdfaGFzRmxvYXRpbmdMYWJlbCgpICYmICFfc2hvdWxkTGFiZWxGbG9hdCgpJyxcbiAgICAnW2NsYXNzLm1hdC1mb2N1c2VkXSc6ICdfY29udHJvbC5mb2N1c2VkJyxcbiAgICAnW2NsYXNzLm1hdC1wcmltYXJ5XSc6ICdjb2xvciAhPT0gXCJhY2NlbnRcIiAmJiBjb2xvciAhPT0gXCJ3YXJuXCInLFxuICAgICdbY2xhc3MubWF0LWFjY2VudF0nOiAnY29sb3IgPT09IFwiYWNjZW50XCInLFxuICAgICdbY2xhc3MubWF0LXdhcm5dJzogJ2NvbG9yID09PSBcIndhcm5cIicsXG4gICAgJ1tjbGFzcy5uZy11bnRvdWNoZWRdJzogJ19zaG91bGRGb3J3YXJkKFwidW50b3VjaGVkXCIpJyxcbiAgICAnW2NsYXNzLm5nLXRvdWNoZWRdJzogJ19zaG91bGRGb3J3YXJkKFwidG91Y2hlZFwiKScsXG4gICAgJ1tjbGFzcy5uZy1wcmlzdGluZV0nOiAnX3Nob3VsZEZvcndhcmQoXCJwcmlzdGluZVwiKScsXG4gICAgJ1tjbGFzcy5uZy1kaXJ0eV0nOiAnX3Nob3VsZEZvcndhcmQoXCJkaXJ0eVwiKScsXG4gICAgJ1tjbGFzcy5uZy12YWxpZF0nOiAnX3Nob3VsZEZvcndhcmQoXCJ2YWxpZFwiKScsXG4gICAgJ1tjbGFzcy5uZy1pbnZhbGlkXSc6ICdfc2hvdWxkRm9yd2FyZChcImludmFsaWRcIiknLFxuICAgICdbY2xhc3MubmctcGVuZGluZ10nOiAnX3Nob3VsZEZvcndhcmQoXCJwZW5kaW5nXCIpJyxcbiAgfSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW3twcm92aWRlOiBNQVRfRk9STV9GSUVMRCwgdXNlRXhpc3Rpbmc6IE1hdEZvcm1GaWVsZH1dLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRGb3JtRmllbGRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyQ29udGVudEluaXRcbntcbiAgQFZpZXdDaGlsZCgndGV4dEZpZWxkJykgX3RleHRGaWVsZDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2ljb25QcmVmaXhDb250YWluZXInKSBfaWNvblByZWZpeENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3RleHRQcmVmaXhDb250YWluZXInKSBfdGV4dFByZWZpeENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoTWF0Rm9ybUZpZWxkRmxvYXRpbmdMYWJlbCkgX2Zsb2F0aW5nTGFiZWw6IE1hdEZvcm1GaWVsZEZsb2F0aW5nTGFiZWwgfCB1bmRlZmluZWQ7XG4gIEBWaWV3Q2hpbGQoTWF0Rm9ybUZpZWxkTm90Y2hlZE91dGxpbmUpIF9ub3RjaGVkT3V0bGluZTogTWF0Rm9ybUZpZWxkTm90Y2hlZE91dGxpbmUgfCB1bmRlZmluZWQ7XG4gIEBWaWV3Q2hpbGQoTWF0Rm9ybUZpZWxkTGluZVJpcHBsZSkgX2xpbmVSaXBwbGU6IE1hdEZvcm1GaWVsZExpbmVSaXBwbGUgfCB1bmRlZmluZWQ7XG5cbiAgQENvbnRlbnRDaGlsZChNYXRMYWJlbCkgX2xhYmVsQ2hpbGROb25TdGF0aWM6IE1hdExhYmVsIHwgdW5kZWZpbmVkO1xuICBAQ29udGVudENoaWxkKE1hdExhYmVsLCB7c3RhdGljOiB0cnVlfSkgX2xhYmVsQ2hpbGRTdGF0aWM6IE1hdExhYmVsIHwgdW5kZWZpbmVkO1xuICBAQ29udGVudENoaWxkKE1hdEZvcm1GaWVsZENvbnRyb2wpIF9mb3JtRmllbGRDb250cm9sOiBNYXRGb3JtRmllbGRDb250cm9sPGFueT47XG4gIEBDb250ZW50Q2hpbGRyZW4oTUFUX1BSRUZJWCwge2Rlc2NlbmRhbnRzOiB0cnVlfSkgX3ByZWZpeENoaWxkcmVuOiBRdWVyeUxpc3Q8TWF0UHJlZml4PjtcbiAgQENvbnRlbnRDaGlsZHJlbihNQVRfU1VGRklYLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBfc3VmZml4Q2hpbGRyZW46IFF1ZXJ5TGlzdDxNYXRTdWZmaXg+O1xuICBAQ29udGVudENoaWxkcmVuKE1BVF9FUlJPUiwge2Rlc2NlbmRhbnRzOiB0cnVlfSkgX2Vycm9yQ2hpbGRyZW46IFF1ZXJ5TGlzdDxNYXRFcnJvcj47XG4gIEBDb250ZW50Q2hpbGRyZW4oTWF0SGludCwge2Rlc2NlbmRhbnRzOiB0cnVlfSkgX2hpbnRDaGlsZHJlbjogUXVlcnlMaXN0PE1hdEhpbnQ+O1xuXG4gIC8qKiBXaGV0aGVyIHRoZSByZXF1aXJlZCBtYXJrZXIgc2hvdWxkIGJlIGhpZGRlbi4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGhpZGVSZXF1aXJlZE1hcmtlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faGlkZVJlcXVpcmVkTWFya2VyO1xuICB9XG4gIHNldCBoaWRlUmVxdWlyZWRNYXJrZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9oaWRlUmVxdWlyZWRNYXJrZXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX2hpZGVSZXF1aXJlZE1hcmtlcjogYm9vbGVhbjtcblxuICAvKiogVGhlIGNvbG9yIHBhbGV0dGUgZm9yIHRoZSBmb3JtLWZpZWxkLiAqL1xuICBASW5wdXQoKSBjb2xvcjogVGhlbWVQYWxldHRlID0gJ3ByaW1hcnknO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBsYWJlbCBzaG91bGQgYWx3YXlzIGZsb2F0IG9yIGZsb2F0IGFzIHRoZSB1c2VyIHR5cGVzLiAqL1xuICBASW5wdXQoKVxuICBnZXQgZmxvYXRMYWJlbCgpOiBGbG9hdExhYmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zsb2F0TGFiZWwgfHwgdGhpcy5fZGVmYXVsdHM/LmZsb2F0TGFiZWwgfHwgREVGQVVMVF9GTE9BVF9MQUJFTDtcbiAgfVxuICBzZXQgZmxvYXRMYWJlbCh2YWx1ZTogRmxvYXRMYWJlbFR5cGUpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX2Zsb2F0TGFiZWwpIHtcbiAgICAgIHRoaXMuX2Zsb2F0TGFiZWwgPSB2YWx1ZTtcbiAgICAgIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gQ3VzdG9tIGZvcm0tZmllbGQgY29udHJvbHMgb3IgZGlyZWN0aXZlcyBtaWdodCBzZXRcbiAgICAgIC8vIHRoZSBcImZsb2F0TGFiZWxcIiBpbnB1dCBhbmQgZXhwZWN0IHRoZSBmb3JtLWZpZWxkIHZpZXcgdG8gYmUgdXBkYXRlZCBhdXRvbWF0aWNhbGx5LlxuICAgICAgLy8gZS5nLiBhdXRvY29tcGxldGUgdHJpZ2dlci4gSWRlYWxseSB3ZSdkIGdldCByaWQgb2YgdGhpcyBhbmQgdGhlIGNvbnN1bWVycyB3b3VsZCBqdXN0XG4gICAgICAvLyBlbWl0IHRoZSBcInN0YXRlQ2hhbmdlc1wiIG9ic2VydmFibGUuIFRPRE8oZGV2dmVyc2lvbik6IGNvbnNpZGVyIHJlbW92aW5nLlxuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2Zsb2F0TGFiZWw6IEZsb2F0TGFiZWxUeXBlO1xuXG4gIC8qKiBUaGUgZm9ybS1maWVsZCBhcHBlYXJhbmNlIHN0eWxlLiAqL1xuICBASW5wdXQoKVxuICBnZXQgYXBwZWFyYW5jZSgpOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZWFyYW5jZTtcbiAgfVxuICBzZXQgYXBwZWFyYW5jZSh2YWx1ZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSkge1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5fYXBwZWFyYW5jZTtcbiAgICB0aGlzLl9hcHBlYXJhbmNlID0gdmFsdWUgfHwgKHRoaXMuX2RlZmF1bHRzICYmIHRoaXMuX2RlZmF1bHRzLmFwcGVhcmFuY2UpIHx8IERFRkFVTFRfQVBQRUFSQU5DRTtcbiAgICBpZiAodGhpcy5fYXBwZWFyYW5jZSA9PT0gJ291dGxpbmUnICYmIHRoaXMuX2FwcGVhcmFuY2UgIT09IG9sZFZhbHVlKSB7XG4gICAgICB0aGlzLl9yZWZyZXNoT3V0bGluZU5vdGNoV2lkdGgoKTtcblxuICAgICAgLy8gSWYgdGhlIGFwcGVhcmFuY2UgaGFzIGJlZW4gc3dpdGNoZWQgdG8gYG91dGxpbmVgLCB0aGUgbGFiZWwgb2Zmc2V0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAgICAvLyBUaGUgdXBkYXRlIGNhbiBoYXBwZW4gb25jZSB0aGUgdmlldyBoYXMgYmVlbiByZS1jaGVja2VkLCBidXQgbm90IGltbWVkaWF0ZWx5IGJlY2F1c2VcbiAgICAgIC8vIHRoZSB2aWV3IGhhcyBub3QgYmVlbiB1cGRhdGVkIGFuZCB0aGUgbm90Y2hlZC1vdXRsaW5lIGZsb2F0aW5nIGxhYmVsIGlzIG5vdCBwcmVzZW50LlxuICAgICAgdGhpcy5fbmVlZHNPdXRsaW5lTGFiZWxPZmZzZXRVcGRhdGVPblN0YWJsZSA9IHRydWU7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2FwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgPSBERUZBVUxUX0FQUEVBUkFOQ0U7XG5cbiAgLyoqIFRleHQgZm9yIHRoZSBmb3JtIGZpZWxkIGhpbnQuICovXG4gIEBJbnB1dCgpXG4gIGdldCBoaW50TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faGludExhYmVsO1xuICB9XG4gIHNldCBoaW50TGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2hpbnRMYWJlbCA9IHZhbHVlO1xuICAgIHRoaXMuX3Byb2Nlc3NIaW50cygpO1xuICB9XG4gIHByaXZhdGUgX2hpbnRMYWJlbCA9ICcnO1xuXG4gIF9oYXNJY29uUHJlZml4ID0gZmFsc2U7XG4gIF9oYXNUZXh0UHJlZml4ID0gZmFsc2U7XG4gIF9oYXNJY29uU3VmZml4ID0gZmFsc2U7XG4gIF9oYXNUZXh0U3VmZml4ID0gZmFsc2U7XG5cbiAgLy8gVW5pcXVlIGlkIGZvciB0aGUgaW50ZXJuYWwgZm9ybSBmaWVsZCBsYWJlbC5cbiAgcmVhZG9ubHkgX2xhYmVsSWQgPSBgbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLSR7bmV4dFVuaXF1ZUlkKyt9YDtcblxuICAvLyBVbmlxdWUgaWQgZm9yIHRoZSBoaW50IGxhYmVsLlxuICByZWFkb25seSBfaGludExhYmVsSWQgPSBgbWF0LW1kYy1oaW50LSR7bmV4dFVuaXF1ZUlkKyt9YDtcblxuICAvKiogU3RhdGUgb2YgdGhlIG1hdC1oaW50IGFuZCBtYXQtZXJyb3IgYW5pbWF0aW9ucy4gKi9cbiAgX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlID0gJyc7XG5cbiAgLyoqIFdpZHRoIG9mIHRoZSBvdXRsaW5lIG5vdGNoLiAqL1xuICBfb3V0bGluZU5vdGNoV2lkdGggPSAwO1xuXG4gIC8qKiBHZXRzIHRoZSBjdXJyZW50IGZvcm0gZmllbGQgY29udHJvbCAqL1xuICBnZXQgX2NvbnRyb2woKTogTWF0Rm9ybUZpZWxkQ29udHJvbDxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fZXhwbGljaXRGb3JtRmllbGRDb250cm9sIHx8IHRoaXMuX2Zvcm1GaWVsZENvbnRyb2w7XG4gIH1cbiAgc2V0IF9jb250cm9sKHZhbHVlKSB7XG4gICAgdGhpcy5fZXhwbGljaXRGb3JtRmllbGRDb250cm9sID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9kZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9pc0ZvY3VzZWQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfZXhwbGljaXRGb3JtRmllbGRDb250cm9sOiBNYXRGb3JtRmllbGRDb250cm9sPGFueT47XG4gIHByaXZhdGUgX2ZvdW5kYXRpb246IE1EQ1RleHRGaWVsZEZvdW5kYXRpb247XG4gIHByaXZhdGUgX25lZWRzT3V0bGluZUxhYmVsT2Zmc2V0VXBkYXRlT25TdGFibGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYWRhcHRlcjogTURDVGV4dEZpZWxkQWRhcHRlciA9IHtcbiAgICBhZGRDbGFzczogY2xhc3NOYW1lID0+IHRoaXMuX3RleHRGaWVsZC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKSxcbiAgICByZW1vdmVDbGFzczogY2xhc3NOYW1lID0+IHRoaXMuX3RleHRGaWVsZC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKSxcbiAgICBoYXNDbGFzczogY2xhc3NOYW1lID0+IHRoaXMuX3RleHRGaWVsZC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpLFxuXG4gICAgaGFzTGFiZWw6ICgpID0+IHRoaXMuX2hhc0Zsb2F0aW5nTGFiZWwoKSxcbiAgICBpc0ZvY3VzZWQ6ICgpID0+IHRoaXMuX2NvbnRyb2wuZm9jdXNlZCxcbiAgICBoYXNPdXRsaW5lOiAoKSA9PiB0aGlzLl9oYXNPdXRsaW5lKCksXG5cbiAgICAvLyBNREMgdGV4dC1maWVsZCB3aWxsIGNhbGwgdGhpcyBtZXRob2Qgb24gZm9jdXMsIGJsdXIgYW5kIHZhbHVlIGNoYW5nZS4gSXQgZXhwZWN0cyB1c1xuICAgIC8vIHRvIHVwZGF0ZSB0aGUgZmxvYXRpbmcgbGFiZWwgc3RhdGUgYWNjb3JkaW5nbHkuIFRob3VnaCB3ZSBtYWtlIHRoaXMgYSBub29wIGJlY2F1c2Ugd2VcbiAgICAvLyB3YW50IHRvIHJlYWN0IHRvIGZsb2F0aW5nIGxhYmVsIHN0YXRlIGNoYW5nZXMgdGhyb3VnaCBjaGFuZ2UgZGV0ZWN0aW9uLiBSZWx5aW5nIG9uIHRoaXNcbiAgICAvLyBhZGFwdGVyIG1ldGhvZCB3b3VsZCBtZWFuIHRoYXQgdGhlIGxhYmVsIHdvdWxkIG5vdCB1cGRhdGUgaWYgdGhlIGN1c3RvbSBmb3JtLWZpZWxkIGNvbnRyb2xcbiAgICAvLyBzZXRzIFwic2hvdWxkTGFiZWxGbG9hdFwiIHRvIHRydWUsIG9yIGlmIHRoZSBcImZsb2F0TGFiZWxcIiBpbnB1dCBiaW5kaW5nIGNoYW5nZXMgdG8gXCJhbHdheXNcIi5cbiAgICBmbG9hdExhYmVsOiAoKSA9PiB7fSxcblxuICAgIC8vIExhYmVsIHNoYWtpbmcgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIEl0IHdpbGwgcmVxdWlyZSBhIG5ldyBBUEkgZm9yIGZvcm0gZmllbGRcbiAgICAvLyBjb250cm9scyB0byB0cmlnZ2VyIHRoZSBzaGFraW5nLiBUaGlzIGNhbiBiZSBhIGZlYXR1cmUgaW4gdGhlIGZ1dHVyZS5cbiAgICAvLyBUT0RPKGRldnZlcnNpb24pOiBleHBsb3JlIG9wdGlvbnMgb24gaG93IHRvIGludGVncmF0ZSBsYWJlbCBzaGFraW5nLlxuICAgIHNoYWtlTGFiZWw6ICgpID0+IHt9LFxuXG4gICAgLy8gTURDIGJ5IGRlZmF1bHQgdXBkYXRlcyB0aGUgbm90Y2hlZC1vdXRsaW5lIHdoZW5ldmVyIHRoZSB0ZXh0LWZpZWxkIHJlY2VpdmVzIGZvY3VzLCBvclxuICAgIC8vIGlzIGJlaW5nIGJsdXJyZWQuIEl0IGFsc28gY29tcHV0ZXMgdGhlIGxhYmVsIHdpZHRoIGV2ZXJ5IHRpbWUgdGhlIG5vdGNoIGlzIG9wZW5lZCBvclxuICAgIC8vIGNsb3NlZC4gVGhpcyB3b3JrcyBmaW5lIGluIHRoZSBzdGFuZGFyZCBNREMgdGV4dC1maWVsZCwgYnV0IG5vdCBpbiBBbmd1bGFyIHdoZXJlIHRoZVxuICAgIC8vIGZsb2F0aW5nIGxhYmVsIGNvdWxkIGNoYW5nZSB0aHJvdWdoIGludGVycG9sYXRpb24uIFdlIHdhbnQgdG8gYmUgYWJsZSB0byB1cGRhdGUgdGhlXG4gICAgLy8gbm90Y2hlZCBvdXRsaW5lIHdoZW5ldmVyIHRoZSBsYWJlbCBjb250ZW50IGNoYW5nZXMuIEFkZGl0aW9uYWxseSwgcmVseWluZyBvbiBmb2N1cyBvclxuICAgIC8vIGJsdXIgdG8gb3BlbiBhbmQgY2xvc2UgdGhlIG5vdGNoIGRvZXMgbm90IHdvcmsgZm9yIHVzIHNpbmNlIGFic3RyYWN0IGZvcm0tZmllbGQgY29udHJvbHNcbiAgICAvLyBoYXZlIHRoZSBhYmlsaXR5IHRvIGNvbnRyb2wgdGhlIGZsb2F0aW5nIGxhYmVsIHN0YXRlIChpLmUuIGBzaG91bGRMYWJlbEZsb2F0YCksIGFuZCB3ZVxuICAgIC8vIHdhbnQgdG8gdXBkYXRlIHRoZSBub3RjaCB3aGVuZXZlciB0aGUgYF9zaG91bGRMYWJlbEZsb2F0KClgIHZhbHVlIGNoYW5nZXMuXG4gICAgZ2V0TGFiZWxXaWR0aDogKCkgPT4gMCxcblxuICAgIC8vIFdlIGRvbid0IHVzZSBgc2V0TGFiZWxSZXF1aXJlZGAgYXMgaXQgcmVsaWVzIG9uIGEgbXV0YXRpb24gb2JzZXJ2ZXIgZm9yIGRldGVybWluaW5nXG4gICAgLy8gd2hlbiB0aGUgYHJlcXVpcmVkYCBzdGF0ZSBjaGFuZ2VzLiBUaGlzIGlzIG5vdCByZWxpYWJsZSBhbmQgZmxleGlibGUgZW5vdWdoIGZvclxuICAgIC8vIG91ciBmb3JtIGZpZWxkLCBhcyB3ZSBzdXBwb3J0IGN1c3RvbSBjb250cm9scyBhbmQgZGV0ZWN0IHRoZSByZXF1aXJlZCBzdGF0ZSB0aHJvdWdoXG4gICAgLy8gYSBwdWJsaWMgcHJvcGVydHkgaW4gdGhlIGFic3RyYWN0IGZvcm0gY29udHJvbC5cbiAgICBzZXRMYWJlbFJlcXVpcmVkOiAoKSA9PiB7fSxcbiAgICBub3RjaE91dGxpbmU6ICgpID0+IHt9LFxuICAgIGNsb3NlT3V0bGluZTogKCkgPT4ge30sXG5cbiAgICBhY3RpdmF0ZUxpbmVSaXBwbGU6ICgpID0+IHRoaXMuX2xpbmVSaXBwbGUgJiYgdGhpcy5fbGluZVJpcHBsZS5hY3RpdmF0ZSgpLFxuICAgIGRlYWN0aXZhdGVMaW5lUmlwcGxlOiAoKSA9PiB0aGlzLl9saW5lUmlwcGxlICYmIHRoaXMuX2xpbmVSaXBwbGUuZGVhY3RpdmF0ZSgpLFxuXG4gICAgLy8gVGhlIGZvdW5kYXRpb24gdHJpZXMgdG8gcmVnaXN0ZXIgZXZlbnRzIG9uIHRoZSBpbnB1dC4gVGhpcyBpcyBub3QgbWF0Y2hpbmdcbiAgICAvLyBvdXIgY29uY2VwdCBvZiBhYnN0cmFjdCBmb3JtIGZpZWxkIGNvbnRyb2xzLiBXZSBoYW5kbGUgZWFjaCBldmVudCBtYW51YWxseVxuICAgIC8vIGluIFwic3RhdGVDaGFuZ2VzXCIgYmFzZWQgb24gdGhlIGZvcm0tZmllbGQgY29udHJvbCBzdGF0ZS4gVGhlIGZvbGxvd2luZyBldmVudHNcbiAgICAvLyBuZWVkIHRvIGJlIGhhbmRsZWQ6IGZvY3VzLCBibHVyLiBXZSBkbyBub3QgaGFuZGxlIHRoZSBcImlucHV0XCIgZXZlbnQgc2luY2VcbiAgICAvLyB0aGF0IG9uZSBpcyBvbmx5IG5lZWRlZCBmb3IgdGhlIHRleHQtZmllbGQgY2hhcmFjdGVyIGNvdW50LCB3aGljaCB3ZSBkb1xuICAgIC8vIG5vdCBpbXBsZW1lbnQgYXMgcGFydCBvZiB0aGUgZm9ybS1maWVsZCwgYnV0IHNob3VsZCBiZSBpbXBsZW1lbnRlZCBtYW51YWxseVxuICAgIC8vIGJ5IGNvbnN1bWVycyB1c2luZyB0ZW1wbGF0ZSBiaW5kaW5ncy5cbiAgICByZWdpc3RlcklucHV0SW50ZXJhY3Rpb25IYW5kbGVyOiAoKSA9PiB7fSxcbiAgICBkZXJlZ2lzdGVySW5wdXRJbnRlcmFjdGlvbkhhbmRsZXI6ICgpID0+IHt9LFxuXG4gICAgLy8gV2UgZG8gbm90IGhhdmUgYSByZWZlcmVuY2UgdG8gdGhlIG5hdGl2ZSBpbnB1dCBzaW5jZSB3ZSB3b3JrIHdpdGggYWJzdHJhY3QgZm9ybSBmaWVsZFxuICAgIC8vIGNvbnRyb2xzLiBNREMgbmVlZHMgYSByZWZlcmVuY2UgdG8gdGhlIG5hdGl2ZSBpbnB1dCBvcHRpb25hbGx5IHRvIGhhbmRsZSBjaGFyYWN0ZXJcbiAgICAvLyBjb3VudGluZyBhbmQgdmFsdWUgdXBkYXRpbmcuIFRoZXNlIGFyZSBib3RoIHRoaW5ncyB3ZSBkbyBub3QgaGFuZGxlIGZyb20gd2l0aGluIHRoZVxuICAgIC8vIGZvcm0tZmllbGQsIHNvIHdlIGNhbiBqdXN0IHJldHVybiBudWxsLlxuICAgIGdldE5hdGl2ZUlucHV0OiAoKSA9PiBudWxsLFxuXG4gICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBuZXZlciBiZSBjYWxsZWQgc2luY2Ugd2UgZG8gbm90IGhhdmUgdGhlIGFiaWxpdHkgdG8gYWRkIGV2ZW50IGxpc3RlbmVyc1xuICAgIC8vIHRvIHRoZSBuYXRpdmUgaW5wdXQuIFRoaXMgaXMgYmVjYXVzZSB0aGUgZm9ybSBjb250cm9sIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBpbnB1dCwgYW5kXG4gICAgLy8gdGhlIGZvcm0gZmllbGQgZGVhbHMgd2l0aCBhYnN0cmFjdCBmb3JtIGNvbnRyb2xzIG9mIGFueSB0eXBlLlxuICAgIHNldExpbmVSaXBwbGVUcmFuc2Zvcm1PcmlnaW46ICgpID0+IHt9LFxuXG4gICAgLy8gVGhlIGZvdW5kYXRpb24gdHJpZXMgdG8gcmVnaXN0ZXIgY2xpY2sgYW5kIGtleWJvYXJkIGV2ZW50cyBvbiB0aGUgZm9ybS1maWVsZCB0byBmaWd1cmUgb3V0XG4gICAgLy8gaWYgdGhlIGlucHV0IHZhbHVlIGNoYW5nZXMgdGhyb3VnaCB1c2VyIGludGVyYWN0aW9uLiBCYXNlZCBvbiB0aGF0LCB0aGUgZm91bmRhdGlvbiB0cmllc1xuICAgIC8vIHRvIGZvY3VzIHRoZSBpbnB1dC4gU2luY2Ugd2UgZG8gbm90IGhhbmRsZSB0aGUgaW5wdXQgdmFsdWUgYXMgcGFydCBvZiB0aGUgZm9ybS1maWVsZCwgbm9yXG4gICAgLy8gaXQncyBndWFyYW50ZWVkIHRvIGJlIGFuIGlucHV0IChzZWUgYWRhcHRlciBtZXRob2RzIGFib3ZlKSwgdGhpcyBpcyBhIG5vb3AuXG4gICAgZGVyZWdpc3RlclRleHRGaWVsZEludGVyYWN0aW9uSGFuZGxlcjogKCkgPT4ge30sXG4gICAgcmVnaXN0ZXJUZXh0RmllbGRJbnRlcmFjdGlvbkhhbmRsZXI6ICgpID0+IHt9LFxuXG4gICAgLy8gVGhlIGZvdW5kYXRpb24gdHJpZXMgdG8gc2V0dXAgYSBcIk11dGF0aW9uT2JzZXJ2ZXJcIiBpbiBvcmRlciB0byB3YXRjaCBmb3IgYXR0cmlidXRlc1xuICAgIC8vIGxpa2UgXCJtYXhsZW5ndGhcIiBvciBcInBhdHRlcm5cIiB0byBjaGFuZ2UuIFRoZSBmb3VuZGF0aW9uIHdpbGwgdXBkYXRlIHRoZSB2YWxpZGl0eSBzdGF0ZVxuICAgIC8vIGJhc2VkIG9uIHRoYXQuIFdlIGRvIG5vdCBuZWVkIHRoaXMgbG9naWMgc2luY2Ugd2UgaGFuZGxlIHRoZSB2YWxpZGl0eSB0aHJvdWdoIHRoZVxuICAgIC8vIGFic3RyYWN0IGZvcm0gY29udHJvbCBpbnN0YW5jZS5cbiAgICBkZXJlZ2lzdGVyVmFsaWRhdGlvbkF0dHJpYnV0ZUNoYW5nZUhhbmRsZXI6ICgpID0+IHt9LFxuICAgIHJlZ2lzdGVyVmFsaWRhdGlvbkF0dHJpYnV0ZUNoYW5nZUhhbmRsZXI6ICgpID0+IG51bGwgYXMgYW55LFxuXG4gICAgLy8gVXNlZCBieSBmb3VuZGF0aW9uIHRvIGR5bmFtaWNhbGx5IHJlbW92ZSBhcmlhLWRlc2NyaWJlZGJ5IHdoZW4gdGhlIGhpbnQgdGV4dFxuICAgIC8vIGlzIHNob3duIG9ubHkgb24gaW52YWxpZCBzdGF0ZSwgd2hpY2ggc2hvdWxkIG5vdCBiZSBhcHBsaWNhYmxlIGhlcmUuXG4gICAgc2V0SW5wdXRBdHRyOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgcmVtb3ZlSW5wdXRBdHRyOiAoKSA9PiB1bmRlZmluZWQsXG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBfZGlyOiBEaXJlY3Rpb25hbGl0eSxcbiAgICBwcml2YXRlIF9wbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KE1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUylcbiAgICBwcml2YXRlIF9kZWZhdWx0cz86IE1hdEZvcm1GaWVsZERlZmF1bHRPcHRpb25zLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQU5JTUFUSU9OX01PRFVMRV9UWVBFKSBwdWJsaWMgX2FuaW1hdGlvbk1vZGU/OiBzdHJpbmcsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ/OiBhbnksXG4gICkge1xuICAgIGlmIChfZGVmYXVsdHMgJiYgX2RlZmF1bHRzLmFwcGVhcmFuY2UpIHtcbiAgICAgIHRoaXMuYXBwZWFyYW5jZSA9IF9kZWZhdWx0cy5hcHBlYXJhbmNlO1xuICAgIH1cblxuICAgIHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlciA9IF9kZWZhdWx0cz8uaGlkZVJlcXVpcmVkTWFya2VyID8/IGZhbHNlO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuX2ZvdW5kYXRpb24gPSBuZXcgTURDVGV4dEZpZWxkRm91bmRhdGlvbih0aGlzLl9hZGFwdGVyKTtcblxuICAgIC8vIE1EQyB1c2VzIHRoZSBcInNob3VsZEZsb2F0XCIgZ2V0dGVyIHRvIGtub3cgd2hldGhlciB0aGUgbGFiZWwgaXMgY3VycmVudGx5IGZsb2F0aW5nLiBUaGlzXG4gICAgLy8gZG9lcyBub3QgbWF0Y2ggb3VyIGltcGxlbWVudGF0aW9uIG9mIHdoZW4gdGhlIGxhYmVsIGZsb2F0cyBiZWNhdXNlIHdlIHN1cHBvcnQgbW9yZSBjYXNlcy5cbiAgICAvLyBGb3IgZXhhbXBsZSwgY29uc3VtZXJzIGNhbiBzZXQgXCJASW5wdXQgZmxvYXRMYWJlbFwiIHRvIGFsd2F5cywgb3IgdGhlIGN1c3RvbSBmb3JtLWZpZWxkXG4gICAgLy8gY29udHJvbCBjYW4gc2V0IFwiTWF0Rm9ybUZpZWxkQ29udHJvbCNzaG91bGRMYWJlbEZsb2F0XCIgdG8gdHJ1ZS4gVG8gZW5zdXJlIHRoYXQgTURDIGtub3dzXG4gICAgLy8gd2hlbiB0aGUgbGFiZWwgaXMgZmxvYXRpbmcsIHdlIG92ZXJ3cml0ZSB0aGUgcHJvcGVydHkgdG8gYmUgYmFzZWQgb24gdGhlIG1ldGhvZCB3ZSB1c2UgdG9cbiAgICAvLyBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGZsb2F0aW5nIGxhYmVsLlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLl9mb3VuZGF0aW9uLCAnc2hvdWxkRmxvYXQnLCB7XG4gICAgICBnZXQ6ICgpID0+IHRoaXMuX3Nob3VsZExhYmVsRmxvYXQoKSxcbiAgICB9KTtcblxuICAgIC8vIEJ5IGRlZmF1bHQsIHRoZSBmb3VuZGF0aW9uIGRldGVybWluZXMgdGhlIHZhbGlkaXR5IG9mIHRoZSB0ZXh0LWZpZWxkIGZyb20gdGhlXG4gICAgLy8gc3BlY2lmaWVkIG5hdGl2ZSBpbnB1dC4gU2luY2Ugd2UgZG9uJ3QgcGFzcyBhIG5hdGl2ZSBpbnB1dCB0byB0aGUgZm91bmRhdGlvbiBiZWNhdXNlXG4gICAgLy8gYWJzdHJhY3QgZm9ybSBjb250cm9scyBhcmUgbm90IG5lY2Vzc2FyaWx5IGNvbnNpc3Rpbmcgb2YgYW4gaW5wdXQsIHdlIGhhbmRsZSB0aGVcbiAgICAvLyB0ZXh0LWZpZWxkIHZhbGlkaXR5IHRocm91Z2ggdGhlIGFic3RyYWN0IGZvcm0tZmllbGQgY29udHJvbCBzdGF0ZS5cbiAgICB0aGlzLl9mb3VuZGF0aW9uLmlzVmFsaWQgPSAoKSA9PiAhdGhpcy5fY29udHJvbC5lcnJvclN0YXRlO1xuXG4gICAgLy8gSW5pdGlhbCBmb2N1cyBzdGF0ZSBzeW5jLiBUaGlzIGhhcHBlbnMgcmFyZWx5LCBidXQgd2Ugd2FudCB0byBhY2NvdW50IGZvclxuICAgIC8vIGl0IGluIGNhc2UgdGhlIGZvcm0tZmllbGQgY29udHJvbCBoYXMgXCJmb2N1c2VkXCIgc2V0IHRvIHRydWUgb24gaW5pdC5cbiAgICB0aGlzLl91cGRhdGVGb2N1c1N0YXRlKCk7XG4gICAgLy8gSW5pdGlhbCBub3RjaCB3aWR0aCB1cGRhdGUuIFRoaXMgaXMgbmVlZGVkIGluIGNhc2UgdGhlIHRleHQtZmllbGQgbGFiZWwgZmxvYXRzXG4gICAgLy8gb24gaW5pdGlhbGl6YXRpb24sIGFuZCByZW5kZXJzIGluc2lkZSBvZiB0aGUgbm90Y2hlZCBvdXRsaW5lLlxuICAgIHRoaXMuX3JlZnJlc2hPdXRsaW5lTm90Y2hXaWR0aCgpO1xuICAgIC8vIE1ha2Ugc3VyZSBmb250cyBhcmUgbG9hZGVkIGJlZm9yZSBjYWxjdWxhdGluZyB0aGUgd2lkdGguXG4gICAgLy8gem9uZS5qcyBjdXJyZW50bHkgZG9lc24ndCBwYXRjaCB0aGUgRm9udEZhY2VTZXQgQVBJIHNvIHR3byBjYWxscyB0b1xuICAgIC8vIF9yZWZyZXNoT3V0bGluZU5vdGNoV2lkdGggaXMgbmVlZGVkIGZvciB0aGlzIHRvIHdvcmsgcHJvcGVybHkgaW4gYXN5bmMgdGVzdHMuXG4gICAgLy8gRnVydGhlcm1vcmUgaWYgdGhlIGZvbnQgdGFrZXMgYSBsb25nIHRpbWUgdG8gbG9hZCB3ZSB3YW50IHRoZSBvdXRsaW5lIG5vdGNoIHRvIGJlIGNsb3NlXG4gICAgLy8gdG8gdGhlIGNvcnJlY3Qgd2lkdGggZnJvbSB0aGUgc3RhcnQgdGhlbiBjb3JyZWN0IGl0c2VsZiB3aGVuIHRoZSBmb250cyBsb2FkLlxuICAgIGlmICh0aGlzLl9kb2N1bWVudD8uZm9udHM/LnJlYWR5KSB7XG4gICAgICB0aGlzLl9kb2N1bWVudC5mb250cy5yZWFkeS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVmcmVzaE91dGxpbmVOb3RjaFdpZHRoKCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvbnRGYWNlU2V0IGlzIG5vdCBzdXBwb3J0ZWQgaW4gSUVcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fcmVmcmVzaE91dGxpbmVOb3RjaFdpZHRoKCksIDEwMCk7XG4gICAgfVxuICAgIC8vIEVuYWJsZSBhbmltYXRpb25zIG5vdy4gVGhpcyBlbnN1cmVzIHdlIGRvbid0IGFuaW1hdGUgb24gaW5pdGlhbCByZW5kZXIuXG4gICAgdGhpcy5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGUgPSAnZW50ZXInO1xuICAgIC8vIEJlY2F1c2UgdGhlIGFib3ZlIGNoYW5nZXMgYSB2YWx1ZSB1c2VkIGluIHRoZSB0ZW1wbGF0ZSBhZnRlciBpdCB3YXMgY2hlY2tlZCwgd2UgbmVlZFxuICAgIC8vIHRvIHRyaWdnZXIgQ0Qgb3IgdGhlIGNoYW5nZSBtaWdodCBub3QgYmUgcmVmbGVjdGVkIGlmIHRoZXJlIGlzIG5vIG90aGVyIENEIHNjaGVkdWxlZC5cbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5fYXNzZXJ0Rm9ybUZpZWxkQ29udHJvbCgpO1xuICAgIHRoaXMuX2luaXRpYWxpemVDb250cm9sKCk7XG4gICAgdGhpcy5faW5pdGlhbGl6ZVN1YnNjcmlwdCgpO1xuICAgIHRoaXMuX2luaXRpYWxpemVQcmVmaXhBbmRTdWZmaXgoKTtcbiAgICB0aGlzLl9pbml0aWFsaXplT3V0bGluZUxhYmVsT2Zmc2V0U3Vic2NyaXB0aW9ucygpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgIHRoaXMuX2Fzc2VydEZvcm1GaWVsZENvbnRyb2woKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2ZvdW5kYXRpb24/LmRlc3Ryb3koKTtcbiAgICB0aGlzLl9kZXN0cm95ZWQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGlkIG9mIHRoZSBsYWJlbCBlbGVtZW50LiBJZiBubyBsYWJlbCBpcyBwcmVzZW50LCByZXR1cm5zIGBudWxsYC5cbiAgICovXG4gIGdldExhYmVsSWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0Zsb2F0aW5nTGFiZWwoKSA/IHRoaXMuX2xhYmVsSWQgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW4gRWxlbWVudFJlZiBmb3IgdGhlIGVsZW1lbnQgdGhhdCBhIG92ZXJsYXkgYXR0YWNoZWQgdG8gdGhlIGZvcm0tZmllbGRcbiAgICogc2hvdWxkIGJlIHBvc2l0aW9uZWQgcmVsYXRpdmUgdG8uXG4gICAqL1xuICBnZXRDb25uZWN0ZWRPdmVybGF5T3JpZ2luKCk6IEVsZW1lbnRSZWYge1xuICAgIHJldHVybiB0aGlzLl90ZXh0RmllbGQgfHwgdGhpcy5fZWxlbWVudFJlZjtcbiAgfVxuXG4gIC8qKiBBbmltYXRlcyB0aGUgcGxhY2Vob2xkZXIgdXAgYW5kIGxvY2tzIGl0IGluIHBvc2l0aW9uLiAqL1xuICBfYW5pbWF0ZUFuZExvY2tMYWJlbCgpOiB2b2lkIHtcbiAgICAvLyBUaGlzIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5LiBDb25zdW1lcnMgb2YgdGhlIGZvcm0tZmllbGQgbWlnaHQgdXNlXG4gICAgLy8gdGhpcyBtZXRob2QuIGUuZy4gdGhlIGF1dG9jb21wbGV0ZSB0cmlnZ2VyLiBUaGlzIG1ldGhvZCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgbm9uLU1EQ1xuICAgIC8vIGZvcm0tZmllbGQgYmVjYXVzZSBzZXR0aW5nIFwiZmxvYXRMYWJlbFwiIHRvIFwiYWx3YXlzXCIgY2F1c2VkIHRoZSBsYWJlbCB0byBmbG9hdCB3aXRob3V0XG4gICAgLy8gYW5pbWF0aW9uLiBUaGlzIGlzIGRpZmZlcmVudCBpbiBNREMgd2hlcmUgdGhlIGxhYmVsIGFsd2F5cyBhbmltYXRlcywgc28gdGhpcyBtZXRob2RcbiAgICAvLyBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LiBUaGVyZSBkb2Vzbid0IHNlZW0gYW55IGJlbmVmaXQgaW4gYWRkaW5nIGxvZ2ljIHRvIGFsbG93IGNoYW5naW5nXG4gICAgLy8gdGhlIGZsb2F0aW5nIGxhYmVsIHN0YXRlIHdpdGhvdXQgYW5pbWF0aW9ucy4gVGhlIG5vbi1NREMgaW1wbGVtZW50YXRpb24gd2FzIGluY29uc2lzdGVudFxuICAgIC8vIGJlY2F1c2UgaXQgYWx3YXlzIGFuaW1hdGVzIGlmIFwiZmxvYXRMYWJlbFwiIGlzIHNldCBhd2F5IGZyb20gXCJhbHdheXNcIi5cbiAgICAvLyBUT0RPKGRldnZlcnNpb24pOiBjb25zaWRlciByZW1vdmluZyB0aGlzIG1ldGhvZCB3aGVuIHJlbGVhc2luZyB0aGUgTURDIGZvcm0tZmllbGQuXG4gICAgaWYgKHRoaXMuX2hhc0Zsb2F0aW5nTGFiZWwoKSkge1xuICAgICAgdGhpcy5mbG9hdExhYmVsID0gJ2Fsd2F5cyc7XG4gICAgfVxuICB9XG5cbiAgLyoqIEluaXRpYWxpemVzIHRoZSByZWdpc3RlcmVkIGZvcm0tZmllbGQgY29udHJvbC4gKi9cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZUNvbnRyb2woKSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuX2NvbnRyb2w7XG5cbiAgICBpZiAoY29udHJvbC5jb250cm9sVHlwZSkge1xuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoXG4gICAgICAgIGBtYXQtbWRjLWZvcm0tZmllbGQtdHlwZS0ke2NvbnRyb2wuY29udHJvbFR5cGV9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gU3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gdGhlIGNoaWxkIGNvbnRyb2wgc3RhdGUgaW4gb3JkZXIgdG8gdXBkYXRlIHRoZSBmb3JtIGZpZWxkIFVJLlxuICAgIGNvbnRyb2wuc3RhdGVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl91cGRhdGVGb2N1c1N0YXRlKCk7XG4gICAgICB0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgLy8gUnVuIGNoYW5nZSBkZXRlY3Rpb24gaWYgdGhlIHZhbHVlIGNoYW5nZXMuXG4gICAgaWYgKGNvbnRyb2wubmdDb250cm9sICYmIGNvbnRyb2wubmdDb250cm9sLnZhbHVlQ2hhbmdlcykge1xuICAgICAgY29udHJvbC5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jaGVja1ByZWZpeEFuZFN1ZmZpeFR5cGVzKCkge1xuICAgIHRoaXMuX2hhc0ljb25QcmVmaXggPSAhIXRoaXMuX3ByZWZpeENoaWxkcmVuLmZpbmQocCA9PiAhcC5faXNUZXh0KTtcbiAgICB0aGlzLl9oYXNUZXh0UHJlZml4ID0gISF0aGlzLl9wcmVmaXhDaGlsZHJlbi5maW5kKHAgPT4gcC5faXNUZXh0KTtcbiAgICB0aGlzLl9oYXNJY29uU3VmZml4ID0gISF0aGlzLl9zdWZmaXhDaGlsZHJlbi5maW5kKHMgPT4gIXMuX2lzVGV4dCk7XG4gICAgdGhpcy5faGFzVGV4dFN1ZmZpeCA9ICEhdGhpcy5fc3VmZml4Q2hpbGRyZW4uZmluZChzID0+IHMuX2lzVGV4dCk7XG4gIH1cblxuICAvKiogSW5pdGlhbGl6ZXMgdGhlIHByZWZpeCBhbmQgc3VmZml4IGNvbnRhaW5lcnMuICovXG4gIHByaXZhdGUgX2luaXRpYWxpemVQcmVmaXhBbmRTdWZmaXgoKSB7XG4gICAgdGhpcy5fY2hlY2tQcmVmaXhBbmRTdWZmaXhUeXBlcygpO1xuICAgIC8vIE1hcmsgdGhlIGZvcm0tZmllbGQgYXMgZGlydHkgd2hlbmV2ZXIgdGhlIHByZWZpeCBvciBzdWZmaXggY2hpbGRyZW4gY2hhbmdlLiBUaGlzXG4gICAgLy8gaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgY29uZGl0aW9uYWxseSBkaXNwbGF5IHRoZSBwcmVmaXgvc3VmZml4IGNvbnRhaW5lcnMgYmFzZWRcbiAgICAvLyBvbiB3aGV0aGVyIHRoZXJlIGlzIHByb2plY3RlZCBjb250ZW50LlxuICAgIG1lcmdlKHRoaXMuX3ByZWZpeENoaWxkcmVuLmNoYW5nZXMsIHRoaXMuX3N1ZmZpeENoaWxkcmVuLmNoYW5nZXMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9jaGVja1ByZWZpeEFuZFN1ZmZpeFR5cGVzKCk7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgc3Vic2NyaXB0IGJ5IHZhbGlkYXRpbmcgaGludHMgYW5kIHN5bmNocm9uaXppbmcgXCJhcmlhLWRlc2NyaWJlZGJ5XCIgaWRzXG4gICAqIHdpdGggdGhlIGN1c3RvbSBmb3JtLWZpZWxkIGNvbnRyb2wuIEFsc28gc3Vic2NyaWJlcyB0byBoaW50IGFuZCBlcnJvciBjaGFuZ2VzIGluIG9yZGVyXG4gICAqIHRvIGJlIGFibGUgdG8gdmFsaWRhdGUgYW5kIHN5bmNocm9uaXplIGlkcyBvbiBjaGFuZ2UuXG4gICAqL1xuICBwcml2YXRlIF9pbml0aWFsaXplU3Vic2NyaXB0KCkge1xuICAgIC8vIFJlLXZhbGlkYXRlIHdoZW4gdGhlIG51bWJlciBvZiBoaW50cyBjaGFuZ2VzLlxuICAgIHRoaXMuX2hpbnRDaGlsZHJlbi5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9wcm9jZXNzSGludHMoKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBhcmlhLWRlc2NyaWJlZCBieSB3aGVuIHRoZSBudW1iZXIgb2YgZXJyb3JzIGNoYW5nZXMuXG4gICAgdGhpcy5fZXJyb3JDaGlsZHJlbi5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgLy8gSW5pdGlhbCBtYXQtaGludCB2YWxpZGF0aW9uIGFuZCBzdWJzY3JpcHQgZGVzY3JpYmVkQnlJZHMgc3luYy5cbiAgICB0aGlzLl92YWxpZGF0ZUhpbnRzKCk7XG4gICAgdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCk7XG4gIH1cblxuICAvKiogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBmb3JtIGZpZWxkJ3MgY29udHJvbCBpcyBtaXNzaW5nLiAqL1xuICBwcml2YXRlIF9hc3NlcnRGb3JtRmllbGRDb250cm9sKCkge1xuICAgIGlmICghdGhpcy5fY29udHJvbCAmJiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSkge1xuICAgICAgdGhyb3cgZ2V0TWF0Rm9ybUZpZWxkTWlzc2luZ0NvbnRyb2xFcnJvcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUZvY3VzU3RhdGUoKSB7XG4gICAgLy8gVXN1YWxseSB0aGUgTURDIGZvdW5kYXRpb24gd291bGQgY2FsbCBcImFjdGl2YXRlRm9jdXNcIiBhbmQgXCJkZWFjdGl2YXRlRm9jdXNcIiB3aGVuZXZlclxuICAgIC8vIGNlcnRhaW4gRE9NIGV2ZW50cyBhcmUgZW1pdHRlZC4gVGhpcyBpcyBub3QgcG9zc2libGUgaW4gb3VyIGltcGxlbWVudGF0aW9uIG9mIHRoZVxuICAgIC8vIGZvcm0tZmllbGQgYmVjYXVzZSB3ZSBzdXBwb3J0IGFic3RyYWN0IGZvcm0gZmllbGQgY29udHJvbHMgd2hpY2ggYXJlIG5vdCBuZWNlc3NhcmlseVxuICAgIC8vIG9mIHR5cGUgaW5wdXQsIG5vciBkbyB3ZSBoYXZlIGEgcmVmZXJlbmNlIHRvIGEgbmF0aXZlIGZvcm0tZmllbGQgY29udHJvbCBlbGVtZW50LiBJbnN0ZWFkXG4gICAgLy8gd2UgaGFuZGxlIHRoZSBmb2N1cyBieSBjaGVja2luZyBpZiB0aGUgYWJzdHJhY3QgZm9ybS1maWVsZCBjb250cm9sIGZvY3VzZWQgc3RhdGUgY2hhbmdlcy5cbiAgICBpZiAodGhpcy5fY29udHJvbC5mb2N1c2VkICYmICF0aGlzLl9pc0ZvY3VzZWQpIHtcbiAgICAgIHRoaXMuX2lzRm9jdXNlZCA9IHRydWU7XG4gICAgICB0aGlzLl9mb3VuZGF0aW9uLmFjdGl2YXRlRm9jdXMoKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLl9jb250cm9sLmZvY3VzZWQgJiYgKHRoaXMuX2lzRm9jdXNlZCB8fCB0aGlzLl9pc0ZvY3VzZWQgPT09IG51bGwpKSB7XG4gICAgICB0aGlzLl9pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2ZvdW5kYXRpb24uZGVhY3RpdmF0ZUZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmbG9hdGluZyBsYWJlbCBpbiB0aGUgZG9ja2VkIHN0YXRlIG5lZWRzIHRvIGFjY291bnQgZm9yIHByZWZpeGVzLiBUaGUgaG9yaXpvbnRhbCBvZmZzZXRcbiAgICogaXMgY2FsY3VsYXRlZCB3aGVuZXZlciB0aGUgYXBwZWFyYW5jZSBjaGFuZ2VzIHRvIGBvdXRsaW5lYCwgdGhlIHByZWZpeGVzIGNoYW5nZSwgb3Igd2hlbiB0aGVcbiAgICogZm9ybS1maWVsZCBpcyBhZGRlZCB0byB0aGUgRE9NLiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFsbCBzdWJzY3JpcHRpb25zIHdoaWNoIGFyZSBuZWVkZWQgdG9cbiAgICogdHJpZ2dlciB0aGUgbGFiZWwgb2Zmc2V0IHVwZGF0ZS4gSW4gZ2VuZXJhbCwgd2Ugd2FudCB0byBhdm9pZCBwZXJmb3JtaW5nIG1lYXN1cmVtZW50cyBvZnRlbixcbiAgICogc28gd2UgcmVseSBvbiB0aGUgYE5nWm9uZWAgYXMgaW5kaWNhdG9yIHdoZW4gdGhlIG9mZnNldCBzaG91bGQgYmUgcmVjYWxjdWxhdGVkLCBpbnN0ZWFkIG9mXG4gICAqIGNoZWNraW5nIGV2ZXJ5IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUuXG4gICAqL1xuICBwcml2YXRlIF9pbml0aWFsaXplT3V0bGluZUxhYmVsT2Zmc2V0U3Vic2NyaXB0aW9ucygpIHtcbiAgICAvLyBXaGVuZXZlciB0aGUgcHJlZml4IGNoYW5nZXMsIHNjaGVkdWxlIGFuIHVwZGF0ZSBvZiB0aGUgbGFiZWwgb2Zmc2V0LlxuICAgIHRoaXMuX3ByZWZpeENoaWxkcmVuLmNoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgKCkgPT4gKHRoaXMuX25lZWRzT3V0bGluZUxhYmVsT2Zmc2V0VXBkYXRlT25TdGFibGUgPSB0cnVlKSxcbiAgICApO1xuXG4gICAgLy8gTm90ZSB0aGF0IHdlIGhhdmUgdG8gcnVuIG91dHNpZGUgb2YgdGhlIGBOZ1pvbmVgIGV4cGxpY2l0bHksIGluIG9yZGVyIHRvIGF2b2lkXG4gICAgLy8gdGhyb3dpbmcgdXNlcnMgaW50byBhbiBpbmZpbml0ZSBsb29wIGlmIGB6b25lLXBhdGNoLXJ4anNgIGlzIGluY2x1ZGVkLlxuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX25lZWRzT3V0bGluZUxhYmVsT2Zmc2V0VXBkYXRlT25TdGFibGUpIHtcbiAgICAgICAgICB0aGlzLl9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlT3V0bGluZUxhYmVsT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlyLmNoYW5nZVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+ICh0aGlzLl9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlID0gdHJ1ZSkpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGZsb2F0aW5nIGxhYmVsIHNob3VsZCBhbHdheXMgZmxvYXQgb3Igbm90LiAqL1xuICBfc2hvdWxkQWx3YXlzRmxvYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmxvYXRMYWJlbCA9PT0gJ2Fsd2F5cyc7XG4gIH1cblxuICBfaGFzT3V0bGluZSgpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBlYXJhbmNlID09PSAnb3V0bGluZSc7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbGFiZWwgc2hvdWxkIGRpc3BsYXkgaW4gdGhlIGluZml4LiBMYWJlbHMgaW4gdGhlIG91dGxpbmUgYXBwZWFyYW5jZSBhcmVcbiAgICogZGlzcGxheWVkIGFzIHBhcnQgb2YgdGhlIG5vdGNoZWQtb3V0bGluZSBhbmQgYXJlIGhvcml6b250YWxseSBvZmZzZXQgdG8gYWNjb3VudCBmb3JcbiAgICogZm9ybS1maWVsZCBwcmVmaXggY29udGVudC4gVGhpcyB3b24ndCB3b3JrIGluIHNlcnZlciBzaWRlIHJlbmRlcmluZyBzaW5jZSB3ZSBjYW5ub3RcbiAgICogbWVhc3VyZSB0aGUgd2lkdGggb2YgdGhlIHByZWZpeCBjb250YWluZXIuIFRvIG1ha2UgdGhlIGRvY2tlZCBsYWJlbCBhcHBlYXIgYXMgaWYgdGhlXG4gICAqIHJpZ2h0IG9mZnNldCBoYXMgYmVlbiBjYWxjdWxhdGVkLCB3ZSBmb3JjaWJseSByZW5kZXIgdGhlIGxhYmVsIGluc2lkZSB0aGUgaW5maXguIFNpbmNlXG4gICAqIHRoZSBsYWJlbCBpcyBwYXJ0IG9mIHRoZSBpbmZpeCwgdGhlIGxhYmVsIGNhbm5vdCBvdmVyZmxvdyB0aGUgcHJlZml4IGNvbnRlbnQuXG4gICAqL1xuICBfZm9yY2VEaXNwbGF5SW5maXhMYWJlbCgpIHtcbiAgICByZXR1cm4gIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciAmJiB0aGlzLl9wcmVmaXhDaGlsZHJlbi5sZW5ndGggJiYgIXRoaXMuX3Nob3VsZExhYmVsRmxvYXQoKTtcbiAgfVxuXG4gIF9oYXNGbG9hdGluZ0xhYmVsKCkge1xuICAgIHJldHVybiAhIXRoaXMuX2xhYmVsQ2hpbGROb25TdGF0aWMgfHwgISF0aGlzLl9sYWJlbENoaWxkU3RhdGljO1xuICB9XG5cbiAgX3Nob3VsZExhYmVsRmxvYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2wuc2hvdWxkTGFiZWxGbG9hdCB8fCB0aGlzLl9zaG91bGRBbHdheXNGbG9hdCgpO1xuICB9XG5cbiAgLyoqIERldGVybWluZXMgd2hldGhlciBhIGNsYXNzIGZyb20gdGhlIE5nQ29udHJvbCBzaG91bGQgYmUgZm9yd2FyZGVkIHRvIHRoZSBob3N0IGVsZW1lbnQuICovXG4gIF9zaG91bGRGb3J3YXJkKHByb3A6IGtleW9mIE5nQ29udHJvbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5nQ29udHJvbCA9IHRoaXMuX2NvbnRyb2wgPyB0aGlzLl9jb250cm9sLm5nQ29udHJvbCA6IG51bGw7XG4gICAgcmV0dXJuIG5nQ29udHJvbCAmJiBuZ0NvbnRyb2xbcHJvcF07XG4gIH1cblxuICAvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGRpc3BsYXkgaGludHMgb3IgZXJyb3JzLiAqL1xuICBfZ2V0RGlzcGxheWVkTWVzc2FnZXMoKTogJ2Vycm9yJyB8ICdoaW50JyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vycm9yQ2hpbGRyZW4gJiYgdGhpcy5fZXJyb3JDaGlsZHJlbi5sZW5ndGggPiAwICYmIHRoaXMuX2NvbnRyb2wuZXJyb3JTdGF0ZVxuICAgICAgPyAnZXJyb3InXG4gICAgICA6ICdoaW50JztcbiAgfVxuXG4gIC8qKiBSZWZyZXNoZXMgdGhlIHdpZHRoIG9mIHRoZSBvdXRsaW5lLW5vdGNoLCBpZiBwcmVzZW50LiAqL1xuICBfcmVmcmVzaE91dGxpbmVOb3RjaFdpZHRoKCkge1xuICAgIGlmICghdGhpcy5faGFzT3V0bGluZSgpIHx8ICF0aGlzLl9mbG9hdGluZ0xhYmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFRoZSBvdXRsaW5lIG5vdGNoIHNob3VsZCBiZSBiYXNlZCBvbiB0aGUgbGFiZWwgd2lkdGgsIGJ1dCBuZWVkcyB0byByZXNwZWN0IHRoZSBzY2FsaW5nXG4gICAgLy8gYXBwbGllZCB0byB0aGUgbGFiZWwgaWYgaXQgYWN0aXZlbHkgZmxvYXRzLiBTaW5jZSB0aGUgbGFiZWwgYWx3YXlzIGZsb2F0cyB3aGVuIHRoZSBub3RjaFxuICAgIC8vIGlzIG9wZW4sIHRoZSBNREMgdGV4dC1maWVsZCBmbG9hdGluZyBsYWJlbCBzY2FsaW5nIGlzIHJlc3BlY3RlZCBpbiBub3RjaCB3aWR0aCBjYWxjdWxhdGlvbi5cbiAgICB0aGlzLl9vdXRsaW5lTm90Y2hXaWR0aCA9IHRoaXMuX2Zsb2F0aW5nTGFiZWwuZ2V0V2lkdGgoKSAqIG1kY1RleHRGaWVsZE51bWJlcnMuTEFCRUxfU0NBTEU7XG4gIH1cblxuICAvKiogRG9lcyBhbnkgZXh0cmEgcHJvY2Vzc2luZyB0aGF0IGlzIHJlcXVpcmVkIHdoZW4gaGFuZGxpbmcgdGhlIGhpbnRzLiAqL1xuICBwcml2YXRlIF9wcm9jZXNzSGludHMoKSB7XG4gICAgdGhpcy5fdmFsaWRhdGVIaW50cygpO1xuICAgIHRoaXMuX3N5bmNEZXNjcmliZWRCeUlkcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSB0aGF0IHRoZXJlIGlzIGEgbWF4aW11bSBvZiBvbmUgb2YgZWFjaCBcIm1hdC1oaW50XCIgYWxpZ25tZW50IHNwZWNpZmllZC4gVGhlIGhpbnRcbiAgICogbGFiZWwgc3BlY2lmaWVkIHNldCB0aHJvdWdoIHRoZSBpbnB1dCBpcyBiZWluZyBjb25zaWRlcmVkIGFzIFwic3RhcnRcIiBhbGlnbmVkLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBhIG5vb3AgaWYgQW5ndWxhciBydW5zIGluIHByb2R1Y3Rpb24gbW9kZS5cbiAgICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlSGludHMoKSB7XG4gICAgaWYgKHRoaXMuX2hpbnRDaGlsZHJlbiAmJiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSkge1xuICAgICAgbGV0IHN0YXJ0SGludDogTWF0SGludDtcbiAgICAgIGxldCBlbmRIaW50OiBNYXRIaW50O1xuICAgICAgdGhpcy5faGludENoaWxkcmVuLmZvckVhY2goKGhpbnQ6IE1hdEhpbnQpID0+IHtcbiAgICAgICAgaWYgKGhpbnQuYWxpZ24gPT09ICdzdGFydCcpIHtcbiAgICAgICAgICBpZiAoc3RhcnRIaW50IHx8IHRoaXMuaGludExhYmVsKSB7XG4gICAgICAgICAgICB0aHJvdyBnZXRNYXRGb3JtRmllbGREdXBsaWNhdGVkSGludEVycm9yKCdzdGFydCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFydEhpbnQgPSBoaW50O1xuICAgICAgICB9IGVsc2UgaWYgKGhpbnQuYWxpZ24gPT09ICdlbmQnKSB7XG4gICAgICAgICAgaWYgKGVuZEhpbnQpIHtcbiAgICAgICAgICAgIHRocm93IGdldE1hdEZvcm1GaWVsZER1cGxpY2F0ZWRIaW50RXJyb3IoJ2VuZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbmRIaW50ID0gaGludDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGxpc3Qgb2YgZWxlbWVudCBJRHMgdGhhdCBkZXNjcmliZSB0aGUgY2hpbGQgY29udHJvbC4gVGhpcyBhbGxvd3MgdGhlIGNvbnRyb2wgdG8gdXBkYXRlXG4gICAqIGl0cyBgYXJpYS1kZXNjcmliZWRieWAgYXR0cmlidXRlIGFjY29yZGluZ2x5LlxuICAgKi9cbiAgcHJpdmF0ZSBfc3luY0Rlc2NyaWJlZEJ5SWRzKCkge1xuICAgIGlmICh0aGlzLl9jb250cm9sKSB7XG4gICAgICBsZXQgaWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAvLyBUT0RPKHdhZ25lcm1hY2llbCk6IFJlbW92ZSB0aGUgdHlwZSBjaGVjayB3aGVuIHdlIGZpbmQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBidWcuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeSAmJlxuICAgICAgICB0eXBlb2YgdGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5ID09PSAnc3RyaW5nJ1xuICAgICAgKSB7XG4gICAgICAgIGlkcy5wdXNoKC4uLnRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeS5zcGxpdCgnICcpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2dldERpc3BsYXllZE1lc3NhZ2VzKCkgPT09ICdoaW50Jykge1xuICAgICAgICBjb25zdCBzdGFydEhpbnQgPSB0aGlzLl9oaW50Q2hpbGRyZW5cbiAgICAgICAgICA/IHRoaXMuX2hpbnRDaGlsZHJlbi5maW5kKGhpbnQgPT4gaGludC5hbGlnbiA9PT0gJ3N0YXJ0JylcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNvbnN0IGVuZEhpbnQgPSB0aGlzLl9oaW50Q2hpbGRyZW5cbiAgICAgICAgICA/IHRoaXMuX2hpbnRDaGlsZHJlbi5maW5kKGhpbnQgPT4gaGludC5hbGlnbiA9PT0gJ2VuZCcpXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGlmIChzdGFydEhpbnQpIHtcbiAgICAgICAgICBpZHMucHVzaChzdGFydEhpbnQuaWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2hpbnRMYWJlbCkge1xuICAgICAgICAgIGlkcy5wdXNoKHRoaXMuX2hpbnRMYWJlbElkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbmRIaW50KSB7XG4gICAgICAgICAgaWRzLnB1c2goZW5kSGludC5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fZXJyb3JDaGlsZHJlbikge1xuICAgICAgICBpZHMucHVzaCguLi50aGlzLl9lcnJvckNoaWxkcmVuLm1hcChlcnJvciA9PiBlcnJvci5pZCkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jb250cm9sLnNldERlc2NyaWJlZEJ5SWRzKGlkcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGhvcml6b250YWwgb2Zmc2V0IG9mIHRoZSBsYWJlbCBpbiB0aGUgb3V0bGluZSBhcHBlYXJhbmNlLiBJbiB0aGUgb3V0bGluZVxuICAgKiBhcHBlYXJhbmNlLCB0aGUgbm90Y2hlZC1vdXRsaW5lIGFuZCBsYWJlbCBhcmUgbm90IHJlbGF0aXZlIHRvIHRoZSBpbmZpeCBjb250YWluZXIgYmVjYXVzZVxuICAgKiB0aGUgb3V0bGluZSBpbnRlbmRzIHRvIHN1cnJvdW5kIHByZWZpeGVzLCBzdWZmaXhlcyBhbmQgdGhlIGluZml4LiBUaGlzIG1lYW5zIHRoYXQgdGhlXG4gICAqIGZsb2F0aW5nIGxhYmVsIGJ5IGRlZmF1bHQgb3ZlcmxhcHMgcHJlZml4ZXMgaW4gdGhlIGRvY2tlZCBzdGF0ZS4gVG8gYXZvaWQgdGhpcywgd2UgbmVlZCB0b1xuICAgKiBob3Jpem9udGFsbHkgb2Zmc2V0IHRoZSBsYWJlbCBieSB0aGUgd2lkdGggb2YgdGhlIHByZWZpeCBjb250YWluZXIuIFRoZSBNREMgdGV4dC1maWVsZCBkb2VzXG4gICAqIG5vdCBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSB0aGV5IHVzZSBhIGZpeGVkIHdpZHRoIGZvciBwcmVmaXhlcy4gSGVuY2UsIHRoZXkgY2FuIHNpbXBseVxuICAgKiBpbmNvcnBvcmF0ZSB0aGUgaG9yaXpvbnRhbCBvZmZzZXQgaW50byB0aGVpciBkZWZhdWx0IHRleHQtZmllbGQgc3R5bGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlT3V0bGluZUxhYmVsT2Zmc2V0KCkge1xuICAgIGlmICghdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyIHx8ICF0aGlzLl9oYXNPdXRsaW5lKCkgfHwgIXRoaXMuX2Zsb2F0aW5nTGFiZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmxvYXRpbmdMYWJlbCA9IHRoaXMuX2Zsb2F0aW5nTGFiZWwuZWxlbWVudDtcbiAgICAvLyBJZiBubyBwcmVmaXggaXMgZGlzcGxheWVkLCByZXNldCB0aGUgb3V0bGluZSBsYWJlbCBvZmZzZXQgZnJvbSBwb3RlbnRpYWxcbiAgICAvLyBwcmV2aW91cyBsYWJlbCBvZmZzZXQgdXBkYXRlcy5cbiAgICBpZiAoISh0aGlzLl9pY29uUHJlZml4Q29udGFpbmVyIHx8IHRoaXMuX3RleHRQcmVmaXhDb250YWluZXIpKSB7XG4gICAgICBmbG9hdGluZ0xhYmVsLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJZiB0aGUgZm9ybS1maWVsZCBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIERPTSB5ZXQgKGUuZy4gaW4gYSB0YWIpLCB3ZSBkZWZlclxuICAgIC8vIHRoZSBsYWJlbCBvZmZzZXQgdXBkYXRlIHVudGlsIHRoZSB6b25lIHN0YWJpbGl6ZXMuXG4gICAgaWYgKCF0aGlzLl9pc0F0dGFjaGVkVG9Eb20oKSkge1xuICAgICAgdGhpcy5fbmVlZHNPdXRsaW5lTGFiZWxPZmZzZXRVcGRhdGVPblN0YWJsZSA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGljb25QcmVmaXhDb250YWluZXIgPSB0aGlzLl9pY29uUHJlZml4Q29udGFpbmVyPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHRleHRQcmVmaXhDb250YWluZXIgPSB0aGlzLl90ZXh0UHJlZml4Q29udGFpbmVyPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGljb25QcmVmaXhDb250YWluZXJXaWR0aCA9IGljb25QcmVmaXhDb250YWluZXI/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoID8/IDA7XG4gICAgY29uc3QgdGV4dFByZWZpeENvbnRhaW5lcldpZHRoID0gdGV4dFByZWZpeENvbnRhaW5lcj8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPz8gMDtcbiAgICAvLyBJZiB0aGUgZGlyZWN0aW9uYWxpdHkgaXMgUlRMLCB0aGUgeC1heGlzIHRyYW5zZm9ybSBuZWVkcyB0byBiZSBpbnZlcnRlZC4gVGhpc1xuICAgIC8vIGlzIGJlY2F1c2UgYHRyYW5zZm9ybVhgIGRvZXMgbm90IGNoYW5nZSBiYXNlZCBvbiB0aGUgcGFnZSBkaXJlY3Rpb25hbGl0eS5cbiAgICBjb25zdCBsYWJlbEhvcml6b250YWxPZmZzZXQgPVxuICAgICAgKHRoaXMuX2Rpci52YWx1ZSA9PT0gJ3J0bCcgPyAtMSA6IDEpICpcbiAgICAgIC8vIElmIHRoZXJlJ3MgYW4gaWNvbiBwcmVmaXgsIHdlIHN1YnRyYWN0IHRoZSBkZWZhdWx0IGhvcml6b250YWwgcGFkZGluZyBhcyB3ZVxuICAgICAgLy8gcmVzZXQgdGhlIGhvcml6b250YWwgcGFkZGluZyBpbiBDU1MgdG9vLlxuICAgICAgKChpY29uUHJlZml4Q29udGFpbmVyID8gaWNvblByZWZpeENvbnRhaW5lcldpZHRoIC0gV1JBUFBFUl9IT1JJWk9OVEFMX1BBRERJTkcgOiAwKSArXG4gICAgICAgIHRleHRQcmVmaXhDb250YWluZXJXaWR0aCk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHRyYW5zZm9ybSB0aGUgZmxvYXRpbmcgbGFiZWwgdG8gYWNjb3VudCBmb3IgdGhlIHByZWZpeCBjb250YWluZXIuIE5vdGVcbiAgICAvLyB0aGF0IHdlIGRvIG5vdCB3YW50IHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCB0cmFuc2Zvcm0gZm9yIGRvY2tlZCBmbG9hdGluZyBsYWJlbHMuXG4gICAgZmxvYXRpbmdMYWJlbC5zdHlsZS50cmFuc2Zvcm0gPSBgJHtGTE9BVElOR19MQUJFTF9ERUZBVUxUX0RPQ0tFRF9UUkFOU0ZPUk19IHRyYW5zbGF0ZVgoJHtsYWJlbEhvcml6b250YWxPZmZzZXR9cHgpYDtcbiAgfVxuXG4gIC8qKiBDaGVja3Mgd2hldGhlciB0aGUgZm9ybSBmaWVsZCBpcyBhdHRhY2hlZCB0byB0aGUgRE9NLiAqL1xuICBwcml2YXRlIF9pc0F0dGFjaGVkVG9Eb20oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGVsZW1lbnQuZ2V0Um9vdE5vZGUpIHtcbiAgICAgIGNvbnN0IHJvb3ROb2RlID0gZWxlbWVudC5nZXRSb290Tm9kZSgpO1xuICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgaW5zaWRlIHRoZSBET00gdGhlIHJvb3Qgbm9kZSB3aWxsIGJlIGVpdGhlciB0aGUgZG9jdW1lbnRcbiAgICAgIC8vIG9yIHRoZSBjbG9zZXN0IHNoYWRvdyByb290LCBvdGhlcndpc2UgaXQnbGwgYmUgdGhlIGVsZW1lbnQgaXRzZWxmLlxuICAgICAgcmV0dXJuIHJvb3ROb2RlICYmIHJvb3ROb2RlICE9PSBlbGVtZW50O1xuICAgIH1cbiAgICAvLyBPdGhlcndpc2UgZmFsbCBiYWNrIHRvIGNoZWNraW5nIGlmIGl0J3MgaW4gdGhlIGRvY3VtZW50LiBUaGlzIGRvZXNuJ3QgYWNjb3VudCBmb3JcbiAgICAvLyBzaGFkb3cgRE9NLCBob3dldmVyIGJyb3dzZXIgdGhhdCBzdXBwb3J0IHNoYWRvdyBET00gc2hvdWxkIHN1cHBvcnQgYGdldFJvb3ROb2RlYCBhcyB3ZWxsLlxuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQhLmNvbnRhaW5zKGVsZW1lbnQpO1xuICB9XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2hpZGVSZXF1aXJlZE1hcmtlcjogQm9vbGVhbklucHV0O1xufVxuIiwiPG5nLXRlbXBsYXRlICNsYWJlbFRlbXBsYXRlPlxuICA8IS0tXG4gICAgTURDIHJlY29tbWVuZHMgdGhhdCB0aGUgdGV4dC1maWVsZCBpcyBhIGA8bGFiZWw+YCBlbGVtZW50LiBUaGlzIHJhdGhlciBjb21wbGljYXRlcyB0aGVcbiAgICBzZXR1cCBiZWNhdXNlIGl0IHdvdWxkIHJlcXVpcmUgZXZlcnkgZm9ybS1maWVsZCBjb250cm9sIHRvIGV4cGxpY2l0bHkgc2V0IGBhcmlhLWxhYmVsbGVkYnlgLlxuICAgIFRoaXMgaXMgYmVjYXVzZSB0aGUgYDxsYWJlbD5gIGl0c2VsZiBjb250YWlucyBtb3JlIHRoYW4gdGhlIGFjdHVhbCBsYWJlbCAoZS5nLiBwcmVmaXgsIHN1ZmZpeFxuICAgIG9yIG90aGVyIHByb2plY3RlZCBjb250ZW50KSwgYW5kIHNjcmVlbiByZWFkZXJzIGNvdWxkIHBvdGVudGlhbGx5IHJlYWQgb3V0IHVuZGVzaXJlZCBjb250ZW50LlxuICAgIEV4Y2x1ZGluZyBlbGVtZW50cyBmcm9tIGJlaW5nIHByaW50ZWQgb3V0IHJlcXVpcmVzIHRoZW0gdG8gYmUgbWFya2VkIHdpdGggYGFyaWEtaGlkZGVuYCwgb3JcbiAgICB0aGUgZm9ybSBjb250cm9sIGlzIHNldCB0byBhIHNjb3BlZCBlbGVtZW50IGZvciB0aGUgbGFiZWwgKHVzaW5nIGBhcmlhLWxhYmVsbGVkYnlgKS4gQm90aCBvZlxuICAgIHRoZXNlIG9wdGlvbnMgc2VlbSB0byBjb21wbGljYXRlIHRoZSBzZXR1cCBiZWNhdXNlIHdlIGtub3cgZXhhY3RseSB3aGF0IGNvbnRlbnQgaXMgcmVuZGVyZWRcbiAgICBhcyBwYXJ0IG9mIHRoZSBsYWJlbCwgYW5kIHdlIGRvbid0IHdhbnQgdG8gc3BlbmQgcmVzb3VyY2VzIG9uIHdhbGtpbmcgdGhyb3VnaCBwcm9qZWN0ZWQgY29udGVudFxuICAgIHRvIHNldCBgYXJpYS1oaWRkZW5gLiBOb3IgZG8gd2Ugd2FudCB0byBzZXQgYGFyaWEtbGFiZWxsZWRieWAgb24gZXZlcnkgZm9ybSBjb250cm9sIGlmIHdlIGNvdWxkXG4gICAgc2ltcGx5IGxpbmsgdGhlIGxhYmVsIHRvIHRoZSBjb250cm9sIHVzaW5nIHRoZSBsYWJlbCBgZm9yYCBhdHRyaWJ1dGUuXG5cbiAgICAqTm90ZSo6IFdlIGFkZCBhcmlhLW93bnMgYXMgYSB3b3JrYXJvdW5kIGZvciBhbiBpc3N1ZSBpbiBKQVdTICYgTlZEQSB3aGVyZSB0aGUgbGFiZWwgaXNuJ3RcbiAgICByZWFkIGlmIGl0IGNvbWVzIGJlZm9yZSB0aGUgY29udHJvbCBpbiB0aGUgRE9NLlxuICAtLT5cbiAgPGxhYmVsIG1hdEZvcm1GaWVsZEZsb2F0aW5nTGFiZWxcbiAgICAgICAgIFtmbG9hdGluZ109XCJfc2hvdWxkTGFiZWxGbG9hdCgpXCJcbiAgICAgICAgIFtyZXF1aXJlZF09XCIhaGlkZVJlcXVpcmVkTWFya2VyICYmIF9jb250cm9sLnJlcXVpcmVkXCJcbiAgICAgICAgICpuZ0lmPVwiX2hhc0Zsb2F0aW5nTGFiZWwoKVwiXG4gICAgICAgICAoY2RrT2JzZXJ2ZUNvbnRlbnQpPVwiX3JlZnJlc2hPdXRsaW5lTm90Y2hXaWR0aCgpXCJcbiAgICAgICAgIFtjZGtPYnNlcnZlQ29udGVudERpc2FibGVkXT1cIiFfaGFzT3V0bGluZSgpXCJcbiAgICAgICAgIFtpZF09XCJfbGFiZWxJZFwiXG4gICAgICAgICBbYXR0ci5mb3JdPVwiX2NvbnRyb2wuaWRcIlxuICAgICAgICAgW2F0dHIuYXJpYS1vd25zXT1cIl9jb250cm9sLmlkXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWxhYmVsXCI+PC9uZy1jb250ZW50PlxuICA8L2xhYmVsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cIm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyIG1kYy10ZXh0LWZpZWxkXCIgI3RleHRGaWVsZFxuICAgICBbY2xhc3MubWRjLXRleHQtZmllbGQtLWZpbGxlZF09XCIhX2hhc091dGxpbmUoKVwiXG4gICAgIFtjbGFzcy5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWRdPVwiX2hhc091dGxpbmUoKVwiXG4gICAgIFtjbGFzcy5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWxdPVwiIV9oYXNGbG9hdGluZ0xhYmVsKClcIlxuICAgICBbY2xhc3MubWRjLXRleHQtZmllbGQtLWRpc2FibGVkXT1cIl9jb250cm9sLmRpc2FibGVkXCJcbiAgICAgW2NsYXNzLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkXT1cIl9jb250cm9sLmVycm9yU3RhdGVcIlxuICAgICAoY2xpY2spPVwiX2NvbnRyb2wub25Db250YWluZXJDbGljayAmJiBfY29udHJvbC5vbkNvbnRhaW5lckNsaWNrKCRldmVudClcIj5cbiAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1mb2N1cy1vdmVybGF5XCIgKm5nSWY9XCIhX2hhc091dGxpbmUoKSAmJiAhX2NvbnRyb2wuZGlzYWJsZWRcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1mbGV4XCI+XG4gICAgPGRpdiAqbmdJZj1cIl9oYXNPdXRsaW5lKClcIiBtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZVxuICAgICAgICAgW21hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lT3Blbl09XCJfc2hvdWxkTGFiZWxGbG9hdCgpXCJcbiAgICAgICAgIFttYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZVdpZHRoXT1cIl9vdXRsaW5lTm90Y2hXaWR0aFwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFfZm9yY2VEaXNwbGF5SW5maXhMYWJlbCgpXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLWljb24tcHJlZml4XCIgKm5nSWY9XCJfaGFzSWNvblByZWZpeFwiICNpY29uUHJlZml4Q29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFByZWZpeF0sIFttYXRJY29uUHJlZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLXRleHQtcHJlZml4XCIgKm5nSWY9XCJfaGFzVGV4dFByZWZpeFwiICN0ZXh0UHJlZml4Q29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFRleHRQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeFwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFfaGFzT3V0bGluZSgpIHx8IF9mb3JjZURpc3BsYXlJbmZpeExhYmVsKClcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC10ZXh0LXN1ZmZpeFwiICpuZ0lmPVwiX2hhc1RleHRTdWZmaXhcIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRUZXh0U3VmZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4XCIgKm5nSWY9XCJfaGFzSWNvblN1ZmZpeFwiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBtYXRGb3JtRmllbGRMaW5lUmlwcGxlICpuZ0lmPVwiIV9oYXNPdXRsaW5lKClcIj48L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyIG1hdC1tZGMtZm9ybS1maWVsZC1ib3R0b20tYWxpZ25cIlxuICAgICBbbmdTd2l0Y2hdPVwiX2dldERpc3BsYXllZE1lc3NhZ2VzKClcIj5cbiAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1lcnJvci13cmFwcGVyXCIgKm5nU3dpdGNoQ2FzZT1cIidlcnJvcidcIlxuICAgICAgIFtAdHJhbnNpdGlvbk1lc3NhZ2VzXT1cIl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZVwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1lcnJvclwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJcIiAqbmdTd2l0Y2hDYXNlPVwiJ2hpbnQnXCJcbiAgICAgICBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJfc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGVcIj5cbiAgICA8bWF0LWhpbnQgKm5nSWY9XCJoaW50TGFiZWxcIiBbaWRdPVwiX2hpbnRMYWJlbElkXCI+e3toaW50TGFiZWx9fTwvbWF0LWhpbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWhpbnQ6bm90KFthbGlnbj0nZW5kJ10pXCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC1zcGFjZXJcIj48L2Rpdj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtaGludFthbGlnbj0nZW5kJ11cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -96,6 +96,7 @@ export class MatListOption extends MatListItemBase {
|
|
|
96
96
|
this._inputsInitialized = true;
|
|
97
97
|
}
|
|
98
98
|
ngOnDestroy() {
|
|
99
|
+
super.ngOnDestroy();
|
|
99
100
|
if (this.selected) {
|
|
100
101
|
// We have to delay this until the next tick in order
|
|
101
102
|
// to avoid changed after checked errors.
|
|
@@ -223,4 +224,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
|
|
|
223
224
|
}], selected: [{
|
|
224
225
|
type: Input
|
|
225
226
|
}] } });
|
|
226
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1vcHRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwtZXhwZXJpbWVudGFsL21kYy1saXN0L2xpc3Qtb3B0aW9uLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsLWV4cGVyaW1lbnRhbC9tZGMtbGlzdC9saXN0LW9wdGlvbi5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBZSxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTFFLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBQ0wsTUFBTSxFQUdOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLE9BQU8sRUFDUCx5QkFBeUIsR0FHMUIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQWMsZUFBZSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxXQUFXLEVBQTRDLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFFM0Y7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBZ0IsZUFBZSxDQUFDLENBQUM7QUFrRGpGLE1BQU0sT0FBTyxhQUFjLFNBQVEsZUFBZTtJQWtFaEQsWUFDRSxPQUFtQixFQUNuQixNQUFjLEVBQ2QsUUFBa0IsRUFDYSxjQUE2QixFQUNwRCxrQkFBcUMsRUFDRSxtQkFBeUMsRUFDN0Ms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QVdGLEtBQUs7c0JBRFIsS0FBSztnQkFlRixRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7U2VsZWN0aW9uTW9kZWx9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQge1BsYXRmb3JtfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIE1hdExpbmUsXG4gIE1BVF9SSVBQTEVfR0xPQkFMX09QVElPTlMsXG4gIFJpcHBsZUdsb2JhbE9wdGlvbnMsXG4gIFRoZW1lUGFsZXR0ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtZXhwZXJpbWVudGFsL21kYy1jb3JlJztcbmltcG9ydCB7QU5JTUFUSU9OX01PRFVMRV9UWVBFfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtNYXRMaXN0QmFzZSwgTWF0TGlzdEl0ZW1CYXNlfSBmcm9tICcuL2xpc3QtYmFzZSc7XG5pbXBvcnQge0xJU1RfT1BUSU9OLCBMaXN0T3B0aW9uLCBNYXRMaXN0T3B0aW9uQ2hlY2tib3hQb3NpdGlvbn0gZnJvbSAnLi9saXN0LW9wdGlvbi10eXBlcyc7XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVmZXJlbmNlIGluc3RhbmNlcyBvZiBhbiBgU2VsZWN0aW9uTGlzdGAuIEl0IHNlcnZlc1xuICogYXMgYWx0ZXJuYXRpdmUgdG9rZW4gdG8gYW4gYWN0dWFsIGltcGxlbWVudGF0aW9uIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBjaXJjdWxhciByZWZlcmVuY2VzLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgY29uc3QgU0VMRUNUSU9OX0xJU1QgPSBuZXcgSW5qZWN0aW9uVG9rZW48U2VsZWN0aW9uTGlzdD4oJ1NlbGVjdGlvbkxpc3QnKTtcblxuLyoqXG4gKiBJbnRlcmZhY2UgZGVzY3JpYmluZyB0aGUgY29udGFpbmluZyBsaXN0IG9mIGFuIGxpc3Qgb3B0aW9uLiBUaGlzIGlzIHVzZWQgdG8gYXZvaWRcbiAqIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSBsaXN0LW9wdGlvbiBhbmQgdGhlIHNlbGVjdGlvbiBsaXN0LlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGlvbkxpc3QgZXh0ZW5kcyBNYXRMaXN0QmFzZSB7XG4gIG11bHRpcGxlOiBib29sZWFuO1xuICBjb2xvcjogVGhlbWVQYWxldHRlO1xuICBzZWxlY3RlZE9wdGlvbnM6IFNlbGVjdGlvbk1vZGVsPE1hdExpc3RPcHRpb24+O1xuICBjb21wYXJlV2l0aDogKG8xOiBhbnksIG8yOiBhbnkpID0+IGJvb2xlYW47XG4gIF92YWx1ZTogc3RyaW5nW10gfCBudWxsO1xuICBfcmVwb3J0VmFsdWVDaGFuZ2U6ICgpID0+IHZvaWQ7XG4gIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQ7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1saXN0LW9wdGlvbicsXG4gIGV4cG9ydEFzOiAnbWF0TGlzdE9wdGlvbicsXG4gIHN0eWxlVXJsczogWydsaXN0LW9wdGlvbi5jc3MnXSxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdtYXQtbWRjLWxpc3QtaXRlbSBtYXQtbWRjLWxpc3Qtb3B0aW9uIG1kYy1saXN0LWl0ZW0nLFxuICAgICdyb2xlJzogJ29wdGlvbicsXG4gICAgLy8gQXMgcGVyIE1EQywgb25seSBsaXN0IGl0ZW1zIGluIHNpbmdsZSBzZWxlY3Rpb24gbW9kZSBzaG91bGQgcmVjZWl2ZSB0aGUgYC0tc2VsZWN0ZWRgXG4gICAgLy8gY2xhc3MuIEZvciBtdWx0aSBzZWxlY3Rpb24sIHRoZSBjaGVja2JveCBpcyB1c2VkIGFzIGluZGljYXRvci5cbiAgICAnW2NsYXNzLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkXSc6ICdzZWxlY3RlZCAmJiAhX3NlbGVjdGlvbkxpc3QubXVsdGlwbGUnLFxuICAgIC8vIEJhc2VkIG9uIHRoZSBjaGVja2JveCBwb3NpdGlvbiBhbmQgd2hldGhlciB0aGVyZSBhcmUgaWNvbnMgb3IgYXZhdGFycywgd2UgYXBwbHkgTURDJ3NcbiAgICAvLyBsaXN0LWl0ZW0gYC0tbGVhZGluZ2AgYW5kIGAtLXRyYWlsaW5nYCBjbGFzc2VzLlxuICAgICdbY2xhc3MubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWF2YXRhcl0nOiAnX2hhc1Byb2plY3RlZChcImF2YXRhcnNcIiwgXCJiZWZvcmVcIiknLFxuICAgICdbY2xhc3MubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb25dJzogJ19oYXNQcm9qZWN0ZWQoXCJpY29uc1wiLCBcImJlZm9yZVwiKScsXG4gICAgJ1tjbGFzcy5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb25dJzogJ19oYXNQcm9qZWN0ZWQoXCJpY29uc1wiLCBcImFmdGVyXCIpJyxcbiAgICAnW2NsYXNzLm1hdC1tZGMtbGlzdC1vcHRpb24td2l0aC10cmFpbGluZy1hdmF0YXJdJzogJ19oYXNQcm9qZWN0ZWQoXCJhdmF0YXJzXCIsIFwiYWZ0ZXJcIiknLFxuICAgIC8vIEJhc2VkIG9uIHRoZSBjaGVja2JveCBwb3NpdGlvbiwgd2UgYXBwbHkgdGhlIGAtLWxlYWRpbmdgIG9yIGAtLXRyYWlsaW5nYCBNREMgY2xhc3Nlc1xuICAgIC8vIHdoaWNoIGVuc3VyZSB0aGF0IHRoZSBjaGVja2JveCBpcyBwb3NpdGlvbmVkIGNvcnJlY3RseSB3aXRoaW4gdGhlIGxpc3QgaXRlbS5cbiAgICAnW2NsYXNzLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1jaGVja2JveF0nOiAnX2hhc0NoZWNrYm94QXQoXCJiZWZvcmVcIiknLFxuICAgICdbY2xhc3MubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1jaGVja2JveF0nOiAnX2hhc0NoZWNrYm94QXQoXCJhZnRlclwiKScsXG4gICAgJ1tjbGFzcy5tYXQtYWNjZW50XSc6ICdjb2xvciAhPT0gXCJwcmltYXJ5XCIgJiYgY29sb3IgIT09IFwid2FyblwiJyxcbiAgICAnW2NsYXNzLm1hdC13YXJuXSc6ICdjb2xvciA9PT0gXCJ3YXJuXCInLFxuICAgICdbY2xhc3MuX21hdC1hbmltYXRpb24tbm9vcGFibGVdJzogJ19ub29wQW5pbWF0aW9ucycsXG4gICAgJyhibHVyKSc6ICdfaGFuZGxlQmx1cigpJyxcbiAgfSxcbiAgdGVtcGxhdGVVcmw6ICdsaXN0LW9wdGlvbi5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtwcm92aWRlOiBNYXRMaXN0SXRlbUJhc2UsIHVzZUV4aXN0aW5nOiBNYXRMaXN0T3B0aW9ufSxcbiAgICB7cHJvdmlkZTogTElTVF9PUFRJT04sIHVzZUV4aXN0aW5nOiBNYXRMaXN0T3B0aW9ufSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0TGlzdE9wdGlvbiBleHRlbmRzIE1hdExpc3RJdGVtQmFzZSBpbXBsZW1lbnRzIExpc3RPcHRpb24sIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFRoaXMgaXMgc2V0IHRvIHRydWUgYWZ0ZXIgdGhlIGZpcnN0IE9uQ2hhbmdlcyBjeWNsZSBzbyB3ZSBkb24ndFxuICAgKiBjbGVhciB0aGUgdmFsdWUgb2YgYHNlbGVjdGVkYCBpbiB0aGUgZmlyc3QgY3ljbGUuXG4gICAqL1xuICBwcml2YXRlIF9pbnB1dHNJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIHRoZSBzZWxlY3RlZCBzdGF0ZSBvZiB0aGUgb3B0aW9uIGhhcyBjaGFuZ2VkLlxuICAgKiBVc2UgdG8gZmFjaWxpdGF0ZSB0d28tZGF0YSBiaW5kaW5nIHRvIHRoZSBgc2VsZWN0ZWRgIHByb3BlcnR5LlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgc2VsZWN0ZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBAVmlld0NoaWxkKCd0ZXh0JykgX2l0ZW1UZXh0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBAQ29udGVudENoaWxkcmVuKE1hdExpbmUsIHtyZWFkOiBFbGVtZW50UmVmLCBkZXNjZW5kYW50czogdHJ1ZX0pIGxpbmVzOiBRdWVyeUxpc3Q8XG4gICAgRWxlbWVudFJlZjxFbGVtZW50PlxuICA+O1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBsYWJlbCBzaG91bGQgYXBwZWFyIGJlZm9yZSBvciBhZnRlciB0aGUgY2hlY2tib3guIERlZmF1bHRzIHRvICdhZnRlcicgKi9cbiAgQElucHV0KCkgY2hlY2tib3hQb3NpdGlvbjogTWF0TGlzdE9wdGlvbkNoZWNrYm94UG9zaXRpb24gPSAnYWZ0ZXInO1xuXG4gIC8qKiBUaGVtZSBjb2xvciBvZiB0aGUgbGlzdCBvcHRpb24uIFRoaXMgc2V0cyB0aGUgY29sb3Igb2YgdGhlIGNoZWNrYm94LiAqL1xuICBASW5wdXQoKVxuICBnZXQgY29sb3IoKTogVGhlbWVQYWxldHRlIHtcbiAgICByZXR1cm4gdGhpcy5fY29sb3IgfHwgdGhpcy5fc2VsZWN0aW9uTGlzdC5jb2xvcjtcbiAgfVxuICBzZXQgY29sb3IobmV3VmFsdWU6IFRoZW1lUGFsZXR0ZSkge1xuICAgIHRoaXMuX2NvbG9yID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfY29sb3I6IFRoZW1lUGFsZXR0ZTtcblxuICAvKiogVmFsdWUgb2YgdGhlIG9wdGlvbiAqL1xuICBASW5wdXQoKVxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZCAmJiBuZXdWYWx1ZSAhPT0gdGhpcy52YWx1ZSAmJiB0aGlzLl9pbnB1dHNJbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfdmFsdWU6IGFueTtcblxuICAvKiogV2hldGhlciB0aGUgb3B0aW9uIGlzIHNlbGVjdGVkLiAqL1xuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkxpc3Quc2VsZWN0ZWRPcHRpb25zLmlzU2VsZWN0ZWQodGhpcyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG5cbiAgICBpZiAoaXNTZWxlY3RlZCAhPT0gdGhpcy5fc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuX3NldFNlbGVjdGVkKGlzU2VsZWN0ZWQpO1xuXG4gICAgICBpZiAoaXNTZWxlY3RlZCB8fCB0aGlzLl9zZWxlY3Rpb25MaXN0Lm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkxpc3QuX3JlcG9ydFZhbHVlQ2hhbmdlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3NlbGVjdGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgQEluamVjdChTRUxFQ1RJT05fTElTVCkgcHVibGljIF9zZWxlY3Rpb25MaXN0OiBTZWxlY3Rpb25MaXN0LFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1BVF9SSVBQTEVfR0xPQkFMX09QVElPTlMpIGdsb2JhbFJpcHBsZU9wdGlvbnM/OiBSaXBwbGVHbG9iYWxPcHRpb25zLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQU5JTUFUSU9OX01PRFVMRV9UWVBFKSBhbmltYXRpb25Nb2RlPzogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihlbGVtZW50LCBuZ1pvbmUsIF9zZWxlY3Rpb25MaXN0LCBwbGF0Zm9ybSwgZ2xvYmFsUmlwcGxlT3B0aW9ucywgYW5pbWF0aW9uTW9kZSk7XG5cbiAgICAvLyBCeSBkZWZhdWx0LCB3ZSBtYXJrIGFsbCBvcHRpb25zIGFzIHVuc2VsZWN0ZWQuIFRoZSBNREMgbGlzdCBmb3VuZGF0aW9uIHdpbGxcbiAgICAvLyBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB0aGUgYXR0cmlidXRlIGJhc2VkIG9uIHNlbGVjdGlvbi4gTm90ZSB0aGF0IHdlIG5lZWQgdG9cbiAgICAvLyBpbml0aWFsbHkgc2V0IHRoaXMgYmVjYXVzZSBNREMgZG9lcyBub3Qgc2V0IHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIGxpc3RcbiAgICAvLyBpdGVtcyBidXQgZXhwZWN0cyBpdGVtcyB0byBiZSBzZXQgdXAgcHJvcGVybHkgaW4gdGhlIHN0YXRpYyBtYXJrdXAuXG4gICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsICdmYWxzZScpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuX3NlbGVjdGlvbkxpc3Q7XG5cbiAgICBpZiAobGlzdC5fdmFsdWUgJiYgbGlzdC5fdmFsdWUuc29tZSh2YWx1ZSA9PiBsaXN0LmNvbXBhcmVXaXRoKHZhbHVlLCB0aGlzLl92YWx1ZSkpKSB7XG4gICAgICB0aGlzLl9zZXRTZWxlY3RlZCh0cnVlKTtcbiAgICB9XG5cbiAgICBjb25zdCB3YXNTZWxlY3RlZCA9IHRoaXMuX3NlbGVjdGVkO1xuXG4gICAgLy8gTGlzdCBvcHRpb25zIHRoYXQgYXJlIHNlbGVjdGVkIGF0IGluaXRpYWxpemF0aW9uIGNhbid0IGJlIHJlcG9ydGVkIHByb3Blcmx5IHRvIHRoZSBmb3JtXG4gICAgLy8gY29udHJvbC4gVGhpcyBpcyBiZWNhdXNlIGl0IHRha2VzIHNvbWUgdGltZSB1bnRpbCB0aGUgc2VsZWN0aW9uLWxpc3Qga25vd3MgYWJvdXQgYWxsXG4gICAgLy8gYXZhaWxhYmxlIG9wdGlvbnMuIEFsc28gaXQgY2FuIGhhcHBlbiB0aGF0IHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBoYXMgYW4gaW5pdGlhbCB2YWx1ZVxuICAgIC8vIHRoYXQgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4gRGVmZXJyaW5nIHRoZSB2YWx1ZSBjaGFuZ2UgcmVwb3J0IHRvIHRoZSBuZXh0IHRpY2sgZW5zdXJlc1xuICAgIC8vIHRoYXQgdGhlIGZvcm0gY29udHJvbCB2YWx1ZSBpcyBub3QgYmVpbmcgb3ZlcndyaXR0ZW4uXG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fc2VsZWN0ZWQgfHwgd2FzU2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX2lucHV0c0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAvLyBXZSBoYXZlIHRvIGRlbGF5IHRoaXMgdW50aWwgdGhlIG5leHQgdGljayBpbiBvcmRlclxuICAgICAgLy8gdG8gYXZvaWQgY2hhbmdlZCBhZnRlciBjaGVja2VkIGVycm9ycy5cbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogVG9nZ2xlcyB0aGUgc2VsZWN0aW9uIHN0YXRlIG9mIHRoZSBvcHRpb24uICovXG4gIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gIXRoaXMuc2VsZWN0ZWQ7XG4gIH1cblxuICAvKiogQWxsb3dzIGZvciBwcm9ncmFtbWF0aWMgZm9jdXNpbmcgb2YgdGhlIG9wdGlvbi4gKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5faG9zdEVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIGEgY2hlY2tib3ggaXMgc2hvd24gYXQgdGhlIGdpdmVuIHBvc2l0aW9uLiAqL1xuICBfaGFzQ2hlY2tib3hBdChwb3NpdGlvbjogTWF0TGlzdE9wdGlvbkNoZWNrYm94UG9zaXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTGlzdC5tdWx0aXBsZSAmJiB0aGlzLl9nZXRDaGVja2JveFBvc2l0aW9uKCkgPT09IHBvc2l0aW9uO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgaWNvbnMgb3IgYXZhdGFycyBhcmUgc2hvd24gYXQgdGhlIGdpdmVuIHBvc2l0aW9uLiAqL1xuICBfaGFzSWNvbnNPckF2YXRhcnNBdChwb3NpdGlvbjogJ2JlZm9yZScgfCAnYWZ0ZXInKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc1Byb2plY3RlZCgnaWNvbnMnLCBwb3NpdGlvbikgfHwgdGhpcy5faGFzUHJvamVjdGVkKCdhdmF0YXJzJywgcG9zaXRpb24pO1xuICB9XG5cbiAgLyoqIEdldHMgd2hldGhlciB0aGUgZ2l2ZW4gdHlwZSBvZiBlbGVtZW50IGlzIHByb2plY3RlZCBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLiAqL1xuICBfaGFzUHJvamVjdGVkKHR5cGU6ICdpY29ucycgfCAnYXZhdGFycycsIHBvc2l0aW9uOiAnYmVmb3JlJyB8ICdhZnRlcicpOiBib29sZWFuIHtcbiAgICAvLyBJZiB0aGUgY2hlY2tib3ggaXMgc2hvd24gYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiwgbmVpdGhlciBpY29ucyBvclxuICAgIC8vIGF2YXRhcnMgY2FuIGJlIHNob3duIGF0IHRoZSBwb3NpdGlvbi5cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fZ2V0Q2hlY2tib3hQb3NpdGlvbigpICE9PSBwb3NpdGlvbiAmJlxuICAgICAgKHR5cGUgPT09ICdhdmF0YXJzJyA/IHRoaXMuX2F2YXRhcnMubGVuZ3RoICE9PSAwIDogdGhpcy5faWNvbnMubGVuZ3RoICE9PSAwKVxuICAgICk7XG4gIH1cblxuICBfaGFuZGxlQmx1cigpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25MaXN0Ll9vblRvdWNoZWQoKTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBjaGVja2JveC4gKi9cbiAgX2dldENoZWNrYm94UG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tib3hQb3NpdGlvbiB8fCAnYWZ0ZXInO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIHN0YXRlIG9mIHRoZSBvcHRpb24uXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkLlxuICAgKi9cbiAgX3NldFNlbGVjdGVkKHNlbGVjdGVkOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKHNlbGVjdGVkID09PSB0aGlzLl9zZWxlY3RlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX3NlbGVjdGVkID0gc2VsZWN0ZWQ7XG5cbiAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbkxpc3Quc2VsZWN0ZWRPcHRpb25zLnNlbGVjdCh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTGlzdC5zZWxlY3RlZE9wdGlvbnMuZGVzZWxlY3QodGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHNlbGVjdGVkKTtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZmllcyBBbmd1bGFyIHRoYXQgdGhlIG9wdGlvbiBuZWVkcyB0byBiZSBjaGVja2VkIGluIHRoZSBuZXh0IGNoYW5nZSBkZXRlY3Rpb24gcnVuLlxuICAgKiBNYWlubHkgdXNlZCB0byB0cmlnZ2VyIGFuIHVwZGF0ZSBvZiB0aGUgbGlzdCBvcHRpb24gaWYgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBzZWxlY3Rpb25cbiAgICogbGlzdCBjaGFuZ2VkLlxuICAgKi9cbiAgX21hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zZWxlY3RlZDogQm9vbGVhbklucHV0O1xufVxuIiwiPCEtLVxuICBTYXZlIGljb25zIGFuZCB0aGUgcHNldWRvIGNoZWNrYm94IHNvIHRoYXQgdGhleSBjYW4gYmUgcmUtdXNlZCBpbiB0aGUgdGVtcGxhdGUgd2l0aG91dFxuICBkdXBsaWNhdGlvbi4gQWxzbyBjb250ZW50IGNhbiBvbmx5IGJlIGluamVjdGVkIG9uY2Ugc28gd2UgbmVlZCB0byBleHRyYWN0IGljb25zL2F2YXRhcnNcbiAgaW50byBhIHRlbXBsYXRlIHNpbmNlIHdlIHVzZSBpdCBpbiBtdWx0aXBsZSBwbGFjZXMuXG4tLT5cbjxuZy10ZW1wbGF0ZSAjaWNvbnM+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXQtbGlzdC1hdmF0YXJdLFttYXRMaXN0QXZhdGFyXSxbbWF0LWxpc3QtaWNvbl0sW21hdExpc3RJY29uXVwiPlxuICA8L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NoZWNrYm94PlxuICA8ZGl2IGNsYXNzPVwibWRjLWNoZWNrYm94XCIgW2NsYXNzLm1kYy1jaGVja2JveC0tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJtZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sXCJcbiAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIi8+XG4gICAgPGRpdiBjbGFzcz1cIm1kYy1jaGVja2JveF9fYmFja2dyb3VuZFwiPlxuICAgICAgPHN2ZyBjbGFzcz1cIm1kYy1jaGVja2JveF9fY2hlY2ttYXJrXCJcbiAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICA8cGF0aCBjbGFzcz1cIm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLXBhdGhcIlxuICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgIGQ9XCJNMS43MywxMi45MSA4LjEsMTkuMjggMjIuNzksNC41OVwiLz5cbiAgICAgIDwvc3ZnPlxuICAgICAgPGRpdiBjbGFzcz1cIm1kYy1jaGVja2JveF9fbWl4ZWRtYXJrXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBDb250YWluZXIgZm9yIHRoZSBjaGVja2JveCBhdCBzdGFydC4gLS0+XG48c3BhbiBjbGFzcz1cIm1kYy1saXN0LWl0ZW1fX3N0YXJ0IG1hdC1tZGMtbGlzdC1vcHRpb24tY2hlY2tib3gtYmVmb3JlXCJcbiAgICAgICpuZ0lmPVwiX2hhc0NoZWNrYm94QXQoJ2JlZm9yZScpXCI+XG4gIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGVja2JveFwiPjwvbmctdGVtcGxhdGU+XG48L3NwYW4+XG48IS0tIENvbmRpdGlvbmFsbHkgcmVuZGVycyBpY29ucy9hdmF0YXJzIGJlZm9yZSB0aGUgbGlzdCBpdGVtIHRleHQuIC0tPlxuPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIl9oYXNJY29uc09yQXZhdGFyc0F0KCdiZWZvcmUnKVwiPlxuICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaWNvbnNcIj48L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBUZXh0IC0tPlxuPHNwYW4gY2xhc3M9XCJtZGMtbGlzdC1pdGVtX19jb250ZW50XCIgI3RleHQ+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvc3Bhbj5cblxuPCEtLSBDb250YWluZXIgZm9yIHRoZSBjaGVja2JveCBhdCB0aGUgZW5kLiAtLT5cbjxzcGFuIGNsYXNzPVwibWRjLWxpc3QtaXRlbV9fZW5kXCIgKm5nSWY9XCJfaGFzQ2hlY2tib3hBdCgnYWZ0ZXInKVwiPlxuICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2hlY2tib3hcIj48L25nLXRlbXBsYXRlPlxuPC9zcGFuPlxuPCEtLSBDb25kaXRpb25hbGx5IHJlbmRlcnMgaWNvbnMvYXZhdGFycyBhZnRlciB0aGUgbGlzdCBpdGVtIHRleHQuIC0tPlxuPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIl9oYXNJY29uc09yQXZhdGFyc0F0KCdhZnRlcicpXCI+XG4gIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJpY29uc1wiPjwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIERpdmlkZXIgLS0+XG48bmctY29udGVudCBzZWxlY3Q9XCJtYXQtZGl2aWRlclwiPjwvbmctY29udGVudD5cblxuPCEtLVxuICBTdHJvbmcgZm9jdXMgaW5kaWNhdG9yIGVsZW1lbnQuIE1EQyB1c2VzIHRoZSBgOjpiZWZvcmVgIHBzZXVkbyBlbGVtZW50IGZvciB0aGUgZGVmYXVsdFxuICBmb2N1cy9ob3Zlci9zZWxlY3RlZCBzdGF0ZSwgc28gd2UgbmVlZCBhIHNlcGFyYXRlIGVsZW1lbnQuXG4tLT5cbjxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvY3VzLWluZGljYXRvclwiPjwvZGl2PlxuIl19
|
|
227
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1vcHRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwtZXhwZXJpbWVudGFsL21kYy1saXN0L2xpc3Qtb3B0aW9uLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsLWV4cGVyaW1lbnRhbC9tZGMtbGlzdC9saXN0LW9wdGlvbi5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBZSxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTFFLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBQ0wsTUFBTSxFQUdOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLE9BQU8sRUFDUCx5QkFBeUIsR0FHMUIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQWMsZUFBZSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxXQUFXLEVBQTRDLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFFM0Y7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBZ0IsZUFBZSxDQUFDLENBQUM7QUFrRGpGLE1BQU0sT0FBTyxhQUFjLFNBQVEsZUFBZTtJQWtFaEQsWUFDRSxPQUFtQixFQUNuQixNQUFjLEVBQ2QsUUFBa0IsRUFDYSxjQUE2QixFQUNwRCxrQkFBcUMsRUFDRSxtQkFBeUMsRUFDN0Ms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QixLQUFLO2dCQUlGLEtBQUs7c0JBRFIsS0FBSztnQkFXRixLQUFLO3NCQURSLEtBQUs7Z0JBZUYsUUFBUTtzQkFEWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7Qm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHl9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1NlbGVjdGlvbk1vZGVsfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBNYXRMaW5lLFxuICBNQVRfUklQUExFX0dMT0JBTF9PUFRJT05TLFxuICBSaXBwbGVHbG9iYWxPcHRpb25zLFxuICBUaGVtZVBhbGV0dGUsXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsLWV4cGVyaW1lbnRhbC9tZGMtY29yZSc7XG5pbXBvcnQge0FOSU1BVElPTl9NT0RVTEVfVFlQRX0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci9hbmltYXRpb25zJztcbmltcG9ydCB7TWF0TGlzdEJhc2UsIE1hdExpc3RJdGVtQmFzZX0gZnJvbSAnLi9saXN0LWJhc2UnO1xuaW1wb3J0IHtMSVNUX09QVElPTiwgTGlzdE9wdGlvbiwgTWF0TGlzdE9wdGlvbkNoZWNrYm94UG9zaXRpb259IGZyb20gJy4vbGlzdC1vcHRpb24tdHlwZXMnO1xuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlZmVyZW5jZSBpbnN0YW5jZXMgb2YgYW4gYFNlbGVjdGlvbkxpc3RgLiBJdCBzZXJ2ZXNcbiAqIGFzIGFsdGVybmF0aXZlIHRva2VuIHRvIGFuIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiB3aGljaCB3b3VsZCByZXN1bHQgaW4gY2lyY3VsYXIgcmVmZXJlbmNlcy5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IFNFTEVDVElPTl9MSVNUID0gbmV3IEluamVjdGlvblRva2VuPFNlbGVjdGlvbkxpc3Q+KCdTZWxlY3Rpb25MaXN0Jyk7XG5cbi8qKlxuICogSW50ZXJmYWNlIGRlc2NyaWJpbmcgdGhlIGNvbnRhaW5pbmcgbGlzdCBvZiBhbiBsaXN0IG9wdGlvbi4gVGhpcyBpcyB1c2VkIHRvIGF2b2lkXG4gKiBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUgbGlzdC1vcHRpb24gYW5kIHRoZSBzZWxlY3Rpb24gbGlzdC5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25MaXN0IGV4dGVuZHMgTWF0TGlzdEJhc2Uge1xuICBtdWx0aXBsZTogYm9vbGVhbjtcbiAgY29sb3I6IFRoZW1lUGFsZXR0ZTtcbiAgc2VsZWN0ZWRPcHRpb25zOiBTZWxlY3Rpb25Nb2RlbDxNYXRMaXN0T3B0aW9uPjtcbiAgY29tcGFyZVdpdGg6IChvMTogYW55LCBvMjogYW55KSA9PiBib29sZWFuO1xuICBfdmFsdWU6IHN0cmluZ1tdIHwgbnVsbDtcbiAgX3JlcG9ydFZhbHVlQ2hhbmdlOiAoKSA9PiB2b2lkO1xuICBfb25Ub3VjaGVkOiAoKSA9PiB2b2lkO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtbGlzdC1vcHRpb24nLFxuICBleHBvcnRBczogJ21hdExpc3RPcHRpb24nLFxuICBzdHlsZVVybHM6IFsnbGlzdC1vcHRpb24uY3NzJ10sXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnbWF0LW1kYy1saXN0LWl0ZW0gbWF0LW1kYy1saXN0LW9wdGlvbiBtZGMtbGlzdC1pdGVtJyxcbiAgICAncm9sZSc6ICdvcHRpb24nLFxuICAgIC8vIEFzIHBlciBNREMsIG9ubHkgbGlzdCBpdGVtcyBpbiBzaW5nbGUgc2VsZWN0aW9uIG1vZGUgc2hvdWxkIHJlY2VpdmUgdGhlIGAtLXNlbGVjdGVkYFxuICAgIC8vIGNsYXNzLiBGb3IgbXVsdGkgc2VsZWN0aW9uLCB0aGUgY2hlY2tib3ggaXMgdXNlZCBhcyBpbmRpY2F0b3IuXG4gICAgJ1tjbGFzcy5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZF0nOiAnc2VsZWN0ZWQgJiYgIV9zZWxlY3Rpb25MaXN0Lm11bHRpcGxlJyxcbiAgICAvLyBCYXNlZCBvbiB0aGUgY2hlY2tib3ggcG9zaXRpb24gYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGljb25zIG9yIGF2YXRhcnMsIHdlIGFwcGx5IE1EQydzXG4gICAgLy8gbGlzdC1pdGVtIGAtLWxlYWRpbmdgIGFuZCBgLS10cmFpbGluZ2AgY2xhc3Nlcy5cbiAgICAnW2NsYXNzLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1hdmF0YXJdJzogJ19oYXNQcm9qZWN0ZWQoXCJhdmF0YXJzXCIsIFwiYmVmb3JlXCIpJyxcbiAgICAnW2NsYXNzLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uXSc6ICdfaGFzUHJvamVjdGVkKFwiaWNvbnNcIiwgXCJiZWZvcmVcIiknLFxuICAgICdbY2xhc3MubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uXSc6ICdfaGFzUHJvamVjdGVkKFwiaWNvbnNcIiwgXCJhZnRlclwiKScsXG4gICAgJ1tjbGFzcy5tYXQtbWRjLWxpc3Qtb3B0aW9uLXdpdGgtdHJhaWxpbmctYXZhdGFyXSc6ICdfaGFzUHJvamVjdGVkKFwiYXZhdGFyc1wiLCBcImFmdGVyXCIpJyxcbiAgICAvLyBCYXNlZCBvbiB0aGUgY2hlY2tib3ggcG9zaXRpb24sIHdlIGFwcGx5IHRoZSBgLS1sZWFkaW5nYCBvciBgLS10cmFpbGluZ2AgTURDIGNsYXNzZXNcbiAgICAvLyB3aGljaCBlbnN1cmUgdGhhdCB0aGUgY2hlY2tib3ggaXMgcG9zaXRpb25lZCBjb3JyZWN0bHkgd2l0aGluIHRoZSBsaXN0IGl0ZW0uXG4gICAgJ1tjbGFzcy5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctY2hlY2tib3hdJzogJ19oYXNDaGVja2JveEF0KFwiYmVmb3JlXCIpJyxcbiAgICAnW2NsYXNzLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctY2hlY2tib3hdJzogJ19oYXNDaGVja2JveEF0KFwiYWZ0ZXJcIiknLFxuICAgICdbY2xhc3MubWF0LWFjY2VudF0nOiAnY29sb3IgIT09IFwicHJpbWFyeVwiICYmIGNvbG9yICE9PSBcIndhcm5cIicsXG4gICAgJ1tjbGFzcy5tYXQtd2Fybl0nOiAnY29sb3IgPT09IFwid2FyblwiJyxcbiAgICAnW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSc6ICdfbm9vcEFuaW1hdGlvbnMnLFxuICAgICcoYmx1ciknOiAnX2hhbmRsZUJsdXIoKScsXG4gIH0sXG4gIHRlbXBsYXRlVXJsOiAnbGlzdC1vcHRpb24uaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7cHJvdmlkZTogTWF0TGlzdEl0ZW1CYXNlLCB1c2VFeGlzdGluZzogTWF0TGlzdE9wdGlvbn0sXG4gICAge3Byb3ZpZGU6IExJU1RfT1BUSU9OLCB1c2VFeGlzdGluZzogTWF0TGlzdE9wdGlvbn0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE1hdExpc3RPcHRpb24gZXh0ZW5kcyBNYXRMaXN0SXRlbUJhc2UgaW1wbGVtZW50cyBMaXN0T3B0aW9uLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBUaGlzIGlzIHNldCB0byB0cnVlIGFmdGVyIHRoZSBmaXJzdCBPbkNoYW5nZXMgY3ljbGUgc28gd2UgZG9uJ3RcbiAgICogY2xlYXIgdGhlIHZhbHVlIG9mIGBzZWxlY3RlZGAgaW4gdGhlIGZpcnN0IGN5Y2xlLlxuICAgKi9cbiAgcHJpdmF0ZSBfaW5wdXRzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRW1pdHMgd2hlbiB0aGUgc2VsZWN0ZWQgc3RhdGUgb2YgdGhlIG9wdGlvbiBoYXMgY2hhbmdlZC5cbiAgICogVXNlIHRvIGZhY2lsaXRhdGUgdHdvLWRhdGEgYmluZGluZyB0byB0aGUgYHNlbGVjdGVkYCBwcm9wZXJ0eS5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IHNlbGVjdGVkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQFZpZXdDaGlsZCgndGV4dCcpIF9pdGVtVGV4dDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihNYXRMaW5lLCB7cmVhZDogRWxlbWVudFJlZiwgZGVzY2VuZGFudHM6IHRydWV9KSBsaW5lczogUXVlcnlMaXN0PFxuICAgIEVsZW1lbnRSZWY8RWxlbWVudD5cbiAgPjtcblxuICAvKiogV2hldGhlciB0aGUgbGFiZWwgc2hvdWxkIGFwcGVhciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNoZWNrYm94LiBEZWZhdWx0cyB0byAnYWZ0ZXInICovXG4gIEBJbnB1dCgpIGNoZWNrYm94UG9zaXRpb246IE1hdExpc3RPcHRpb25DaGVja2JveFBvc2l0aW9uID0gJ2FmdGVyJztcblxuICAvKiogVGhlbWUgY29sb3Igb2YgdGhlIGxpc3Qgb3B0aW9uLiBUaGlzIHNldHMgdGhlIGNvbG9yIG9mIHRoZSBjaGVja2JveC4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGNvbG9yKCk6IFRoZW1lUGFsZXR0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbG9yIHx8IHRoaXMuX3NlbGVjdGlvbkxpc3QuY29sb3I7XG4gIH1cbiAgc2V0IGNvbG9yKG5ld1ZhbHVlOiBUaGVtZVBhbGV0dGUpIHtcbiAgICB0aGlzLl9jb2xvciA9IG5ld1ZhbHVlO1xuICB9XG4gIHByaXZhdGUgX2NvbG9yOiBUaGVtZVBhbGV0dGU7XG5cbiAgLyoqIFZhbHVlIG9mIHRoZSBvcHRpb24gKi9cbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHNldCB2YWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQgJiYgbmV3VmFsdWUgIT09IHRoaXMudmFsdWUgJiYgdGhpcy5faW5wdXRzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG4gIHByaXZhdGUgX3ZhbHVlOiBhbnk7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIG9wdGlvbiBpcyBzZWxlY3RlZC4gKi9cbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25MaXN0LnNlbGVjdGVkT3B0aW9ucy5pc1NlbGVjdGVkKHRoaXMpO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuXG4gICAgaWYgKGlzU2VsZWN0ZWQgIT09IHRoaXMuX3NlbGVjdGVkKSB7XG4gICAgICB0aGlzLl9zZXRTZWxlY3RlZChpc1NlbGVjdGVkKTtcblxuICAgICAgaWYgKGlzU2VsZWN0ZWQgfHwgdGhpcy5fc2VsZWN0aW9uTGlzdC5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25MaXN0Ll9yZXBvcnRWYWx1ZUNoYW5nZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9zZWxlY3RlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgbmdab25lOiBOZ1pvbmUsXG4gICAgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIEBJbmplY3QoU0VMRUNUSU9OX0xJU1QpIHB1YmxpYyBfc2VsZWN0aW9uTGlzdDogU2VsZWN0aW9uTGlzdCxcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfUklQUExFX0dMT0JBTF9PUFRJT05TKSBnbG9iYWxSaXBwbGVPcHRpb25zPzogUmlwcGxlR2xvYmFsT3B0aW9ucyxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFOSU1BVElPTl9NT0RVTEVfVFlQRSkgYW5pbWF0aW9uTW9kZT86IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgbmdab25lLCBfc2VsZWN0aW9uTGlzdCwgcGxhdGZvcm0sIGdsb2JhbFJpcHBsZU9wdGlvbnMsIGFuaW1hdGlvbk1vZGUpO1xuXG4gICAgLy8gQnkgZGVmYXVsdCwgd2UgbWFyayBhbGwgb3B0aW9ucyBhcyB1bnNlbGVjdGVkLiBUaGUgTURDIGxpc3QgZm91bmRhdGlvbiB3aWxsXG4gICAgLy8gYXV0b21hdGljYWxseSB1cGRhdGUgdGhlIGF0dHJpYnV0ZSBiYXNlZCBvbiBzZWxlY3Rpb24uIE5vdGUgdGhhdCB3ZSBuZWVkIHRvXG4gICAgLy8gaW5pdGlhbGx5IHNldCB0aGlzIGJlY2F1c2UgTURDIGRvZXMgbm90IHNldCB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciBsaXN0XG4gICAgLy8gaXRlbXMgYnV0IGV4cGVjdHMgaXRlbXMgdG8gYmUgc2V0IHVwIHByb3Blcmx5IGluIHRoZSBzdGF0aWMgbWFya3VwLlxuICAgIGVsZW1lbnQubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLl9zZWxlY3Rpb25MaXN0O1xuXG4gICAgaWYgKGxpc3QuX3ZhbHVlICYmIGxpc3QuX3ZhbHVlLnNvbWUodmFsdWUgPT4gbGlzdC5jb21wYXJlV2l0aCh2YWx1ZSwgdGhpcy5fdmFsdWUpKSkge1xuICAgICAgdGhpcy5fc2V0U2VsZWN0ZWQodHJ1ZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2FzU2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZDtcblxuICAgIC8vIExpc3Qgb3B0aW9ucyB0aGF0IGFyZSBzZWxlY3RlZCBhdCBpbml0aWFsaXphdGlvbiBjYW4ndCBiZSByZXBvcnRlZCBwcm9wZXJseSB0byB0aGUgZm9ybVxuICAgIC8vIGNvbnRyb2wuIFRoaXMgaXMgYmVjYXVzZSBpdCB0YWtlcyBzb21lIHRpbWUgdW50aWwgdGhlIHNlbGVjdGlvbi1saXN0IGtub3dzIGFib3V0IGFsbFxuICAgIC8vIGF2YWlsYWJsZSBvcHRpb25zLiBBbHNvIGl0IGNhbiBoYXBwZW4gdGhhdCB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaGFzIGFuIGluaXRpYWwgdmFsdWVcbiAgICAvLyB0aGF0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQuIERlZmVycmluZyB0aGUgdmFsdWUgY2hhbmdlIHJlcG9ydCB0byB0aGUgbmV4dCB0aWNrIGVuc3VyZXNcbiAgICAvLyB0aGF0IHRoZSBmb3JtIGNvbnRyb2wgdmFsdWUgaXMgbm90IGJlaW5nIG92ZXJ3cml0dGVuLlxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkIHx8IHdhc1NlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLl9pbnB1dHNJbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIC8vIFdlIGhhdmUgdG8gZGVsYXkgdGhpcyB1bnRpbCB0aGUgbmV4dCB0aWNrIGluIG9yZGVyXG4gICAgICAvLyB0byBhdm9pZCBjaGFuZ2VkIGFmdGVyIGNoZWNrZWQgZXJyb3JzLlxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUb2dnbGVzIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgdGhlIG9wdGlvbi4gKi9cbiAgdG9nZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSAhdGhpcy5zZWxlY3RlZDtcbiAgfVxuXG4gIC8qKiBBbGxvd3MgZm9yIHByb2dyYW1tYXRpYyBmb2N1c2luZyBvZiB0aGUgb3B0aW9uLiAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9ob3N0RWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgYSBjaGVja2JveCBpcyBzaG93biBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24uICovXG4gIF9oYXNDaGVja2JveEF0KHBvc2l0aW9uOiBNYXRMaXN0T3B0aW9uQ2hlY2tib3hQb3NpdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25MaXN0Lm11bHRpcGxlICYmIHRoaXMuX2dldENoZWNrYm94UG9zaXRpb24oKSA9PT0gcG9zaXRpb247XG4gIH1cblxuICAvKiogV2hldGhlciBpY29ucyBvciBhdmF0YXJzIGFyZSBzaG93biBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24uICovXG4gIF9oYXNJY29uc09yQXZhdGFyc0F0KHBvc2l0aW9uOiAnYmVmb3JlJyB8ICdhZnRlcicpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faGFzUHJvamVjdGVkKCdpY29ucycsIHBvc2l0aW9uKSB8fCB0aGlzLl9oYXNQcm9qZWN0ZWQoJ2F2YXRhcnMnLCBwb3NpdGlvbik7XG4gIH1cblxuICAvKiogR2V0cyB3aGV0aGVyIHRoZSBnaXZlbiB0eXBlIG9mIGVsZW1lbnQgaXMgcHJvamVjdGVkIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uICovXG4gIF9oYXNQcm9qZWN0ZWQodHlwZTogJ2ljb25zJyB8ICdhdmF0YXJzJywgcG9zaXRpb246ICdiZWZvcmUnIHwgJ2FmdGVyJyk6IGJvb2xlYW4ge1xuICAgIC8vIElmIHRoZSBjaGVja2JveCBpcyBzaG93biBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLCBuZWl0aGVyIGljb25zIG9yXG4gICAgLy8gYXZhdGFycyBjYW4gYmUgc2hvd24gYXQgdGhlIHBvc2l0aW9uLlxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9nZXRDaGVja2JveFBvc2l0aW9uKCkgIT09IHBvc2l0aW9uICYmXG4gICAgICAodHlwZSA9PT0gJ2F2YXRhcnMnID8gdGhpcy5fYXZhdGFycy5sZW5ndGggIT09IDAgOiB0aGlzLl9pY29ucy5sZW5ndGggIT09IDApXG4gICAgKTtcbiAgfVxuXG4gIF9oYW5kbGVCbHVyKCkge1xuICAgIHRoaXMuX3NlbGVjdGlvbkxpc3QuX29uVG91Y2hlZCgpO1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIGNoZWNrYm94LiAqL1xuICBfZ2V0Q2hlY2tib3hQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja2JveFBvc2l0aW9uIHx8ICdhZnRlcic7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgc3RhdGUgb2YgdGhlIG9wdGlvbi5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgdmFsdWUgaGFzIGNoYW5nZWQuXG4gICAqL1xuICBfc2V0U2VsZWN0ZWQoc2VsZWN0ZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAoc2VsZWN0ZWQgPT09IHRoaXMuX3NlbGVjdGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5fc2VsZWN0ZWQgPSBzZWxlY3RlZDtcblxuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTGlzdC5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0KHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25MaXN0LnNlbGVjdGVkT3B0aW9ucy5kZXNlbGVjdCh0aGlzKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoc2VsZWN0ZWQpO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmaWVzIEFuZ3VsYXIgdGhhdCB0aGUgb3B0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQgaW4gdGhlIG5leHQgY2hhbmdlIGRldGVjdGlvbiBydW4uXG4gICAqIE1haW5seSB1c2VkIHRvIHRyaWdnZXIgYW4gdXBkYXRlIG9mIHRoZSBsaXN0IG9wdGlvbiBpZiB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIHNlbGVjdGlvblxuICAgKiBsaXN0IGNoYW5nZWQuXG4gICAqL1xuICBfbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3NlbGVjdGVkOiBCb29sZWFuSW5wdXQ7XG59XG4iLCI8IS0tXG4gIFNhdmUgaWNvbnMgYW5kIHRoZSBwc2V1ZG8gY2hlY2tib3ggc28gdGhhdCB0aGV5IGNhbiBiZSByZS11c2VkIGluIHRoZSB0ZW1wbGF0ZSB3aXRob3V0XG4gIGR1cGxpY2F0aW9uLiBBbHNvIGNvbnRlbnQgY2FuIG9ubHkgYmUgaW5qZWN0ZWQgb25jZSBzbyB3ZSBuZWVkIHRvIGV4dHJhY3QgaWNvbnMvYXZhdGFyc1xuICBpbnRvIGEgdGVtcGxhdGUgc2luY2Ugd2UgdXNlIGl0IGluIG11bHRpcGxlIHBsYWNlcy5cbi0tPlxuPG5nLXRlbXBsYXRlICNpY29ucz5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdC1saXN0LWF2YXRhcl0sW21hdExpc3RBdmF0YXJdLFttYXQtbGlzdC1pY29uXSxbbWF0TGlzdEljb25dXCI+XG4gIDwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2hlY2tib3g+XG4gIDxkaXYgY2xhc3M9XCJtZGMtY2hlY2tib3hcIiBbY2xhc3MubWRjLWNoZWNrYm94LS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cIm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xcIlxuICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiLz5cbiAgICA8ZGl2IGNsYXNzPVwibWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kXCI+XG4gICAgICA8c3ZnIGNsYXNzPVwibWRjLWNoZWNrYm94X19jaGVja21hcmtcIlxuICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgIDxwYXRoIGNsYXNzPVwibWRjLWNoZWNrYm94X19jaGVja21hcmstcGF0aFwiXG4gICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgZD1cIk0xLjczLDEyLjkxIDguMSwxOS4yOCAyMi43OSw0LjU5XCIvPlxuICAgICAgPC9zdmc+XG4gICAgICA8ZGl2IGNsYXNzPVwibWRjLWNoZWNrYm94X19taXhlZG1hcmtcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIENvbnRhaW5lciBmb3IgdGhlIGNoZWNrYm94IGF0IHN0YXJ0LiAtLT5cbjxzcGFuIGNsYXNzPVwibWRjLWxpc3QtaXRlbV9fc3RhcnQgbWF0LW1kYy1saXN0LW9wdGlvbi1jaGVja2JveC1iZWZvcmVcIlxuICAgICAgKm5nSWY9XCJfaGFzQ2hlY2tib3hBdCgnYmVmb3JlJylcIj5cbiAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoZWNrYm94XCI+PC9uZy10ZW1wbGF0ZT5cbjwvc3Bhbj5cbjwhLS0gQ29uZGl0aW9uYWxseSByZW5kZXJzIGljb25zL2F2YXRhcnMgYmVmb3JlIHRoZSBsaXN0IGl0ZW0gdGV4dC4gLS0+XG48bmctdGVtcGxhdGUgW25nSWZdPVwiX2hhc0ljb25zT3JBdmF0YXJzQXQoJ2JlZm9yZScpXCI+XG4gIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJpY29uc1wiPjwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFRleHQgLS0+XG48c3BhbiBjbGFzcz1cIm1kYy1saXN0LWl0ZW1fX2NvbnRlbnRcIiAjdGV4dD5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9zcGFuPlxuXG48IS0tIENvbnRhaW5lciBmb3IgdGhlIGNoZWNrYm94IGF0IHRoZSBlbmQuIC0tPlxuPHNwYW4gY2xhc3M9XCJtZGMtbGlzdC1pdGVtX19lbmRcIiAqbmdJZj1cIl9oYXNDaGVja2JveEF0KCdhZnRlcicpXCI+XG4gIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGVja2JveFwiPjwvbmctdGVtcGxhdGU+XG48L3NwYW4+XG48IS0tIENvbmRpdGlvbmFsbHkgcmVuZGVycyBpY29ucy9hdmF0YXJzIGFmdGVyIHRoZSBsaXN0IGl0ZW0gdGV4dC4gLS0+XG48bmctdGVtcGxhdGUgW25nSWZdPVwiX2hhc0ljb25zT3JBdmF0YXJzQXQoJ2FmdGVyJylcIj5cbiAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImljb25zXCI+PC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRGl2aWRlciAtLT5cbjxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1kaXZpZGVyXCI+PC9uZy1jb250ZW50PlxuXG48IS0tXG4gIFN0cm9uZyBmb2N1cyBpbmRpY2F0b3IgZWxlbWVudC4gTURDIHVzZXMgdGhlIGA6OmJlZm9yZWAgcHNldWRvIGVsZW1lbnQgZm9yIHRoZSBkZWZhdWx0XG4gIGZvY3VzL2hvdmVyL3NlbGVjdGVkIHN0YXRlLCBzbyB3ZSBuZWVkIGEgc2VwYXJhdGUgZWxlbWVudC5cbi0tPlxuPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yXCI+PC9kaXY+XG4iXX0=
|