@limble/limble-tree 1.0.0-beta.3 → 1.0.0
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/README.md +1 -5
- package/esm2020/lib/core/tree-branch/tree-branch.mjs +10 -6
- package/fesm2015/limble-limble-tree.mjs +9 -5
- package/fesm2015/limble-limble-tree.mjs.map +1 -1
- package/fesm2020/limble-limble-tree.mjs +9 -5
- package/fesm2020/limble-limble-tree.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
# Limble Tree
|
|
2
2
|
|
|
3
|
-
This library is currently a work in progress. It may not be suitable for production environments yet.
|
|
4
|
-
|
|
5
|
-
## Description
|
|
6
|
-
|
|
7
3
|
An Angular library for building visual tree structures. Built and used by the team at [Limble](https://limblecmms.com/);
|
|
8
4
|
|
|
9
|
-
Features
|
|
5
|
+
## Features
|
|
10
6
|
|
|
11
7
|
- Allows any number of different components to be rendered in the same tree.
|
|
12
8
|
- Collapsible tree branches
|
|
@@ -25,7 +25,6 @@ export class TreeBranch {
|
|
|
25
25
|
assert(parentBranchesContainer !== undefined);
|
|
26
26
|
this.branchController = new BranchController(this, parentBranchesContainer);
|
|
27
27
|
const hostView = this.branchController.getHostView();
|
|
28
|
-
this.setIndentation(parent);
|
|
29
28
|
if (parent instanceof TreeBranch &&
|
|
30
29
|
parent.branchOptions.defaultCollapsed === true) {
|
|
31
30
|
treeCollapser.storePrecollapsedNode(parent, this);
|
|
@@ -39,8 +38,9 @@ export class TreeBranch {
|
|
|
39
38
|
child: this,
|
|
40
39
|
index: this._parent.branches().length
|
|
41
40
|
}));
|
|
42
|
-
this.
|
|
41
|
+
this.setIndentation();
|
|
43
42
|
}
|
|
43
|
+
this.detectChanges();
|
|
44
44
|
}
|
|
45
45
|
/** @returns All child branches as an array of TreeBranch instances, in order. */
|
|
46
46
|
branches() {
|
|
@@ -409,10 +409,14 @@ export class TreeBranch {
|
|
|
409
409
|
this.detachedView.reattach();
|
|
410
410
|
container.insert(this.detachedView, index);
|
|
411
411
|
this.detachedView = null;
|
|
412
|
+
this.setIndentation();
|
|
412
413
|
}
|
|
413
|
-
setIndentation(
|
|
414
|
-
|
|
415
|
-
|
|
414
|
+
setIndentation() {
|
|
415
|
+
assert(this._parent !== undefined);
|
|
416
|
+
const root = this._parent.root();
|
|
417
|
+
if (root === undefined) {
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
416
420
|
const options = config.getConfig(root);
|
|
417
421
|
const branchesContainerEl = this.branchController
|
|
418
422
|
.getNativeElement()
|
|
@@ -422,4 +426,4 @@ export class TreeBranch {
|
|
|
422
426
|
branchesContainerEl.style.marginLeft = `${options?.indentation ?? 16}px`;
|
|
423
427
|
}
|
|
424
428
|
}
|
|
425
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1icmFuY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2NvcmUvdHJlZS1icmFuY2gvdHJlZS1icmFuY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBU3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0osZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixVQUFVLEVBRVosTUFBTSxjQUFjLENBQUM7QUFFdEI7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQVFwQixZQUNHLE1BQW1DLEVBQ25CLGFBQW1EO1FBQW5ELGtCQUFhLEdBQWIsYUFBYSxDQUFzQztRQU45RCxpQkFBWSxHQUFtQixJQUFJLENBQUM7UUFRekMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUQsTUFBTSxDQUFDLHVCQUF1QixLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixDQUN6QyxJQUFJLEVBQ0osdUJBQXVC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QUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQztRQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDdEQsTUFBTSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRU8sY0FBYyxDQUFDLE1BQW1DO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO2FBQzdDLGdCQUFnQixFQUFFO2FBQ2xCLHNCQUFzQixDQUFDLG9CQUFvQixDQUFDO2FBQzVDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQyxtQkFBbUIsWUFBWSxXQUFXLENBQUMsQ0FBQztRQUNuRCxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsT0FBTyxFQUFFLFdBQVcsSUFBSSxFQUFFLElBQUksQ0FBQztJQUM1RSxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiLi4vLi4vLi4vc2hhcmVkXCI7XG5pbXBvcnQgdHlwZSB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHR5cGUge1xuICAgQ29tcG9uZW50UmVmLFxuICAgVHlwZSxcbiAgIFZpZXdDb250YWluZXJSZWYsXG4gICBWaWV3UmVmXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBCcmFuY2hDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgVHJlZUVycm9yIH0gZnJvbSBcIi4uLy4uL2Vycm9yc1wiO1xuaW1wb3J0IHsgZHJvcHpvbmVSZW5kZXJlciB9IGZyb20gXCIuLi8uLi9leHRyYXMvZHJhZy1hbmQtZHJvcFwiO1xuaW1wb3J0IHsgVHJlZVJvb3QgfSBmcm9tIFwiLi4vdHJlZS1yb290XCI7XG5pbXBvcnQgdHlwZSB7IFRyZWVOb2RlIH0gZnJvbSBcIi4uL3RyZWUtbm9kZS5pbnRlcmZhY2VcIjtcbmltcG9ydCB0eXBlIHsgVHJlZVBsb3QgfSBmcm9tIFwiLi4vdHJlZS1wbG90LmludGVyZmFjZVwiO1xuaW1wb3J0IHsgVHJlZU5vZGVCYXNlIH0gZnJvbSBcIi4uL3RyZWUtbm9kZS1iYXNlXCI7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tIFwiLi4vY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHR5cGUge1xuICAgQnJhbmNoT3B0aW9ucyxcbiAgIEZ1bGxCcmFuY2hPcHRpb25zXG59IGZyb20gXCIuLi9icmFuY2gtb3B0aW9ucy5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IEJyYW5jaENvbnRyb2xsZXIgfSBmcm9tIFwiLi9icmFuY2gtY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBHcmFmdGFibGUgfSBmcm9tIFwiLi9ncmFmdGFibGUuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyB0cmVlQ29sbGFwc2VyIH0gZnJvbSBcIi4uLy4uL2V4dHJhcy9jb2xsYXBzZVwiO1xuaW1wb3J0IHtcbiAgIERlc3RydWN0aW9uRXZlbnQsXG4gICBHcmFmdEV2ZW50LFxuICAgUHJ1bmVFdmVudCxcbiAgIHR5cGUgVHJlZUV2ZW50XG59IGZyb20gXCIuLi8uLi9ldmVudHNcIjtcblxuLyoqIFJlcHJlc2VudHMgYSBzdGFuZGFyZCBub2RlIGluIGEgdHJlZS4gUmVuZGVycyBhIEJyYW5jaENvbXBvbmVudC5cbiAqXG4gKiBAcmVtYXJrc1xuICogVGhpcyBjbGFzcyByZW5kZXJzIGEgYnJhbmNoIGNvbXBvbmVudCwgd2hpY2ggZG9lcyB0aGUgZm9sbG93aW5nOlxuICogMS4gUmVuZGVycyBhIGNvbXBvbmVudCBwcm92aWRlZCBieSB0aGUgdXNlclxuICogMi4gUHJvdmlkZXMgYSBjb250YWluZXIgaW4gd2hpY2ggY2hpbGQgYnJhbmNoZXMgbWF5IGJlIHJlbmRlcmVkXG4gKiAzLiBDb250YWlucyB0d28gRHJvcHpvbmVzOiBvbmUgZm9yIGRyb3BwaW5nIGJyYW5jaGVzIGJlbG93IHRoaXMgYnJhbmNoIChhcyBhXG4gKiBzaWJsaW5nKSwgYW5kIG9uZSBmb3IgZHJvcHBpbmcgYnJhbmNoZXMgYXMgYSBmaXJzdCBjaGlsZCBvZiB0aGlzIGJyYW5jaC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyZWVCcmFuY2g8VXNlcmxhbmRDb21wb25lbnQ+XG4gICBpbXBsZW1lbnRzIFRyZWVOb2RlPFVzZXJsYW5kQ29tcG9uZW50PiwgR3JhZnRhYmxlPFVzZXJsYW5kQ29tcG9uZW50Plxue1xuICAgcHJpdmF0ZSByZWFkb25seSBicmFuY2hDb250cm9sbGVyOiBCcmFuY2hDb250cm9sbGVyPFVzZXJsYW5kQ29tcG9uZW50PjtcbiAgIHByaXZhdGUgZGV0YWNoZWRWaWV3OiBWaWV3UmVmIHwgbnVsbCA9IG51bGw7XG4gICBwcml2YXRlIF9wYXJlbnQ6IFRyZWVOb2RlPFVzZXJsYW5kQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcbiAgIHByaXZhdGUgcmVhZG9ubHkgdHJlZU5vZGVCYXNlOiBUcmVlTm9kZUJhc2U8VXNlcmxhbmRDb21wb25lbnQ+O1xuXG4gICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICBwYXJlbnQ6IFRyZWVOb2RlPFVzZXJsYW5kQ29tcG9uZW50PixcbiAgICAgIHB1YmxpYyByZWFkb25seSBicmFuY2hPcHRpb25zOiBGdWxsQnJhbmNoT3B0aW9uczxVc2VybGFuZENvbXBvbmVudD5cbiAgICkge1xuICAgICAgdGhpcy50cmVlTm9kZUJhc2UgPSBuZXcgVHJlZU5vZGVCYXNlKCk7XG4gICAgICBjb25zdCBwYXJlbnRCcmFuY2hlc0NvbnRhaW5lciA9IHBhcmVudC5nZXRCcmFuY2hlc0NvbnRhaW5lcigpO1xuICAgICAgYXNzZXJ0KHBhcmVudEJyYW5jaGVzQ29udGFpbmVyICE9PSB1bmRlZmluZWQpO1xuICAgICAgdGhpcy5icmFuY2hDb250cm9sbGVyID0gbmV3IEJyYW5jaENvbnRyb2xsZXIoXG4gICAgICAgICB0aGlzLFxuICAgICAgICAgcGFyZW50QnJhbmNoZXNDb250YWluZXJcbiAgICAgICk7XG4gICAgICBjb25zdCBob3N0VmlldyA9IHRoaXMuYnJhbmNoQ29udHJvbGxlci5nZXRIb3N0VmlldygpO1xuICAgICAgdGhpcy5zZXRJbmRlbnRhdGlvbihwYXJlbnQpO1xuICAgICAgaWYgKFxuICAgICAgICAgcGFyZW50IGluc3RhbmNlb2YgVHJlZUJyYW5jaCAmJlxuICAgICAgICAgcGFyZW50LmJyYW5jaE9wdGlvbnMuZGVmYXVsdENvbGxhcHNlZCA9PT0gdHJ1ZVxuICAgICAgKSB7XG4gICAgICAgICB0cmVlQ29sbGFwc2VyLnN0b3JlUHJlY29sbGFwc2VkTm9kZShwYXJlbnQsIHRoaXMpO1xuICAgICAgICAgdGhpcy5kZXRhY2hlZFZpZXcgPSBob3N0VmlldztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICBwYXJlbnRCcmFuY2hlc0NvbnRhaW5lci5pbnNlcnQoaG9zdFZpZXcpO1xuICAgICAgICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICAgICAgICAgdGhpcy5kaXNwYXRjaChcbiAgICAgICAgICAgIG5ldyBHcmFmdEV2ZW50KHRoaXMsIHtcbiAgICAgICAgICAgICAgIHBhcmVudDogdGhpcy5fcGFyZW50LFxuICAgICAgICAgICAgICAgY2hpbGQ6IHRoaXMsXG4gICAgICAgICAgICAgICBpbmRleDogdGhpcy5fcGFyZW50LmJyYW5jaGVzKCkubGVuZ3RoXG4gICAgICAgICAgICB9KVxuICAgICAgICAgKTtcbiAgICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgfVxuXG4gICAvKiogQHJldHVybnMgQWxsIGNoaWxkIGJyYW5jaGVzIGFzIGFuIGFycmF5IG9mIFRyZWVCcmFuY2ggaW5zdGFuY2VzLCBpbiBvcmRlci4gKi9cbiAgIHB1YmxpYyBicmFuY2hlcygpOiBBcnJheTxUcmVlQnJhbmNoPFVzZXJsYW5kQ29tcG9uZW50Pj4ge1xuICAgICAgcmV0dXJuIHRoaXMudHJlZU5vZGVCYXNlLmJyYW5jaGVzKCk7XG4gICB9XG5cbiAgIC8qKlxuICAgICogUmVjdXJzaXZlbHkgZGVzdHJveXMgYWxsIGRlc2NlbmRhbnQgYnJhbmNoZXMsIGFzIHdlbGwgYXMgaXRzZWxmLiBUaGlzXG4gICAgKiByZWxlYXNlcyBhbGwgcmVzb3VyY2VzIGhlbGQgb3IgY29uc3VtZWQgYnkgdGhpcyBicmFuY2ggYW5kIGl0cyBkZXNjZW5kYW50cy5cbiAgICAqXG4gICAgKiBAcmVtYXJrc1xuICAgICogSXQgaXMgaW1wb3J0YW50IHRvIGNhbGwgdGhpcyBtZXRob2Qgd2hlbiBhIGJyYW5jaCBpcyBkaXNjYXJkZWQsIG90aGVyd2lzZVxuICAgICogdGhlIGJyYW5jaCB3aWxsIHJlbWFpbiBpbiBtZW1vcnkgYW5kIGNvbnRpbnVlIHRvIGNvbnN1bWUgcmVzb3VyY2VzLlxuICAgICovXG4gICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKCkpIHtcbiAgICAgICAgIHRocm93IG5ldyBUcmVlRXJyb3IoXCJDYW5ub3QgZGVzdHJveSBhIGRlc3Ryb3llZCB0cmVlIGJyYW5jaFwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJ1bmUoKTtcbiAgICAgIHRyZWVDb2xsYXBzZXIuZXhwYW5kKHRoaXMpO1xuICAgICAgZHJvcHpvbmVSZW5kZXJlci5jbGVhclRyZWVGcm9tUmVnaXN0cnkodGhpcyk7XG4gICAgICB0aGlzLmJyYW5jaENvbnRyb2xsZXIuZ2V0SG9zdFZpZXcoKS5kZXN0cm95KCk7XG4gICAgICB0aGlzLnRyZWVOb2RlQmFzZS5kZXN0cm95KCk7XG4gICAgICB0aGlzLmJyYW5jaENvbnRyb2xsZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy5kaXNwYXRjaChuZXcgRGVzdHJ1Y3Rpb25FdmVudCh0aGlzKSk7XG4gICB9XG5cbiAgIC8qKiBSdW4gQW5ndWxhciBjaGFuZ2UgZGV0ZWN0aW9uIG9uIHRoaXMgYnJhbmNoICovXG4gICBwdWJsaWMgZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICAgIHRoaXMuYnJhbmNoQ29udHJvbGxlci5kZXRlY3RDaGFuZ2VzKCk7XG4gICB9XG5cbiAgIC8qKlxuICAgICogRW1pdHMgdGhlIHNwZWNpZmllZCBUcmVlRXZlbnQuXG4gICAgKlxuICAgICogQHJlbWFya3NcbiAgICAqIENhdXRpb246IEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBtYW51YWxseSBlbWl0IFRyZWVFdmVudHMgdGhhdCBhcmUgYWxyZWFkeVxuICAgICogcHJvdmlkZWQgYnkgdGhlIGxpYnJhcnkuIEZvciBleGFtcGxlLCBpdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gZW1pdCBhXG4gICAgKiBgR3JhZnRFdmVudGAsIGBEZXN0cnVjdGlvbkV2ZW50YCwgZXRjLiBUaGVzZSBldmVudHMgbWF5IGJlIHVzZWQgYnkgdGhlIHRyZWUsXG4gICAgKiBhbmQgZW1pdHRpbmcgdGhlbSBtYW51YWxseSBtYXkgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvci4gSW5zdGVhZCwgd2VcbiAgICAqIHJlY29tbWVuZCBpbXBsZW1lbnRpbmcgdGhlIFRyZWVFdmVudCBpbnRlcmZhY2Ugd2l0aCB5b3VyIG93biBjdXN0b20gZXZlbnRzXG4gICAgKiBhbmQgZGlzcGF0Y2hpbmcgdGhvc2UuXG4gICAgKlxuICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIFRyZWVFdmVudCB0aGF0IHdpbGwgYmUgZW1pdHRlZC5cbiAgICAqL1xuICAgcHVibGljIGRpc3BhdGNoKGV2ZW50OiBUcmVlRXZlbnQ8VXNlcmxhbmRDb21wb25lbnQ+KTogdm9pZCB7XG4gICAgICB0aGlzLnRyZWVOb2RlQmFzZS5kaXNwYXRjaChldmVudCk7XG4gICAgICB0aGlzLl9wYXJlbnQ/LmRpc3BhdGNoKGV2ZW50KTtcbiAgIH1cblxuICAgLyoqXG4gICAgKiBAcmV0dXJuc1xuICAgICogQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIFRyZWVFdmVudHMgd2hlbmV2ZXIgYW4gZXZlbnQgaXMgZGlzcGF0Y2hlZFxuICAgICogaW4gdGhpcyBicmFuY2ggb3IgYW55IG9mIGl0cyBkZXNjZW5kYW50IGJyYW5jaGVzLlxuICAgICovXG4gICBwdWJsaWMgZXZlbnRzKCk6IE9ic2VydmFibGU8VHJlZUV2ZW50PFVzZXJsYW5kQ29tcG9uZW50Pj4ge1xuICAgICAgcmV0dXJuIHRoaXMudHJlZU5vZGVCYXNlLmV2ZW50cygpO1xuICAgfVxuXG4gICAvKipcbiAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgY2hpbGQgYnJhbmNoIHRvIHJldHJpZXZlLlxuICAgICpcbiAgICAqIEByZXR1cm5zXG4gICAgKiBUaGUgY2hpbGQgYnJhbmNoIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXgsIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBpc1xuICAgICogbm8gY2hpbGQgYnJhbmNoIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguXG4gICAgKi9cbiAgIHB1YmxpYyBnZXRCcmFuY2goaW5kZXg6IG51bWJlcik6IFRyZWVCcmFuY2g8VXNlcmxhbmRDb21wb25lbnQ+IHwgdW5kZWZpbmVkIHtcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlQmFzZS5nZXRCcmFuY2goaW5kZXgpO1xuICAgfVxuXG4gICAvKiogQHJldHVybnMgVGhlIFZpZXdDb250YWluZXJSZWYgaW4gd2hpY2ggY2hpbGQgYnJhbmNoZXMgYXJlIHJlbmRlcmVkICovXG4gICBwdWJsaWMgZ2V0QnJhbmNoZXNDb250YWluZXIoKTogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFxuICAgICAgICAgICAgXCJDYW5ub3QgZ2V0IGJyYW5jaGVzIGNvbnRhaW5lciBmcm9tIGEgZGVzdHJveWVkIHRyZWUgYnJhbmNoXCJcbiAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5icmFuY2hDb250cm9sbGVyLmdldEJyYW5jaGVzQ29udGFpbmVyKCk7XG4gICB9XG5cbiAgIC8qKiBAcmV0dXJucyBUaGUgaW5zdGFuY2Ugb2YgQnJhbmNoQ29tcG9uZW50IHRoYXQgaXMgcmVuZGVyZWQgYnkgdGhpcyBjbGFzcy4gKi9cbiAgIHB1YmxpYyBnZXRDb21wb25lbnRJbnN0YW5jZSgpOiBCcmFuY2hDb21wb25lbnQ8VXNlcmxhbmRDb21wb25lbnQ+IHtcbiAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKCkpIHtcbiAgICAgICAgIHRocm93IG5ldyBUcmVlRXJyb3IoXG4gICAgICAgICAgICBcIkNhbm5vdCBnZXQgY29tcG9uZW50IGluc3RhbmNlIGZyb20gYSBkZXN0cm95ZWQgdHJlZSBicmFuY2hcIlxuICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmJyYW5jaENvbnRyb2xsZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcbiAgIH1cblxuICAgLyoqIEByZXR1cm5zIFRoZSBIb3N0IFZpZXcgaW4gd2hpY2ggdGhlIEJyYW5jaENvbXBvbmVudCBpcyByZW5kZXJlZCAqL1xuICAgcHVibGljIGdldEhvc3RWaWV3KCk6IFZpZXdSZWYge1xuICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcbiAgICAgICAgICAgIFwiQ2Fubm90IGdldCBjb21wb25lbnQgaG9zdCB2aWV3IGZyb20gYSBkZXN0cm95ZWQgdHJlZSBicmFuY2hcIlxuICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmJyYW5jaENvbnRyb2xsZXIuZ2V0SG9zdFZpZXcoKTtcbiAgIH1cblxuICAgLyoqIEByZXR1cm5zIFRoZSBCcmFuY2hDb21wb25lbnQgYXMgYSBuYXRpdmUgSFRNTCBFbGVtZW50ICovXG4gICBwdWJsaWMgZ2V0TmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFxuICAgICAgICAgICAgXCJDYW5ub3QgZ2V0IG5hdGl2ZSBlbGVtZW50IGZyb20gYSBkZXN0cm95ZWQgdHJlZSBicmFuY2hcIlxuICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmJyYW5jaENvbnRyb2xsZXIuZ2V0TmF0aXZlRWxlbWVudCgpO1xuICAgfVxuXG4gICAvKipcbiAgICAqIEByZXR1cm5zXG4gICAgKiBBIENvbXBvbmVudFJlZiBjb250YWluaW5nIHRoZSBpbnN0YW5jZSBvZiB0aGUgdXNlci1wcm92aWRlZFxuICAgICogY29tcG9uZW50IHdoaWNoIGlzIHJlbmRlcmVkIGJ5IHRoaXMgYnJhbmNoLlxuICAgICovXG4gICBwdWJsaWMgZ2V0VXNlcmxhbmRDb21wb25lbnRSZWYoKTpcbiAgICAgIHwgQ29tcG9uZW50UmVmPFVzZXJsYW5kQ29tcG9uZW50PlxuICAgICAgfCB1bmRlZmluZWQge1xuICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcbiAgICAgICAgICAgIFwiQ2Fubm90IGdldCB1c2VybGFuZCBjb21wb25lbnQgZnJvbSBhIGRlc3Ryb3llZCB0cmVlIGJyYW5jaFwiXG4gICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYnJhbmNoQ29udHJvbGxlci5nZXRVc2VybGFuZENvbXBvbmVudFJlZigpO1xuICAgfVxuXG4gICAvKipcbiAgICAqIEF0dGFjaGVzIGEgYnJhbmNoIHRvIGEgbmV3IHBhcmVudCBub2RlLlxuICAgICpcbiAgICAqIEByZW1hcmtzXG4gICAgKiBJZiBub3QgYWxyZWFkeSBwcnVuZWQsIHRoaXMgbWV0aG9kIHBydW5lcyAocmVtb3ZlcykgdGhpcyBicmFuY2ggZnJvbSBpdHNcbiAgICAqIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHRyZWU7IHRoZW4gZ3JhZnRzIChyZWF0dGFjaGVzKSBpdCBhcyBhIGNoaWxkIG9mIHRoZVxuICAgICogc3BlY2lmaWVkIHBhcmVudCBicmFuY2ggYXQgdGhlIHNwZWNpZmllZCBpbmRleC4gSWYgbm8gaW5kZXggaXMgc3BlY2lmaWVkLFxuICAgICogdGhlIGJyYW5jaCBpcyBhcHBlbmRlZCBhcyB0aGUgbGFzdCBjaGlsZCBvZiB0aGUgcGFyZW50LiBUaGlzIGNhdXNlcyB0aGlzXG4gICAgKiBicmFuY2gncyBhc3NvY2lhdGVkIEJyYW5jaENvbXBvbmVudCB0byBiZSByZS1yZW5kZXJlZCBpbiB0aGUgRE9NIGF0IHRoZVxuICAgICogbmV3IGxvY2F0aW9uLlxuICAgICpcbiAgICAqIEBwYXJhbSBuZXdQYXJlbnQgLSBUaGUgbmV3IHBhcmVudCBicmFuY2ggdW50byB3aGljaCB0aGlzIGJyYW5jaCB3aWxsIGJlIGdyYWZ0ZWQuXG4gICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5kZXggYXQgd2hpY2ggdGhpcyBicmFuY2ggd2lsbCBiZSBncmFmdGVkLiBJZiBub3Qgc3BlY2lmaWVkLFxuICAgICogdGhpcyBicmFuY2ggd2lsbCBiZSBhcHBlbmRlZCBhcyB0aGUgbGFzdCBjaGlsZCBvZiB0aGUgbmV3IHBhcmVudC5cbiAgICAqXG4gICAgKiBAcmV0dXJucyBUaGUgaW5kZXggYXQgd2hpY2ggdGhpcyBicmFuY2ggd2FzIGdyYWZ0ZWQuXG4gICAgKi9cbiAgIHB1YmxpYyBncmFmdFRvKFxuICAgICAgbmV3UGFyZW50OiBUcmVlTm9kZTxVc2VybGFuZENvbXBvbmVudD4sXG4gICAgICBpbmRleD86IG51bWJlclxuICAgKTogbnVtYmVyIHtcbiAgICAgIHRoaXMuY2hlY2tHcmFmdExvY2F0aW9uVmFsaWRpdHkobmV3UGFyZW50LCBpbmRleCk7XG4gICAgICBjb25zdCBvd25JbmRleCA9IHRoaXMuaW5kZXgoKTtcbiAgICAgIGlmIChvd25JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICB0aGlzLnBydW5lKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9wYXJlbnQgPSBuZXdQYXJlbnQ7XG4gICAgICBjb25zdCBuZXdJbmRleCA9IGluZGV4ID8/IG5ld1BhcmVudC5icmFuY2hlcygpLmxlbmd0aDtcbiAgICAgIHRoaXMucmVhdHRhY2hWaWV3KG5ld0luZGV4KTtcbiAgICAgIHRoaXMuZGlzcGF0Y2goXG4gICAgICAgICBuZXcgR3JhZnRFdmVudCh0aGlzLCB7XG4gICAgICAgICAgICBwYXJlbnQ6IG5ld1BhcmVudCxcbiAgICAgICAgICAgIGNoaWxkOiB0aGlzLFxuICAgICAgICAgICAgaW5kZXg6IG5ld0luZGV4XG4gICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybiBuZXdJbmRleDtcbiAgIH1cblxuICAgLyoqXG4gICAgKiBBcHBlbmRzIGEgbmV3IGNoaWxkIGJyYW5jaCB0byB0aGlzIGJyYW5jaC4gVGhlIGNoaWxkIGJyYW5jaCB3aWxsIHJlbmRlclxuICAgICogdGhlIHNwZWNpZmllZCBjb21wb25lbnQgYWNjb3JkaW5nIHRvIHRoZSAob3B0aW9uYWwpIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLlxuICAgICpcbiAgICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IHRvIHJlbmRlciBpbiB0aGUgbmV3IGNoaWxkIGJyYW5jaC5cbiAgICAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbmV3IGNoaWxkIGJyYW5jaC5cbiAgICAqXG4gICAgKiBAcmV0dXJuc1xuICAgICogVGhlIG5ld2x5LWNyZWF0ZWQgY2hpbGQgYnJhbmNoLlxuICAgICovXG4gICBwdWJsaWMgZ3JvdyhcbiAgICAgIGNvbXBvbmVudDogVHlwZTxVc2VybGFuZENvbXBvbmVudD4sXG4gICAgICBvcHRpb25zPzogQnJhbmNoT3B0aW9uczxVc2VybGFuZENvbXBvbmVudD5cbiAgICk6IFRyZWVCcmFuY2g8VXNlcmxhbmRDb21wb25lbnQ+IHtcbiAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKCkpIHtcbiAgICAgICAgIHRocm93IG5ldyBUcmVlRXJyb3IoXCJDYW5ub3QgZ3JvdyBhIGJyYW5jaCBvbiBhIGRlc3Ryb3llZCB0cmVlIGJyYW5jaFwiKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgICByZXR1cm4gbmV3IFRyZWVCcmFuY2godGhpcywgeyBjb21wb25lbnQsIC4uLm9wdGlvbnMgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgdGhpcy5oYW5kbGVVc2VybGFuZEVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgIH1cblxuICAgLyoqXG4gICAgKiBEZXRlcm1pbmVzIHRoaXMgYnJhbmNoJ3MgaW5kZXggaW4gcmVsYXRpb24gdG8gaXRzIHNpYmxpbmcgYnJhbmNoZXMuXG4gICAgKlxuICAgICogQHJlbWFya3NcbiAgICAqIEZvciBleGFtcGxlLCBpZiBpdCBpcyB0aGUgZmlyc3QgY2hpbGQgb2YgaXRzIHBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm5cbiAgICAqIDAuIElmIGl0IGlzIHRoZSBzZWNvbmQgY2hpbGQgb2YgaXRzIHBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gMS5cbiAgICAqXG4gICAgKiBJZiB0aGlzIGJyYW5jaCBoYXMgbm8gcGFyZW50LCAoZWcsIGlmIHRoaXMgYnJhbmNoIGhhcyBiZWVuIHBydW5lZCkgdGhpc1xuICAgICogbWV0aG9kIHdpbGwgcmV0dXJuIHVuZGVmaW5lZC5cbiAgICAqXG4gICAgKiBAcmV0dXJuc1xuICAgICogVGhlIGluZGV4IG9mIHRoaXMgYnJhbmNoIGluIHJlbGF0aW9uIHRvIGl0cyBzaWJsaW5nIGJyYW5jaGVzLCBvciB1bmRlZmluZWQuXG4gICAgKi9cbiAgIHB1YmxpYyBpbmRleCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgaWYgKCF0aGlzLl9wYXJlbnQpIHtcbiAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3BhcmVudFxuICAgICAgICAgLmJyYW5jaGVzKClcbiAgICAgICAgIC5maW5kSW5kZXgoKGJyYW5jaCkgPT4gYnJhbmNoID09PSB0aGlzKTtcbiAgICAgIGFzc2VydChpbmRleCA+PSAwKTtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgIH1cblxuICAgLyoqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgYnJhbmNoIGlzIGRlc3Ryb3llZCwgYGZhbHNlYCBvdGhlcndpc2UgKi9cbiAgIHB1YmxpYyBpc0Rlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlQmFzZS5pc0Rlc3Ryb3llZCgpO1xuICAgfVxuXG4gICAvKipcbiAgICAqIEByZXR1cm5zXG4gICAgKiBUaGUgZGF0YSB0aGF0IHdhcyBwYXNzZWQgaW50byB0aGUgYGJyYW5jaE9wdGlvbnNgJyBgbWV0YWAgcHJvcGVydHlcbiAgICAqIGF0IGNvbnN0cnVjdGlvbi5cbiAgICAqL1xuICAgcHVibGljIG1ldGEoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICByZXR1cm4gdGhpcy5icmFuY2hPcHRpb25zLm1ldGEgPz8ge307XG4gICB9XG5cbiAgIC8qKlxuICAgICogQHJldHVybnNcbiAgICAqIFRoaXMgYnJhbmNoJ3MgcGFyZW50IG5vZGUgKHdoaWNoIG1heSBiZSBhIFRyZWVCcmFuY2ggb3IgVHJlZVJvb3QpLlxuICAgICogSWYgdGhpcyBicmFuY2ggaGFzIG5vIHBhcmVudCwgKGVnLCBpZiB0aGlzIGJyYW5jaCBoYXMgYmVlbiBwcnVuZWQpIHRoaXNcbiAgICAqIG1ldGhvZCB3aWxsIHJldHVybiB1bmRlZmluZWQuXG4gICAgKi9cbiAgIHB1YmxpYyBwYXJlbnQoKTogVHJlZU5vZGU8VXNlcmxhbmRDb21wb25lbnQ+IHwgdW5kZWZpbmVkIHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XG4gICB9XG5cbiAgIC8qKlxuICAgICogUHJvdmlkZXMgYSBtb2RlbCBkZXNjcmliaW5nIHRoaXMgYnJhbmNoJ3MgZGVzY2VuZGFudHMuXG4gICAgKlxuICAgICogQHJldHVybnNcbiAgICAqIEEgbXVsdGktZGltZW5zaW9uYWwgTWFwIHdoaWNoIGRlc2NyaWJlcyB0aGUgc2hhcGUgb2YgdGhpcyBicmFuY2gnc1xuICAgICogZGVzY2VuZGFudHMuXG4gICAgKlxuICAgICogQGV4YW1wbGVcbiAgICAqIEEgYnJhbmNoIHdpdGggbm8gY2hpbGRyZW4gd2lsbCByZXR1cm4gYW4gZW1wdHkgTWFwLiBBIGJyYW5jaCB3aXRoXG4gICAgKiBhIHNpbmdsZSBjaGlsZCB3aWxsIHJldHVybiBhIE1hcCB3aXRoIGEgc2luZ2xlIGVudHJ5LCB3aGVyZSB0aGUga2V5IGlzIHRoZSBpbmRleFxuICAgICogb2YgdGhlIGJyYW5jaCAoemVybykgYW5kIHRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBNYXAuIEEgVHJlZSBsaWtlIHRoaXM6XG4gICAgKlxuICAgICogYGBgXG4gICAgKiAgICAgICAgIC0tLUJyYW5jaC0tLS0tLS1CcmFuY2hcbiAgICAqICAgICAgICAvXG4gICAgKiBCcmFuY2gtLS0tLS0tQnJhbmNoXG4gICAgKiAgICAgICAgXFxcbiAgICAqICAgICAgICAgLS0tQnJhbmNoXG4gICAgKiBgYGBcbiAgICAqIFdpbGwgcmV0dXJuIGEgTWFwIG9mIG1hdGNoaW5nIHNoYXBlOlxuICAgICogYGBgXG4gICAgKiBNYXAge1xuICAgICogICAgMDogTWFwIHsgMDogTWFwIHt9fSxcbiAgICAqICAgIDE6IE1hcCB7fSxcbiAgICAqICAgIDI6IE1hcCB7fVxuICAgICogfVxuICAgICogYGBgXG4gICAgKi9cbiAgIHB1YmxpYyBwbG90KCk6IFRyZWVQbG90IHtcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlQmFzZS5wbG90KCk7XG4gICB9XG5cbiAgIC8qKlxuICAgICogQ2FsY3VsYXRlcyB0aGUgYnJhbmNoJ3MgcG9zaXRpb24gaW4gdGhlIHRyZWUgcmVsYXRpdmUgdG8gdGhlIFJvb3QuXG4gICAgKlxuICAgICogQHJlbWFya3NcbiAgICAqIFRoZSBwb3NpdGlvbiBpcyBkZXNjcmliZWQgYXMgYW4gYXJyYXkgb2YgbnVtYmVycywgd2hlcmUgZWFjaCBudW1iZXJcbiAgICAqIHJlcHJlc2VudHMgdGhlIGluZGV4IG9mIHRoZSBicmFuY2ggYXQgdGhhdCBsZXZlbCBvZiB0aGUgdHJlZS5cbiAgICAqXG4gICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhpcyBicmFuY2ggaXMgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBSb290LCB0aGlzIG1ldGhvZFxuICAgICogd2lsbCByZXR1cm4gWzBdLiBJZiB0aGlzIGJyYW5jaCBpcyB0aGUgc2Vjb25kIGNoaWxkIG9mIHRoZSBmaXJzdCBjaGlsZFxuICAgICogb2YgdGhlIFJvb3QsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIFswLCAxXS5cbiAgICAqXG4gICAgKiBJZiB0aGUgYnJhbmNoIGlzIG5vdCByZWxhdGVkIHRvIGEgVHJlZVJvb3QsIChzdWNoIGFzIHdoZW4gaXQgaGFzIGJlZW5cbiAgICAqIHBydW5lZCwpIHRoaXMgbWV0aG9kIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAgKlxuICAgICogQHJldHVybnNcbiAgICAqIEFuIGFycmF5IG9mIG51bWJlcnMgd2hpY2ggZGVzY3JpYmUgdGhlIGJyYW5jaCdzIHBvc2l0aW9uIGluIHRoZSB0cmVlXG4gICAgKiByZWxhdGl2ZSB0byB0aGUgUm9vdC5cbiAgICAqL1xuICAgcHVibGljIHBvc2l0aW9uKCk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4KCk7XG4gICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcbiAgICAgICAgICAgIFwiYnJhbmNoIGhhcyBubyBwYXJlbnQuIFBvc2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlwiXG4gICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3BhcmVudCBpbnN0YW5jZW9mIFRyZWVCcmFuY2gpIHtcbiAgICAgICAgIGNvbnN0IHBhcmVudFBvc2l0aW9uID0gdGhpcy5fcGFyZW50LnBvc2l0aW9uKCk7XG4gICAgICAgICByZXR1cm4gWy4uLnBhcmVudFBvc2l0aW9uLCBpbmRleF07XG4gICAgICB9XG4gICAgICByZXR1cm4gW2luZGV4XTtcbiAgIH1cblxuICAgLyoqXG4gICAgKiBSZW1vdmVzIGEgYnJhbmNoIGZyb20gaXRzIHRyZWUgd2l0aG91dCBkZXN0cm95aW5nIGl0LlxuICAgICpcbiAgICAqIEByZW1hcmtzXG4gICAgKiBSZW1vdmVzIHRoaXMgYnJhbmNoIGZyb20gaXRzIHBhcmVudCBhbmQgZGV0YWNoZXMgaXRzIGFzc29jaWF0ZWRcbiAgICAqIEJyYW5jaENvbXBvbmVudCBmcm9tIHRoZSBET00uIFRoaXMgcHV0cyB0aGUgYnJhbmNoIGluIGEgXCJwcnVuZWRcIiBzdGF0ZSxcbiAgICAqIHdoaWNoIG1heSBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIG90aGVyIG1ldGhvZHMuXG4gICAgKlxuICAgICogQSBwcnVuZWQgYnJhbmNoIGNhbiBiZSByZWF0dGFjaGVkIHRvIGFueSBvdGhlciBub2RlIHVzaW5nIHRoZSBgZ3JhZnRUb2AgbWV0aG9kLlxuICAgICpcbiAgICAqIEByZXR1cm5zXG4gICAgKiBJdHNlbGYsIG9yIHVuZGVmaW5lZCBpZiBpdCBpcyBhbHJlYWR5IGluIGEgcHJ1bmVkIHN0YXRlLlxuICAgICovXG4gICBwdWJsaWMgcHJ1bmUoKTogdGhpcyB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFwiQ2Fubm90IHBydW5lIGEgZGVzdHJveWVkIHRyZWUgYnJhbmNoXCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fcGFyZW50O1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4KCk7XG4gICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCB8fCBwYXJlbnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgY29uc3QgY29udGFpbmVyID0gcGFyZW50LmdldEJyYW5jaGVzQ29udGFpbmVyKCk7XG4gICAgICBhc3NlcnQoY29udGFpbmVyICE9PSB1bmRlZmluZWQpO1xuICAgICAgdGhpcy5kZXRhY2hlZFZpZXcgPSBjb250YWluZXIuZGV0YWNoKGluZGV4KTtcbiAgICAgIGFzc2VydCh0aGlzLmRldGFjaGVkVmlldyAhPT0gbnVsbCk7XG4gICAgICB0aGlzLmRldGFjaGVkVmlldy5kZXRhY2goKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2goXG4gICAgICAgICBuZXcgUHJ1bmVFdmVudCh0aGlzLCB7XG4gICAgICAgICAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICAgICAgICAgIGNoaWxkOiB0aGlzLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMuX3BhcmVudCA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgfVxuXG4gICAvKipcbiAgICAqIEdldCB0aGUgcm9vdCBvZiB0aGUgdHJlZSB0byB3aGljaCB0aGlzIEJyYW5jaCBpcyBhdHRhY2hlZC5cbiAgICAqXG4gICAgKiBAcmV0dXJuc1xuICAgICogVGhlIFRyZWVSb290IG9mIHRoZSB0cmVlIHRoaXMgYnJhbmNoIGlzIGluLiBJZiB0aGlzIGJyYW5jaCBpc1xuICAgICogZG9lcyBub3QgaGF2ZSBhIHJvb3QgKHN1Y2ggYXMgd2hlbiBpdCBoYXMgYmVlbiBwcnVuZWQpIHRoaXMgbWV0aG9kIHdpbGxcbiAgICAqIHJldHVybiB1bmRlZmluZWQuXG4gICAgKi9cbiAgIHB1YmxpYyByb290KCk6IFRyZWVSb290PFVzZXJsYW5kQ29tcG9uZW50PiB8IHVuZGVmaW5lZCB7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudCgpO1xuICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFRyZWVCcmFuY2gpIHtcbiAgICAgICAgIHJldHVybiBwYXJlbnQucm9vdCgpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0KHBhcmVudCBpbnN0YW5jZW9mIFRyZWVSb290IHx8IHBhcmVudCA9PT0gdW5kZWZpbmVkKTtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICB9XG5cbiAgIC8qKlxuICAgICogVHJhdmVyc2VzIHRoaXMgYnJhbmNoJ3MgZGVzY2VuZGFudHMgaW4gZGVwdGgtZmlyc3QgcHJlLW9yZGVyLCBleGVjdXRpbmdcbiAgICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBvbiBlYWNoIG5vZGUuIFRyYXZlcnNhbCBpbmNsdWRlcyB0aGlzIGJyYW5jaC5cbiAgICAqXG4gICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gZWFjaCBub2RlLlxuICAgICovXG4gICBwdWJsaWMgdHJhdmVyc2UoXG4gICAgICBjYWxsYmFjazogKG5vZGU6IFRyZWVCcmFuY2g8VXNlcmxhbmRDb21wb25lbnQ+KSA9PiB2b2lkXG4gICApOiB2b2lkIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMpO1xuICAgICAgdGhpcy50cmVlTm9kZUJhc2UudHJhdmVyc2UoY2FsbGJhY2spO1xuICAgfVxuXG4gICBwcml2YXRlIGNoZWNrR3JhZnRMb2NhdGlvblZhbGlkaXR5KFxuICAgICAgbmV3UGFyZW50OiBUcmVlTm9kZTxVc2VybGFuZENvbXBvbmVudD4sXG4gICAgICBpbmRleD86IG51bWJlclxuICAgKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFwiQ2Fubm90IGdyYWZ0IGEgZGVzdHJveWVkIHRyZWUgYnJhbmNoXCIpO1xuICAgICAgfVxuICAgICAgaWYgKG5ld1BhcmVudC5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFwiQ2Fubm90IGdyYWZ0IHRvIGEgZGVzdHJveWVkIHRyZWUgYnJhbmNoXCIpO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAgdHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiICYmXG4gICAgICAgICB0aGlzLmluZGV4SXNPdXRPZlJhbmdlKG5ld1BhcmVudCwgaW5kZXgpXG4gICAgICApIHtcbiAgICAgICAgIHRocm93IG5ldyBUcmVlRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IGdyYWZ0IGJyYW5jaCBhdCBpbmRleCAke2luZGV4fSBvZiB0aGUgcGFyZW50LiBPdXQgb2YgcmFuZ2UuYFxuICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudHJhdmVyc2UoKG5vZGUpID0+IHtcbiAgICAgICAgIGlmIChub2RlID09PSBuZXdQYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUcmVlRXJyb3IoXG4gICAgICAgICAgICAgICBcIkNhbm5vdCBncmFmdCBhIGJyYW5jaCB0byBpdHNlbGYgb3IgYW55IG9mIGl0cyBvd24gZGVzY2VuZGFudHNcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgIH1cbiAgICAgIH0pO1xuICAgfVxuXG4gICBwcml2YXRlIGhhbmRsZVVzZXJsYW5kRXJyb3IoZXJyb3I6IHVua25vd24pOiBuZXZlciB7XG4gICAgICAvLyBXaGVuIGFuIGVycm9yIG9jY3VycyBpbiBhIHVzZXJsYW5kIGNvbXBvbmVudCBkdXJpbmcgYSB0cmVlIG9wZXJhdGlvbixcbiAgICAgIC8vIGl0IGNhbiBjYXVzZSB1bmRlZmluZWQsIGJpemFycmUgYmVoYXZpb3IgaW4gdGhlIHRyZWUuIFRvIHByZXZlbnQgdGhpcyxcbiAgICAgIC8vIHdlIGRlc3Ryb3kgdGhlIHRyZWUgYW5kIHRocm93IGFuIGVycm9yIGluc3RlYWQuIFRoaXMgaGVscHMgcHJvdGVjdFxuICAgICAgLy8gdGhlIGVuZC11c2VyJ3MgZGF0YSBmcm9tIGNvcnJ1cHRpb24uXG4gICAgICB0aGlzLmZ1cnRoZXN0QW5jZXN0b3IoKS5kZXN0cm95KCk7XG4gICAgICB0aGlzLnRyZWVOb2RlQmFzZS5oYW5kbGVVc2VybGFuZEVycm9yKGVycm9yKTtcbiAgIH1cblxuICAgcHJpdmF0ZSBpbmRleElzT3V0T2ZSYW5nZShcbiAgICAgIHBhcmVudDogVHJlZU5vZGU8VXNlcmxhbmRDb21wb25lbnQ+LFxuICAgICAgaW5kZXg6IG51bWJlclxuICAgKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gaW5kZXggPCAwIHx8IGluZGV4ID4gcGFyZW50LmJyYW5jaGVzKCkubGVuZ3RoO1xuICAgfVxuXG4gICBwcml2YXRlIGZ1cnRoZXN0QW5jZXN0b3IoKTogVHJlZU5vZGU8VXNlcmxhbmRDb21wb25lbnQ+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcyAtLSBUaGlzIGNvZGUgaXMgZm9yIGFuIGl0ZXJhdGlvbiwgbm90IHRvIG1ha2UgYHRoaXNgIGF2YWlsYWJsZSBpbiBvdGhlciBzY29wZXMgKHdoaWNoIGlzIHdoYXQgdGhlIHJ1bGUgaXMgaW50ZW5kZWQgdG8gcHJvdGVjdCBhZ2FpbnN0KS5cbiAgICAgIGxldCBub2RlOiBUcmVlTm9kZTxVc2VybGFuZENvbXBvbmVudD4gPSB0aGlzO1xuICAgICAgd2hpbGUgKG5vZGUgaW5zdGFuY2VvZiBUcmVlQnJhbmNoKSB7XG4gICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudCgpO1xuICAgICAgICAgaWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKSBicmVhaztcbiAgICAgICAgIG5vZGUgPSBwYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9kZTtcbiAgIH1cblxuICAgcHJpdmF0ZSByZWF0dGFjaFZpZXcoaW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGFzc2VydCh0aGlzLl9wYXJlbnQgIT09IHVuZGVmaW5lZCk7XG4gICAgICBhc3NlcnQodGhpcy5kZXRhY2hlZFZpZXcgIT09IG51bGwpO1xuICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fcGFyZW50LmdldEJyYW5jaGVzQ29udGFpbmVyKCk7XG4gICAgICBhc3NlcnQoY29udGFpbmVyICE9PSB1bmRlZmluZWQpO1xuICAgICAgdGhpcy5kZXRhY2hlZFZpZXcucmVhdHRhY2goKTtcbiAgICAgIGNvbnRhaW5lci5pbnNlcnQodGhpcy5kZXRhY2hlZFZpZXcsIGluZGV4KTtcbiAgICAgIHRoaXMuZGV0YWNoZWRWaWV3ID0gbnVsbDtcbiAgIH1cblxuICAgcHJpdmF0ZSBzZXRJbmRlbnRhdGlvbihwYXJlbnQ6IFRyZWVOb2RlPFVzZXJsYW5kQ29tcG9uZW50Pik6IHZvaWQge1xuICAgICAgY29uc3Qgcm9vdCA9IHBhcmVudC5yb290KCk7XG4gICAgICBhc3NlcnQocm9vdCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBjb25maWcuZ2V0Q29uZmlnKHJvb3QpO1xuICAgICAgY29uc3QgYnJhbmNoZXNDb250YWluZXJFbCA9IHRoaXMuYnJhbmNoQ29udHJvbGxlclxuICAgICAgICAgLmdldE5hdGl2ZUVsZW1lbnQoKVxuICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJicmFuY2hlcy1jb250YWluZXJcIilcbiAgICAgICAgIC5pdGVtKDApO1xuICAgICAgYXNzZXJ0KGJyYW5jaGVzQ29udGFpbmVyRWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCk7XG4gICAgICBicmFuY2hlc0NvbnRhaW5lckVsLnN0eWxlLm1hcmdpbkxlZnQgPSBgJHtvcHRpb25zPy5pbmRlbnRhdGlvbiA/PyAxNn1weGA7XG4gICB9XG59XG4iXX0=
|
|
429
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1icmFuY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2NvcmUvdHJlZS1icmFuY2gvdHJlZS1icmFuY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBU3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0osZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixVQUFVLEVBRVosTUFBTSxjQUFjLENBQUM7QUFFdEI7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQVFwQixZQUNHLE1BQW1DLEVBQ25CLGFBQW1EO1FBQW5ELGtCQUFhLEdBQWIsYUFBYSxDQUFzQztRQU45RCxpQkFBWSxHQUFtQixJQUFJLENBQUM7UUFRekMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUQsTUFBTSxDQUFDLHVCQUF1QixLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixDQUN6QyxJQUFJLEVBQ0osdUJBQXVC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YXJlZFwiO1xuaW1wb3J0IHR5cGUgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB0eXBlIHtcbiAgIENvbXBvbmVudFJlZixcbiAgIFR5cGUsXG4gICBWaWV3Q29udGFpbmVyUmVmLFxuICAgVmlld1JlZlxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQnJhbmNoQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IFRyZWVFcnJvciB9IGZyb20gXCIuLi8uLi9lcnJvcnNcIjtcbmltcG9ydCB7IGRyb3B6b25lUmVuZGVyZXIgfSBmcm9tIFwiLi4vLi4vZXh0cmFzL2RyYWctYW5kLWRyb3BcIjtcbmltcG9ydCB7IFRyZWVSb290IH0gZnJvbSBcIi4uL3RyZWUtcm9vdFwiO1xuaW1wb3J0IHR5cGUgeyBUcmVlTm9kZSB9IGZyb20gXCIuLi90cmVlLW5vZGUuaW50ZXJmYWNlXCI7XG5pbXBvcnQgdHlwZSB7IFRyZWVQbG90IH0gZnJvbSBcIi4uL3RyZWUtcGxvdC5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IFRyZWVOb2RlQmFzZSB9IGZyb20gXCIuLi90cmVlLW5vZGUtYmFzZVwiO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcIi4uL2NvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCB0eXBlIHtcbiAgIEJyYW5jaE9wdGlvbnMsXG4gICBGdWxsQnJhbmNoT3B0aW9uc1xufSBmcm9tIFwiLi4vYnJhbmNoLW9wdGlvbnMuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBCcmFuY2hDb250cm9sbGVyIH0gZnJvbSBcIi4vYnJhbmNoLWNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgR3JhZnRhYmxlIH0gZnJvbSBcIi4vZ3JhZnRhYmxlLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgdHJlZUNvbGxhcHNlciB9IGZyb20gXCIuLi8uLi9leHRyYXMvY29sbGFwc2VcIjtcbmltcG9ydCB7XG4gICBEZXN0cnVjdGlvbkV2ZW50LFxuICAgR3JhZnRFdmVudCxcbiAgIFBydW5lRXZlbnQsXG4gICB0eXBlIFRyZWVFdmVudFxufSBmcm9tIFwiLi4vLi4vZXZlbnRzXCI7XG5cbi8qKiBSZXByZXNlbnRzIGEgc3RhbmRhcmQgbm9kZSBpbiBhIHRyZWUuIFJlbmRlcnMgYSBCcmFuY2hDb21wb25lbnQuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoaXMgY2xhc3MgcmVuZGVycyBhIGJyYW5jaCBjb21wb25lbnQsIHdoaWNoIGRvZXMgdGhlIGZvbGxvd2luZzpcbiAqIDEuIFJlbmRlcnMgYSBjb21wb25lbnQgcHJvdmlkZWQgYnkgdGhlIHVzZXJcbiAqIDIuIFByb3ZpZGVzIGEgY29udGFpbmVyIGluIHdoaWNoIGNoaWxkIGJyYW5jaGVzIG1heSBiZSByZW5kZXJlZFxuICogMy4gQ29udGFpbnMgdHdvIERyb3B6b25lczogb25lIGZvciBkcm9wcGluZyBicmFuY2hlcyBiZWxvdyB0aGlzIGJyYW5jaCAoYXMgYVxuICogc2libGluZyksIGFuZCBvbmUgZm9yIGRyb3BwaW5nIGJyYW5jaGVzIGFzIGEgZmlyc3QgY2hpbGQgb2YgdGhpcyBicmFuY2guXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmVlQnJhbmNoPFVzZXJsYW5kQ29tcG9uZW50PlxuICAgaW1wbGVtZW50cyBUcmVlTm9kZTxVc2VybGFuZENvbXBvbmVudD4sIEdyYWZ0YWJsZTxVc2VybGFuZENvbXBvbmVudD5cbntcbiAgIHByaXZhdGUgcmVhZG9ubHkgYnJhbmNoQ29udHJvbGxlcjogQnJhbmNoQ29udHJvbGxlcjxVc2VybGFuZENvbXBvbmVudD47XG4gICBwcml2YXRlIGRldGFjaGVkVmlldzogVmlld1JlZiB8IG51bGwgPSBudWxsO1xuICAgcHJpdmF0ZSBfcGFyZW50OiBUcmVlTm9kZTxVc2VybGFuZENvbXBvbmVudD4gfCB1bmRlZmluZWQ7XG4gICBwcml2YXRlIHJlYWRvbmx5IHRyZWVOb2RlQmFzZTogVHJlZU5vZGVCYXNlPFVzZXJsYW5kQ29tcG9uZW50PjtcblxuICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgcGFyZW50OiBUcmVlTm9kZTxVc2VybGFuZENvbXBvbmVudD4sXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYnJhbmNoT3B0aW9uczogRnVsbEJyYW5jaE9wdGlvbnM8VXNlcmxhbmRDb21wb25lbnQ+XG4gICApIHtcbiAgICAgIHRoaXMudHJlZU5vZGVCYXNlID0gbmV3IFRyZWVOb2RlQmFzZSgpO1xuICAgICAgY29uc3QgcGFyZW50QnJhbmNoZXNDb250YWluZXIgPSBwYXJlbnQuZ2V0QnJhbmNoZXNDb250YWluZXIoKTtcbiAgICAgIGFzc2VydChwYXJlbnRCcmFuY2hlc0NvbnRhaW5lciAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuYnJhbmNoQ29udHJvbGxlciA9IG5ldyBCcmFuY2hDb250cm9sbGVyKFxuICAgICAgICAgdGhpcyxcbiAgICAgICAgIHBhcmVudEJyYW5jaGVzQ29udGFpbmVyXG4gICAgICApO1xuICAgICAgY29uc3QgaG9zdFZpZXcgPSB0aGlzLmJyYW5jaENvbnRyb2xsZXIuZ2V0SG9zdFZpZXcoKTtcbiAgICAgIGlmIChcbiAgICAgICAgIHBhcmVudCBpbnN0YW5jZW9mIFRyZWVCcmFuY2ggJiZcbiAgICAgICAgIHBhcmVudC5icmFuY2hPcHRpb25zLmRlZmF1bHRDb2xsYXBzZWQgPT09IHRydWVcbiAgICAgICkge1xuICAgICAgICAgdHJlZUNvbGxhcHNlci5zdG9yZVByZWNvbGxhcHNlZE5vZGUocGFyZW50LCB0aGlzKTtcbiAgICAgICAgIHRoaXMuZGV0YWNoZWRWaWV3ID0gaG9zdFZpZXc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgcGFyZW50QnJhbmNoZXNDb250YWluZXIuaW5zZXJ0KGhvc3RWaWV3KTtcbiAgICAgICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgICAgICAgIHRoaXMuZGlzcGF0Y2goXG4gICAgICAgICAgICBuZXcgR3JhZnRFdmVudCh0aGlzLCB7XG4gICAgICAgICAgICAgICBwYXJlbnQ6IHRoaXMuX3BhcmVudCxcbiAgICAgICAgICAgICAgIGNoaWxkOiB0aGlzLFxuICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuX3BhcmVudC5icmFuY2hlcygpLmxlbmd0aFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICk7XG4gICAgICAgICB0aGlzLnNldEluZGVudGF0aW9uKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgIH1cblxuICAgLyoqIEByZXR1cm5zIEFsbCBjaGlsZCBicmFuY2hlcyBhcyBhbiBhcnJheSBvZiBUcmVlQnJhbmNoIGluc3RhbmNlcywgaW4gb3JkZXIuICovXG4gICBwdWJsaWMgYnJhbmNoZXMoKTogQXJyYXk8VHJlZUJyYW5jaDxVc2VybGFuZENvbXBvbmVudD4+IHtcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlQmFzZS5icmFuY2hlcygpO1xuICAgfVxuXG4gICAvKipcbiAgICAqIFJlY3Vyc2l2ZWx5IGRlc3Ryb3lzIGFsbCBkZXNjZW5kYW50IGJyYW5jaGVzLCBhcyB3ZWxsIGFzIGl0c2VsZi4gVGhpc1xuICAgICogcmVsZWFzZXMgYWxsIHJlc291cmNlcyBoZWxkIG9yIGNvbnN1bWVkIGJ5IHRoaXMgYnJhbmNoIGFuZCBpdHMgZGVzY2VuZGFudHMuXG4gICAgKlxuICAgICogQHJlbWFya3NcbiAgICAqIEl0IGlzIGltcG9ydGFudCB0byBjYWxsIHRoaXMgbWV0aG9kIHdoZW4gYSBicmFuY2ggaXMgZGlzY2FyZGVkLCBvdGhlcndpc2VcbiAgICAqIHRoZSBicmFuY2ggd2lsbCByZW1haW4gaW4gbWVtb3J5IGFuZCBjb250aW51ZSB0byBjb25zdW1lIHJlc291cmNlcy5cbiAgICAqL1xuICAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFwiQ2Fubm90IGRlc3Ryb3kgYSBkZXN0cm95ZWQgdHJlZSBicmFuY2hcIik7XG4gICAgICB9XG4gICAgICB0aGlzLnBydW5lKCk7XG4gICAgICB0cmVlQ29sbGFwc2VyLmV4cGFuZCh0aGlzKTtcbiAgICAgIGRyb3B6b25lUmVuZGVyZXIuY2xlYXJUcmVlRnJvbVJlZ2lzdHJ5KHRoaXMpO1xuICAgICAgdGhpcy5icmFuY2hDb250cm9sbGVyLmdldEhvc3RWaWV3KCkuZGVzdHJveSgpO1xuICAgICAgdGhpcy50cmVlTm9kZUJhc2UuZGVzdHJveSgpO1xuICAgICAgdGhpcy5icmFuY2hDb250cm9sbGVyLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2gobmV3IERlc3RydWN0aW9uRXZlbnQodGhpcykpO1xuICAgfVxuXG4gICAvKiogUnVuIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvbiBvbiB0aGlzIGJyYW5jaCAqL1xuICAgcHVibGljIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gICAgICB0aGlzLmJyYW5jaENvbnRyb2xsZXIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgfVxuXG4gICAvKipcbiAgICAqIEVtaXRzIHRoZSBzcGVjaWZpZWQgVHJlZUV2ZW50LlxuICAgICpcbiAgICAqIEByZW1hcmtzXG4gICAgKiBDYXV0aW9uOiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gbWFudWFsbHkgZW1pdCBUcmVlRXZlbnRzIHRoYXQgYXJlIGFscmVhZHlcbiAgICAqIHByb3ZpZGVkIGJ5IHRoZSBsaWJyYXJ5LiBGb3IgZXhhbXBsZSwgaXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGVtaXQgYVxuICAgICogYEdyYWZ0RXZlbnRgLCBgRGVzdHJ1Y3Rpb25FdmVudGAsIGV0Yy4gVGhlc2UgZXZlbnRzIG1heSBiZSB1c2VkIGJ5IHRoZSB0cmVlLFxuICAgICogYW5kIGVtaXR0aW5nIHRoZW0gbWFudWFsbHkgbWF5IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEluc3RlYWQsIHdlXG4gICAgKiByZWNvbW1lbmQgaW1wbGVtZW50aW5nIHRoZSBUcmVlRXZlbnQgaW50ZXJmYWNlIHdpdGggeW91ciBvd24gY3VzdG9tIGV2ZW50c1xuICAgICogYW5kIGRpc3BhdGNoaW5nIHRob3NlLlxuICAgICpcbiAgICAqIEBwYXJhbSBldmVudCAtIFRoZSBUcmVlRXZlbnQgdGhhdCB3aWxsIGJlIGVtaXR0ZWQuXG4gICAgKi9cbiAgIHB1YmxpYyBkaXNwYXRjaChldmVudDogVHJlZUV2ZW50PFVzZXJsYW5kQ29tcG9uZW50Pik6IHZvaWQge1xuICAgICAgdGhpcy50cmVlTm9kZUJhc2UuZGlzcGF0Y2goZXZlbnQpO1xuICAgICAgdGhpcy5fcGFyZW50Py5kaXNwYXRjaChldmVudCk7XG4gICB9XG5cbiAgIC8qKlxuICAgICogQHJldHVybnNcbiAgICAqIEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyBUcmVlRXZlbnRzIHdoZW5ldmVyIGFuIGV2ZW50IGlzIGRpc3BhdGNoZWRcbiAgICAqIGluIHRoaXMgYnJhbmNoIG9yIGFueSBvZiBpdHMgZGVzY2VuZGFudCBicmFuY2hlcy5cbiAgICAqL1xuICAgcHVibGljIGV2ZW50cygpOiBPYnNlcnZhYmxlPFRyZWVFdmVudDxVc2VybGFuZENvbXBvbmVudD4+IHtcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlQmFzZS5ldmVudHMoKTtcbiAgIH1cblxuICAgLyoqXG4gICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGNoaWxkIGJyYW5jaCB0byByZXRyaWV2ZS5cbiAgICAqXG4gICAgKiBAcmV0dXJuc1xuICAgICogVGhlIGNoaWxkIGJyYW5jaCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LCBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXNcbiAgICAqIG5vIGNoaWxkIGJyYW5jaCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LlxuICAgICovXG4gICBwdWJsaWMgZ2V0QnJhbmNoKGluZGV4OiBudW1iZXIpOiBUcmVlQnJhbmNoPFVzZXJsYW5kQ29tcG9uZW50PiB8IHVuZGVmaW5lZCB7XG4gICAgICByZXR1cm4gdGhpcy50cmVlTm9kZUJhc2UuZ2V0QnJhbmNoKGluZGV4KTtcbiAgIH1cblxuICAgLyoqIEByZXR1cm5zIFRoZSBWaWV3Q29udGFpbmVyUmVmIGluIHdoaWNoIGNoaWxkIGJyYW5jaGVzIGFyZSByZW5kZXJlZCAqL1xuICAgcHVibGljIGdldEJyYW5jaGVzQ29udGFpbmVyKCk6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQge1xuICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcbiAgICAgICAgICAgIFwiQ2Fubm90IGdldCBicmFuY2hlcyBjb250YWluZXIgZnJvbSBhIGRlc3Ryb3llZCB0cmVlIGJyYW5jaFwiXG4gICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYnJhbmNoQ29udHJvbGxlci5nZXRCcmFuY2hlc0NvbnRhaW5lcigpO1xuICAgfVxuXG4gICAvKiogQHJldHVybnMgVGhlIGluc3RhbmNlIG9mIEJyYW5jaENvbXBvbmVudCB0aGF0IGlzIHJlbmRlcmVkIGJ5IHRoaXMgY2xhc3MuICovXG4gICBwdWJsaWMgZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTogQnJhbmNoQ29tcG9uZW50PFVzZXJsYW5kQ29tcG9uZW50PiB7XG4gICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFxuICAgICAgICAgICAgXCJDYW5ub3QgZ2V0IGNvbXBvbmVudCBpbnN0YW5jZSBmcm9tIGEgZGVzdHJveWVkIHRyZWUgYnJhbmNoXCJcbiAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5icmFuY2hDb250cm9sbGVyLmdldENvbXBvbmVudEluc3RhbmNlKCk7XG4gICB9XG5cbiAgIC8qKiBAcmV0dXJucyBUaGUgSG9zdCBWaWV3IGluIHdoaWNoIHRoZSBCcmFuY2hDb21wb25lbnQgaXMgcmVuZGVyZWQgKi9cbiAgIHB1YmxpYyBnZXRIb3N0VmlldygpOiBWaWV3UmVmIHtcbiAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKCkpIHtcbiAgICAgICAgIHRocm93IG5ldyBUcmVlRXJyb3IoXG4gICAgICAgICAgICBcIkNhbm5vdCBnZXQgY29tcG9uZW50IGhvc3QgdmlldyBmcm9tIGEgZGVzdHJveWVkIHRyZWUgYnJhbmNoXCJcbiAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5icmFuY2hDb250cm9sbGVyLmdldEhvc3RWaWV3KCk7XG4gICB9XG5cbiAgIC8qKiBAcmV0dXJucyBUaGUgQnJhbmNoQ29tcG9uZW50IGFzIGEgbmF0aXZlIEhUTUwgRWxlbWVudCAqL1xuICAgcHVibGljIGdldE5hdGl2ZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcbiAgICAgICAgICAgIFwiQ2Fubm90IGdldCBuYXRpdmUgZWxlbWVudCBmcm9tIGEgZGVzdHJveWVkIHRyZWUgYnJhbmNoXCJcbiAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5icmFuY2hDb250cm9sbGVyLmdldE5hdGl2ZUVsZW1lbnQoKTtcbiAgIH1cblxuICAgLyoqXG4gICAgKiBAcmV0dXJuc1xuICAgICogQSBDb21wb25lbnRSZWYgY29udGFpbmluZyB0aGUgaW5zdGFuY2Ugb2YgdGhlIHVzZXItcHJvdmlkZWRcbiAgICAqIGNvbXBvbmVudCB3aGljaCBpcyByZW5kZXJlZCBieSB0aGlzIGJyYW5jaC5cbiAgICAqL1xuICAgcHVibGljIGdldFVzZXJsYW5kQ29tcG9uZW50UmVmKCk6XG4gICAgICB8IENvbXBvbmVudFJlZjxVc2VybGFuZENvbXBvbmVudD5cbiAgICAgIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKCkpIHtcbiAgICAgICAgIHRocm93IG5ldyBUcmVlRXJyb3IoXG4gICAgICAgICAgICBcIkNhbm5vdCBnZXQgdXNlcmxhbmQgY29tcG9uZW50IGZyb20gYSBkZXN0cm95ZWQgdHJlZSBicmFuY2hcIlxuICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmJyYW5jaENvbnRyb2xsZXIuZ2V0VXNlcmxhbmRDb21wb25lbnRSZWYoKTtcbiAgIH1cblxuICAgLyoqXG4gICAgKiBBdHRhY2hlcyBhIGJyYW5jaCB0byBhIG5ldyBwYXJlbnQgbm9kZS5cbiAgICAqXG4gICAgKiBAcmVtYXJrc1xuICAgICogSWYgbm90IGFscmVhZHkgcHJ1bmVkLCB0aGlzIG1ldGhvZCBwcnVuZXMgKHJlbW92ZXMpIHRoaXMgYnJhbmNoIGZyb20gaXRzXG4gICAgKiBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSB0cmVlOyB0aGVuIGdyYWZ0cyAocmVhdHRhY2hlcykgaXQgYXMgYSBjaGlsZCBvZiB0aGVcbiAgICAqIHNwZWNpZmllZCBwYXJlbnQgYnJhbmNoIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguIElmIG5vIGluZGV4IGlzIHNwZWNpZmllZCxcbiAgICAqIHRoZSBicmFuY2ggaXMgYXBwZW5kZWQgYXMgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIHBhcmVudC4gVGhpcyBjYXVzZXMgdGhpc1xuICAgICogYnJhbmNoJ3MgYXNzb2NpYXRlZCBCcmFuY2hDb21wb25lbnQgdG8gYmUgcmUtcmVuZGVyZWQgaW4gdGhlIERPTSBhdCB0aGVcbiAgICAqIG5ldyBsb2NhdGlvbi5cbiAgICAqXG4gICAgKiBAcGFyYW0gbmV3UGFyZW50IC0gVGhlIG5ldyBwYXJlbnQgYnJhbmNoIHVudG8gd2hpY2ggdGhpcyBicmFuY2ggd2lsbCBiZSBncmFmdGVkLlxuICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGluZGV4IGF0IHdoaWNoIHRoaXMgYnJhbmNoIHdpbGwgYmUgZ3JhZnRlZC4gSWYgbm90IHNwZWNpZmllZCxcbiAgICAqIHRoaXMgYnJhbmNoIHdpbGwgYmUgYXBwZW5kZWQgYXMgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIG5ldyBwYXJlbnQuXG4gICAgKlxuICAgICogQHJldHVybnMgVGhlIGluZGV4IGF0IHdoaWNoIHRoaXMgYnJhbmNoIHdhcyBncmFmdGVkLlxuICAgICovXG4gICBwdWJsaWMgZ3JhZnRUbyhcbiAgICAgIG5ld1BhcmVudDogVHJlZU5vZGU8VXNlcmxhbmRDb21wb25lbnQ+LFxuICAgICAgaW5kZXg/OiBudW1iZXJcbiAgICk6IG51bWJlciB7XG4gICAgICB0aGlzLmNoZWNrR3JhZnRMb2NhdGlvblZhbGlkaXR5KG5ld1BhcmVudCwgaW5kZXgpO1xuICAgICAgY29uc3Qgb3duSW5kZXggPSB0aGlzLmluZGV4KCk7XG4gICAgICBpZiAob3duSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhpcy5wcnVuZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fcGFyZW50ID0gbmV3UGFyZW50O1xuICAgICAgY29uc3QgbmV3SW5kZXggPSBpbmRleCA/PyBuZXdQYXJlbnQuYnJhbmNoZXMoKS5sZW5ndGg7XG4gICAgICB0aGlzLnJlYXR0YWNoVmlldyhuZXdJbmRleCk7XG4gICAgICB0aGlzLmRpc3BhdGNoKFxuICAgICAgICAgbmV3IEdyYWZ0RXZlbnQodGhpcywge1xuICAgICAgICAgICAgcGFyZW50OiBuZXdQYXJlbnQsXG4gICAgICAgICAgICBjaGlsZDogdGhpcyxcbiAgICAgICAgICAgIGluZGV4OiBuZXdJbmRleFxuICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gbmV3SW5kZXg7XG4gICB9XG5cbiAgIC8qKlxuICAgICogQXBwZW5kcyBhIG5ldyBjaGlsZCBicmFuY2ggdG8gdGhpcyBicmFuY2guIFRoZSBjaGlsZCBicmFuY2ggd2lsbCByZW5kZXJcbiAgICAqIHRoZSBzcGVjaWZpZWQgY29tcG9uZW50IGFjY29yZGluZyB0byB0aGUgKG9wdGlvbmFsKSBjb25maWd1cmF0aW9uIHBhcmFtZXRlci5cbiAgICAqXG4gICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0byByZW5kZXIgaW4gdGhlIG5ldyBjaGlsZCBicmFuY2guXG4gICAgKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG5ldyBjaGlsZCBicmFuY2guXG4gICAgKlxuICAgICogQHJldHVybnNcbiAgICAqIFRoZSBuZXdseS1jcmVhdGVkIGNoaWxkIGJyYW5jaC5cbiAgICAqL1xuICAgcHVibGljIGdyb3coXG4gICAgICBjb21wb25lbnQ6IFR5cGU8VXNlcmxhbmRDb21wb25lbnQ+LFxuICAgICAgb3B0aW9ucz86IEJyYW5jaE9wdGlvbnM8VXNlcmxhbmRDb21wb25lbnQ+XG4gICApOiBUcmVlQnJhbmNoPFVzZXJsYW5kQ29tcG9uZW50PiB7XG4gICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFwiQ2Fubm90IGdyb3cgYSBicmFuY2ggb24gYSBkZXN0cm95ZWQgdHJlZSBicmFuY2hcIik7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICAgcmV0dXJuIG5ldyBUcmVlQnJhbmNoKHRoaXMsIHsgY29tcG9uZW50LCAuLi5vcHRpb25zIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgIHRoaXMuaGFuZGxlVXNlcmxhbmRFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICB9XG5cbiAgIC8qKlxuICAgICogRGV0ZXJtaW5lcyB0aGlzIGJyYW5jaCdzIGluZGV4IGluIHJlbGF0aW9uIHRvIGl0cyBzaWJsaW5nIGJyYW5jaGVzLlxuICAgICpcbiAgICAqIEByZW1hcmtzXG4gICAgKiBGb3IgZXhhbXBsZSwgaWYgaXQgaXMgdGhlIGZpcnN0IGNoaWxkIG9mIGl0cyBwYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG4gICAgKiAwLiBJZiBpdCBpcyB0aGUgc2Vjb25kIGNoaWxkIG9mIGl0cyBwYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIDEuXG4gICAgKlxuICAgICogSWYgdGhpcyBicmFuY2ggaGFzIG5vIHBhcmVudCwgKGVnLCBpZiB0aGlzIGJyYW5jaCBoYXMgYmVlbiBwcnVuZWQpIHRoaXNcbiAgICAqIG1ldGhvZCB3aWxsIHJldHVybiB1bmRlZmluZWQuXG4gICAgKlxuICAgICogQHJldHVybnNcbiAgICAqIFRoZSBpbmRleCBvZiB0aGlzIGJyYW5jaCBpbiByZWxhdGlvbiB0byBpdHMgc2libGluZyBicmFuY2hlcywgb3IgdW5kZWZpbmVkLlxuICAgICovXG4gICBwdWJsaWMgaW5kZXgoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmICghdGhpcy5fcGFyZW50KSB7XG4gICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9wYXJlbnRcbiAgICAgICAgIC5icmFuY2hlcygpXG4gICAgICAgICAuZmluZEluZGV4KChicmFuY2gpID0+IGJyYW5jaCA9PT0gdGhpcyk7XG4gICAgICBhc3NlcnQoaW5kZXggPj0gMCk7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICB9XG5cbiAgIC8qKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGJyYW5jaCBpcyBkZXN0cm95ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlICovXG4gICBwdWJsaWMgaXNEZXN0cm95ZWQoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy50cmVlTm9kZUJhc2UuaXNEZXN0cm95ZWQoKTtcbiAgIH1cblxuICAgLyoqXG4gICAgKiBAcmV0dXJuc1xuICAgICogVGhlIGRhdGEgdGhhdCB3YXMgcGFzc2VkIGludG8gdGhlIGBicmFuY2hPcHRpb25zYCcgYG1ldGFgIHByb3BlcnR5XG4gICAgKiBhdCBjb25zdHJ1Y3Rpb24uXG4gICAgKi9cbiAgIHB1YmxpYyBtZXRhKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgICAgcmV0dXJuIHRoaXMuYnJhbmNoT3B0aW9ucy5tZXRhID8/IHt9O1xuICAgfVxuXG4gICAvKipcbiAgICAqIEByZXR1cm5zXG4gICAgKiBUaGlzIGJyYW5jaCdzIHBhcmVudCBub2RlICh3aGljaCBtYXkgYmUgYSBUcmVlQnJhbmNoIG9yIFRyZWVSb290KS5cbiAgICAqIElmIHRoaXMgYnJhbmNoIGhhcyBubyBwYXJlbnQsIChlZywgaWYgdGhpcyBicmFuY2ggaGFzIGJlZW4gcHJ1bmVkKSB0aGlzXG4gICAgKiBtZXRob2Qgd2lsbCByZXR1cm4gdW5kZWZpbmVkLlxuICAgICovXG4gICBwdWJsaWMgcGFyZW50KCk6IFRyZWVOb2RlPFVzZXJsYW5kQ29tcG9uZW50PiB8IHVuZGVmaW5lZCB7XG4gICAgICByZXR1cm4gdGhpcy5fcGFyZW50O1xuICAgfVxuXG4gICAvKipcbiAgICAqIFByb3ZpZGVzIGEgbW9kZWwgZGVzY3JpYmluZyB0aGlzIGJyYW5jaCdzIGRlc2NlbmRhbnRzLlxuICAgICpcbiAgICAqIEByZXR1cm5zXG4gICAgKiBBIG11bHRpLWRpbWVuc2lvbmFsIE1hcCB3aGljaCBkZXNjcmliZXMgdGhlIHNoYXBlIG9mIHRoaXMgYnJhbmNoJ3NcbiAgICAqIGRlc2NlbmRhbnRzLlxuICAgICpcbiAgICAqIEBleGFtcGxlXG4gICAgKiBBIGJyYW5jaCB3aXRoIG5vIGNoaWxkcmVuIHdpbGwgcmV0dXJuIGFuIGVtcHR5IE1hcC4gQSBicmFuY2ggd2l0aFxuICAgICogYSBzaW5nbGUgY2hpbGQgd2lsbCByZXR1cm4gYSBNYXAgd2l0aCBhIHNpbmdsZSBlbnRyeSwgd2hlcmUgdGhlIGtleSBpcyB0aGUgaW5kZXhcbiAgICAqIG9mIHRoZSBicmFuY2ggKHplcm8pIGFuZCB0aGUgdmFsdWUgaXMgYW4gZW1wdHkgTWFwLiBBIFRyZWUgbGlrZSB0aGlzOlxuICAgICpcbiAgICAqIGBgYFxuICAgICogICAgICAgICAtLS1CcmFuY2gtLS0tLS0tQnJhbmNoXG4gICAgKiAgICAgICAgL1xuICAgICogQnJhbmNoLS0tLS0tLUJyYW5jaFxuICAgICogICAgICAgIFxcXG4gICAgKiAgICAgICAgIC0tLUJyYW5jaFxuICAgICogYGBgXG4gICAgKiBXaWxsIHJldHVybiBhIE1hcCBvZiBtYXRjaGluZyBzaGFwZTpcbiAgICAqIGBgYFxuICAgICogTWFwIHtcbiAgICAqICAgIDA6IE1hcCB7IDA6IE1hcCB7fX0sXG4gICAgKiAgICAxOiBNYXAge30sXG4gICAgKiAgICAyOiBNYXAge31cbiAgICAqIH1cbiAgICAqIGBgYFxuICAgICovXG4gICBwdWJsaWMgcGxvdCgpOiBUcmVlUGxvdCB7XG4gICAgICByZXR1cm4gdGhpcy50cmVlTm9kZUJhc2UucGxvdCgpO1xuICAgfVxuXG4gICAvKipcbiAgICAqIENhbGN1bGF0ZXMgdGhlIGJyYW5jaCdzIHBvc2l0aW9uIGluIHRoZSB0cmVlIHJlbGF0aXZlIHRvIHRoZSBSb290LlxuICAgICpcbiAgICAqIEByZW1hcmtzXG4gICAgKiBUaGUgcG9zaXRpb24gaXMgZGVzY3JpYmVkIGFzIGFuIGFycmF5IG9mIG51bWJlcnMsIHdoZXJlIGVhY2ggbnVtYmVyXG4gICAgKiByZXByZXNlbnRzIHRoZSBpbmRleCBvZiB0aGUgYnJhbmNoIGF0IHRoYXQgbGV2ZWwgb2YgdGhlIHRyZWUuXG4gICAgKlxuICAgICogRm9yIGV4YW1wbGUsIGlmIHRoaXMgYnJhbmNoIGlzIHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgUm9vdCwgdGhpcyBtZXRob2RcbiAgICAqIHdpbGwgcmV0dXJuIFswXS4gSWYgdGhpcyBicmFuY2ggaXMgdGhlIHNlY29uZCBjaGlsZCBvZiB0aGUgZmlyc3QgY2hpbGRcbiAgICAqIG9mIHRoZSBSb290LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBbMCwgMV0uXG4gICAgKlxuICAgICogSWYgdGhlIGJyYW5jaCBpcyBub3QgcmVsYXRlZCB0byBhIFRyZWVSb290LCAoc3VjaCBhcyB3aGVuIGl0IGhhcyBiZWVuXG4gICAgKiBwcnVuZWQsKSB0aGlzIG1ldGhvZCB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgICpcbiAgICAqIEByZXR1cm5zXG4gICAgKiBBbiBhcnJheSBvZiBudW1iZXJzIHdoaWNoIGRlc2NyaWJlIHRoZSBicmFuY2gncyBwb3NpdGlvbiBpbiB0aGUgdHJlZVxuICAgICogcmVsYXRpdmUgdG8gdGhlIFJvb3QuXG4gICAgKi9cbiAgIHB1YmxpYyBwb3NpdGlvbigpOiBBcnJheTxudW1iZXI+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleCgpO1xuICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgIHRocm93IG5ldyBUcmVlRXJyb3IoXG4gICAgICAgICAgICBcImJyYW5jaCBoYXMgbm8gcGFyZW50LiBQb3NpdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cIlxuICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBUcmVlQnJhbmNoKSB7XG4gICAgICAgICBjb25zdCBwYXJlbnRQb3NpdGlvbiA9IHRoaXMuX3BhcmVudC5wb3NpdGlvbigpO1xuICAgICAgICAgcmV0dXJuIFsuLi5wYXJlbnRQb3NpdGlvbiwgaW5kZXhdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtpbmRleF07XG4gICB9XG5cbiAgIC8qKlxuICAgICogUmVtb3ZlcyBhIGJyYW5jaCBmcm9tIGl0cyB0cmVlIHdpdGhvdXQgZGVzdHJveWluZyBpdC5cbiAgICAqXG4gICAgKiBAcmVtYXJrc1xuICAgICogUmVtb3ZlcyB0aGlzIGJyYW5jaCBmcm9tIGl0cyBwYXJlbnQgYW5kIGRldGFjaGVzIGl0cyBhc3NvY2lhdGVkXG4gICAgKiBCcmFuY2hDb21wb25lbnQgZnJvbSB0aGUgRE9NLiBUaGlzIHB1dHMgdGhlIGJyYW5jaCBpbiBhIFwicHJ1bmVkXCIgc3RhdGUsXG4gICAgKiB3aGljaCBtYXkgYWZmZWN0IHRoZSBiZWhhdmlvciBvZiBvdGhlciBtZXRob2RzLlxuICAgICpcbiAgICAqIEEgcHJ1bmVkIGJyYW5jaCBjYW4gYmUgcmVhdHRhY2hlZCB0byBhbnkgb3RoZXIgbm9kZSB1c2luZyB0aGUgYGdyYWZ0VG9gIG1ldGhvZC5cbiAgICAqXG4gICAgKiBAcmV0dXJuc1xuICAgICogSXRzZWxmLCBvciB1bmRlZmluZWQgaWYgaXQgaXMgYWxyZWFkeSBpbiBhIHBydW5lZCBzdGF0ZS5cbiAgICAqL1xuICAgcHVibGljIHBydW5lKCk6IHRoaXMgfCB1bmRlZmluZWQge1xuICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcIkNhbm5vdCBwcnVuZSBhIGRlc3Ryb3llZCB0cmVlIGJyYW5jaFwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX3BhcmVudDtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleCgpO1xuICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQgfHwgcGFyZW50ID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHBhcmVudC5nZXRCcmFuY2hlc0NvbnRhaW5lcigpO1xuICAgICAgYXNzZXJ0KGNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuZGV0YWNoZWRWaWV3ID0gY29udGFpbmVyLmRldGFjaChpbmRleCk7XG4gICAgICBhc3NlcnQodGhpcy5kZXRhY2hlZFZpZXcgIT09IG51bGwpO1xuICAgICAgdGhpcy5kZXRhY2hlZFZpZXcuZGV0YWNoKCk7XG4gICAgICB0aGlzLmRpc3BhdGNoKFxuICAgICAgICAgbmV3IFBydW5lRXZlbnQodGhpcywge1xuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnQsXG4gICAgICAgICAgICBjaGlsZDogdGhpcyxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLl9wYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gdGhpcztcbiAgIH1cblxuICAgLyoqXG4gICAgKiBHZXQgdGhlIHJvb3Qgb2YgdGhlIHRyZWUgdG8gd2hpY2ggdGhpcyBCcmFuY2ggaXMgYXR0YWNoZWQuXG4gICAgKlxuICAgICogQHJldHVybnNcbiAgICAqIFRoZSBUcmVlUm9vdCBvZiB0aGUgdHJlZSB0aGlzIGJyYW5jaCBpcyBpbi4gSWYgdGhpcyBicmFuY2ggaXNcbiAgICAqIGRvZXMgbm90IGhhdmUgYSByb290IChzdWNoIGFzIHdoZW4gaXQgaGFzIGJlZW4gcHJ1bmVkKSB0aGlzIG1ldGhvZCB3aWxsXG4gICAgKiByZXR1cm4gdW5kZWZpbmVkLlxuICAgICovXG4gICBwdWJsaWMgcm9vdCgpOiBUcmVlUm9vdDxVc2VybGFuZENvbXBvbmVudD4gfCB1bmRlZmluZWQge1xuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQoKTtcbiAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBUcmVlQnJhbmNoKSB7XG4gICAgICAgICByZXR1cm4gcGFyZW50LnJvb3QoKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChwYXJlbnQgaW5zdGFuY2VvZiBUcmVlUm9vdCB8fCBwYXJlbnQgPT09IHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgfVxuXG4gICAvKipcbiAgICAqIFRyYXZlcnNlcyB0aGlzIGJyYW5jaCdzIGRlc2NlbmRhbnRzIGluIGRlcHRoLWZpcnN0IHByZS1vcmRlciwgZXhlY3V0aW5nXG4gICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gb24gZWFjaCBub2RlLiBUcmF2ZXJzYWwgaW5jbHVkZXMgdGhpcyBicmFuY2guXG4gICAgKlxuICAgICogQHBhcmFtIGNhbGxiYWNrIC0gQSBmdW5jdGlvbiB0byBleGVjdXRlIG9uIGVhY2ggbm9kZS5cbiAgICAqL1xuICAgcHVibGljIHRyYXZlcnNlKFxuICAgICAgY2FsbGJhY2s6IChub2RlOiBUcmVlQnJhbmNoPFVzZXJsYW5kQ29tcG9uZW50PikgPT4gdm9pZFxuICAgKTogdm9pZCB7XG4gICAgICBjYWxsYmFjayh0aGlzKTtcbiAgICAgIHRoaXMudHJlZU5vZGVCYXNlLnRyYXZlcnNlKGNhbGxiYWNrKTtcbiAgIH1cblxuICAgcHJpdmF0ZSBjaGVja0dyYWZ0TG9jYXRpb25WYWxpZGl0eShcbiAgICAgIG5ld1BhcmVudDogVHJlZU5vZGU8VXNlcmxhbmRDb21wb25lbnQ+LFxuICAgICAgaW5kZXg/OiBudW1iZXJcbiAgICk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcIkNhbm5vdCBncmFmdCBhIGRlc3Ryb3llZCB0cmVlIGJyYW5jaFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChuZXdQYXJlbnQuaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcIkNhbm5vdCBncmFmdCB0byBhIGRlc3Ryb3llZCB0cmVlIGJyYW5jaFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgIHR5cGVvZiBpbmRleCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICAgdGhpcy5pbmRleElzT3V0T2ZSYW5nZShuZXdQYXJlbnQsIGluZGV4KVxuICAgICAgKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCBncmFmdCBicmFuY2ggYXQgaW5kZXggJHtpbmRleH0gb2YgdGhlIHBhcmVudC4gT3V0IG9mIHJhbmdlLmBcbiAgICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLnRyYXZlcnNlKChub2RlKSA9PiB7XG4gICAgICAgICBpZiAobm9kZSA9PT0gbmV3UGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFxuICAgICAgICAgICAgICAgXCJDYW5ub3QgZ3JhZnQgYSBicmFuY2ggdG8gaXRzZWxmIG9yIGFueSBvZiBpdHMgb3duIGRlc2NlbmRhbnRzXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICB9XG4gICAgICB9KTtcbiAgIH1cblxuICAgcHJpdmF0ZSBoYW5kbGVVc2VybGFuZEVycm9yKGVycm9yOiB1bmtub3duKTogbmV2ZXIge1xuICAgICAgLy8gV2hlbiBhbiBlcnJvciBvY2N1cnMgaW4gYSB1c2VybGFuZCBjb21wb25lbnQgZHVyaW5nIGEgdHJlZSBvcGVyYXRpb24sXG4gICAgICAvLyBpdCBjYW4gY2F1c2UgdW5kZWZpbmVkLCBiaXphcnJlIGJlaGF2aW9yIGluIHRoZSB0cmVlLiBUbyBwcmV2ZW50IHRoaXMsXG4gICAgICAvLyB3ZSBkZXN0cm95IHRoZSB0cmVlIGFuZCB0aHJvdyBhbiBlcnJvciBpbnN0ZWFkLiBUaGlzIGhlbHBzIHByb3RlY3RcbiAgICAgIC8vIHRoZSBlbmQtdXNlcidzIGRhdGEgZnJvbSBjb3JydXB0aW9uLlxuICAgICAgdGhpcy5mdXJ0aGVzdEFuY2VzdG9yKCkuZGVzdHJveSgpO1xuICAgICAgdGhpcy50cmVlTm9kZUJhc2UuaGFuZGxlVXNlcmxhbmRFcnJvcihlcnJvcik7XG4gICB9XG5cbiAgIHByaXZhdGUgaW5kZXhJc091dE9mUmFuZ2UoXG4gICAgICBwYXJlbnQ6IFRyZWVOb2RlPFVzZXJsYW5kQ29tcG9uZW50PixcbiAgICAgIGluZGV4OiBudW1iZXJcbiAgICk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGluZGV4IDwgMCB8fCBpbmRleCA+IHBhcmVudC5icmFuY2hlcygpLmxlbmd0aDtcbiAgIH1cblxuICAgcHJpdmF0ZSBmdXJ0aGVzdEFuY2VzdG9yKCk6IFRyZWVOb2RlPFVzZXJsYW5kQ29tcG9uZW50PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXMgLS0gVGhpcyBjb2RlIGlzIGZvciBhbiBpdGVyYXRpb24sIG5vdCB0byBtYWtlIGB0aGlzYCBhdmFpbGFibGUgaW4gb3RoZXIgc2NvcGVzICh3aGljaCBpcyB3aGF0IHRoZSBydWxlIGlzIGludGVuZGVkIHRvIHByb3RlY3QgYWdhaW5zdCkuXG4gICAgICBsZXQgbm9kZTogVHJlZU5vZGU8VXNlcmxhbmRDb21wb25lbnQ+ID0gdGhpcztcbiAgICAgIHdoaWxlIChub2RlIGluc3RhbmNlb2YgVHJlZUJyYW5jaCkge1xuICAgICAgICAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQoKTtcbiAgICAgICAgIGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZCkgYnJlYWs7XG4gICAgICAgICBub2RlID0gcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5vZGU7XG4gICB9XG5cbiAgIHByaXZhdGUgcmVhdHRhY2hWaWV3KGluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgICBhc3NlcnQodGhpcy5fcGFyZW50ICE9PSB1bmRlZmluZWQpO1xuICAgICAgYXNzZXJ0KHRoaXMuZGV0YWNoZWRWaWV3ICE9PSBudWxsKTtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX3BhcmVudC5nZXRCcmFuY2hlc0NvbnRhaW5lcigpO1xuICAgICAgYXNzZXJ0KGNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuZGV0YWNoZWRWaWV3LnJlYXR0YWNoKCk7XG4gICAgICBjb250YWluZXIuaW5zZXJ0KHRoaXMuZGV0YWNoZWRWaWV3LCBpbmRleCk7XG4gICAgICB0aGlzLmRldGFjaGVkVmlldyA9IG51bGw7XG4gICAgICB0aGlzLnNldEluZGVudGF0aW9uKCk7XG4gICB9XG5cbiAgIHByaXZhdGUgc2V0SW5kZW50YXRpb24oKTogdm9pZCB7XG4gICAgICBhc3NlcnQodGhpcy5fcGFyZW50ICE9PSB1bmRlZmluZWQpO1xuICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX3BhcmVudC5yb290KCk7XG4gICAgICBpZiAocm9vdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBvcHRpb25zID0gY29uZmlnLmdldENvbmZpZyhyb290KTtcbiAgICAgIGNvbnN0IGJyYW5jaGVzQ29udGFpbmVyRWwgPSB0aGlzLmJyYW5jaENvbnRyb2xsZXJcbiAgICAgICAgIC5nZXROYXRpdmVFbGVtZW50KClcbiAgICAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYnJhbmNoZXMtY29udGFpbmVyXCIpXG4gICAgICAgICAuaXRlbSgwKTtcbiAgICAgIGFzc2VydChicmFuY2hlc0NvbnRhaW5lckVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpO1xuICAgICAgYnJhbmNoZXNDb250YWluZXJFbC5zdHlsZS5tYXJnaW5MZWZ0ID0gYCR7b3B0aW9ucz8uaW5kZW50YXRpb24gPz8gMTZ9cHhgO1xuICAgfVxufVxuIl19
|
|
@@ -864,7 +864,6 @@ class TreeBranch {
|
|
|
864
864
|
assert(parentBranchesContainer !== undefined);
|
|
865
865
|
this.branchController = new BranchController(this, parentBranchesContainer);
|
|
866
866
|
const hostView = this.branchController.getHostView();
|
|
867
|
-
this.setIndentation(parent);
|
|
868
867
|
if (parent instanceof TreeBranch &&
|
|
869
868
|
parent.branchOptions.defaultCollapsed === true) {
|
|
870
869
|
treeCollapser.storePrecollapsedNode(parent, this);
|
|
@@ -878,8 +877,9 @@ class TreeBranch {
|
|
|
878
877
|
child: this,
|
|
879
878
|
index: this._parent.branches().length
|
|
880
879
|
}));
|
|
881
|
-
this.
|
|
880
|
+
this.setIndentation();
|
|
882
881
|
}
|
|
882
|
+
this.detectChanges();
|
|
883
883
|
}
|
|
884
884
|
/** @returns All child branches as an array of TreeBranch instances, in order. */
|
|
885
885
|
branches() {
|
|
@@ -1250,11 +1250,15 @@ class TreeBranch {
|
|
|
1250
1250
|
this.detachedView.reattach();
|
|
1251
1251
|
container.insert(this.detachedView, index);
|
|
1252
1252
|
this.detachedView = null;
|
|
1253
|
+
this.setIndentation();
|
|
1253
1254
|
}
|
|
1254
|
-
setIndentation(
|
|
1255
|
+
setIndentation() {
|
|
1255
1256
|
var _a;
|
|
1256
|
-
|
|
1257
|
-
|
|
1257
|
+
assert(this._parent !== undefined);
|
|
1258
|
+
const root = this._parent.root();
|
|
1259
|
+
if (root === undefined) {
|
|
1260
|
+
return;
|
|
1261
|
+
}
|
|
1258
1262
|
const options = config.getConfig(root);
|
|
1259
1263
|
const branchesContainerEl = this.branchController
|
|
1260
1264
|
.getNativeElement()
|