@smarterplan/ngx-smarterplan-admin 0.1.49 → 0.1.51
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 +24 -24
- package/esm2020/lib/chevron/chevron.component.mjs +1 -1
- package/esm2020/lib/ngx-smarterplan-admin.service.mjs +1 -1
- package/esm2020/lib/organisation/organisation.component.mjs +1 -1
- package/esm2020/lib/user/form-mission/form-mission.component.mjs +26 -14
- package/esm2020/public-api.mjs +1 -1
- package/fesm2015/smarterplan-ngx-smarterplan-admin.mjs +22 -10
- package/fesm2015/smarterplan-ngx-smarterplan-admin.mjs.map +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-admin.mjs +22 -10
- package/fesm2020/smarterplan-ngx-smarterplan-admin.mjs.map +1 -1
- package/lib/user/form-mission/form-mission.component.d.ts +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
# NgxSmarterplanAdmin
|
|
2
|
-
|
|
3
|
-
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
|
|
4
|
-
|
|
5
|
-
## Code scaffolding
|
|
6
|
-
|
|
7
|
-
Run `ng generate component component-name --project ngx-smarterplan-admin` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-smarterplan-admin`.
|
|
8
|
-
> Note: Don't forget to add `--project ngx-smarterplan-admin` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
-
|
|
10
|
-
## Build
|
|
11
|
-
|
|
12
|
-
Run `ng build ngx-smarterplan-admin` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
-
|
|
14
|
-
## Publishing
|
|
15
|
-
|
|
16
|
-
After building your library with `ng build ngx-smarterplan-admin`, go to the dist folder `cd dist/ngx-smarterplan-admin` and run `npm publish`.
|
|
17
|
-
|
|
18
|
-
## Running unit tests
|
|
19
|
-
|
|
20
|
-
Run `ng test ngx-smarterplan-admin` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
-
|
|
22
|
-
## Further help
|
|
23
|
-
|
|
24
|
-
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
1
|
+
# NgxSmarterplanAdmin
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project ngx-smarterplan-admin` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-smarterplan-admin`.
|
|
8
|
+
> Note: Don't forget to add `--project ngx-smarterplan-admin` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build ngx-smarterplan-admin` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build ngx-smarterplan-admin`, go to the dist folder `cd dist/ngx-smarterplan-admin` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test ngx-smarterplan-admin` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -16,4 +16,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
16
16
|
}], ctorParameters: function () { return []; }, propDecorators: { conditionShowing: [{
|
|
17
17
|
type: Input
|
|
18
18
|
}] } });
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hldnJvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi9jaGV2cm9uL2NoZXZyb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluL3NyYy9saWIvY2hldnJvbi9jaGV2cm9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7QUFPbEQsTUFBTSxPQUFPLGdCQUFnQjtJQUczQjtRQUZTLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQUVsQixDQUFDO0lBRWpCLFFBQVE7SUFDUixDQUFDOzs2R0FOVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQixxR0NSN0IscU1BS0E7MkZER2EsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGFBQWE7MEVBS2QsZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWNoZXZyb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGV2cm9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jaGV2cm9uLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENoZXZyb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGNvbmRpdGlvblNob3dpbmcgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAzMHB4OyB3aWR0aDogMzBweDtcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1jb250YWluZXJcIiA+XHJcbiAgICAgIDxkaXYgW2NsYXNzXT1cImNvbmRpdGlvblNob3dpbmcgPyAnaWNvbi1pbWctdXAnIDogJ2ljb24taW1nLWRvd24nXCI+PC9kaXY+XHJcbiAgICA8L3NwYW4+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -11,4 +11,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
11
11
|
providedIn: 'root'
|
|
12
12
|
}]
|
|
13
13
|
}], ctorParameters: function () { return []; } });
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXNtYXJ0ZXJwbGFuLWFkbWluLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi9uZ3gtc21hcnRlcnBsYW4tYWRtaW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sMEJBQTBCO0lBRXJDLGdCQUFnQixDQUFDOzt1SEFGTiwwQkFBMEI7MkhBQTFCLDBCQUEwQixjQUZ6QixNQUFNOzJGQUVQLDBCQUEwQjtrQkFIdEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hTbWFydGVycGxhbkFkbWluU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcbn1cclxuIl19
|
|
@@ -168,4 +168,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
168
168
|
type: Component,
|
|
169
169
|
args: [{ selector: 'lib-organisation', template: "<div class=\"container-fluid\" class=\"dashboard-tab\">\r\n <h3>{{'SmarterPlan Client Organisations' | translate}}</h3>\r\n <div class=\"row\">\r\n <div class=\"col-md-8 col-lg-6\">\r\n\r\n <div *ngIf=\"error\" class=\"alert alert-danger alert-dismissible fade show\" role=\"alert\">\r\n <strong>{{'Error' | translate}}!</strong> We haven't been able to fulfil your request.\r\n <button type=\"button\" class=\"close\" data-dismiss=\"alert\" (click)=\"onDismiss()\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"!create && !editing\">\r\n <div class=\"d-flex justify-content-between align-items-center p-1\">\r\n <input class=\"form-control search-button\" [(ngModel)]=\"query\" i18n-placeholder placeholder=\"Search\"\r\n type=\"text\"> \r\n </div>\r\n <!-- <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onAdd()\">{{'Add new client organisation' |\r\n translate}}</button> -->\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let a of clients; index as index\"\r\n (click)=\"onToggleDetail(index)\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n {{a.name}}\r\n <lib-chevron [conditionShowing]=\"index==details\"></lib-chevron>\r\n <!-- <ic-icon [icon]=\"index==details ? chevronDown : chevronRight\"></ic-icon> -->\r\n </div>\r\n\r\n <div *ngIf=\"index==details\">\r\n <ul class=\"list-group list-group-flush\">\r\n <!-- <li class=\"list-group-item bg-transparent\">{{'Activit\u00E9' | translate}}</li> -->\r\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{ a.organisation.address }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{ 'Postal Code' | translate}}: {{ a.organisation.postal }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'City' | translate}}: {{ a.organisation.city }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'SIRET' | translate}}: {{ a.organisation.siret ?\r\n a.organisation.siret : 'Not provided' | translate }}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Created' | translate}}: {{ a.organisation.createdAt | date:'long' }}\r\n </li>\r\n <ng-container *ngIf=\"a.adminMissions.length > 0\">\r\n <li *ngIf=\"a.adminMissions.length <= 1\" class=\"list-group-item bg-transparent\">\r\n {{'Administrator User' | translate}} :</li>\r\n <li *ngIf=\"a.adminMissions.length > 1\" class=\"list-group-item bg-transparent\">\r\n {{'Administrator User(s)' | translate}} :</li>\r\n <li class=\"list-group-item list-group-item-action\"\r\n *ngFor=\"let admin of a.adminMissions; index as index\" (click)=\"onToggleDetail(index)\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"ml-4\"> {{admin.user.displayName}} ({{admin.user.email}})\r\n <!-- <button type=\"button\" class=\"btn btn-primary rounded-pill\" style=\"float: right;\"\r\n (click)=\"onRemoveAdmin(admin)\">\r\n {{'Remove'|translate}}</button> \r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Phone'}}: {{admin.user.phone}}</li> -->\r\n </ul>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"a.adminMissions.length == 0\">\r\n <li class=\"list-group-item bg-warning\"><span class=\"badge badge-warning\">\r\n {{'Warning' | translate}}</span> {{'No Administrator User'| translate}} </li>\r\n </ng-container>\r\n <ng-container *ngIf=\"a.properties.length > 0\">\r\n <li class=\"list-group-item bg-transparent\">{{'Locations' | translate}}: </li>\r\n <li class=\"list-group-item list-group-item-action\" *ngFor=\"let property of a.properties\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"ml-4\">{{property}}</li>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n <div class=\"action-button-container\">\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\r\n (click)=\"onEdit(a.organisation)\">\r\n {{'Edit' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\r\n (click)=\"onArchive(a.organisation)\" disabled>\r\n {{'Archive' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-primary rounded-pill action-button\"\r\n (click)=\"onDeleteOrg(a.organisation)\">\r\n {{'Delete' | translate}}</button>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <div *ngIf=\"form && (create || editing)\">\r\n <form (ngSubmit)=\"onSubmitOrg()\" [formGroup]=\"form\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"name.invalid && name.touched\" required\r\n formControlName=\"name\">\r\n <div class=\"invalid-feedback\">\r\n {{'A name is required' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"address\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'City' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"city\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Postal code' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"postal\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'SIRET' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"siret\">\r\n </div>\r\n </div>\r\n <div *ngIf=\"working\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <div class=\"action-button-container\">\r\n <button type=\"submit\" class=\"btn btn-outline-primary rounded-pill action-button\"\r\n [disabled]=\"working || form.invalid\">{{'Save' | translate}}</button>\r\n <button type=\"button\" (click)=\"onCancel()\" [disabled]=\"working\"\r\n class=\"btn btn-outline-primary rounded-pill action-button\">{{'Cancel' | translate}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n <!--<spOrganisationForm [model]=\" editingOrganisation\" (submit)=\"onSave($event)\" (cancel)=\"onCancel()\">\r\n </spOrganisationForm>-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- <div>{{'Administrator User' | translate}}</div>\r\n <div formGroupName=\"user\" *ngIf=\"create || isAddingAdmin\">\r\n <div *ngIf=\"form\" class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Email' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" [class.is-invalid]=\"email.invalid && email.touched\" required\r\n formControlName=\"email\">\r\n <div class=\"invalid-feedback\">\r\n {{'An email is required' | translate}}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'First name' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"firstName\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Last name' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"lastName\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-group row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Phone' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"phone\">\r\n </div>\r\n </div>\r\n </div> -->", styles: [".form-group{margin:1.5rem 0}.search-button{width:-moz-fit-content;width:fit-content}li.ml-4{margin-left:3rem}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px}\n"] }]
|
|
170
170
|
}], ctorParameters: function () { return [{ type: i1.OrganisationService }, { type: i2.FormBuilder }, { type: i1.BaseUserService }, { type: i1.MissionService }, { type: i3.TranslateService }, { type: i1.PropertyService }]; } });
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1hZG1pbi9zcmMvbGliL29yZ2FuaXNhdGlvbi9vcmdhbmlzYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluL3NyYy9saWIvb3JnYW5pc2F0aW9uL29yZ2FuaXNhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFJSCxVQUFVLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQStFLGFBQWEsRUFBbUIsd0JBQXdCLEVBQUUsVUFBVSxFQUFrQixNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7O0FBUXROLE1BQU0sT0FBTyxxQkFBcUI7SUFrQzlCLFlBQ1ksVUFBK0IsRUFDL0IsRUFBZSxFQUNmLFdBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFNBQTJCLEVBQzNCLGVBQWdDO1FBTGhDLGVBQVUsR0FBVixVQUFVLENBQXFCO1FBQy9CLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXRDNUMsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUVaLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFYixZQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFYixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsVUFBSyxHQUFHLElBQUksQ0FBQztRQUliLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFZixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLGtC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U0FBUzsrQkFDSSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICAgIEZvcm1CdWlsZGVyLFxuICAgIEZvcm1Hcm91cCxcbiAgICBBYnN0cmFjdENvbnRyb2wsXG4gICAgVmFsaWRhdG9ycyxcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBCYXNlVXNlclNlcnZpY2UsIE1pc3Npb25TZXJ2aWNlLCBPcmdhbmlzYXRpb24sIE9yZ2FuaXNhdGlvblNlcnZpY2UsIFByb2ZpbGUsIFByb2ZpbGVFbnRpdHksIFByb3BlcnR5U2VydmljZSwgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0LCBSb2xlU3RhdHVzLCB1cGxvYWRGaWxlVG9TMyB9IGZyb20gXCJAc21hcnRlcnBsYW4vbmd4LXNtYXJ0ZXJwbGFuLWNvcmVcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1vcmdhbmlzYXRpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9vcmdhbmlzYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL29yZ2FuaXNhdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE9yZ2FuaXNhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBhZG1pbnMgPSBbXTtcblxuICAgIGNsaWVudHMgPSBbXTtcblxuICAgIGRldGFpbHMgPSAtMTtcblxuICAgIHF1ZXJ5ID0gXCJcIjtcblxuICAgIGVycm9yID0gbnVsbDtcblxuICAgIGZvcm06IEZvcm1Hcm91cDtcblxuICAgIGNyZWF0ZSA9IGZhbHNlO1xuXG4gICAgd29ya2luZyA9IGZhbHNlO1xuXG4gICAgaXNBZGRpbmdBZG1pbiA9IGZhbHNlO1xuXG4gICAgbWU6IFByb2ZpbGU7XG5cbiAgICBvcmc6IE9yZ2FuaXNhdGlvbjtcblxuICAgIGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIGVkaXRpbmcgPSBmYWxzZTtcblxuICAgIC8vIGZ1bGxBY2Nlc3MgdHJ1ZSBnaXZlcyBhY2Nlc3MgdG8gYWxsIG9yZ3NcbiAgICAvLyB0aGlzIGlzIHJlc2VydmVkIHRvIFNtYXJ0ZXJwbGFuIEFETUlOc1xuICAgIGZ1bGxBY2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGZpbGVUb1VwbG9hZDogRmlsZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG9yZ1NlcnZpY2U6IE9yZ2FuaXNhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbWlzc2lvblNlcnZpY2U6IE1pc3Npb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwcm9wZXJ0eVNlcnZpY2U6IFByb3BlcnR5U2VydmljZSxcbiAgICApIHsgfVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucmVzZXRMaXN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVzZXRMaXN0IGZldGNoZXMgYSBmcmVzaCBvcmdhbmlzYXRpb24gbGlzdCBmcm9tIHNlcnZlclxuICAgICAqL1xuICAgIGFzeW5jIHJlc2V0TGlzdCgpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZVxuICAgICAgICAgICAgLmdldE1pc3Npb25zQnlPcmRlcmVkT3JnYW5pc2F0aW9uKFxuICAgICAgICAgICAgICAgIFwiNmUyODIwMWYtNDY3OS00YzI5LTlkMmQtOGEzMjVmNTdjZWU5XCIsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAudGhlbihhc3luYyAobWlzc2lvbnMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpZW50ID0ge307XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2lvbnMubWFwKGFzeW5jIChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0uZGVsZXRlZEF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjbGllbnQuaGFzT3duUHJvcGVydHkobS5vcmdhbmlzYXRpb25JRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50W20ub3JnYW5pc2F0aW9uSURdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbS5vcmdhbmlzYXRpb24ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbjogbS5vcmdhbmlzYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZG1pbk1pc3Npb25zOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLkFETUlOKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFscmVhZHlBZG1pbiA9IGNsaWVudFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0ub3JnYW5pc2F0aW9uSURcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5hZG1pbk1pc3Npb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtaXMpID0+IG1pcy51c2VyLmlkID09PSBtLnVzZXJJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFscmVhZHlBZG1pbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFttLm9yZ2FuaXNhdGlvbklEXS5hZG1pbk1pc3Npb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyOiBuZXcgUHJvZmlsZUVudGl0eShtLnVzZXIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW9uOiBtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvcGVydHlTZXJ2aWNlLmdldFByb3BlcnRpZXNGb3JPcmdhbmlzYXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLm9yZ2FuaXNhdGlvbklELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFttLm9yZ2FuaXNhdGlvbklEXS5wcm9wZXJ0aWVzID0gcHJvcGVydGllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnR5KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwcm9wZXJ0eS5kZWxldGVkQXQgJiYgcHJvcGVydHkuc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgocHJvcGVydHkpID0+IHByb3BlcnR5LnNwYWNlLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpZW50cyA9IE9iamVjdC52YWx1ZXMoY2xpZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBvblRvZ2dsZURldGFpbCBmb2xkcy91bmZvbGRzIGRldGFpbHMgZm9yIGEgZ2l2ZW4gb3JnYW5pc2F0aW9uXG4gICAgICogQHBhcmFtIGkgaW5kZXggb2YgdGhlIG9yZ2FuaXNhdGlvbiB0byBiZSB0b2dnbGVkXG4gICAgICovXG4gICAgb25Ub2dnbGVEZXRhaWwoaW5kZXgpIHtcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gaW5kZXggPT09IHRoaXMuZGV0YWlscyA/IC0xIDogaW5kZXg7XG4gICAgfVxuXG4gICAgb25BZGQoKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBuYW1lOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgICAgIGFkZHJlc3M6IFtcIlwiXSxcbiAgICAgICAgICAgIGNpdHk6IFtcIlwiXSxcbiAgICAgICAgICAgIHBvc3RhbDogW251bGxdLFxuICAgICAgICAgICAgc2lyZXQ6IFtudWxsXSxcblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkVkaXQob3JnOiBPcmdhbmlzYXRpb24pIHtcbiAgICAgICAgdGhpcy5jcmVhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBpZDogW29yZy5pZF0sXG4gICAgICAgICAgICBuYW1lOiBbb3JnLm5hbWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgICAgICBhZGRyZXNzOiBbb3JnLmFkZHJlc3NdLFxuICAgICAgICAgICAgY2l0eTogW29yZy5jaXR5XSxcbiAgICAgICAgICAgIHBvc3RhbDogW29yZy5wb3N0YWxdLFxuICAgICAgICAgICAgc2lyZXQ6IFtvcmcuc2lyZXRdLFxuXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQ2FuY2VsKCkge1xuICAgICAgICAvLyB0aGlzLmZvcm0gPSBudWxsO1xuICAgICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICAgICAgdGhpcy5jcmVhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IG5hbWUoKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoXCJuYW1lXCIpO1xuICAgIH1cblxuICAgIGdldCBlbWFpbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmdldChcInVzZXJcIikuZ2V0KFwiZW1haWxcIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGNyZWF0aW9uIG9yIHVwZGF0ZSBvZiBvcmdhbmlzYXRpb25cbiAgICAgKiBAc2VlIDE3NFxuICAgICAqL1xuICAgIGFzeW5jIG9uU3VibWl0T3JnKCkge1xuICAgICAgICB0aGlzLndvcmtpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmZvcm0udmFsdWU7XG4gICAgICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdChmb3JtVmFsdWUpO1xuICAgICAgICBsZXQgb3JnYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNyZWF0ZSkge1xuICAgICAgICAgICAgICAgIG9yZ2EgPSBhd2FpdCB0aGlzLm9yZ1NlcnZpY2UuY3JlYXRlT3JnYW5pc2F0aW9uKGZvcm1WYWx1ZSBhcyBPcmdhbmlzYXRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcmdhID0gYXdhaXQgdGhpcy5vcmdTZXJ2aWNlLnVwZGF0ZU9yZ2FuaXNhdGlvbihmb3JtVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRydWU7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJlc2V0TGlzdCgpO1xuICAgICAgICB0aGlzLndvcmtpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jcmVhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsZVRvVXBsb2FkID0gbnVsbDtcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgb25BcmNoaXZlKF8pIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJVbmltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIG9uRGlzbWlzcygpIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgb25EZWxldGVPcmcob3JnOiBPcmdhbmlzYXRpb24pIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJjb25maXJtLmRlbGV0ZU9yZ2FuaXNhdGlvblwiKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgd2luZG93LmNvbmZpcm0obWVzc2FnZSkgJiZcbiAgICAgICAgICAgIG9yZy5pZCAhPT0gXCI2ZTI4MjAxZi00Njc5LTRjMjktOWQyZC04YTMyNWY1N2NlZTlcIlxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXNUb0RlbGV0ZSA9XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9wZXJ0eVNlcnZpY2UuZ2V0UHJvcGVydGllc0Zvck9yZ2FuaXNhdGlvbihvcmcuaWQpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5vcmdTZXJ2aWNlLmRlbGV0ZU9yZ2FuaXNhdGlvbihvcmcuaWQpO1xuICAgICAgICAgICAgKGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuZ2V0TWlzc2lvbnNCeU9yZ2FuaXNhdGlvbihvcmcuaWQpKS5tYXAoXG4gICAgICAgICAgICAgICAgKG0pID0+IHRoaXMubWlzc2lvblNlcnZpY2Uuc29mdERlbGV0ZU1pc3Npb24obS5pZCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgcHJvcGVydGllc1RvRGVsZXRlLm1hcChhc3luYyAocHJvcGVydHkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9wZXJ0eVNlcnZpY2UuZGVsZXRlUHJvcGVydHkocHJvcGVydHkuaWQpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCIgY2xhc3M9XCJkYXNoYm9hcmQtdGFiXCI+XHJcbiAgPGgzPnt7J1NtYXJ0ZXJQbGFuIENsaWVudCBPcmdhbmlzYXRpb25zJyB8IHRyYW5zbGF0ZX19PC9oMz5cclxuICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTggY29sLWxnLTZcIj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJlcnJvclwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGFsZXJ0LWRpc21pc3NpYmxlIGZhZGUgc2hvd1wiIHJvbGU9XCJhbGVydFwiPlxyXG4gICAgICAgIDxzdHJvbmc+e3snRXJyb3InIHwgdHJhbnNsYXRlfX0hPC9zdHJvbmc+IFdlIGhhdmVuJ3QgYmVlbiBhYmxlIHRvIGZ1bGZpbCB5b3VyIHJlcXVlc3QuXHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cImFsZXJ0XCIgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XHJcbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhY3JlYXRlICYmICFlZGl0aW5nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgcC0xXCI+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VhcmNoLWJ1dHRvblwiIFsobmdNb2RlbCldPVwicXVlcnlcIiBpMThuLXBsYWNlaG9sZGVyIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCJcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIj4mbmJzcDtcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGxcIiAoY2xpY2spPVwib25BZGQoKVwiPnt7J0FkZCBuZXcgY2xpZW50IG9yZ2FuaXNhdGlvbicgfFxyXG4gICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cclxuICAgICAgICAgIDxsaWItbG9hZGVyPjwvbGliLWxvYWRlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBsaXN0LWdyb3VwLWl0ZW0tYWN0aW9uXCIgKm5nRm9yPVwibGV0IGEgb2YgY2xpZW50czsgaW5kZXggYXMgaW5kZXhcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25Ub2dnbGVEZXRhaWwoaW5kZXgpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAge3thLm5hbWV9fVxyXG4gICAgICAgICAgICAgIDxsaWItY2hldnJvbiBbY29uZGl0aW9uU2hvd2luZ109XCJpbmRleD09ZGV0YWlsc1wiPjwvbGliLWNoZXZyb24+XHJcbiAgICAgICAgICAgICAgPCEtLSA8aWMtaWNvbiBbaWNvbl09XCJpbmRleD09ZGV0YWlscyA/IGNoZXZyb25Eb3duIDogY2hldnJvblJpZ2h0XCI+PC9pYy1pY29uPiAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaW5kZXg9PWRldGFpbHNcIj5cclxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQWN0aXZpdMOpJyB8IHRyYW5zbGF0ZX19PC9saT4gLS0+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydBZGRyZXNzJyB8IHRyYW5zbGF0ZX19OiB7eyBhLm9yZ2FuaXNhdGlvbi5hZGRyZXNzIH19PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7ICdQb3N0YWwgQ29kZScgfCB0cmFuc2xhdGV9fToge3sgYS5vcmdhbmlzYXRpb24ucG9zdGFsIH19XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQ2l0eScgfCB0cmFuc2xhdGV9fToge3sgYS5vcmdhbmlzYXRpb24uY2l0eSB9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydTSVJFVCcgfCB0cmFuc2xhdGV9fToge3sgYS5vcmdhbmlzYXRpb24uc2lyZXQgP1xyXG4gICAgICAgICAgICAgICAgICBhLm9yZ2FuaXNhdGlvbi5zaXJldCA6ICdOb3QgcHJvdmlkZWQnIHwgdHJhbnNsYXRlIH19PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0NyZWF0ZWQnIHwgdHJhbnNsYXRlfX06IHt7IGEub3JnYW5pc2F0aW9uLmNyZWF0ZWRBdCB8IGRhdGU6J2xvbmcnIH19XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImEuYWRtaW5NaXNzaW9ucy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImEuYWRtaW5NaXNzaW9ucy5sZW5ndGggPD0gMVwiIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3snQWRtaW5pc3RyYXRvciBVc2VyJyB8IHRyYW5zbGF0ZX19IDo8L2xpPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJhLmFkbWluTWlzc2lvbnMubGVuZ3RoID4gMVwiIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3snQWRtaW5pc3RyYXRvciBVc2VyKHMpJyB8IHRyYW5zbGF0ZX19IDo8L2xpPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1pdGVtLWFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFkbWluIG9mIGEuYWRtaW5NaXNzaW9uczsgaW5kZXggYXMgaW5kZXhcIiAoY2xpY2spPVwib25Ub2dnbGVEZXRhaWwoaW5kZXgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJtbC00XCI+IHt7YWRtaW4udXNlci5kaXNwbGF5TmFtZX19ICh7e2FkbWluLnVzZXIuZW1haWx9fSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSByb3VuZGVkLXBpbGxcIiBzdHlsZT1cImZsb2F0OiByaWdodDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlQWRtaW4oYWRtaW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydSZW1vdmUnfHRyYW5zbGF0ZX19PC9idXR0b24+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydQaG9uZSd9fToge3thZG1pbi51c2VyLnBob25lfX08L2xpPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImEuYWRtaW5NaXNzaW9ucy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctd2FybmluZ1wiPjxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2Utd2FybmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3snV2FybmluZycgfCB0cmFuc2xhdGV9fTwvc3Bhbj4ge3snTm8gQWRtaW5pc3RyYXRvciBVc2VyJ3wgdHJhbnNsYXRlfX0gPC9saT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImEucHJvcGVydGllcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0xvY2F0aW9ucycgfCB0cmFuc2xhdGV9fTogPC9saT5cclxuICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGxpc3QtZ3JvdXAtaXRlbS1hY3Rpb25cIiAqbmdGb3I9XCJsZXQgcHJvcGVydHkgb2YgYS5wcm9wZXJ0aWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJtbC00XCI+e3twcm9wZXJ0eX19PC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHJvdW5kZWQtcGlsbCBhY3Rpb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRWRpdChhLm9yZ2FuaXNhdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAge3snRWRpdCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcm91bmRlZC1waWxsIGFjdGlvbi1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BcmNoaXZlKGEub3JnYW5pc2F0aW9uKVwiIGRpc2FibGVkPlxyXG4gICAgICAgICAgICAgICAgICB7eydBcmNoaXZlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSByb3VuZGVkLXBpbGwgYWN0aW9uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZU9yZyhhLm9yZ2FuaXNhdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAge3snRGVsZXRlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJmb3JtICYmIChjcmVhdGUgfHwgZWRpdGluZylcIj5cclxuICAgICAgICA8Zm9ybSAobmdTdWJtaXQpPVwib25TdWJtaXRPcmcoKVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snTmFtZScgfCB0cmFuc2xhdGV9fSAqPC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbY2xhc3MuaXMtaW52YWxpZF09XCJuYW1lLmludmFsaWQgJiYgbmFtZS50b3VjaGVkXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgICAgICAge3snQSBuYW1lIGlzIHJlcXVpcmVkJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snQWRkcmVzcycgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiYWRkcmVzc1wiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0NpdHknIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImNpdHlcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydQb3N0YWwgY29kZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwicG9zdGFsXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snU0lSRVQnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInNpcmV0XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwid29ya2luZ1wiPlxyXG4gICAgICAgICAgICA8bGliLWxvYWRlcj48L2xpYi1sb2FkZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBhY3Rpb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwid29ya2luZyB8fCBmb3JtLmludmFsaWRcIj57eydTYXZlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNhbmNlbCgpXCIgW2Rpc2FibGVkXT1cIndvcmtpbmdcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIGFjdGlvbi1idXR0b25cIj57eydDYW5jZWwnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS08c3BPcmdhbmlzYXRpb25Gb3JtIFttb2RlbF09XCIgZWRpdGluZ09yZ2FuaXNhdGlvblwiIChzdWJtaXQpPVwib25TYXZlKCRldmVudClcIiAoY2FuY2VsKT1cIm9uQ2FuY2VsKClcIj5cclxuICAgICAgICAgICAgICA8L3NwT3JnYW5pc2F0aW9uRm9ybT4tLT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gPGRpdj57eydBZG1pbmlzdHJhdG9yIFVzZXInIHwgdHJhbnNsYXRlfX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwidXNlclwiICpuZ0lmPVwiY3JlYXRlIHx8IGlzQWRkaW5nQWRtaW5cIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZm9ybVwiIGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snRW1haWwnIHwgdHJhbnNsYXRlfX0gKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbY2xhc3MuaXMtaW52YWxpZF09XCJlbWFpbC5pbnZhbGlkICYmIGVtYWlsLnRvdWNoZWRcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3snQW4gZW1haWwgaXMgcmVxdWlyZWQnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snRmlyc3QgbmFtZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJmaXJzdE5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydMYXN0IG5hbWUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibGFzdE5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydQaG9uZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT4iXX0=
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1hZG1pbi9zcmMvbGliL29yZ2FuaXNhdGlvbi9vcmdhbmlzYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluL3NyYy9saWIvb3JnYW5pc2F0aW9uL29yZ2FuaXNhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFJSCxVQUFVLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQStFLGFBQWEsRUFBbUIsd0JBQXdCLEVBQUUsVUFBVSxFQUFrQixNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7O0FBUXROLE1BQU0sT0FBTyxxQkFBcUI7SUFrQzlCLFlBQ1ksVUFBK0IsRUFDL0IsRUFBZSxFQUNmLFdBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFNBQTJCLEVBQzNCLGVBQWdDO1FBTGhDLGVBQVUsR0FBVixVQUFVLENBQXFCO1FBQy9CLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXRDNUMsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUVaLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFYixZQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFYixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsVUFBSyxHQUFHLElBQUksQ0FBQztRQUliLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFZixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLGtC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U0FBUzsrQkFDSSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBGb3JtQnVpbGRlcixcclxuICAgIEZvcm1Hcm91cCxcclxuICAgIEFic3RyYWN0Q29udHJvbCxcclxuICAgIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSwgTWlzc2lvblNlcnZpY2UsIE9yZ2FuaXNhdGlvbiwgT3JnYW5pc2F0aW9uU2VydmljZSwgUHJvZmlsZSwgUHJvZmlsZUVudGl0eSwgUHJvcGVydHlTZXJ2aWNlLCByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QsIFJvbGVTdGF0dXMsIHVwbG9hZEZpbGVUb1MzIH0gZnJvbSBcIkBzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZVwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdsaWItb3JnYW5pc2F0aW9uJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9vcmdhbmlzYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vb3JnYW5pc2F0aW9uLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE9yZ2FuaXNhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgYWRtaW5zID0gW107XHJcblxyXG4gICAgY2xpZW50cyA9IFtdO1xyXG5cclxuICAgIGRldGFpbHMgPSAtMTtcclxuXHJcbiAgICBxdWVyeSA9IFwiXCI7XHJcblxyXG4gICAgZXJyb3IgPSBudWxsO1xyXG5cclxuICAgIGZvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgICBjcmVhdGUgPSBmYWxzZTtcclxuXHJcbiAgICB3b3JraW5nID0gZmFsc2U7XHJcblxyXG4gICAgaXNBZGRpbmdBZG1pbiA9IGZhbHNlO1xyXG5cclxuICAgIG1lOiBQcm9maWxlO1xyXG5cclxuICAgIG9yZzogT3JnYW5pc2F0aW9uO1xyXG5cclxuICAgIGxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBlZGl0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgLy8gZnVsbEFjY2VzcyB0cnVlIGdpdmVzIGFjY2VzcyB0byBhbGwgb3Jnc1xyXG4gICAgLy8gdGhpcyBpcyByZXNlcnZlZCB0byBTbWFydGVycGxhbiBBRE1JTnNcclxuICAgIGZ1bGxBY2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBmaWxlVG9VcGxvYWQ6IEZpbGU7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBvcmdTZXJ2aWNlOiBPcmdhbmlzYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1pc3Npb25TZXJ2aWNlOiBNaXNzaW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHByb3BlcnR5U2VydmljZTogUHJvcGVydHlTZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJlc2V0TGlzdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogcmVzZXRMaXN0IGZldGNoZXMgYSBmcmVzaCBvcmdhbmlzYXRpb24gbGlzdCBmcm9tIHNlcnZlclxyXG4gICAgICovXHJcbiAgICBhc3luYyByZXNldExpc3QoKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBhd2FpdCB0aGlzLm1pc3Npb25TZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRNaXNzaW9uc0J5T3JkZXJlZE9yZ2FuaXNhdGlvbihcclxuICAgICAgICAgICAgICAgIFwiNmUyODIwMWYtNDY3OS00YzI5LTlkMmQtOGEzMjVmNTdjZWU5XCIsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKG1pc3Npb25zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGllbnQgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2lvbnMubWFwKGFzeW5jIChtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobS5kZWxldGVkQXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsaWVudC5oYXNPd25Qcm9wZXJ0eShtLm9yZ2FuaXNhdGlvbklEKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFttLm9yZ2FuaXNhdGlvbklEXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbS5vcmdhbmlzYXRpb24ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uOiBtLm9yZ2FuaXNhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5NaXNzaW9uczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLkFETUlOKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxyZWFkeUFkbWluID0gY2xpZW50W1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLm9yZ2FuaXNhdGlvbklEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5hZG1pbk1pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1pcykgPT4gbWlzLnVzZXIuaWQgPT09IG0udXNlcklELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFscmVhZHlBZG1pbi5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50W20ub3JnYW5pc2F0aW9uSURdLmFkbWluTWlzc2lvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyOiBuZXcgUHJvZmlsZUVudGl0eShtLnVzZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3Npb246IG0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb3BlcnR5U2VydmljZS5nZXRQcm9wZXJ0aWVzRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLm9yZ2FuaXNhdGlvbklELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRbbS5vcmdhbmlzYXRpb25JRF0ucHJvcGVydGllcyA9IHByb3BlcnRpZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydHkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvcGVydHkuZGVsZXRlZEF0ICYmIHByb3BlcnR5LnNwYWNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkuc3BhY2UubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGllbnRzID0gT2JqZWN0LnZhbHVlcyhjbGllbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogb25Ub2dnbGVEZXRhaWwgZm9sZHMvdW5mb2xkcyBkZXRhaWxzIGZvciBhIGdpdmVuIG9yZ2FuaXNhdGlvblxyXG4gICAgICogQHBhcmFtIGkgaW5kZXggb2YgdGhlIG9yZ2FuaXNhdGlvbiB0byBiZSB0b2dnbGVkXHJcbiAgICAgKi9cclxuICAgIG9uVG9nZ2xlRGV0YWlsKGluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gaW5kZXggPT09IHRoaXMuZGV0YWlscyA/IC0xIDogaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgb25BZGQoKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBuYW1lOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICAgICAgYWRkcmVzczogW1wiXCJdLFxyXG4gICAgICAgICAgICBjaXR5OiBbXCJcIl0sXHJcbiAgICAgICAgICAgIHBvc3RhbDogW251bGxdLFxyXG4gICAgICAgICAgICBzaXJldDogW251bGxdLFxyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkVkaXQob3JnOiBPcmdhbmlzYXRpb24pIHtcclxuICAgICAgICB0aGlzLmNyZWF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgIGlkOiBbb3JnLmlkXSxcclxuICAgICAgICAgICAgbmFtZTogW29yZy5uYW1lLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgICAgICBhZGRyZXNzOiBbb3JnLmFkZHJlc3NdLFxyXG4gICAgICAgICAgICBjaXR5OiBbb3JnLmNpdHldLFxyXG4gICAgICAgICAgICBwb3N0YWw6IFtvcmcucG9zdGFsXSxcclxuICAgICAgICAgICAgc2lyZXQ6IFtvcmcuc2lyZXRdLFxyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhbmNlbCgpIHtcclxuICAgICAgICAvLyB0aGlzLmZvcm0gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5hbWUoKTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmdldChcIm5hbWVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGVtYWlsKCk6IEFic3RyYWN0Q29udHJvbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoXCJ1c2VyXCIpLmdldChcImVtYWlsXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlIGNyZWF0aW9uIG9yIHVwZGF0ZSBvZiBvcmdhbmlzYXRpb25cclxuICAgICAqIEBzZWUgMTc0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIG9uU3VibWl0T3JnKCkge1xyXG4gICAgICAgIHRoaXMud29ya2luZyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5mb3JtLnZhbHVlO1xyXG4gICAgICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdChmb3JtVmFsdWUpO1xyXG4gICAgICAgIGxldCBvcmdhO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNyZWF0ZSkge1xyXG4gICAgICAgICAgICAgICAgb3JnYSA9IGF3YWl0IHRoaXMub3JnU2VydmljZS5jcmVhdGVPcmdhbmlzYXRpb24oZm9ybVZhbHVlIGFzIE9yZ2FuaXNhdGlvbik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvcmdhID0gYXdhaXQgdGhpcy5vcmdTZXJ2aWNlLnVwZGF0ZU9yZ2FuaXNhdGlvbihmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLnJlc2V0TGlzdCgpO1xyXG4gICAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maWxlVG9VcGxvYWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQXJjaGl2ZShfKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJVbmltcGxlbWVudGVkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRGlzbWlzcygpIHtcclxuICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkRlbGV0ZU9yZyhvcmc6IE9yZ2FuaXNhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiY29uZmlybS5kZWxldGVPcmdhbmlzYXRpb25cIik7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aW5kb3cuY29uZmlybShtZXNzYWdlKSAmJlxyXG4gICAgICAgICAgICBvcmcuaWQgIT09IFwiNmUyODIwMWYtNDY3OS00YzI5LTlkMmQtOGEzMjVmNTdjZWU5XCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcGVydGllc1RvRGVsZXRlID1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvcGVydHlTZXJ2aWNlLmdldFByb3BlcnRpZXNGb3JPcmdhbmlzYXRpb24ob3JnLmlkKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5vcmdTZXJ2aWNlLmRlbGV0ZU9yZ2FuaXNhdGlvbihvcmcuaWQpO1xyXG4gICAgICAgICAgICAoYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5nZXRNaXNzaW9uc0J5T3JnYW5pc2F0aW9uKG9yZy5pZCkpLm1hcChcclxuICAgICAgICAgICAgICAgIChtKSA9PiB0aGlzLm1pc3Npb25TZXJ2aWNlLnNvZnREZWxldGVNaXNzaW9uKG0uaWQpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb0RlbGV0ZS5tYXAoYXN5bmMgKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9wZXJ0eVNlcnZpY2UuZGVsZXRlUHJvcGVydHkocHJvcGVydHkuaWQpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiIGNsYXNzPVwiZGFzaGJvYXJkLXRhYlwiPlxyXG4gIDxoMz57eydTbWFydGVyUGxhbiBDbGllbnQgT3JnYW5pc2F0aW9ucycgfCB0cmFuc2xhdGV9fTwvaDM+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC04IGNvbC1sZy02XCI+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBhbGVydC1kaXNtaXNzaWJsZSBmYWRlIHNob3dcIiByb2xlPVwiYWxlcnRcIj5cclxuICAgICAgICA8c3Ryb25nPnt7J0Vycm9yJyB8IHRyYW5zbGF0ZX19ITwvc3Ryb25nPiBXZSBoYXZlbid0IGJlZW4gYWJsZSB0byBmdWxmaWwgeW91ciByZXF1ZXN0LlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJhbGVydFwiIChjbGljayk9XCJvbkRpc21pc3MoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPlxyXG4gICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWNyZWF0ZSAmJiAhZWRpdGluZ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHAtMVwiPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlYXJjaC1idXR0b25cIiBbKG5nTW9kZWwpXT1cInF1ZXJ5XCIgaTE4bi1wbGFjZWhvbGRlciBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCI+Jm5ic3A7XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsXCIgKGNsaWNrKT1cIm9uQWRkKClcIj57eydBZGQgbmV3IGNsaWVudCBvcmdhbmlzYXRpb24nIHxcclxuICAgICAgICAgICAgdHJhbnNsYXRlfX08L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgICA8bGliLWxvYWRlcj48L2xpYi1sb2FkZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1pdGVtLWFjdGlvblwiICpuZ0Zvcj1cImxldCBhIG9mIGNsaWVudHM7IGluZGV4IGFzIGluZGV4XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlRGV0YWlsKGluZGV4KVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIHt7YS5uYW1lfX1cclxuICAgICAgICAgICAgICA8bGliLWNoZXZyb24gW2NvbmRpdGlvblNob3dpbmddPVwiaW5kZXg9PWRldGFpbHNcIj48L2xpYi1jaGV2cm9uPlxyXG4gICAgICAgICAgICAgIDwhLS0gPGljLWljb24gW2ljb25dPVwiaW5kZXg9PWRldGFpbHMgPyBjaGV2cm9uRG93biA6IGNoZXZyb25SaWdodFwiPjwvaWMtaWNvbj4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImluZGV4PT1kZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0FjdGl2aXTDqScgfCB0cmFuc2xhdGV9fTwvbGk+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQWRkcmVzcycgfCB0cmFuc2xhdGV9fToge3sgYS5vcmdhbmlzYXRpb24uYWRkcmVzcyB9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eyAnUG9zdGFsIENvZGUnIHwgdHJhbnNsYXRlfX06IHt7IGEub3JnYW5pc2F0aW9uLnBvc3RhbCB9fVxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0NpdHknIHwgdHJhbnNsYXRlfX06IHt7IGEub3JnYW5pc2F0aW9uLmNpdHkgfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snU0lSRVQnIHwgdHJhbnNsYXRlfX06IHt7IGEub3JnYW5pc2F0aW9uLnNpcmV0ID9cclxuICAgICAgICAgICAgICAgICAgYS5vcmdhbmlzYXRpb24uc2lyZXQgOiAnTm90IHByb3ZpZGVkJyB8IHRyYW5zbGF0ZSB9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydDcmVhdGVkJyB8IHRyYW5zbGF0ZX19OiB7eyBhLm9yZ2FuaXNhdGlvbi5jcmVhdGVkQXQgfCBkYXRlOidsb25nJyB9fVxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhLmFkbWluTWlzc2lvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJhLmFkbWluTWlzc2lvbnMubGVuZ3RoIDw9IDFcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J0FkbWluaXN0cmF0b3IgVXNlcicgfCB0cmFuc2xhdGV9fSA6PC9saT5cclxuICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiYS5hZG1pbk1pc3Npb25zLmxlbmd0aCA+IDFcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J0FkbWluaXN0cmF0b3IgVXNlcihzKScgfCB0cmFuc2xhdGV9fSA6PC9saT5cclxuICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGxpc3QtZ3JvdXAtaXRlbS1hY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhZG1pbiBvZiBhLmFkbWluTWlzc2lvbnM7IGluZGV4IGFzIGluZGV4XCIgKGNsaWNrKT1cIm9uVG9nZ2xlRGV0YWlsKGluZGV4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibWwtNFwiPiB7e2FkbWluLnVzZXIuZGlzcGxheU5hbWV9fSAoe3thZG1pbi51c2VyLmVtYWlsfX0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcm91bmRlZC1waWxsXCIgc3R5bGU9XCJmbG9hdDogcmlnaHQ7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJlbW92ZUFkbWluKGFkbWluKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3snUmVtb3ZlJ3x0cmFuc2xhdGV9fTwvYnV0dG9uPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snUGhvbmUnfX06IHt7YWRtaW4udXNlci5waG9uZX19PC9saT4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuXHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhLmFkbWluTWlzc2lvbnMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXdhcm5pbmdcIj48c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLXdhcm5pbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7J1dhcm5pbmcnIHwgdHJhbnNsYXRlfX08L3NwYW4+IHt7J05vIEFkbWluaXN0cmF0b3IgVXNlcid8IHRyYW5zbGF0ZX19IDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhLnByb3BlcnRpZXMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydMb2NhdGlvbnMnIHwgdHJhbnNsYXRlfX06IDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBsaXN0LWdyb3VwLWl0ZW0tYWN0aW9uXCIgKm5nRm9yPVwibGV0IHByb3BlcnR5IG9mIGEucHJvcGVydGllc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibWwtNFwiPnt7cHJvcGVydHl9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1idXR0b24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSByb3VuZGVkLXBpbGwgYWN0aW9uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkVkaXQoYS5vcmdhbmlzYXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J0VkaXQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHJvdW5kZWQtcGlsbCBhY3Rpb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQXJjaGl2ZShhLm9yZ2FuaXNhdGlvbilcIiBkaXNhYmxlZD5cclxuICAgICAgICAgICAgICAgICAge3snQXJjaGl2ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcm91bmRlZC1waWxsIGFjdGlvbi1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVPcmcoYS5vcmdhbmlzYXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J0RlbGV0ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZm9ybSAmJiAoY3JlYXRlIHx8IGVkaXRpbmcpXCI+XHJcbiAgICAgICAgPGZvcm0gKG5nU3VibWl0KT1cIm9uU3VibWl0T3JnKClcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J05hbWUnIHwgdHJhbnNsYXRlfX0gKjwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW2NsYXNzLmlzLWludmFsaWRdPVwibmFtZS5pbnZhbGlkICYmIG5hbWUudG91Y2hlZFwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cclxuICAgICAgICAgICAgICAgIHt7J0EgbmFtZSBpcyByZXF1aXJlZCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0FkZHJlc3MnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImFkZHJlc3NcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydDaXR5JyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjaXR5XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snUG9zdGFsIGNvZGUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInBvc3RhbFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J1NJUkVUJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzaXJldFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIndvcmtpbmdcIj5cclxuICAgICAgICAgICAgPGxpYi1sb2FkZXI+PC9saWItbG9hZGVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgYWN0aW9uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIndvcmtpbmcgfHwgZm9ybS5pbnZhbGlkXCI+e3snU2F2ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DYW5jZWwoKVwiIFtkaXNhYmxlZF09XCJ3b3JraW5nXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBhY3Rpb24tYnV0dG9uXCI+e3snQ2FuY2VsJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tPHNwT3JnYW5pc2F0aW9uRm9ybSBbbW9kZWxdPVwiIGVkaXRpbmdPcmdhbmlzYXRpb25cIiAoc3VibWl0KT1cIm9uU2F2ZSgkZXZlbnQpXCIgKGNhbmNlbCk9XCJvbkNhbmNlbCgpXCI+XHJcbiAgICAgICAgICAgICAgPC9zcE9yZ2FuaXNhdGlvbkZvcm0+LS0+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tIDxkaXY+e3snQWRtaW5pc3RyYXRvciBVc2VyJyB8IHRyYW5zbGF0ZX19PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cInVzZXJcIiAqbmdJZj1cImNyZWF0ZSB8fCBpc0FkZGluZ0FkbWluXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZvcm1cIiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0VtYWlsJyB8IHRyYW5zbGF0ZX19ICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW2NsYXNzLmlzLWludmFsaWRdPVwiZW1haWwuaW52YWxpZCAmJiBlbWFpbC50b3VjaGVkXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J0FuIGVtYWlsIGlzIHJlcXVpcmVkJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0ZpcnN0IG5hbWUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZmlyc3ROYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snTGFzdCBuYW1lJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImxhc3ROYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snUGhvbmUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+Il19
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { LevelStatus, Locale, enumToArray, EmailStatus, stringLocaleToEnum } from '@smarterplan/ngx-smarterplan-core';
|
|
3
|
-
import { DateTime } from
|
|
2
|
+
import { LevelStatus, Locale, enumToArray, EmailStatus, stringLocaleToEnum, } from '@smarterplan/ngx-smarterplan-core';
|
|
3
|
+
import { DateTime } from 'luxon';
|
|
4
4
|
import { Validators } from '@angular/forms';
|
|
5
|
-
import { textValidator, noEmptyValidator, floatValidator } from
|
|
5
|
+
import { textValidator, noEmptyValidator, floatValidator, } from '@smarterplan/ngx-smarterplan-core';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "@angular/forms";
|
|
8
8
|
import * as i2 from "@smarterplan/ngx-smarterplan-core";
|
|
@@ -43,12 +43,22 @@ export class FormMissionComponent {
|
|
|
43
43
|
else {
|
|
44
44
|
this.initEmptyForm();
|
|
45
45
|
}
|
|
46
|
+
setTimeout(() => {
|
|
47
|
+
// this.zonesForSpace.forEach((element) => {
|
|
48
|
+
// console.log('this is my zones elements' + JSON.stringify(element));
|
|
49
|
+
// });
|
|
50
|
+
this.zonesForSpace.forEach((element) => {
|
|
51
|
+
console.log('this is my zones elements' + element.name);
|
|
52
|
+
});
|
|
53
|
+
console.log('this is my zones elements filtered' +
|
|
54
|
+
this.zonesForSpace.filter((zone) => !zone.audioID));
|
|
55
|
+
// console.log(' all my zones: ' + JSON.stringify(this.zonesForSpace));
|
|
56
|
+
}, 5000);
|
|
57
|
+
//.layer.name); ?? AUDIO
|
|
46
58
|
}
|
|
47
59
|
updateUserInfo() {
|
|
48
|
-
this.availableRoles =
|
|
49
|
-
|
|
50
|
-
this.availableLevels =
|
|
51
|
-
this.userService.getAvalableLevelsForCurrentUser();
|
|
60
|
+
this.availableRoles = this.userService.getAvailableRolesForCurrentUser();
|
|
61
|
+
this.availableLevels = this.userService.getAvalableLevelsForCurrentUser();
|
|
52
62
|
this.isGuide = this.userService.isGuide();
|
|
53
63
|
}
|
|
54
64
|
async setDomains() {
|
|
@@ -61,10 +71,10 @@ export class FormMissionComponent {
|
|
|
61
71
|
this.availableHashtags = await this.hashtagService.getHashtagsForSpace(spaceID);
|
|
62
72
|
}
|
|
63
73
|
get spaceID() {
|
|
64
|
-
return this.missionForm.get(
|
|
74
|
+
return this.missionForm.get('space');
|
|
65
75
|
}
|
|
66
76
|
get role() {
|
|
67
|
-
return this.missionForm.get(
|
|
77
|
+
return this.missionForm.get('role');
|
|
68
78
|
}
|
|
69
79
|
async initFormForEdit() {
|
|
70
80
|
let startDate = null;
|
|
@@ -108,7 +118,7 @@ export class FormMissionComponent {
|
|
|
108
118
|
this.defaultZone = zones.find((zone) => !zone.parentID);
|
|
109
119
|
const indexOfDefaultZone = zones.indexOf(this.defaultZone);
|
|
110
120
|
zones.splice(indexOfDefaultZone, 1);
|
|
111
|
-
this.zonesForSpace = zones;
|
|
121
|
+
this.zonesForSpace = zones.filter((zone) => !zone.audioID);
|
|
112
122
|
await this.setHashtags(this.spaceID.value);
|
|
113
123
|
}
|
|
114
124
|
async initEmptyForm() {
|
|
@@ -123,7 +133,7 @@ export class FormMissionComponent {
|
|
|
123
133
|
orderedOrganisationID: this.currentUserOrganisation.id,
|
|
124
134
|
space: ['', Validators.required],
|
|
125
135
|
zone: [''],
|
|
126
|
-
description: [
|
|
136
|
+
description: ['', [textValidator(), noEmptyValidator()]],
|
|
127
137
|
domains: [null],
|
|
128
138
|
locale: [this.currentLocale],
|
|
129
139
|
startDate: [null, [floatValidator()]],
|
|
@@ -139,7 +149,8 @@ export class FormMissionComponent {
|
|
|
139
149
|
}
|
|
140
150
|
}
|
|
141
151
|
hashtagAdded(hashtag) {
|
|
142
|
-
return (this.addedHashtags.find((_hashtag) => _hashtag.id === hashtag.id) !==
|
|
152
|
+
return (this.addedHashtags.find((_hashtag) => _hashtag.id === hashtag.id) !==
|
|
153
|
+
undefined);
|
|
143
154
|
}
|
|
144
155
|
removeHashtag(hashtag) {
|
|
145
156
|
this.addedHashtags.splice(this.addedHashtags.indexOf(hashtag), 1);
|
|
@@ -227,7 +238,8 @@ export class FormMissionComponent {
|
|
|
227
238
|
const endDate = DateTime.fromMillis(dateHourEndNumber);
|
|
228
239
|
endDateString = endDate.toISO();
|
|
229
240
|
}
|
|
230
|
-
if (endDateString &&
|
|
241
|
+
if (endDateString &&
|
|
242
|
+
startDateString &&
|
|
231
243
|
endDateString <= startDateString) {
|
|
232
244
|
this.dateError = true;
|
|
233
245
|
resolve({ error: true });
|
|
@@ -262,4 +274,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
262
274
|
}], addedMissionInput: [{
|
|
263
275
|
type: Output
|
|
264
276
|
}] } });
|
|
265
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1taXNzaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1hZG1pbi9zcmMvbGliL3VzZXIvZm9ybS1taXNzaW9uL2Zvcm0tbWlzc2lvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi91c2VyL2Zvcm0tbWlzc2lvbi9mb3JtLW1pc3Npb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBRUgsV0FBVyxFQUFVLE1BQU0sRUFDTyxXQUFXLEVBQUUsV0FBVyxFQUNKLGtCQUFrQixFQUMzRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBcUIsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7O0FBUXZILE1BQU0sT0FBTyxvQkFBb0I7SUFnRDdCLFlBQ1ksRUFBZSxFQUNmLFlBQTBCLEVBQzFCLFdBQTRCLEVBQzVCLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUN4QyxXQUF3QixFQUN4QixjQUE4QixFQUM5QixhQUE0QixFQUM3QixpQkFBb0M7UUFSbkMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hD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LEtBQUs7Z0JBRUcsdUJBQXVCO3NCQUEvQixLQUFLO2dCQU1JLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gICAgWm9uZSwgTWlzc2lvbiwgT3JnYW5pc2F0aW9uLCBTcGFjZSwgUm9sZVN0YXR1cyxcclxuICAgIExldmVsU3RhdHVzLCBEb21haW4sIExvY2FsZSwgQmFzZVVzZXJTZXJ2aWNlLCBEb21haW5TZXJ2aWNlLFxyXG4gICAgT3JnYW5pc2F0aW9uU2VydmljZSwgWm9uZVNlcnZpY2UsIGVudW1Ub0FycmF5LCBFbWFpbFN0YXR1cyxcclxuICAgIEhhc2h0YWcsIFNwYWNlU2VydmljZSwgTG9jYWxlU2VydmljZSwgSGFzaHRhZ1NlcnZpY2UsIHN0cmluZ0xvY2FsZVRvRW51bVxyXG59IGZyb20gJ0BzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZSc7XHJcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSBcImx1eG9uXCI7XHJcbmltcG9ydCB7IFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFZhbGlkYXRvcnNTZXJ2aWNlLCB0ZXh0VmFsaWRhdG9yLCBub0VtcHR5VmFsaWRhdG9yLCBmbG9hdFZhbGlkYXRvciB9IGZyb20gXCJAc21hcnRlcnBsYW4vbmd4LXNtYXJ0ZXJwbGFuLWNvcmVcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWZvcm0tbWlzc2lvbicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1taXNzaW9uLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2Zvcm0tbWlzc2lvbi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtTWlzc2lvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgQElucHV0KCkgbWlzc2lvblRvRWRpdDogTWlzc2lvbjtcclxuXHJcbiAgICBASW5wdXQoKSBvcmdhbmlzYXRpb25Gb3JNaXNzaW9uOiBPcmdhbmlzYXRpb247XHJcblxyXG4gICAgQElucHV0KCkgaXNTUDogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKSB1c2VyRm9yTWlzc2lvbklEOiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KCkgY3VycmVudFVzZXJPcmdhbmlzYXRpb246IE9yZ2FuaXNhdGlvbjtcclxuXHJcbiAgICBtaXNzaW9uRm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICAgIGF2YWlsYWJsZVNwYWNlczogU3BhY2VbXTtcclxuXHJcbiAgICBAT3V0cHV0KCkgYWRkZWRNaXNzaW9uSW5wdXQgPSBuZXcgRXZlbnRFbWl0dGVyPE1pc3Npb24+KCk7XHJcblxyXG4gICAgYXZhaWxhYmxlUm9sZXM6IFJvbGVTdGF0dXNbXTtcclxuXHJcbiAgICBhdmFpbGFibGVMZXZlbHM6IExldmVsU3RhdHVzW107XHJcblxyXG4gICAgYXZhaWxhYmxlSGFzaHRhZ3M6IEhhc2h0YWdbXSA9IFtdO1xyXG5cclxuICAgIGRvbWFpbnM6IERvbWFpbltdO1xyXG5cclxuICAgIGFsbE9yZ3M6IE9yZ2FuaXNhdGlvbltdO1xyXG5cclxuICAgIGlzR3VpZGUgPSBmYWxzZTtcclxuXHJcbiAgICB6b25lc0ZvclNwYWNlOiBab25lW107XHJcblxyXG4gICAgZGVmYXVsdFpvbmU6IFpvbmU7XHJcblxyXG4gICAgbWlzc2lvblRpbWVTdGFydDogbnVtYmVyID0gMTIgKiA2MCAqIDYwMDAwOyAvLyBtaWRkYXkgaW4gbWlsbGlzZWNvbmRzXHJcblxyXG4gICAgbWlzc2lvblRpbWVFbmQ6IG51bWJlciA9IDEyICogNjAgKiA2MDAwMDtcclxuXHJcbiAgICBhZGRlZEhhc2h0YWdzOiBIYXNodGFnW10gPSBbXTtcclxuXHJcbiAgICBjdXJyZW50TG9jYWxlOiBMb2NhbGU7XHJcblxyXG4gICAgbG9jYWxlczogc3RyaW5nW107XHJcblxyXG4gICAgZGF0ZUVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgZXJyb3JGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBzcGFjZVNlcnZpY2U6IFNwYWNlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBkb21haW5TZXJ2aWNlOiBEb21haW5TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgb3JnYW5pc2F0aW9uU2VydmljZTogT3JnYW5pc2F0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHpvbmVTZXJ2aWNlOiBab25lU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGhhc2h0YWdTZXJ2aWNlOiBIYXNodGFnU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGxvY2FsZVNlcnZpY2U6IExvY2FsZVNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIHZhbGlkYXRvcnNTZXJ2aWNlOiBWYWxpZGF0b3JzU2VydmljZVxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVVzZXJJbmZvKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZXREb21haW5zKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTUCkge1xyXG4gICAgICAgICAgICB0aGlzLmFsbE9yZ3MgPSBhd2FpdCB0aGlzLm9yZ2FuaXNhdGlvblNlcnZpY2UubGlzdE9yZ2FuaXNhdGlvbnMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TG9jYWxlID0gc3RyaW5nTG9jYWxlVG9FbnVtKHRoaXMubG9jYWxlU2VydmljZS5nZXRMb2NhbGUoKSk7IC8vIHRvIG1hdGNoIGVudW0gTG9jYWxlXHJcbiAgICAgICAgdGhpcy5sb2NhbGVzID0gZW51bVRvQXJyYXkoTG9jYWxlKTtcclxuICAgICAgICBpZiAodGhpcy5taXNzaW9uVG9FZGl0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEZvcm1Gb3JFZGl0KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0RW1wdHlGb3JtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVVzZXJJbmZvKCkge1xyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlUm9sZXMgPVxyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEF2YWlsYWJsZVJvbGVzRm9yQ3VycmVudFVzZXIoKTtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUxldmVscyA9XHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0QXZhbGFibGVMZXZlbHNGb3JDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIHRoaXMuaXNHdWlkZSA9IHRoaXMudXNlclNlcnZpY2UuaXNHdWlkZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNldERvbWFpbnMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzR3VpZGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZG9tYWlucyA9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRvbWFpblNlcnZpY2UuZ2V0RG9tYWluc0Zvck1pc3Npb25zRm9yT3JnKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXJPcmdhbmlzYXRpb24uaWQsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmRvbWFpbnMgPSBkb21haW5zO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRIYXNodGFncyhzcGFjZUlEOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUhhc2h0YWdzID0gYXdhaXQgdGhpcy5oYXNodGFnU2VydmljZS5nZXRIYXNodGFnc0ZvclNwYWNlKFxyXG4gICAgICAgICAgICBzcGFjZUlELFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNwYWNlSUQoKTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5taXNzaW9uRm9ybS5nZXQoXCJzcGFjZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm9sZSgpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1pc3Npb25Gb3JtLmdldChcInJvbGVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdEZvcm1Gb3JFZGl0KCkge1xyXG4gICAgICAgIGxldCBzdGFydERhdGU6IGFueSA9IG51bGw7XHJcbiAgICAgICAgbGV0IGVuZERhdGU6IGFueSA9IG51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0IG0gPSB0aGlzLm1pc3Npb25Ub0VkaXQ7XHJcblxyXG4gICAgICAgIGlmIChtLnN0YXJ0RGF0ZVRpbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IERhdGVUaW1lLmZyb21JU08obS5zdGFydERhdGVUaW1lKTtcclxuICAgICAgICAgICAgdGhpcy5taXNzaW9uVGltZVN0YXJ0ID0gKGRhdGUuaG91ciAqIDYwICsgZGF0ZS5taW51dGUpICogNjAgKiAxMDAwO1xyXG4gICAgICAgICAgICBzdGFydERhdGUgPSBkYXRlLnRvTWlsbGlzKCkgLSB0aGlzLm1pc3Npb25UaW1lU3RhcnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtLmVuZERhdGVUaW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBEYXRlVGltZS5mcm9tSVNPKG0uZW5kRGF0ZVRpbWUpO1xyXG4gICAgICAgICAgICB0aGlzLm1pc3Npb25UaW1lRW5kID0gKGRhdGUuaG91ciAqIDYwICsgZGF0ZS5taW51dGUpICogNjAgKiAxMDAwO1xyXG4gICAgICAgICAgICBlbmREYXRlID0gZGF0ZS50b01pbGxpcygpIC0gdGhpcy5taXNzaW9uVGltZUVuZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXNlckZvck1pc3Npb25JRCA9IG0udXNlcklEO1xyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlU3BhY2VzID0gYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UuZ2V0QWxsb3dlZFNwYWNlc0Zvck9yZyhcclxuICAgICAgICAgICAgdGhpcy5taXNzaW9uVG9FZGl0Lm9yZ2FuaXNhdGlvbklELFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyT3JnYW5pc2F0aW9uLmlkLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRIYXNodGFncyhtLnNwYWNlSUQpO1xyXG4gICAgICAgIHRoaXMubWlzc2lvbkZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgaWQ6IG0uaWQsXHJcbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbjogW3sgdmFsdWU6IG0ub3JnYW5pc2F0aW9uLm5hbWUsIGRpc2FibGVkOiB0cnVlIH1dLFxyXG4gICAgICAgICAgICBvcmdhbmlzYXRpb25JRDogbS5vcmdhbmlzYXRpb25JRCxcclxuICAgICAgICAgICAgb3JkZXJlZE9yZ2FuaXNhdGlvbklEOiBtLm9yZGVyZWRPcmdhbmlzYXRpb25JRCxcclxuICAgICAgICAgICAgcm9sZTogW20ucm9sZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIGxldmVsOiBbbS5sZXZlbF0sXHJcbiAgICAgICAgICAgIHNwYWNlOiBbbS5zcGFjZUlELCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFttLmRlc2NyaXB0aW9uLCBbdGV4dFZhbGlkYXRvcigpLCBub0VtcHR5VmFsaWRhdG9yKCldXSxcclxuICAgICAgICAgICAgZG9tYWluczogW20uZG9tYWluc10sXHJcbiAgICAgICAgICAgIHpvbmU6IFttLnpvbmVJRF0sXHJcbiAgICAgICAgICAgIGxvY2FsZTogW20ubG9jYWxlXSxcclxuICAgICAgICAgICAgc3RhcnREYXRlOiBbc3RhcnREYXRlLCBbZmxvYXRWYWxpZGF0b3IoKV1dLFxyXG4gICAgICAgICAgICBlbmREYXRlOiBbZW5kRGF0ZSwgW2Zsb2F0VmFsaWRhdG9yKCldXSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAobS5oYXNodGFncyAmJiBtLmhhc2h0YWdzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRlZEhhc2h0YWdzID0gdGhpcy5hdmFpbGFibGVIYXNodGFncy5maWx0ZXIoKGhhc2h0YWcpID0+XHJcbiAgICAgICAgICAgICAgICBtLmhhc2h0YWdzLmluY2x1ZGVzKGhhc2h0YWcuaWQpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uU3BhY2VDbGljaygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU3BhY2VDbGljaygpIHtcclxuICAgICAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0Wm9uZXNCeVNwYWNlKFxyXG4gICAgICAgICAgICB0aGlzLnNwYWNlSUQudmFsdWUsXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRab25lID0gem9uZXMuZmluZCgoem9uZSkgPT4gIXpvbmUucGFyZW50SUQpO1xyXG4gICAgICAgIGNvbnN0IGluZGV4T2ZEZWZhdWx0Wm9uZSA9IHpvbmVzLmluZGV4T2YodGhpcy5kZWZhdWx0Wm9uZSk7XHJcbiAgICAgICAgem9uZXMuc3BsaWNlKGluZGV4T2ZEZWZhdWx0Wm9uZSwgMSk7XHJcbiAgICAgICAgdGhpcy56b25lc0ZvclNwYWNlID0gem9uZXM7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRIYXNodGFncyh0aGlzLnNwYWNlSUQudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXRFbXB0eUZvcm0oKSB7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVTcGFjZXMgPSBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS5nZXRBbGxvd2VkU3BhY2VzRm9yT3JnKFxyXG4gICAgICAgICAgICB0aGlzLm9yZ2FuaXNhdGlvbkZvck1pc3Npb24uaWQsXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXJPcmdhbmlzYXRpb24uaWQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLm1pc3Npb25Gb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgIHJvbGU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIGxldmVsOiBbTGV2ZWxTdGF0dXMuTUlOSU1VTV0sXHJcbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbjogW1xyXG4gICAgICAgICAgICAgICAgeyB2YWx1ZTogdGhpcy5vcmdhbmlzYXRpb25Gb3JNaXNzaW9uLm5hbWUsIGRpc2FibGVkOiB0cnVlIH0sXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbklEOiB0aGlzLm9yZ2FuaXNhdGlvbkZvck1pc3Npb24uaWQsXHJcbiAgICAgICAgICAgIG9yZGVyZWRPcmdhbmlzYXRpb25JRDogdGhpcy5jdXJyZW50VXNlck9yZ2FuaXNhdGlvbi5pZCxcclxuICAgICAgICAgICAgc3BhY2U6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIHpvbmU6IFsnJ10sXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBbXCJcIiwgW3RleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXHJcbiAgICAgICAgICAgIGRvbWFpbnM6IFtudWxsXSxcclxuICAgICAgICAgICAgbG9jYWxlOiBbdGhpcy5jdXJyZW50TG9jYWxlXSxcclxuICAgICAgICAgICAgc3RhcnREYXRlOiBbbnVsbCwgW2Zsb2F0VmFsaWRhdG9yKCldXSxcclxuICAgICAgICAgICAgZW5kRGF0ZTogW251bGwsIFtmbG9hdFZhbGlkYXRvcigpXV0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25IYXNodGFnQ2xpY2soaGFzaHRhZzogSGFzaHRhZykge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNodGFnQWRkZWQoaGFzaHRhZykpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRlZEhhc2h0YWdzLnB1c2goaGFzaHRhZyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRlZEhhc2h0YWdzLnNwbGljZSh0aGlzLmFkZGVkSGFzaHRhZ3MuaW5kZXhPZihoYXNodGFnKSwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhc2h0YWdBZGRlZChoYXNodGFnOiBIYXNodGFnKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5hZGRlZEhhc2h0YWdzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAoX2hhc2h0YWcpID0+IF9oYXNodGFnLmlkID09PSBoYXNodGFnLmlkLFxyXG4gICAgICAgICAgICApICE9PSB1bmRlZmluZWRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUhhc2h0YWcoaGFzaHRhZzogSGFzaHRhZykge1xyXG4gICAgICAgIHRoaXMuYWRkZWRIYXNodGFncy5zcGxpY2UodGhpcy5hZGRlZEhhc2h0YWdzLmluZGV4T2YoaGFzaHRhZyksIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU3VibWl0KCkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMubWlzc2lvbkZvcm0udmFsaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvckZvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkYXRlc1ZhbHVlcyA9IGF3YWl0IHRoaXMub25WZXJpZkRhdGUoKTtcclxuICAgICAgICBpZihkYXRlc1ZhbHVlcy5lcnJvcil7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0ZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5lcnJvckZvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMubWlzc2lvbkZvcm0udmFsdWU7XHJcbiAgICAgICAgLy8gaWYgKCF0aGlzLm1pc3Npb25Gb3JtLnZhbGlkKSB7XHJcbiAgICAgICAgLy8gICAgIC8vIHRoaXMgc2hvd3MgZXJyb3JzIGluIHRoZSBmb3JtXHJcbiAgICAgICAgLy8gICAgIHRoaXMubWlzc2lvbkZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICAgIC8vICAgICByZXR1cm47XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIGxldCBzdGFydERhdGVTdHJpbmc6IHN0cmluZztcclxuICAgICAgICAvLyBsZXQgZW5kRGF0ZVN0cmluZzogc3RyaW5nO1xyXG4gICAgICAgIC8vIGlmIChmb3JtVmFsdWUuc3RhcnREYXRlKSB7XHJcbiAgICAgICAgLy8gICAgIGNvbnN0IGRhdGVIb3VyU3RhcnROdW1iZXIgPSBmb3JtVmFsdWUuc3RhcnREYXRlICsgdGhpcy5taXNzaW9uVGltZVN0YXJ0O1xyXG4gICAgICAgIC8vICAgICBjb25zdCBzdGFydERhdGUgPSBEYXRlVGltZS5mcm9tTWlsbGlzKGRhdGVIb3VyU3RhcnROdW1iZXIpO1xyXG4gICAgICAgIC8vICAgICBzdGFydERhdGVTdHJpbmcgPSBzdGFydERhdGUudG9JU08oKTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gaWYgKGZvcm1WYWx1ZS5lbmREYXRlKSB7XHJcbiAgICAgICAgLy8gICAgIGNvbnN0IGRhdGVIb3VyRW5kTnVtYmVyID0gZm9ybVZhbHVlLmVuZERhdGUgKyB0aGlzLm1pc3Npb25UaW1lRW5kO1xyXG4gICAgICAgIC8vICAgICBjb25zdCBlbmREYXRlID0gRGF0ZVRpbWUuZnJvbU1pbGxpcyhkYXRlSG91ckVuZE51bWJlcik7XHJcbiAgICAgICAgLy8gICAgIGVuZERhdGVTdHJpbmcgPSBlbmREYXRlLnRvSVNPKCk7XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAvLyBpZiAoZW5kRGF0ZVN0cmluZyAmJiBzdGFydERhdGVTdHJpbmcgJiYgKGVuZERhdGVTdHJpbmcgPCBzdGFydERhdGVTdHJpbmcpKSB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuZGF0ZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAvLyAgICAgcmV0dXJuO1xyXG4gICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuZGF0ZUVycm9yID0gZmFsc2U7XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICBjb25zdCBtaXNzaW9uSW5wdXQ6IE1pc3Npb24gPSB7XHJcbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbklEOiBmb3JtVmFsdWUub3JnYW5pc2F0aW9uSUQsXHJcbiAgICAgICAgICAgIG9yZGVyZWRPcmdhbmlzYXRpb25JRDogZm9ybVZhbHVlLm9yZGVyZWRPcmdhbmlzYXRpb25JRCxcclxuICAgICAgICAgICAgbGV2ZWw6IGZvcm1WYWx1ZS5sZXZlbCxcclxuICAgICAgICAgICAgcm9sZTogZm9ybVZhbHVlLnJvbGUsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtVmFsdWUuZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgIHN0YXJ0RGF0ZVRpbWU6IGRhdGVzVmFsdWVzLnN0YXJ0RGF0ZVN0cmluZyxcclxuICAgICAgICAgICAgZW5kRGF0ZVRpbWU6IGRhdGVzVmFsdWVzLmVuZERhdGVTdHJpbmcsXHJcbiAgICAgICAgICAgIGRvbWFpbnM6IGZvcm1WYWx1ZS5kb21haW5zLFxyXG4gICAgICAgICAgICB1c2VySUQ6IHRoaXMudXNlckZvck1pc3Npb25JRCxcclxuICAgICAgICAgICAgZW1haWxTdGF0dXM6IHRoaXMubWlzc2lvblRvRWRpdFxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLm1pc3Npb25Ub0VkaXQuZW1haWxTdGF0dXNcclxuICAgICAgICAgICAgICAgIDogRW1haWxTdGF0dXMuQ1JFQVRJT05fVE9fREVMSVZFUixcclxuICAgICAgICAgICAgbG9jYWxlOiBmb3JtVmFsdWUubG9jYWxlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbWlzc2lvbklucHV0Lmhhc2h0YWdzID0gdGhpcy5hZGRlZEhhc2h0YWdzLm1hcCgoaCkgPT4gaC5pZCk7XHJcbiAgICAgICAgaWYgKGZvcm1WYWx1ZS5zcGFjZSkge1xyXG4gICAgICAgICAgICBtaXNzaW9uSW5wdXQuc3BhY2VJRCA9IGZvcm1WYWx1ZS5zcGFjZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZvcm1WYWx1ZS56b25lKSB7XHJcbiAgICAgICAgICAgIG1pc3Npb25JbnB1dC56b25lSUQgPSBmb3JtVmFsdWUuem9uZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWlzc2lvblRvRWRpdCkge1xyXG4gICAgICAgICAgICBtaXNzaW9uSW5wdXQuaWQgPSB0aGlzLm1pc3Npb25Ub0VkaXQuaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkZWRNaXNzaW9uSW5wdXQuZW1pdChtaXNzaW9uSW5wdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FuY2VsKCkge1xyXG4gICAgICAgIHRoaXMuYWRkZWRNaXNzaW9uSW5wdXQuZW1pdChudWxsKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaXNGb3JtRXJyb3IoY29udHJvbCkge1xyXG4gICAgICAgIHJldHVybiBjb250cm9sICYmIGNvbnRyb2wuaW52YWxpZCAmJiB0aGlzLmVycm9yRm9ybTtcclxuICAgIH1cclxuXHJcbiAgICBvblZlcmlmRGF0ZSgpOiBQcm9taXNlPHsgc3RhcnREYXRlU3RyaW5nPzogc3RyaW5nLCBlbmREYXRlU3RyaW5nPzogc3RyaW5nLCBlcnJvcj86IGJvb2xlYW4gfT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLm1pc3Npb25Gb3JtLmdldFJhd1ZhbHVlKCk7XHJcbiAgICAgICAgICAgIGxldCBzdGFydERhdGVTdHJpbmc6IHN0cmluZztcclxuICAgICAgICAgICAgbGV0IGVuZERhdGVTdHJpbmc6IHN0cmluZztcclxuXHJcblxyXG4gICAgICAgICAgICBpZiAoZm9ybVZhbHVlLnN0YXJ0RGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZUhvdXJTdGFydE51bWJlciA9IGZvcm1WYWx1ZS5zdGFydERhdGUgKyB0aGlzLm1pc3Npb25UaW1lU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSBEYXRlVGltZS5mcm9tTWlsbGlzKGRhdGVIb3VyU3RhcnROdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnREYXRlU3RyaW5nID0gc3RhcnREYXRlLnRvSVNPKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGZvcm1WYWx1ZS5lbmREYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlSG91ckVuZE51bWJlciA9IGZvcm1WYWx1ZS5lbmREYXRlICsgdGhpcy5taXNzaW9uVGltZUVuZDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBEYXRlVGltZS5mcm9tTWlsbGlzKGRhdGVIb3VyRW5kTnVtYmVyKTtcclxuICAgICAgICAgICAgICAgIGVuZERhdGVTdHJpbmcgPSBlbmREYXRlLnRvSVNPKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChlbmREYXRlU3RyaW5nICYmIHN0YXJ0RGF0ZVN0cmluZyAmJlxyXG4gICAgICAgICAgICAgICAgZW5kRGF0ZVN0cmluZyA8PSBzdGFydERhdGVTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoeyBlcnJvcjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZUVycm9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgc3RhcnREYXRlU3RyaW5nLCBlbmREYXRlU3RyaW5nIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25WZXJpZkZvcm0oKXtcclxuICAgICAgICBpZiAodGhpcy5lcnJvckZvcm0gJiYgdGhpcy5taXNzaW9uRm9ybS52YWxpZCAmJiAhdGhpcy5kYXRlRXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvckZvcm0gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmb3JtLWNvbnRhaW50ZXJcIiAqbmdJZj1cIm1pc3Npb25Gb3JtXCI+XHJcbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMXJlbTtcIj5cclxuICAgICAgICA8aDQ+e3sgJ01pc3Npb24gZGV0YWlscycgfCB0cmFuc2xhdGUgfX08L2g0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8Zm9ybSAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiIFtmb3JtR3JvdXBdPVwibWlzc2lvbkZvcm1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eydPcmdhbmlzYXRpb24nIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGRhdGEtdGVzdGlkPVwiZm9ybS1taXNzaW9uLW9yZ2FuaXNhdGlvblwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJvcmdhbmlzYXRpb25cIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiICpuZ0lmPVwiaXNTUFwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7ICdPcmRlcmVkIGJ5JyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT1cIm9yZGVyZWRPcmdhbmlzYXRpb25JRFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9yZyBvZiBhbGxPcmdzXCIgW25nVmFsdWVdPVwib3JnLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9yZy5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7J0Rlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiIHJvd3M9XCIxMFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uVmVyaWZGb3JtKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCcgOiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1snZGVzY3JpcHRpb24nXSl8fCBpc0Zvcm1FcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1snZGVzY3JpcHRpb24nXSl9IFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJmb3JtLW1pc3Npb24tZGVzY3JpcHRpb25cIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwiZm9ybS1taXNzaW9uLWRlc2NyaXB0aW9uLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCIgKm5nSWY9XCIgdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IobWlzc2lvbkZvcm0uY29udHJvbHNbJ2Rlc2NyaXB0aW9uJ10pIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAgaXNGb3JtRXJyb3IobWlzc2lvbkZvcm0uY29udHJvbHNbJ2Rlc2NyaXB0aW9uJ10pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IobWlzc2lvbkZvcm0uY29udHJvbHNbJ2Rlc2NyaXB0aW9uJ10pIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25nYi1hbGVydD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS00IGNvbC1mb3JtLWxhYmVsXCI+e3snUm9sZScgfCB0cmFuc2xhdGV9fSo8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9XCJyb2xlXCIgZGF0YS10ZXN0aWQ9XCJmb3JtLW1pc3Npb24tcm9sZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uVmVyaWZGb3JtKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCcgOiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1sncm9sZSddKXx8IGlzRm9ybUVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydyb2xlJ10pfSBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCByIG9mIGF2YWlsYWJsZVJvbGVzXCIgW25nVmFsdWVdPVwiclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyByIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cImZvcm0tbWlzc2lvbi1yb2xlLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCIgKm5nSWY9XCIgdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IobWlzc2lvbkZvcm0uY29udHJvbHNbJ3JvbGUnXSkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICBpc0Zvcm1FcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1sncm9sZSddKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3ZhbGlkYXRvcnNTZXJ2aWNlLmdldEVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydyb2xlJ10pIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25nYi1hbGVydD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCJcclxuICAgICAgICAgICAgKm5nSWY9XCJtaXNzaW9uRm9ybS5nZXQoJ3JvbGUnKS52YWx1ZSAhPT0gJ1ZJU0lUT1JfTVVTRVVNJyAmJiBtaXNzaW9uRm9ybS5nZXQoJ3JvbGUnKS52YWx1ZSAhPT0gJ0dVSURFX01VU0VVTSdcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eydEb21haW5zJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCIgKm5nSWY9XCJkb21haW5zXCI+XHJcbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbXVsdGlwbGUgZm9ybUNvbnRyb2xOYW1lPVwiZG9tYWluc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGRvbWFpbiBvZiBkb21haW5zXCIgW25nVmFsdWVdPVwiZG9tYWluLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRvbWFpbi5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7J0FjY2VzcyBsZXZlbCcgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT1cImxldmVsXCIgZGF0YS10ZXN0aWQ9XCJmb3JtLW1pc3Npb24tbGV2ZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsZXZlbCBvZiBhdmFpbGFibGVMZXZlbHNcIiBbbmdWYWx1ZV09XCJsZXZlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBsZXZlbCB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eyAnQXV0aG9yaXplZCBsb2NhdGlvbicgfCB0cmFuc2xhdGUgfX0qPC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCIgKm5nSWY9XCJhdmFpbGFibGVTcGFjZXNcIj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9XCJzcGFjZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uVmVyaWZGb3JtKClcIiAoY2hhbmdlKT1cIm9uU3BhY2VDbGljaygpXCJcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImZvcm0tbWlzc2lvbi1zcGFjZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJyA6IHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydzcGFjZSddKXx8IGlzRm9ybUVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydzcGFjZSddKX0gXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc3BhY2Ugb2YgYXZhaWxhYmxlU3BhY2VzXCIgW25nVmFsdWVdPVwic3BhY2UuaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc3BhY2UubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ2ItYWxlcnQgZGF0YS10ZXN0aWQ9XCJmb3JtLW1pc3Npb24tc3BhY2UtaW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIiAqbmdJZj1cIiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1snc3BhY2UnXSkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICBpc0Zvcm1FcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1snc3BhY2UnXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t2YWxpZGF0b3JzU2VydmljZS5nZXRFcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1snc3BhY2UnXSkgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIiAqbmdJZj1cIiFhdmFpbGFibGVTcGFjZXNcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdObyBsb2NhdGlvbnMgYXZhaWxhYmxlJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eyAnQXV0aG9yaXplZCB6b25lJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiICpuZ0lmPVwiem9uZXNGb3JTcGFjZTsgZWxzZSBub1NwYWNlXCI+XHJcbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiem9uZVwiIGRhdGEtdGVzdGlkPVwiZm9ybS1taXNzaW9uLXpvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cImRlZmF1bHRab25lLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdBbGwgem9uZXMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgem9uZSBvZiB6b25lc0ZvclNwYWNlXCIgW25nVmFsdWVdPVwiem9uZS5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB6b25lLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1NwYWNlPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04IGhpbnQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJoaW50IGtleXdvcmRzUnVsZXNcIj57eydZb3UgbmVlZCB0byBjaG9vc2UgdGhlIGxvY2F0aW9uIGZpcnN0JyB8IHRyYW5zbGF0ZX19IDwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7J0xhbmd1YWdlJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+XHJcbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibG9jYWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJudWxsXCI+e3snTm90IGFwcGxpY2FibGUnIHwgdHJhbnNsYXRlfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsb2NhbGUgb2YgbG9jYWxlc1wiIFtuZ1ZhbHVlXT1cImxvY2FsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBsb2NhbGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIEhhc2h0YWdzIGFyZSBhdmFpbGFibGUgYWZ0ZXIgU3BhY2UgaXMgc2V0IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7J0hhc2h0YWdzJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCIgKm5nSWY9XCJzcGFjZUlELnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImtleXdvcmRzUnVsZXNcIiAqbmdJZj1cImF2YWlsYWJsZUhhc2h0YWdzLmxlbmd0aCA+IDBcIj57eydBdmFpbGFibGUgaGFzaHRhZ3MnIHwgdHJhbnNsYXRlfX0gPC9wPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJrZXl3b3Jkc1J1bGVzXCIgKm5nSWY9XCJhdmFpbGFibGVIYXNodGFncy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eydObyBoYXNodGFncyBjcmVhdGVkIGZvciB0aGlzIGxvY2F0aW9uJyB8IHRyYW5zbGF0ZX19IDwvcD5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhdmFpbGFibGVIYXNodGFncy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwia2V5d29yZHNEaXNwbGF5IG5vLWJvcmRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2V5d29yZHNkaXNwbGF5Q29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGhhc2h0YWcgb2YgYXZhaWxhYmxlSGFzaHRhZ3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJoYXNodGFnQWRkZWQoaGFzaHRhZykgPyAna2V5d29yZHNJdGVtIGFkZGVkJyA6ICdrZXl3b3Jkc0l0ZW0nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25IYXNodGFnQ2xpY2soaGFzaHRhZylcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJ7e2hhc2h0YWdBZGRlZChoYXNodGFnKSA/ICgnUmVtb3ZlJ3x0cmFuc2xhdGUpIDogKCdBZGQnfHRyYW5zbGF0ZSkgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2hhc2h0YWcubmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwia2V5d29yZHNSdWxlc1wiPnt7J0FkZGVkIGhhc2h0YWdzJyB8IHRyYW5zbGF0ZX19IDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJrZXl3b3Jkc0Rpc3BsYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtleXdvcmRzZGlzcGxheUNvbnRhaW5lclwiICpuZ0lmPVwiYWRkZWRIYXNodGFncy5sZW5ndGg+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImtleXdvcmRzSXRlbVwiICpuZ0Zvcj1cImxldCBoYXNodGFnIG9mIGFkZGVkSGFzaHRhZ3NcIj57eyBoYXNodGFnLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZUJ1dHRvblwiIChjbGljayk9XCJyZW1vdmVIYXNodGFnKGhhc2h0YWcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Jvc3NJdGVtXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOCBoaW50LWNvbnRhaW5lclwiICpuZ0lmPVwiIXNwYWNlSUQudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiaGludCBrZXl3b3Jkc1J1bGVzXCI+e3snWW91IG5lZWQgdG8gY2hvb3NlIHRoZSBsb2NhdGlvbiBmaXJzdCcgfCB0cmFuc2xhdGV9fSA8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eydNaXNzaW9uIFN0YXJ0IERhdGUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgY29sLXNtLThcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiZGQvbW0veXl5eVwiIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0RGF0ZVwiIG5nYkRhdGVwaWNrZXJcclxuICAgICAgICAgICAgICAgICAgICAjZDE9XCJuZ2JEYXRlcGlja2VyXCIgZGF0YS10ZXN0aWQ9XCJmb3JtLW1pc3Npb24tc3RhcnREYXRlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25WZXJpZkRhdGUoKTtvblZlcmlmRm9ybSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IobWlzc2lvbkZvcm0uY29udHJvbHNbJ3N0YXJ0RGF0ZSddKXx8IGlzRm9ybUVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydzdGFydERhdGUnXSl9IFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGNhbGVuZGFyXCIgKGNsaWNrKT1cImQxLnRvZ2dsZSgpXCIgdHlwZT1cImJ1dHRvblwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ2ItYWxlcnQgZGF0YS10ZXN0aWQ9XCJmb3JtLW1pc3Npb24tc3RhcnREYXRlLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCIgKm5nSWY9XCIgdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IobWlzc2lvbkZvcm0uY29udHJvbHNbJ3N0YXJ0RGF0ZSddKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgIGlzRm9ybUVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydzdGFydERhdGUnXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t2YWxpZGF0b3JzU2VydmljZS5nZXRFcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1snc3RhcnREYXRlJ10pIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25nYi1hbGVydD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cImZvcm0tbWlzc2lvbi1zdGFydERhdGUtaW52YWxpZC12ZXJpZlwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVFcnJvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydlcnJvckZvcm0uZGF0ZV9zdGFydF9lbmQnIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25nYi1hbGVydD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS00IGNvbC1mb3JtLWxhYmVsXCI+e3snTWlzc2lvbiBTdGFydCBUaW1lJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGNvbC1zbS04IHRpbWVab25lQ29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8bmdiLXRpbWVwaWNrZXIgWyhuZ01vZGVsKV09XCJtaXNzaW9uVGltZVN0YXJ0XCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25WZXJpZkRhdGUoKTtvblZlcmlmRm9ybSgpXCI+PC9uZ2ItdGltZXBpY2tlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7J01pc3Npb24gRW5kIERhdGUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgY29sLXNtLThcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiZGQvbW0veXl5eVwiIG5nYkRhdGVwaWNrZXIgI2QyPVwibmdiRGF0ZXBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5kRGF0ZVwiIGRhdGEtdGVzdGlkPVwiZm9ybS1taXNzaW9uLWVuZERhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cInZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydlbmREYXRlJ10pXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IobWlzc2lvbkZvcm0uY29udHJvbHNbJ2VuZERhdGUnXSl8fCBpc0Zvcm1FcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1snZW5kRGF0ZSddKX0gXCJcclxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblZlcmlmRGF0ZSgpO29uVmVyaWZGb3JtKClcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBjYWxlbmRhclwiIChjbGljayk9XCJkMi50b2dnbGUoKVwiIHR5cGU9XCJidXR0b25cIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwiZm9ybS1taXNzaW9uLWVuZERhdGUtaW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIiAqbmdJZj1cIiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1snZW5kRGF0ZSddKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgIGlzRm9ybUVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydlbmREYXRlJ10pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IobWlzc2lvbkZvcm0uY29udHJvbHNbJ2VuZERhdGUnXSkgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwiZm9ybS1taXNzaW9uLWVuZERhdGUtaW52YWxpZC12ZXJpZlwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVFcnJvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydlcnJvckZvcm0uZGF0ZV9lbmRfc3RhcnQnIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25nYi1hbGVydD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS00IGNvbC1mb3JtLWxhYmVsXCI+e3snTWlzc2lvbiBFbmQgVGltZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBjb2wtc20tOCB0aW1lWm9uZUNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPG5nYi10aW1lcGlja2VyIFsobmdNb2RlbCldPVwibWlzc2lvblRpbWVFbmRcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblZlcmlmRGF0ZSgpO29uVmVyaWZGb3JtKClcIj48L25nYi10aW1lcGlja2VyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250cm9sLWRpdiBhY3Rpb24tYnV0dG9uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtci0zIGFjdGlvbi1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJmb3JtLW1pc3Npb24tc3VibWl0LWJ0blwiIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCcgOiBlcnJvckZvcm0gfVwiPnt7J1NhdmUnIHxcclxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNhbmNlbCgpXCIgZGF0YS10ZXN0aWQ9XCJmb3JtLW1pc3Npb24tY2FuY2VsLWJ0blwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBhY3Rpb24tYnV0dG9uXCI+e3snQ2FuY2VsJyB8XHJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJlcnJvckZvcm1cIj5cclxuICAgICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cImZvcm0tbWlzc2lvbi1pbnZhbGlkXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCIgdHlwZT1cImRhbmdlclwiPlxyXG4gICAgICAgICAgICAgICAge3snZXJyb3JGb3JtLmluZm9CdG4nIHx0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8L25nYi1hbGVydD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuPC9kaXY+Il19
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1taXNzaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1hZG1pbi9zcmMvbGliL3VzZXIvZm9ybS1taXNzaW9uL2Zvcm0tbWlzc2lvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi91c2VyL2Zvcm0tbWlzc2lvbi9mb3JtLW1pc3Npb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBTUwsV0FBVyxFQUVYLE1BQU0sRUFLTixXQUFXLEVBQ1gsV0FBVyxFQUtYLGtCQUFrQixHQUNuQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFFTCxhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGNBQWMsR0FDZixNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7O0FBTzNDLE1BQU0sT0FBTyxvQkFBb0I7SUErQy9CLFlBQ1UsRUFBZSxFQUNmLFlBQTBCLEVBQzFCLFdBQTRCLEVBQzVCLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUN4QyxXQUF3QixFQUN4QixjQUE4QixFQUM5QixhQUE0QixFQUM3QixpQkFBb0M7UUFSbkMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hD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QUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixPQUFPLENBQUMsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQzthQUM3QztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMvRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUN4QjtJQUNILENBQUM7O2lIQTFVVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixtVENyQ2pDLDI4ZEEyUE07MkZEdE5PLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0I7NFVBS25CLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsc0JBQXNCO3NCQUE5QixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUcsdUJBQXVCO3NCQUEvQixLQUFLO2dCQU1JLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIFpvbmUsXHJcbiAgTWlzc2lvbixcclxuICBPcmdhbmlzYXRpb24sXHJcbiAgU3BhY2UsXHJcbiAgUm9sZVN0YXR1cyxcclxuICBMZXZlbFN0YXR1cyxcclxuICBEb21haW4sXHJcbiAgTG9jYWxlLFxyXG4gIEJhc2VVc2VyU2VydmljZSxcclxuICBEb21haW5TZXJ2aWNlLFxyXG4gIE9yZ2FuaXNhdGlvblNlcnZpY2UsXHJcbiAgWm9uZVNlcnZpY2UsXHJcbiAgZW51bVRvQXJyYXksXHJcbiAgRW1haWxTdGF0dXMsXHJcbiAgSGFzaHRhZyxcclxuICBTcGFjZVNlcnZpY2UsXHJcbiAgTG9jYWxlU2VydmljZSxcclxuICBIYXNodGFnU2VydmljZSxcclxuICBzdHJpbmdMb2NhbGVUb0VudW0sXHJcbn0gZnJvbSAnQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlJztcclxuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XHJcbmltcG9ydCB7IFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgVmFsaWRhdG9yc1NlcnZpY2UsXHJcbiAgdGV4dFZhbGlkYXRvcixcclxuICBub0VtcHR5VmFsaWRhdG9yLFxyXG4gIGZsb2F0VmFsaWRhdG9yLFxyXG59IGZyb20gJ0BzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1mb3JtLW1pc3Npb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLW1pc3Npb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tbWlzc2lvbi5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybU1pc3Npb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIG1pc3Npb25Ub0VkaXQ6IE1pc3Npb247XHJcblxyXG4gIEBJbnB1dCgpIG9yZ2FuaXNhdGlvbkZvck1pc3Npb246IE9yZ2FuaXNhdGlvbjtcclxuXHJcbiAgQElucHV0KCkgaXNTUDogYm9vbGVhbjtcclxuXHJcbiAgQElucHV0KCkgdXNlckZvck1pc3Npb25JRDogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKSBjdXJyZW50VXNlck9yZ2FuaXNhdGlvbjogT3JnYW5pc2F0aW9uO1xyXG5cclxuICBtaXNzaW9uRm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBhdmFpbGFibGVTcGFjZXM6IFNwYWNlW107XHJcblxyXG4gIEBPdXRwdXQoKSBhZGRlZE1pc3Npb25JbnB1dCA9IG5ldyBFdmVudEVtaXR0ZXI8TWlzc2lvbj4oKTtcclxuXHJcbiAgYXZhaWxhYmxlUm9sZXM6IFJvbGVTdGF0dXNbXTtcclxuXHJcbiAgYXZhaWxhYmxlTGV2ZWxzOiBMZXZlbFN0YXR1c1tdO1xyXG5cclxuICBhdmFpbGFibGVIYXNodGFnczogSGFzaHRhZ1tdID0gW107XHJcblxyXG4gIGRvbWFpbnM6IERvbWFpbltdO1xyXG5cclxuICBhbGxPcmdzOiBPcmdhbmlzYXRpb25bXTtcclxuXHJcbiAgaXNHdWlkZSA9IGZhbHNlO1xyXG5cclxuICB6b25lc0ZvclNwYWNlOiBab25lW107XHJcblxyXG4gIGRlZmF1bHRab25lOiBab25lO1xyXG5cclxuICBtaXNzaW9uVGltZVN0YXJ0OiBudW1iZXIgPSAxMiAqIDYwICogNjAwMDA7IC8vIG1pZGRheSBpbiBtaWxsaXNlY29uZHNcclxuXHJcbiAgbWlzc2lvblRpbWVFbmQ6IG51bWJlciA9IDEyICogNjAgKiA2MDAwMDtcclxuXHJcbiAgYWRkZWRIYXNodGFnczogSGFzaHRhZ1tdID0gW107XHJcblxyXG4gIGN1cnJlbnRMb2NhbGU6IExvY2FsZTtcclxuXHJcbiAgbG9jYWxlczogc3RyaW5nW107XHJcblxyXG4gIGRhdGVFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBlcnJvckZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgc3BhY2VTZXJ2aWNlOiBTcGFjZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRvbWFpblNlcnZpY2U6IERvbWFpblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG9yZ2FuaXNhdGlvblNlcnZpY2U6IE9yZ2FuaXNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHpvbmVTZXJ2aWNlOiBab25lU2VydmljZSxcclxuICAgIHByaXZhdGUgaGFzaHRhZ1NlcnZpY2U6IEhhc2h0YWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIHZhbGlkYXRvcnNTZXJ2aWNlOiBWYWxpZGF0b3JzU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVVzZXJJbmZvKCk7XHJcbiAgICBhd2FpdCB0aGlzLnNldERvbWFpbnMoKTtcclxuICAgIGlmICh0aGlzLmlzU1ApIHtcclxuICAgICAgdGhpcy5hbGxPcmdzID0gYXdhaXQgdGhpcy5vcmdhbmlzYXRpb25TZXJ2aWNlLmxpc3RPcmdhbmlzYXRpb25zKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmN1cnJlbnRMb2NhbGUgPSBzdHJpbmdMb2NhbGVUb0VudW0odGhpcy5sb2NhbGVTZXJ2aWNlLmdldExvY2FsZSgpKTsgLy8gdG8gbWF0Y2ggZW51bSBMb2NhbGVcclxuICAgIHRoaXMubG9jYWxlcyA9IGVudW1Ub0FycmF5KExvY2FsZSk7XHJcbiAgICBpZiAodGhpcy5taXNzaW9uVG9FZGl0KSB7XHJcbiAgICAgIHRoaXMuaW5pdEZvcm1Gb3JFZGl0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluaXRFbXB0eUZvcm0oKTtcclxuICAgIH1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyB0aGlzLnpvbmVzRm9yU3BhY2UuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAvLyAgIGNvbnNvbGUubG9nKCd0aGlzIGlzIG15IHpvbmVzIGVsZW1lbnRzJyArIEpTT04uc3RyaW5naWZ5KGVsZW1lbnQpKTtcclxuICAgICAgLy8gfSk7XHJcbiAgICAgIHRoaXMuem9uZXNGb3JTcGFjZS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3RoaXMgaXMgbXkgem9uZXMgZWxlbWVudHMnICsgZWxlbWVudC5uYW1lKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAndGhpcyBpcyBteSB6b25lcyBlbGVtZW50cyBmaWx0ZXJlZCcgK1xyXG4gICAgICAgICAgdGhpcy56b25lc0ZvclNwYWNlLmZpbHRlcigoem9uZSkgPT4gIXpvbmUuYXVkaW9JRClcclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCcgYWxsIG15IHpvbmVzOiAnICsgSlNPTi5zdHJpbmdpZnkodGhpcy56b25lc0ZvclNwYWNlKSk7XHJcbiAgICB9LCA1MDAwKTtcclxuICAgIC8vLmxheWVyLm5hbWUpOyA/PyBBVURJT1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVXNlckluZm8oKSB7XHJcbiAgICB0aGlzLmF2YWlsYWJsZVJvbGVzID0gdGhpcy51c2VyU2VydmljZS5nZXRBdmFpbGFibGVSb2xlc0ZvckN1cnJlbnRVc2VyKCk7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUxldmVscyA9IHRoaXMudXNlclNlcnZpY2UuZ2V0QXZhbGFibGVMZXZlbHNGb3JDdXJyZW50VXNlcigpO1xyXG4gICAgdGhpcy5pc0d1aWRlID0gdGhpcy51c2VyU2VydmljZS5pc0d1aWRlKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzZXREb21haW5zKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzR3VpZGUpIHtcclxuICAgICAgY29uc3QgZG9tYWlucyA9IGF3YWl0IHRoaXMuZG9tYWluU2VydmljZS5nZXREb21haW5zRm9yTWlzc2lvbnNGb3JPcmcoXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlck9yZ2FuaXNhdGlvbi5pZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRvbWFpbnMgPSBkb21haW5zO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2V0SGFzaHRhZ3Moc3BhY2VJRDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUhhc2h0YWdzID0gYXdhaXQgdGhpcy5oYXNodGFnU2VydmljZS5nZXRIYXNodGFnc0ZvclNwYWNlKFxyXG4gICAgICBzcGFjZUlEXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNwYWNlSUQoKTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgIHJldHVybiB0aGlzLm1pc3Npb25Gb3JtLmdldCgnc3BhY2UnKTtcclxuICB9XHJcblxyXG4gIGdldCByb2xlKCk6IEFic3RyYWN0Q29udHJvbCB7XHJcbiAgICByZXR1cm4gdGhpcy5taXNzaW9uRm9ybS5nZXQoJ3JvbGUnKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGluaXRGb3JtRm9yRWRpdCgpIHtcclxuICAgIGxldCBzdGFydERhdGU6IGFueSA9IG51bGw7XHJcbiAgICBsZXQgZW5kRGF0ZTogYW55ID0gbnVsbDtcclxuXHJcbiAgICBjb25zdCBtID0gdGhpcy5taXNzaW9uVG9FZGl0O1xyXG5cclxuICAgIGlmIChtLnN0YXJ0RGF0ZVRpbWUpIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IERhdGVUaW1lLmZyb21JU08obS5zdGFydERhdGVUaW1lKTtcclxuICAgICAgdGhpcy5taXNzaW9uVGltZVN0YXJ0ID0gKGRhdGUuaG91ciAqIDYwICsgZGF0ZS5taW51dGUpICogNjAgKiAxMDAwO1xyXG4gICAgICBzdGFydERhdGUgPSBkYXRlLnRvTWlsbGlzKCkgLSB0aGlzLm1pc3Npb25UaW1lU3RhcnQ7XHJcbiAgICB9XHJcbiAgICBpZiAobS5lbmREYXRlVGltZSkge1xyXG4gICAgICBjb25zdCBkYXRlID0gRGF0ZVRpbWUuZnJvbUlTTyhtLmVuZERhdGVUaW1lKTtcclxuICAgICAgdGhpcy5taXNzaW9uVGltZUVuZCA9IChkYXRlLmhvdXIgKiA2MCArIGRhdGUubWludXRlKSAqIDYwICogMTAwMDtcclxuICAgICAgZW5kRGF0ZSA9IGRhdGUudG9NaWxsaXMoKSAtIHRoaXMubWlzc2lvblRpbWVFbmQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51c2VyRm9yTWlzc2lvbklEID0gbS51c2VySUQ7XHJcbiAgICB0aGlzLmF2YWlsYWJsZVNwYWNlcyA9IGF3YWl0IHRoaXMuc3BhY2VTZXJ2aWNlLmdldEFsbG93ZWRTcGFjZXNGb3JPcmcoXHJcbiAgICAgIHRoaXMubWlzc2lvblRvRWRpdC5vcmdhbmlzYXRpb25JRCxcclxuICAgICAgdGhpcy5jdXJyZW50VXNlck9yZ2FuaXNhdGlvbi5pZFxyXG4gICAgKTtcclxuICAgIGF3YWl0IHRoaXMuc2V0SGFzaHRhZ3MobS5zcGFjZUlEKTtcclxuICAgIHRoaXMubWlzc2lvbkZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgaWQ6IG0uaWQsXHJcbiAgICAgIG9yZ2FuaXNhdGlvbjogW3sgdmFsdWU6IG0ub3JnYW5pc2F0aW9uLm5hbWUsIGRpc2FibGVkOiB0cnVlIH1dLFxyXG4gICAgICBvcmdhbmlzYXRpb25JRDogbS5vcmdhbmlzYXRpb25JRCxcclxuICAgICAgb3JkZXJlZE9yZ2FuaXNhdGlvbklEOiBtLm9yZGVyZWRPcmdhbmlzYXRpb25JRCxcclxuICAgICAgcm9sZTogW20ucm9sZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGxldmVsOiBbbS5sZXZlbF0sXHJcbiAgICAgIHNwYWNlOiBbbS5zcGFjZUlELCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgZGVzY3JpcHRpb246IFttLmRlc2NyaXB0aW9uLCBbdGV4dFZhbGlkYXRvcigpLCBub0VtcHR5VmFsaWRhdG9yKCldXSxcclxuICAgICAgZG9tYWluczogW20uZG9tYWluc10sXHJcbiAgICAgIHpvbmU6IFttLnpvbmVJRF0sXHJcbiAgICAgIGxvY2FsZTogW20ubG9jYWxlXSxcclxuICAgICAgc3RhcnREYXRlOiBbc3RhcnREYXRlLCBbZmxvYXRWYWxpZGF0b3IoKV1dLFxyXG4gICAgICBlbmREYXRlOiBbZW5kRGF0ZSwgW2Zsb2F0VmFsaWRhdG9yKCldXSxcclxuICAgIH0pO1xyXG4gICAgaWYgKG0uaGFzaHRhZ3MgJiYgbS5oYXNodGFncy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYWRkZWRIYXNodGFncyA9IHRoaXMuYXZhaWxhYmxlSGFzaHRhZ3MuZmlsdGVyKChoYXNodGFnKSA9PlxyXG4gICAgICAgIG0uaGFzaHRhZ3MuaW5jbHVkZXMoaGFzaHRhZy5pZClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMub25TcGFjZUNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvblNwYWNlQ2xpY2soKSB7XHJcbiAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0Wm9uZXNCeVNwYWNlKHRoaXMuc3BhY2VJRC52YWx1ZSk7XHJcbiAgICB0aGlzLmRlZmF1bHRab25lID0gem9uZXMuZmluZCgoem9uZSkgPT4gIXpvbmUucGFyZW50SUQpO1xyXG4gICAgY29uc3QgaW5kZXhPZkRlZmF1bHRab25lID0gem9uZXMuaW5kZXhPZih0aGlzLmRlZmF1bHRab25lKTtcclxuICAgIHpvbmVzLnNwbGljZShpbmRleE9mRGVmYXVsdFpvbmUsIDEpO1xyXG4gICAgdGhpcy56b25lc0ZvclNwYWNlID0gem9uZXMuZmlsdGVyKCh6b25lKSA9PiAhem9uZS5hdWRpb0lEKTtcclxuICAgIGF3YWl0IHRoaXMuc2V0SGFzaHRhZ3ModGhpcy5zcGFjZUlELnZhbHVlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGluaXRFbXB0eUZvcm0oKSB7XHJcbiAgICB0aGlzLmF2YWlsYWJsZVNwYWNlcyA9IGF3YWl0IHRoaXMuc3BhY2VTZXJ2aWNlLmdldEFsbG93ZWRTcGFjZXNGb3JPcmcoXHJcbiAgICAgIHRoaXMub3JnYW5pc2F0aW9uRm9yTWlzc2lvbi5pZCxcclxuICAgICAgdGhpcy5jdXJyZW50VXNlck9yZ2FuaXNhdGlvbi5pZFxyXG4gICAgKTtcclxuICAgIHRoaXMubWlzc2lvbkZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgcm9sZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgbGV2ZWw6IFtMZXZlbFN0YXR1cy5NSU5JTVVNXSxcclxuICAgICAgb3JnYW5pc2F0aW9uOiBbXHJcbiAgICAgICAgeyB2YWx1ZTogdGhpcy5vcmdhbmlzYXRpb25Gb3JNaXNzaW9uLm5hbWUsIGRpc2FibGVkOiB0cnVlIH0sXHJcbiAgICAgIF0sXHJcbiAgICAgIG9yZ2FuaXNhdGlvbklEOiB0aGlzLm9yZ2FuaXNhdGlvbkZvck1pc3Npb24uaWQsXHJcbiAgICAgIG9yZGVyZWRPcmdhbmlzYXRpb25JRDogdGhpcy5jdXJyZW50VXNlck9yZ2FuaXNhdGlvbi5pZCxcclxuICAgICAgc3BhY2U6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIHpvbmU6IFsnJ10sXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBbJycsIFt0ZXh0VmFsaWRhdG9yKCksIG5vRW1wdHlWYWxpZGF0b3IoKV1dLFxyXG4gICAgICBkb21haW5zOiBbbnVsbF0sXHJcbiAgICAgIGxvY2FsZTogW3RoaXMuY3VycmVudExvY2FsZV0sXHJcbiAgICAgIHN0YXJ0RGF0ZTogW251bGwsIFtmbG9hdFZhbGlkYXRvcigpXV0sXHJcbiAgICAgIGVuZERhdGU6IFtudWxsLCBbZmxvYXRWYWxpZGF0b3IoKV1dLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkhhc2h0YWdDbGljayhoYXNodGFnOiBIYXNodGFnKSB7XHJcbiAgICBpZiAoIXRoaXMuaGFzaHRhZ0FkZGVkKGhhc2h0YWcpKSB7XHJcbiAgICAgIHRoaXMuYWRkZWRIYXNodGFncy5wdXNoKGhhc2h0YWcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hZGRlZEhhc2h0YWdzLnNwbGljZSh0aGlzLmFkZGVkSGFzaHRhZ3MuaW5kZXhPZihoYXNodGFnKSwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYXNodGFnQWRkZWQoaGFzaHRhZzogSGFzaHRhZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5hZGRlZEhhc2h0YWdzLmZpbmQoKF9oYXNodGFnKSA9PiBfaGFzaHRhZy5pZCA9PT0gaGFzaHRhZy5pZCkgIT09XHJcbiAgICAgIHVuZGVmaW5lZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUhhc2h0YWcoaGFzaHRhZzogSGFzaHRhZykge1xyXG4gICAgdGhpcy5hZGRlZEhhc2h0YWdzLnNwbGljZSh0aGlzLmFkZGVkSGFzaHRhZ3MuaW5kZXhPZihoYXNodGFnKSwgMSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvblN1Ym1pdCgpIHtcclxuICAgIGlmICghdGhpcy5taXNzaW9uRm9ybS52YWxpZCkge1xyXG4gICAgICB0aGlzLmVycm9yRm9ybSA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkYXRlc1ZhbHVlcyA9IGF3YWl0IHRoaXMub25WZXJpZkRhdGUoKTtcclxuICAgIGlmIChkYXRlc1ZhbHVlcy5lcnJvcikge1xyXG4gICAgICB0aGlzLmRhdGVFcnJvciA9IHRydWU7XHJcbiAgICAgIHRoaXMuZXJyb3JGb3JtID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMubWlzc2lvbkZvcm0udmFsdWU7XHJcbiAgICAvLyBpZiAoIXRoaXMubWlzc2lvbkZvcm0udmFsaWQpIHtcclxuICAgIC8vICAgICAvLyB0aGlzIHNob3dzIGVycm9ycyBpbiB0aGUgZm9ybVxyXG4gICAgLy8gICAgIHRoaXMubWlzc2lvbkZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgLy8gICAgIHJldHVybjtcclxuICAgIC8vIH1cclxuICAgIC8vIGxldCBzdGFydERhdGVTdHJpbmc6IHN0cmluZztcclxuICAgIC8vIGxldCBlbmREYXRlU3RyaW5nOiBzdHJpbmc7XHJcbiAgICAvLyBpZiAoZm9ybVZhbHVlLnN0YXJ0RGF0ZSkge1xyXG4gICAgLy8gICAgIGNvbnN0IGRhdGVIb3VyU3RhcnROdW1iZXIgPSBmb3JtVmFsdWUuc3RhcnREYXRlICsgdGhpcy5taXNzaW9uVGltZVN0YXJ0O1xyXG4gICAgLy8gICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IERhdGVUaW1lLmZyb21NaWxsaXMoZGF0ZUhvdXJTdGFydE51bWJlcik7XHJcbiAgICAvLyAgICAgc3RhcnREYXRlU3RyaW5nID0gc3RhcnREYXRlLnRvSVNPKCk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBpZiAoZm9ybVZhbHVlLmVuZERhdGUpIHtcclxuICAgIC8vICAgICBjb25zdCBkYXRlSG91ckVuZE51bWJlciA9IGZvcm1WYWx1ZS5lbmREYXRlICsgdGhpcy5taXNzaW9uVGltZUVuZDtcclxuICAgIC8vICAgICBjb25zdCBlbmREYXRlID0gRGF0ZVRpbWUuZnJvbU1pbGxpcyhkYXRlSG91ckVuZE51bWJlcik7XHJcbiAgICAvLyAgICAgZW5kRGF0ZVN0cmluZyA9IGVuZERhdGUudG9JU08oKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAoZW5kRGF0ZVN0cmluZyAmJiBzdGFydERhdGVTdHJpbmcgJiYgKGVuZERhdGVTdHJpbmcgPCBzdGFydERhdGVTdHJpbmcpKSB7XHJcbiAgICAvLyAgICAgdGhpcy5kYXRlRXJyb3IgPSB0cnVlO1xyXG4gICAgLy8gICAgIHJldHVybjtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgdGhpcy5kYXRlRXJyb3IgPSBmYWxzZTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBjb25zdCBtaXNzaW9uSW5wdXQ6IE1pc3Npb24gPSB7XHJcbiAgICAgIG9yZ2FuaXNhdGlvbklEOiBmb3JtVmFsdWUub3JnYW5pc2F0aW9uSUQsXHJcbiAgICAgIG9yZGVyZWRPcmdhbmlzYXRpb25JRDogZm9ybVZhbHVlLm9yZGVyZWRPcmdhbmlzYXRpb25JRCxcclxuICAgICAgbGV2ZWw6IGZvcm1WYWx1ZS5sZXZlbCxcclxuICAgICAgcm9sZTogZm9ybVZhbHVlLnJvbGUsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBmb3JtVmFsdWUuZGVzY3JpcHRpb24sXHJcbiAgICAgIHN0YXJ0RGF0ZVRpbWU6IGRhdGVzVmFsdWVzLnN0YXJ0RGF0ZVN0cmluZyxcclxuICAgICAgZW5kRGF0ZVRpbWU6IGRhdGVzVmFsdWVzLmVuZERhdGVTdHJpbmcsXHJcbiAgICAgIGRvbWFpbnM6IGZvcm1WYWx1ZS5kb21haW5zLFxyXG4gICAgICB1c2VySUQ6IHRoaXMudXNlckZvck1pc3Npb25JRCxcclxuICAgICAgZW1haWxTdGF0dXM6IHRoaXMubWlzc2lvblRvRWRpdFxyXG4gICAgICAgID8gdGhpcy5taXNzaW9uVG9FZGl0LmVtYWlsU3RhdHVzXHJcbiAgICAgICAgOiBFbWFpbFN0YXR1cy5DUkVBVElPTl9UT19ERUxJVkVSLFxyXG4gICAgICBsb2NhbGU6IGZvcm1WYWx1ZS5sb2NhbGUsXHJcbiAgICB9O1xyXG4gICAgbWlzc2lvbklucHV0Lmhhc2h0YWdzID0gdGhpcy5hZGRlZEhhc2h0YWdzLm1hcCgoaCkgPT4gaC5pZCk7XHJcbiAgICBpZiAoZm9ybVZhbHVlLnNwYWNlKSB7XHJcbiAgICAgIG1pc3Npb25JbnB1dC5zcGFjZUlEID0gZm9ybVZhbHVlLnNwYWNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGZvcm1WYWx1ZS56b25lKSB7XHJcbiAgICAgIG1pc3Npb25JbnB1dC56b25lSUQgPSBmb3JtVmFsdWUuem9uZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1pc3Npb25Ub0VkaXQpIHtcclxuICAgICAgbWlzc2lvbklucHV0LmlkID0gdGhpcy5taXNzaW9uVG9FZGl0LmlkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hZGRlZE1pc3Npb25JbnB1dC5lbWl0KG1pc3Npb25JbnB1dCk7XHJcbiAgfVxyXG5cclxuICBvbkNhbmNlbCgpIHtcclxuICAgIHRoaXMuYWRkZWRNaXNzaW9uSW5wdXQuZW1pdChudWxsKTtcclxuICB9XHJcblxyXG4gIGlzRm9ybUVycm9yKGNvbnRyb2wpIHtcclxuICAgIHJldHVybiBjb250cm9sICYmIGNvbnRyb2wuaW52YWxpZCAmJiB0aGlzLmVycm9yRm9ybTtcclxuICB9XHJcblxyXG4gIG9uVmVyaWZEYXRlKCk6IFByb21pc2U8e1xyXG4gICAgc3RhcnREYXRlU3RyaW5nPzogc3RyaW5nO1xyXG4gICAgZW5kRGF0ZVN0cmluZz86IHN0cmluZztcclxuICAgIGVycm9yPzogYm9vbGVhbjtcclxuICB9PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5taXNzaW9uRm9ybS5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgICBsZXQgc3RhcnREYXRlU3RyaW5nOiBzdHJpbmc7XHJcbiAgICAgIGxldCBlbmREYXRlU3RyaW5nOiBzdHJpbmc7XHJcblxyXG4gICAgICBpZiAoZm9ybVZhbHVlLnN0YXJ0RGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IGRhdGVIb3VyU3RhcnROdW1iZXIgPSBmb3JtVmFsdWUuc3RhcnREYXRlICsgdGhpcy5taXNzaW9uVGltZVN0YXJ0O1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IERhdGVUaW1lLmZyb21NaWxsaXMoZGF0ZUhvdXJTdGFydE51bWJlcik7XHJcbiAgICAgICAgc3RhcnREYXRlU3RyaW5nID0gc3RhcnREYXRlLnRvSVNPKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGZvcm1WYWx1ZS5lbmREYXRlKSB7XHJcbiAgICAgICAgY29uc3QgZGF0ZUhvdXJFbmROdW1iZXIgPSBmb3JtVmFsdWUuZW5kRGF0ZSArIHRoaXMubWlzc2lvblRpbWVFbmQ7XHJcbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IERhdGVUaW1lLmZyb21NaWxsaXMoZGF0ZUhvdXJFbmROdW1iZXIpO1xyXG4gICAgICAgIGVuZERhdGVTdHJpbmcgPSBlbmREYXRlLnRvSVNPKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICBlbmREYXRlU3RyaW5nICYmXHJcbiAgICAgICAgc3RhcnREYXRlU3RyaW5nICYmXHJcbiAgICAgICAgZW5kRGF0ZVN0cmluZyA8PSBzdGFydERhdGVTdHJpbmdcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5kYXRlRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHJlc29sdmUoeyBlcnJvcjogdHJ1ZSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRhdGVFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIHJlc29sdmUoeyBzdGFydERhdGVTdHJpbmcsIGVuZERhdGVTdHJpbmcgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25WZXJpZkZvcm0oKSB7XHJcbiAgICBpZiAodGhpcy5lcnJvckZvcm0gJiYgdGhpcy5taXNzaW9uRm9ybS52YWxpZCAmJiAhdGhpcy5kYXRlRXJyb3IpIHtcclxuICAgICAgdGhpcy5lcnJvckZvcm0gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZvcm0tY29udGFpbnRlclwiICpuZ0lmPVwibWlzc2lvbkZvcm1cIj5cclxuICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAxcmVtO1wiPlxyXG4gICAgICAgIDxoND57eyAnTWlzc2lvbiBkZXRhaWxzJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxmb3JtIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCIgW2Zvcm1Hcm91cF09XCJtaXNzaW9uRm9ybVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7J09yZ2FuaXNhdGlvbicgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZGF0YS10ZXN0aWQ9XCJmb3JtLW1pc3Npb24tb3JnYW5pc2F0aW9uXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm9yZ2FuaXNhdGlvblwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgKm5nSWY9XCJpc1NQXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS00IGNvbC1mb3JtLWxhYmVsXCI+e3sgJ09yZGVyZWQgYnknIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+XHJcbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPVwib3JkZXJlZE9yZ2FuaXNhdGlvbklEXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3JnIG9mIGFsbE9yZ3NcIiBbbmdWYWx1ZV09XCJvcmcuaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgb3JnLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS00IGNvbC1mb3JtLWxhYmVsXCI+e3snRGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCIgcm93cz1cIjEwXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25WZXJpZkZvcm0oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJyA6IHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydkZXNjcmlwdGlvbiddKXx8IGlzRm9ybUVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydkZXNjcmlwdGlvbiddKX0gXCJcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImZvcm0tbWlzc2lvbi1kZXNjcmlwdGlvblwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ2ItYWxlcnQgZGF0YS10ZXN0aWQ9XCJmb3JtLW1pc3Npb24tZGVzY3JpcHRpb24taW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIiAqbmdJZj1cIiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1snZGVzY3JpcHRpb24nXSkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICBpc0Zvcm1FcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1snZGVzY3JpcHRpb24nXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t2YWxpZGF0b3JzU2VydmljZS5nZXRFcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1snZGVzY3JpcHRpb24nXSkgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eydSb2xlJyB8IHRyYW5zbGF0ZX19KjwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT1cInJvbGVcIiBkYXRhLXRlc3RpZD1cImZvcm0tbWlzc2lvbi1yb2xlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25WZXJpZkZvcm0oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJyA6IHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydyb2xlJ10pfHwgaXNGb3JtRXJyb3IobWlzc2lvbkZvcm0uY29udHJvbHNbJ3JvbGUnXSl9IFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHIgb2YgYXZhaWxhYmxlUm9sZXNcIiBbbmdWYWx1ZV09XCJyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHIgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwiZm9ybS1taXNzaW9uLXJvbGUtaW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIiAqbmdJZj1cIiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1sncm9sZSddKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgIGlzRm9ybUVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydyb2xlJ10pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IobWlzc2lvbkZvcm0uY29udHJvbHNbJ3JvbGUnXSkgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIm1pc3Npb25Gb3JtLmdldCgncm9sZScpLnZhbHVlICE9PSAnVklTSVRPUl9NVVNFVU0nICYmIG1pc3Npb25Gb3JtLmdldCgncm9sZScpLnZhbHVlICE9PSAnR1VJREVfTVVTRVVNJ1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7J0RvbWFpbnMnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIiAqbmdJZj1cImRvbWFpbnNcIj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBtdWx0aXBsZSBmb3JtQ29udHJvbE5hbWU9XCJkb21haW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZG9tYWluIG9mIGRvbWFpbnNcIiBbbmdWYWx1ZV09XCJkb21haW4uaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZG9tYWluLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS00IGNvbC1mb3JtLWxhYmVsXCI+e3snQWNjZXNzIGxldmVsJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+XHJcbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPVwibGV2ZWxcIiBkYXRhLXRlc3RpZD1cImZvcm0tbWlzc2lvbi1sZXZlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxldmVsIG9mIGF2YWlsYWJsZUxldmVsc1wiIFtuZ1ZhbHVlXT1cImxldmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxldmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7ICdBdXRob3JpemVkIGxvY2F0aW9uJyB8IHRyYW5zbGF0ZSB9fSo8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIiAqbmdJZj1cImF2YWlsYWJsZVNwYWNlc1wiPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT1cInNwYWNlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25WZXJpZkZvcm0oKVwiIChjaGFuZ2UpPVwib25TcGFjZUNsaWNrKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZm9ybS1taXNzaW9uLXNwYWNlXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IobWlzc2lvbkZvcm0uY29udHJvbHNbJ3NwYWNlJ10pfHwgaXNGb3JtRXJyb3IobWlzc2lvbkZvcm0uY29udHJvbHNbJ3NwYWNlJ10pfSBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBzcGFjZSBvZiBhdmFpbGFibGVTcGFjZXNcIiBbbmdWYWx1ZV09XCJzcGFjZS5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzcGFjZS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cImZvcm0tbWlzc2lvbi1zcGFjZS1pbnZhbGlkXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCIgdHlwZT1cImRhbmdlclwiICpuZ0lmPVwiIHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydzcGFjZSddKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgIGlzRm9ybUVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydzcGFjZSddKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3ZhbGlkYXRvcnNTZXJ2aWNlLmdldEVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydzcGFjZSddKSB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ2ItYWxlcnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiICpuZ0lmPVwiIWF2YWlsYWJsZVNwYWNlc1wiPlxyXG4gICAgICAgICAgICAgICAge3sgJ05vIGxvY2F0aW9ucyBhdmFpbGFibGUnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7ICdBdXRob3JpemVkIHpvbmUnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCIgKm5nSWY9XCJ6b25lc0ZvclNwYWNlOyBlbHNlIG5vU3BhY2VcIj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ6b25lXCIgZGF0YS10ZXN0aWQ9XCJmb3JtLW1pc3Npb24tem9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiZGVmYXVsdFpvbmUuaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FsbCB6b25lcycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB6b25lIG9mIHpvbmVzRm9yU3BhY2VcIiBbbmdWYWx1ZV09XCJ6b25lLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHpvbmUubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vU3BhY2U+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTggaGludC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImhpbnQga2V5d29yZHNSdWxlc1wiPnt7J1lvdSBuZWVkIHRvIGNob29zZSB0aGUgbG9jYXRpb24gZmlyc3QnIHwgdHJhbnNsYXRlfX0gPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS00IGNvbC1mb3JtLWxhYmVsXCI+e3snTGFuZ3VhZ2UnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJsb2NhbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIm51bGxcIj57eydOb3QgYXBwbGljYWJsZScgfCB0cmFuc2xhdGV9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxvY2FsZSBvZiBsb2NhbGVzXCIgW25nVmFsdWVdPVwibG9jYWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxvY2FsZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gSGFzaHRhZ3MgYXJlIGF2YWlsYWJsZSBhZnRlciBTcGFjZSBpcyBzZXQgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS00IGNvbC1mb3JtLWxhYmVsXCI+e3snSGFzaHRhZ3MnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIiAqbmdJZj1cInNwYWNlSUQudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwia2V5d29yZHNSdWxlc1wiICpuZ0lmPVwiYXZhaWxhYmxlSGFzaHRhZ3MubGVuZ3RoID4gMFwiPnt7J0F2YWlsYWJsZSBoYXNodGFncycgfCB0cmFuc2xhdGV9fSA8L3A+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImtleXdvcmRzUnVsZXNcIiAqbmdJZj1cImF2YWlsYWJsZUhhc2h0YWdzLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J05vIGhhc2h0YWdzIGNyZWF0ZWQgZm9yIHRoaXMgbG9jYXRpb24nIHwgdHJhbnNsYXRlfX0gPC9wPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImF2YWlsYWJsZUhhc2h0YWdzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJrZXl3b3Jkc0Rpc3BsYXkgbm8tYm9yZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrZXl3b3Jkc2Rpc3BsYXlDb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaGFzaHRhZyBvZiBhdmFpbGFibGVIYXNodGFnc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImhhc2h0YWdBZGRlZChoYXNodGFnKSA/ICdrZXl3b3Jkc0l0ZW0gYWRkZWQnIDogJ2tleXdvcmRzSXRlbSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkhhc2h0YWdDbGljayhoYXNodGFnKVwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cInt7aGFzaHRhZ0FkZGVkKGhhc2h0YWcpID8gKCdSZW1vdmUnfHRyYW5zbGF0ZSkgOiAoJ0FkZCd8dHJhbnNsYXRlKSB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aGFzaHRhZy5uYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJrZXl3b3Jkc1J1bGVzXCI+e3snQWRkZWQgaGFzaHRhZ3MnIHwgdHJhbnNsYXRlfX0gPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImtleXdvcmRzRGlzcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2V5d29yZHNkaXNwbGF5Q29udGFpbmVyXCIgKm5nSWY9XCJhZGRlZEhhc2h0YWdzLmxlbmd0aD4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwia2V5d29yZHNJdGVtXCIgKm5nRm9yPVwibGV0IGhhc2h0YWcgb2YgYWRkZWRIYXNodGFnc1wiPnt7IGhhc2h0YWcubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlQnV0dG9uXCIgKGNsaWNrKT1cInJlbW92ZUhhc2h0YWcoaGFzaHRhZylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcm9zc0l0ZW1cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04IGhpbnQtY29udGFpbmVyXCIgKm5nSWY9XCIhc3BhY2VJRC52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJoaW50IGtleXdvcmRzUnVsZXNcIj57eydZb3UgbmVlZCB0byBjaG9vc2UgdGhlIGxvY2F0aW9uIGZpcnN0JyB8IHRyYW5zbGF0ZX19IDwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7J01pc3Npb24gU3RhcnQgRGF0ZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBjb2wtc20tOFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJkZC9tbS95eXl5XCIgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnREYXRlXCIgbmdiRGF0ZXBpY2tlclxyXG4gICAgICAgICAgICAgICAgICAgICNkMT1cIm5nYkRhdGVwaWNrZXJcIiBkYXRhLXRlc3RpZD1cImZvcm0tbWlzc2lvbi1zdGFydERhdGVcIiAobmdNb2RlbENoYW5nZSk9XCJvblZlcmlmRGF0ZSgpO29uVmVyaWZGb3JtKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCcgOiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1snc3RhcnREYXRlJ10pfHwgaXNGb3JtRXJyb3IobWlzc2lvbkZvcm0uY29udHJvbHNbJ3N0YXJ0RGF0ZSddKX0gXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgY2FsZW5kYXJcIiAoY2xpY2spPVwiZDEudG9nZ2xlKClcIiB0eXBlPVwiYnV0dG9uXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cImZvcm0tbWlzc2lvbi1zdGFydERhdGUtaW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIiAqbmdJZj1cIiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1snc3RhcnREYXRlJ10pIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAgaXNGb3JtRXJyb3IobWlzc2lvbkZvcm0uY29udHJvbHNbJ3N0YXJ0RGF0ZSddKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3ZhbGlkYXRvcnNTZXJ2aWNlLmdldEVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydzdGFydERhdGUnXSkgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwiZm9ybS1taXNzaW9uLXN0YXJ0RGF0ZS1pbnZhbGlkLXZlcmlmXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCIgdHlwZT1cImRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0ZUVycm9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J2Vycm9yRm9ybS5kYXRlX3N0YXJ0X2VuZCcgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eydNaXNzaW9uIFN0YXJ0IFRpbWUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgY29sLXNtLTggdGltZVpvbmVDb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgIDxuZ2ItdGltZXBpY2tlciBbKG5nTW9kZWwpXT1cIm1pc3Npb25UaW1lU3RhcnRcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblZlcmlmRGF0ZSgpO29uVmVyaWZGb3JtKClcIj48L25nYi10aW1lcGlja2VyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS00IGNvbC1mb3JtLWxhYmVsXCI+e3snTWlzc2lvbiBFbmQgRGF0ZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBjb2wtc20tOFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJkZC9tbS95eXl5XCIgbmdiRGF0ZXBpY2tlciAjZDI9XCJuZ2JEYXRlcGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmREYXRlXCIgZGF0YS10ZXN0aWQ9XCJmb3JtLW1pc3Npb24tZW5kRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwidmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IobWlzc2lvbkZvcm0uY29udHJvbHNbJ2VuZERhdGUnXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCcgOiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1snZW5kRGF0ZSddKXx8IGlzRm9ybUVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydlbmREYXRlJ10pfSBcIlxyXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uVmVyaWZEYXRlKCk7b25WZXJpZkZvcm0oKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGNhbGVuZGFyXCIgKGNsaWNrKT1cImQyLnRvZ2dsZSgpXCIgdHlwZT1cImJ1dHRvblwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ2ItYWxlcnQgZGF0YS10ZXN0aWQ9XCJmb3JtLW1pc3Npb24tZW5kRGF0ZS1pbnZhbGlkXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCIgdHlwZT1cImRhbmdlclwiICpuZ0lmPVwiIHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKG1pc3Npb25Gb3JtLmNvbnRyb2xzWydlbmREYXRlJ10pIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAgaXNGb3JtRXJyb3IobWlzc2lvbkZvcm0uY29udHJvbHNbJ2VuZERhdGUnXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t2YWxpZGF0b3JzU2VydmljZS5nZXRFcnJvcihtaXNzaW9uRm9ybS5jb250cm9sc1snZW5kRGF0ZSddKSB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ2ItYWxlcnQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ2ItYWxlcnQgZGF0YS10ZXN0aWQ9XCJmb3JtLW1pc3Npb24tZW5kRGF0ZS1pbnZhbGlkLXZlcmlmXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCIgdHlwZT1cImRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0ZUVycm9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J2Vycm9yRm9ybS5kYXRlX2VuZF9zdGFydCcgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eydNaXNzaW9uIEVuZCBUaW1lJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGNvbC1zbS04IHRpbWVab25lQ29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8bmdiLXRpbWVwaWNrZXIgWyhuZ01vZGVsKV09XCJtaXNzaW9uVGltZUVuZFwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uVmVyaWZEYXRlKCk7b25WZXJpZkZvcm0oKVwiPjwvbmdiLXRpbWVwaWNrZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWNvbnRyb2wtZGl2IGFjdGlvbi1idXR0b24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1yLTMgYWN0aW9uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImZvcm0tbWlzc2lvbi1zdWJtaXQtYnRuXCIgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJyA6IGVycm9yRm9ybSB9XCI+e3snU2F2ZScgfFxyXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIiBkYXRhLXRlc3RpZD1cImZvcm0tbWlzc2lvbi1jYW5jZWwtYnRuXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIGFjdGlvbi1idXR0b25cIj57eydDYW5jZWwnIHxcclxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImVycm9yRm9ybVwiPlxyXG4gICAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwiZm9ybS1taXNzaW9uLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICB7eydlcnJvckZvcm0uaW5mb0J0bicgfHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG48L2Rpdj4iXX0=
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export * from './lib/ngx-smarterplan-admin.service';
|
|
5
5
|
export * from './lib/ngx-smarterplan-admin.module';
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1hZG1pbi9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxvQ0FBb0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gtc21hcnRlcnBsYW4tYWRtaW5cclxuICovXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZ3gtc21hcnRlcnBsYW4tYWRtaW4uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL25neC1zbWFydGVycGxhbi1hZG1pbi5tb2R1bGUnO1xyXG4iXX0=
|