UNPKG

vega-footer-logo

Version:

This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 6.1.5.

342 lines (334 loc) 38.4 kB
import { Injectable, Component, Input, NgModule } from '@angular/core'; import { Http, Headers, RequestOptions, HttpModule } from '@angular/http'; import { map } from 'rxjs/operators'; import { AES, enc } from 'crypto-js'; import { Router, ActivatedRoute, RouterModule } from '@angular/router'; import { BrowserModule } from '@angular/platform-browser'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var ResultMessage = /** @class */ (function () { function ResultMessage() { } return ResultMessage; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ /** @type {?} */ var gnPostAlertAcknowledgement = "Notify/PostAlertAcknowledgement"; /** @type {?} */ var gnPostResetAllAlerts = "Notify/PostResetAllAlerts"; var NotificationServices = /** @class */ (function () { function NotificationServices(http) { this.http = http; this.userTO = {}; this.resultMessage = new ResultMessage; } /** * @return {?} */ NotificationServices.prototype.getUserTOFromLocalStorage = /** * @return {?} */ function () { /** @type {?} */ var userTo = {}; userTo = JSON.parse(this.decryption(localStorage.getItem("currentUser"))); return userTo; }; /** * @param {?} Url * @return {?} */ NotificationServices.prototype.getAlertForNotify = /** * @param {?} Url * @return {?} */ function (Url) { debugger; if (this.userTO == null && this.userTO == undefined) { return; } this.getAllActiveNotification(this.userTO, Url).subscribe(function (res) { /** @type {?} */ var v = res.filter(function (p) { return p.IsAcknowledged == 0; }).length; if (document.getElementById("bgNotification") != null) { document.getElementById("bgNotification").innerText = v == 0 ? '' : v.toString(); } }, function (err) { }); }; /** * @param {?} UserTo * @param {?} masterBaseUrl * @return {?} */ NotificationServices.prototype.getAllActiveNotification = /** * @param {?} UserTo * @param {?} masterBaseUrl * @return {?} */ function (UserTo, masterBaseUrl) { /** @type {?} */ var keys = masterBaseUrl + "Notify/GetAllActiveAlertList?userId=1&roleId=1"; return this.http .get(keys).pipe(map(function (response) { return response.json(); })); }; /** * @param {?} notificationTo * @param {?} loginId * @param {?} URL * @return {?} */ NotificationServices.prototype.postAlertAcknowledgement = /** * @param {?} notificationTo * @param {?} loginId * @param {?} URL * @return {?} */ function (notificationTo, loginId, URL) { /** @type {?} */ var params = { alertUsersTO: notificationTo, loginUserId: loginId }; /** @type {?} */ var bodyString = JSON.stringify(params); /** @type {?} */ var headers = new Headers({ 'Content-Type': 'application/json' }); /** @type {?} */ var options = new RequestOptions({ headers: headers }); return this.http.post(URL + gnPostAlertAcknowledgement, bodyString, options); }; /** * @param {?} userTo * @param {?} URL * @return {?} */ NotificationServices.prototype.postAllAlertAcknowledgement = /** * @param {?} userTo * @param {?} URL * @return {?} */ function (userTo, URL) { /** @type {?} */ var params = { loginUserId: userTo.IdUser, roleId: userTo.UserRoleList[0].RoleId }; /** @type {?} */ var bodyString = JSON.stringify(params); /** @type {?} */ var headers = new Headers({ 'Content-Type': 'application/json' }); /** @type {?} */ var options = new RequestOptions({ headers: headers }); return this.http.post(URL + gnPostResetAllAlerts, bodyString, options); }; /** * @param {?} data * @return {?} */ NotificationServices.prototype.encryption = /** * @param {?} data * @return {?} */ function (data) { data = JSON.stringify(data); /** @type {?} */ var ciphertext = AES.encrypt(data.toString(), "secret key 123"); return ciphertext.toString(); }; /** * @param {?} data * @return {?} */ NotificationServices.prototype.decryption = /** * @param {?} data * @return {?} */ function (data) { // Decrypt if (data) { /** @type {?} */ var bytes = AES.decrypt(data, "secret key 123"); /** @type {?} */ var plaintext = bytes.toString(enc.Utf8); return plaintext; } return null; }; NotificationServices.decorators = [ { type: Injectable } ]; /** @nocollapse */ NotificationServices.ctorParameters = function () { return [ { type: Http } ]; }; return NotificationServices; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var NotificationComponent = /** @class */ (function () { function NotificationComponent(comman, router, route) { this.comman = comman; this.router = router; this.userTO = {}; this.resultMessage = new ResultMessage; this.notificationList = []; this.userTO = this.comman.getUserTOFromLocalStorage(); } /** * @return {?} */ NotificationComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.comman.getAlertForNotify(this.URL); this.getNotificationListByUser(); }; /** * @return {?} */ NotificationComponent.prototype.getNotificationListByUser = /** * @return {?} */ function () { var _this = this; this.notificationList = []; this.comman.getAllActiveNotification(this.userTO, this.URL).subscribe(function (notificationRes) { _this.notificationList = notificationRes; }, function (err) { console.log('Err : ' + err); }); }; /** * @param {?} alertMessageTo * @param {?=} isReset * @return {?} */ NotificationComponent.prototype.markAsReadToNotification = /** * @param {?} alertMessageTo * @param {?=} isReset * @return {?} */ function (alertMessageTo, isReset) { var _this = this; if (isReset === void 0) { isReset = false; } debugger; if (alertMessageTo.IsAcknowledged != 0 && !isReset) { return; } if (isReset) { alertMessageTo.IsReseted = 1; } this.comman.postAlertAcknowledgement(alertMessageTo, this.userTO.IdUser, this.URL).subscribe(function (vRes) { debugger; // if (this.resultMessage.MessageType == 1 && this.resultMessage.Result == 1) { // if (this.resultMessage.MessageType == 1 && this.resultMessage.Result == 1) { _this.comman.getAlertForNotify(_this.URL); _this.getNotificationListByUser(); //} }, function (err) { console.log("Error Msg : " + err); }); }; /** * @param {?} isAcknowelded * @return {?} */ NotificationComponent.prototype.getValidationColor = /** * @param {?} isAcknowelded * @return {?} */ function (isAcknowelded) { return isAcknowelded == 0 ? 'bold' : 'normal'; }; /** * @return {?} */ NotificationComponent.prototype.resetAllNotification = /** * @return {?} */ function () { var _this = this; //this.ss.showLoader(); this.comman.postAllAlertAcknowledgement(this.userTO, this.URL).subscribe(function (vRes) { //this.resultMessage = vRes; if (_this.resultMessage.MessageType == 1 && _this.resultMessage.Result == 1) { _this.comman.getAlertForNotify(_this.URL); _this.notificationList = []; } }, function (err) { console.log("Error Msg : " + err); }); }; /** * @param {?} alertMessageTo * @return {?} */ NotificationComponent.prototype.redirectFun = /** * @param {?} alertMessageTo * @return {?} */ function (alertMessageTo) { if (alertMessageTo.NavigationUrl != null || alertMessageTo.NavigationUrl != "") { this.router.navigate(['/' + alertMessageTo.NavigationUrl]); } }; NotificationComponent.decorators = [ { type: Component, args: [{ selector: 'notification', template: "\r\n<div class=\"col-lg-12\" style=\"margin-top: 20px\">\r\n<div class=\"panel panel-default top10 \">\r\n <div class=\"panel-heading\" style=\"color: red\">\r\n All Notification\r\n </div>\r\n <div class=\"panel-body\">\r\n <div class=\"row col-lg-12 top10\" *ngIf=\" notificationList?.length == 0 || notificationList == null\">\r\n <div class=\" alert-success\">\r\n <strong class=\"col-sm-2\">Information: </strong>\r\n <label class=\"control-label-left col-sm-10 fontweight\">All Message caught up !</label>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"notificationList?.length > 0\">\r\n <div class=\"col-lg-12 \">\r\n <div class=\"table-responsive \">\r\n <table class=\"table table-bordered table-hover\">\r\n <thead>\r\n <tr class=\"bg-info\">\r\n <th>Raised By</th>\r\n <th>Alert Message</th>\r\n <th>Raised On</th>\r\n <!--<th>Action</th>-->\r\n <th>\r\n <i class=\"fa fa-trash btn-custom-icon\" style=\"width:25px; height:20px;margin-right: 3px;\" aria-hidden=\"true\" (click)=\"resetAllNotification()\"> \r\n </i> Delete All\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <!-- redirectFun(notificationTo)\" -->\r\n <tr style=\"cursor: pointer\" *ngFor=\" let notificationTo of notificationList \" [style.font-weight]=\"getValidationColor(notificationTo.IsAcknowledged)\">\r\n <td (click)=\"markAsReadToNotification(notificationTo)\">{{notificationTo.RaisedByUserName}}</td>\r\n <td (click)=\"markAsReadToNotification(notificationTo)\">{{notificationTo.AlertComment}}</td>\r\n <td (click)=\"markAsReadToNotification(notificationTo)\">{{notificationTo.RaisedOnStr}}</td>\r\n <td>\r\n <p style=\"width: 50px;margin: 0px\">\r\n <i class=\"fa fa-trash btn-custom-icon\" style=\"width:20px; height:20px;margin-right: 3px;\" aria-hidden=\"true\" (click)=\"markAsReadToNotification(notificationTo, true)\"></i>\r\n </p>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n</div>" }] } ]; /** @nocollapse */ NotificationComponent.ctorParameters = function () { return [ { type: NotificationServices }, { type: Router }, { type: ActivatedRoute } ]; }; NotificationComponent.propDecorators = { URL: [{ type: Input }] }; return NotificationComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ /** @type {?} */ var appRoutes = [ { path: '', component: NotificationComponent } ]; var NotifyModule = /** @class */ (function () { function NotifyModule() { } NotifyModule.decorators = [ { type: NgModule, args: [{ declarations: [ NotificationComponent ], imports: [ BrowserModule, HttpModule, RouterModule.forRoot(appRoutes) ], providers: [NotificationServices], exports: [NotificationComponent] },] } ]; return NotifyModule; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ export { NotifyModule, NotificationComponent as ɵa, NotificationServices as ɵb }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVnYS1mb290ZXItbG9nby5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vdmVnYS1mb290ZXItbG9nby9hcHAvbm90aWZpY2F0aW9uL21vZGVsL25vdGlmaWNhdGlvblRPLnRzIiwibmc6Ly92ZWdhLWZvb3Rlci1sb2dvL2FwcC9ub3RpZmljYXRpb24vc2VydmljZXMvbm90aWZpY2F0aW9uX3NlcnZpY2VzLnRzIiwibmc6Ly92ZWdhLWZvb3Rlci1sb2dvL2FwcC9ub3RpZmljYXRpb24vY29tcG9uZW50L25vdGlmaWNhdGlvbl9jb21wb25lbnRzLnRzIiwibmc6Ly92ZWdhLWZvb3Rlci1sb2dvL2FwcC9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uX21vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvblRPIHtcclxuICAgIHB1YmxpYyBJZEFsZXJ0VXNlcj86IG51bWJlclxyXG4gICAgcHVibGljIEFsZXJ0SW5zdGFuY2VJZD86IG51bWJlclxyXG4gICAgcHVibGljIFVzZXJJZD86IG51bWJlclxyXG4gICAgcHVibGljIFJvbGVJZD86IG51bWJlclxyXG4gICAgcHVibGljIFJhaXNlZEJ5VXNlck5hbWU/OiBzdHJpbmdcclxuICAgIHB1YmxpYyBBbGVydENvbW1lbnQ/OiBzdHJpbmdcclxuICAgIHB1YmxpYyBSYWlzZWRPblN0cj86IHN0cmluZ1xyXG4gICAgcHVibGljIFJhaXNlZE9uPzogRGF0ZVxyXG4gICAgcHVibGljIElzQWNrbm93bGVkZ2VkPzogbnVtYmVyXHJcbiAgICBwdWJsaWMgSXNSZXNldGVkPzogbnVtYmVyXHJcbiAgICBwdWJsaWMgTmF2aWdhdGlvblVybD86IHN0cmluZ1xyXG5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJUTyB7XHJcbiAgICBwdWJsaWMgVXNlckxvZ2luPzogc3RyaW5nXHJcbiAgICBwdWJsaWMgSWRVc2VyPzogbnVtYmVyXHJcbiAgICBwdWJsaWMgVXNlclBhc3N3ZD86IHN0cmluZ1xyXG4gICAgcHVibGljIFVzZXJEaXNwbGF5TmFtZT86IHN0cmluZ1xyXG4gICAgcHVibGljIFJlZ2lzdGVyZWREZXZpY2VJZD86IG51bWJlclxyXG4gICAgcHVibGljIERlYWN0aXZhdGVkT24/OiBudW1iZXJcclxuICAgIHB1YmxpYyBEZWFjdGl2YXRlZEJ5PzogbnVtYmVyXHJcbiAgICBwdWJsaWMgSW1laU51bWJlcj86IG51bWJlclxyXG4gICAgLy8gcHVibGljIFRva2VuPyA6IHN0cmluZ1xyXG4gICAgcHVibGljIElzQWN0aXZlPzogbnVtYmVyXHJcbiAgICBwdWJsaWMgQ3JlYXRlZEJ5Pzogc3RyaW5nXHJcbiAgICBwdWJsaWMgQ3JlYXRlZE9uPzogc3RyaW5nXHJcbiAgICBwdWJsaWMgVXBkYXRlZEJ5Pzogc3RyaW5nXHJcbiAgICBwdWJsaWMgVXBkYXRlZE9uPzogc3RyaW5nXHJcbiAgICBwdWJsaWMgdXNlcm5hbWU/OiBzdHJpbmdcclxuICAgIHB1YmxpYyBwYXNzd29yZD86IHN0cmluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFJlc3VsdE1lc3NhZ2Uge1xyXG4gICAgcHVibGljIEV4Y2VwdGlvbj86IEVycm9yXHJcbiAgICBwdWJsaWMgVGFnPzogT2JqZWN0XHJcbiAgICBwdWJsaWMgTWVzc2FnZVR5cGU/OiBhbnlcclxuICAgIHB1YmxpYyBUZXh0Pzogc3RyaW5nXHJcbiAgICBwdWJsaWMgUmVzdWx0PzogbnVtYmVyXHJcbiAgICBwdWJsaWMgRGlzcGxheU1lc3NhZ2U/OiBzdHJpbmdcclxuXHJcbn1cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQ29tbWFvblVzZXJUT3tcclxuICAgIHB1YmxpYyBVc2VyTG9naW4/IDogc3RyaW5nXHJcbiAgICBwdWJsaWMgSWRVc2VyPyA6IG51bWJlclxyXG4gICAgcHVibGljIElzQWN0aXZlPyA6IG51bWJlclxyXG4gICAgcHVibGljIFVzZXJQYXNzd2Q/IDogc3RyaW5nXHJcbiAgICBwdWJsaWMgVXNlclJvbGVMaXN0PyA6IFVzZXJSb2xlVE9bXVxyXG4gICAgcHVibGljIExvZ2luVE8/IDogTG9naW5UT1xyXG4gICAgcHVibGljIFBlcnNvbklkPyA6IG51bWJlclxyXG4gICAgcHVibGljIEFkZHJlc3NJZD8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBPcmdhbml6YXRpb25JZD8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBPcmdhbml6YXRpb25OYW1lPyA6IHN0cmluZ1xyXG4gICAgcHVibGljIFVzZXJEaXNwbGF5TmFtZT8gOiBzdHJpbmdcclxuICAgIHB1YmxpYyBNZW51U3RydWN0dXJlVE9MaXN0PyA6IE1lbnVJbmZvcm1hdGlvbltdXHJcbiAgICBwdWJsaWMgU3lzRWxlQWNjZXNzRENUPyA6IHt9XHJcbiAgICBwdWJsaWMgUmVnaXN0ZXJlZERldmljZUlkPyA6IG51bWJlclxyXG4gICAgcHVibGljIElzU3BlY2lhbENuZj8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBVc2VyUGVyc29uVE8/IDogUGVyc29uSW5mbyA9IG5ldyBQZXJzb25JbmZvKCk7XHJcbiAgICBwdWJsaWMgVXNlckV4dFRPPyA6IFVzZXJFeHRUTyBcclxuICAgIHB1YmxpYyBJbWVpTnVtYmVyPyA6IHN0cmluZ1xyXG4gICAgcHVibGljIFJlc3VsdD8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBUYWc/IDogb2JqZWN0XHJcbiAgICBwdWJsaWMgTW9kdWxlVE9MaXN0PzpNb2R1bGVUT1tdO1xyXG5cclxuICAgIFxyXG59XHJcbmV4cG9ydCBjbGFzcyBQZXJzb25JbmZvXHJcbntcclxuICAgICAgIFxyXG4gICAgcHVibGljIElkUGVyc29uPzpudW1iZXI7XHJcbiAgICBwdWJsaWMgU2FsdXRhdGlvbklkPzpudW1iZXI7XHJcbiAgICBwdWJsaWMgU2FsdXRhdGlvbk5hbWU/OnN0cmluZztcclxuICAgIHB1YmxpYyBNb2JpbGVObz86c3RyaW5nOyAgICAgXHJcbiAgICBwdWJsaWMgQWx0ZXJuYXRlTW9iTm8/OnN0cmluZzsgICBcclxuICAgIHB1YmxpYyBQaG9uZU5vPzpzdHJpbmc7ICAgXHJcbiAgICBwdWJsaWMgRGF0ZU9mQmlydGg/OkRhdGU7ICAgXHJcbiAgICBwdWJsaWMgRmlyc3ROYW1lPzpzdHJpbmc7ICAgXHJcbiAgICBwdWJsaWMgTWlkTmFtZT86c3RyaW5nOyAgIFxyXG4gICAgcHVibGljIExhc3ROYW1lPzpzdHJpbmc7ICAgXHJcbiAgICBwdWJsaWMgUHJpbWFyeUVtYWlsPzpzdHJpbmc7ICAgXHJcbiAgICBwdWJsaWMgQWx0ZXJuYXRlRW1haWw/OnN0cmluZzsgICBcclxuICAgIHB1YmxpYyBDb21tZW50cz86c3RyaW5nOyAgIFxyXG4gICAgcHVibGljIFNlcU5vPzpudW1iZXI7ICAgXHJcbiAgICBwdWJsaWMgUGhvdG9CYXNlNjQ/OnN0cmluZztcclxuICAgIHB1YmxpYyBEYXRlT2ZCaXJ0aFN0cj86c3RyaW5nO1xyXG4gICAgcHVibGljIERvYkRheT86bnVtYmVyO1xyXG4gICAgcHVibGljIERvYk1vbnRoPzpudW1iZXI7XHJcbiAgICBwdWJsaWMgRG9iWWVhcj86bnVtYmVyO1xyXG4gICAgcHVibGljIERpc3BsYXlOYW1lPzpzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJSb2xlVE97XHJcbiAgICBwdWJsaWMgSWRVc2VyUm9sZT8gOiBzdHJpbmdcclxuICAgIHB1YmxpYyBVc2VySWQ/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgUm9sZUlkPyA6IG51bWJlclxyXG4gICAgcHVibGljIElzQWN0aXZlPyA6IG51bWJlclxyXG4gICAgcHVibGljIENyZWF0ZWRCeT8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBDcmVhdGVkT24/IDogRGF0ZVxyXG4gICAgcHVibGljIFJvbGVEZXNjPyA6IHN0cmluZ1xyXG4gICAgcHVibGljIEVuYWJsZUFyZWFBbGxvYz86bnVtYmVyXHJcbn1cclxuZXhwb3J0IGNsYXNzIExvZ2luVE97XHJcbiAgICBwdWJsaWMgSWRMb2dpbj8gOiBzdHJpbmdcclxuICAgIHB1YmxpYyBVc2VySWQ/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgTG9naW5EYXRlPyA6IG51bWJlclxyXG4gICAgcHVibGljIExvZ291dERhdGU/IDogc3RyaW5nXHJcbiAgICBwdWJsaWMgTG9naW5JUD8gOiBzdHJpbmdcclxuICAgIHB1YmxpYyBMb25naXR1ZGU/IDogc3RyaW5nXHJcbiAgICBwdWJsaWMgTGF0aXR1ZGU/IDogc3RyaW5nXHJcbiAgICBcclxufVxyXG5cclxuLy9TYW5qYXkgWzIwMTctMDYtMDZdIEZvciBSZWdpb25hbCBNYW5hZ2VyIGFuZCBGaWVsZCBPZmZpY2VyIERpZmZlcmVudCBDJkZzIGFyZWEgaXMgYWxsb2NhdGVkXHJcbmV4cG9ydCBjbGFzcyBVc2VyQXJlYUFsbG9jYXRpb25UT3tcclxuICAgIHB1YmxpYyBJZEFyZWFBbGxvY0R0bD8gOiBOdW1iZXJcclxuICAgIHB1YmxpYyBVc2VySWQ/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgQ25mT3JnSWQ/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgRGlzdHJpY3RJZD8gOiBOdW1iZXJcclxuICAgIHB1YmxpYyBDcmVhdGVkQnk/IDogTnVtYmVyXHJcbiAgICBwdWJsaWMgSXNBY3RpdmU/IDogTnVtYmVyXHJcbiAgICBwdWJsaWMgQ3JlYXRlZE9uPyA6IERhdGVcclxuICAgIHB1YmxpYyBDcmVhdGVkT25TdHI/IDogU3RyaW5nXHJcbiAgICBwdWJsaWMgUmVtYXJrPyA6IFN0cmluZ1xyXG4gICAgcHVibGljIFVzZXJOYW1lPyA6IFN0cmluZ1xyXG4gICAgcHVibGljIERpc3RyaWN0TmFtZT8gOiBTdHJpbmdcclxuICAgIHB1YmxpYyBDbmZPcmdOYW1lPyA6IFN0cmluZyAgICBcclxuICAgIFxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlckV4dFRPe1xyXG4gICAgcHVibGljIFVzZXJJZD8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBQZXJzb25JZD8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBPcmdhbml6YXRpb25JZD8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBBZGRyZXNzSWQ/IDogTnVtYmVyXHJcbiAgICBwdWJsaWMgQ3JlYXRlZEJ5PyA6IE51bWJlclxyXG4gICAgcHVibGljIENvbW1lbnRzPyA6IHN0cmluZ1xyXG4gICAgcHVibGljIENyZWF0ZWRPbj8gOiBEYXRlXHJcblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgIE1lbnVJbmZvcm1hdGlvblxyXG57XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgIHB1YmxpYyBJZE1lbnU6bnVtYmVyLFxyXG4gICAgICAgcHVibGljIFN5c0VsZW1lbnRJZDpudW1iZXIsXHJcbiAgICAgICBwdWJsaWMgTWVudU5hbWU6c3RyaW5nLFxyXG4gICAgICAgcHVibGljIE1lbnVEZXNjOnN0cmluZyxcclxuICAgICAgIHB1YmxpYyBQYXJlbnRNZW51SWQ6bnVtYmVyLFxyXG4gICAgICAgcHVibGljIE1vZHVsZUlkOm51bWJlcixcclxuICAgICAgIHB1YmxpYyBTZXJObzpudW1iZXIsXHJcbiAgICAgICBwdWJsaWMgQ3JlYXRlZE9uOkRhdGUsXHJcbiAgICAgICBwdWJsaWMgU3ViTWVudUxpc3QgOiBNZW51SW5mb3JtYXRpb25bXSAsXHJcbiAgICAgICBwdWJsaWMgTWVudUFjdGlvbjpzdHJpbmcsXHJcbiAgICAgICBwdWJsaWMgTWVudUl0ZW1JY29uOnN0cmluZywgXHJcbiAgICAgICBwdWJsaWMgTWVudVNob3J0Q3V0OnN0cmluZywgXHJcbiAgICAgIC8vIHB1YmxpYyBJbWdQYXRoOnN0cmluZ1xyXG4gICAgICAgXHJcbiAgICAgICAgKXt9XHJcblxyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIE1vZHVsZVRPXHJcbntcclxuICAgIElkTW9kdWxlPzpudW1iZXJcclxubW9kdWxlTmFtZT86c3RyaW5nXHJcbm1vZHVsZURlc2M/OnN0cmluZ1xyXG5jcmVhdGVkT24/OnN0cmluZ1xyXG5OYXZpZ2F0ZVVybD86c3RyaW5nXHJcbklzQWN0aXZlPzpudW1iZXJcclxuTG9nb1VybD86c3RyaW5nXHJcbkFuZHJvaWRVcmw/OnN0cmluZ1xyXG5Jc1N1YnNjcmliZT86bnVtYmVyO1xyXG59XHJcblxyXG5cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwLCBIZWFkZXJzLCBSZXNwb25zZSwgUmVxdWVzdE9wdGlvbnMsIEJhc2VSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2h0dHAnO1xyXG5pbXBvcnQgeyBVc2VyVE8sIE5vdGlmaWNhdGlvblRPLCBSZXN1bHRNZXNzYWdlLCBDb21tYW9uVXNlclRPIH0gZnJvbSAnLi4vbW9kZWwvbm90aWZpY2F0aW9uVE8nXHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHJldHJ5LG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IEh0dHBIZWFkZXJzIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCAqIGFzIENyeXB0b0pTIGZyb20gXCJjcnlwdG8tanNcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSxFcnJvck9ic2VydmVyfSBmcm9tICdyeGpzJztcclxuZXhwb3J0IGNvbnN0IGduR2V0QWxsQWN0aXZlQWxlcnRMaXN0ID0gXCJOb3RpZnkvR2V0QWxsQWN0aXZlQWxlcnRMaXN0P3VzZXJJZD1cIjtcclxuZXhwb3J0IGNvbnN0IGduUG9zdEFsZXJ0QWNrbm93bGVkZ2VtZW50ID0gXCJOb3RpZnkvUG9zdEFsZXJ0QWNrbm93bGVkZ2VtZW50XCI7XHJcbmV4cG9ydCBjb25zdCBnblBvc3RSZXNldEFsbEFsZXJ0cyA9IFwiTm90aWZ5L1Bvc3RSZXNldEFsbEFsZXJ0c1wiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uU2VydmljZXMge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwKSB7IH1cclxuICAgIHVzZXJUTzogQ29tbWFvblVzZXJUTyA9IHt9XHJcbiAgICByZXN1bHRNZXNzYWdlOiBSZXN1bHRNZXNzYWdlID0gbmV3IFJlc3VsdE1lc3NhZ2U7XHJcbiAgICBnZXRVc2VyVE9Gcm9tTG9jYWxTdG9yYWdlKCk6IENvbW1hb25Vc2VyVE8ge1xyXG4gICAgICAgIGxldCB1c2VyVG86IENvbW1hb25Vc2VyVE8gPSB7fTtcclxuICAgICAgICB1c2VyVG8gPSBKU09OLnBhcnNlKHRoaXMuZGVjcnlwdGlvbihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImN1cnJlbnRVc2VyXCIpKSk7XHJcbiAgICAgICAgaWYgKHVzZXJUbyA9PSB1bmRlZmluZWQgfHwgdXNlclRvID09IG51bGwpIHtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVzZXJUbztcclxuICAgIH1cclxuICAgIGdldEFsZXJ0Rm9yTm90aWZ5KFVybCkge1xyXG4gICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgaWYgKHRoaXMudXNlclRPID09IG51bGwgJiYgdGhpcy51c2VyVE8gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZXRBbGxBY3RpdmVOb3RpZmljYXRpb24odGhpcy51c2VyVE8sVXJsKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdiA9IHJlcy5maWx0ZXIocCA9PiBwLklzQWNrbm93bGVkZ2VkID09IDApLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJnTm90aWZpY2F0aW9uXCIpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJnTm90aWZpY2F0aW9uXCIpLmlubmVyVGV4dCA9IHYgPT0gMCA/ICcnIDogdi50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4geyB9XHJcbiAgICAgICAgKVxyXG5cclxuICAgIH1cclxuICAgIGdldEFsbEFjdGl2ZU5vdGlmaWNhdGlvbihVc2VyVG86IENvbW1hb25Vc2VyVE8sbWFzdGVyQmFzZVVybDpzdHJpbmcpOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvblRPW10+IHtcclxuICAgICAgICAvL2xldCBrZXlzID0gXCJodHRwczovL3NpbXBseWRlbGl2ZXJkZW1vLnZlZ2Fpbm5vdmF0aW9ucy5jby5pbi9tYWRoYXZzaW1wbGlkZWxpdmVyYXBpL2FwaS9Ob3RpZnkvR2V0QWxsQWN0aXZlQWxlcnRMaXN0P3VzZXJJZD0xJnJvbGVJZD0xXCJcclxuICAgICAgICAvL2xldCBrZXlzID0gbWFzdGVyQmFzZVVybCArIGduR2V0QWxsQWN0aXZlQWxlcnRMaXN0ICsgVXNlclRvLklkVXNlciArIFwiJnJvbGVJZD1cIiArIFVzZXJUby5Vc2VyUm9sZUxpc3RbMF0uUm9sZUlkXHJcbiAgICAgICAgbGV0IGtleXMgPSBtYXN0ZXJCYXNlVXJsICsgXCJOb3RpZnkvR2V0QWxsQWN0aXZlQWxlcnRMaXN0P3VzZXJJZD0xJnJvbGVJZD0xXCI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAgICAgICAuZ2V0KGtleXMpLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZS5qc29uKCkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwb3N0QWxlcnRBY2tub3dsZWRnZW1lbnQobm90aWZpY2F0aW9uVG86IE5vdGlmaWNhdGlvblRPXHJcbiAgICAgICAgLCBsb2dpbklkOiBudW1iZXIsVVJMOnN0cmluZykge1xyXG4gICAgICAgIHZhciBwYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIGFsZXJ0VXNlcnNUTzogbm90aWZpY2F0aW9uVG8sXHJcbiAgICAgICAgICAgIGxvZ2luVXNlcklkOiBsb2dpbklkXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgYm9keVN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcyk7XHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSk7XHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBuZXcgUmVxdWVzdE9wdGlvbnMoeyBoZWFkZXJzOiBoZWFkZXJzIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChVUkwgKyBnblBvc3RBbGVydEFja25vd2xlZGdlbWVudCwgYm9keVN0cmluZywgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdEFsbEFsZXJ0QWNrbm93bGVkZ2VtZW50KHVzZXJUbzogQ29tbWFvblVzZXJUTyxVUkw6c3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHBhcmFtcyA9IHtcclxuICAgICAgICAgICAgbG9naW5Vc2VySWQ6IHVzZXJUby5JZFVzZXIsXHJcbiAgICAgICAgICAgIHJvbGVJZDogdXNlclRvLlVzZXJSb2xlTGlzdFswXS5Sb2xlSWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCBib2R5U3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zKTtcclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcclxuICAgICAgICBsZXQgb3B0aW9ucyA9IG5ldyBSZXF1ZXN0T3B0aW9ucyh7IGhlYWRlcnM6IGhlYWRlcnMgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFVSTCArIGduUG9zdFJlc2V0QWxsQWxlcnRzLCBib2R5U3RyaW5nLCBvcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBlbmNyeXB0aW9uKGRhdGEpIHtcclxuICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XHJcbiAgICAgICAgLy8gRW5jcnlwdFxyXG4gICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQoZGF0YS50b1N0cmluZygpLCBcInNlY3JldCBrZXkgMTIzXCIpO1xyXG4gICAgICAgIHJldHVybiBjaXBoZXJ0ZXh0LnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBkZWNyeXB0aW9uKGRhdGEpIHtcclxuICAgICAgICAvLyBEZWNyeXB0XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgdmFyIGJ5dGVzID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoZGF0YSwgXCJzZWNyZXQga2V5IDEyM1wiKTtcclxuICAgICAgICAgICAgdmFyIHBsYWludGV4dCA9IGJ5dGVzLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHBsYWludGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBJbnB1dCwgUGlwZSwgSW5qZWN0YWJsZSwgUGlwZVRyYW5zZm9ybSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgfSBmcm9tICdyeGpzL1J4JztcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZXMgfSBmcm9tICcuLi9zZXJ2aWNlcy9ub3RpZmljYXRpb25fc2VydmljZXMnO1xyXG5pbXBvcnQgeyBVc2VyVE8sIE5vdGlmaWNhdGlvblRPLCBSZXN1bHRNZXNzYWdlLCBDb21tYW9uVXNlclRPIH0gZnJvbSAnLi4vbW9kZWwvbm90aWZpY2F0aW9uVE8nXHJcbmltcG9ydCB7IFJvdXRlciwgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG4vL2ltcG9ydCB7IExpc3RTZXJ2aWNlLCBJTG9hZGVyIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9zZXJ2aWNlL2dldERyb3Bkb3duTGlzdC5zZXJ2aWNlXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ25vdGlmaWNhdGlvbicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4uL25vdGlmaWNhdGlvbi5odG1sJyxcclxuXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIHVzZXJUTzogQ29tbWFvblVzZXJUTyA9IHt9O1xyXG4gICAgQElucHV0KCkgVVJMOiBzdHJpbmc7XHJcbiAgICByZXN1bHRNZXNzYWdlOiBSZXN1bHRNZXNzYWdlID0gbmV3IFJlc3VsdE1lc3NhZ2U7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNvbW1hbjogTm90aWZpY2F0aW9uU2VydmljZXNcclxuICAgICAgICAsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICAgICAgICAsIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy51c2VyVE8gPSB0aGlzLmNvbW1hbi5nZXRVc2VyVE9Gcm9tTG9jYWxTdG9yYWdlKCk7XHJcbiAgICB9XHJcbiAgICBub3RpZmljYXRpb25MaXN0OiBOb3RpZmljYXRpb25UT1tdID0gW107XHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNvbW1hbi5nZXRBbGVydEZvck5vdGlmeSh0aGlzLlVSTCk7XHJcbiAgICAgICAgdGhpcy5nZXROb3RpZmljYXRpb25MaXN0QnlVc2VyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Tm90aWZpY2F0aW9uTGlzdEJ5VXNlcigpIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMuY29tbWFuLmdldEFsbEFjdGl2ZU5vdGlmaWNhdGlvbih0aGlzLnVzZXJUTywgdGhpcy5VUkwpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgbm90aWZpY2F0aW9uUmVzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uTGlzdCA9IG5vdGlmaWNhdGlvblJlcztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnIgOiAnICsgZXJyKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgbWFya0FzUmVhZFRvTm90aWZpY2F0aW9uKGFsZXJ0TWVzc2FnZVRvOiBOb3RpZmljYXRpb25UTywgaXNSZXNldDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgZGVidWdnZXJcclxuICAgICAgICBpZiAoYWxlcnRNZXNzYWdlVG8uSXNBY2tub3dsZWRnZWQgIT0gMCAmJiAhaXNSZXNldCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1Jlc2V0KSB7XHJcbiAgICAgICAgICAgIGFsZXJ0TWVzc2FnZVRvLklzUmVzZXRlZCA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29tbWFuLnBvc3RBbGVydEFja25vd2xlZGdlbWVudChhbGVydE1lc3NhZ2VUbywgdGhpcy51c2VyVE8uSWRVc2VyLCB0aGlzLlVSTCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICB2UmVzID0+IHtcclxuICAgICAgICAgICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgICAgICAgICAvLyBpZiAodGhpcy5yZXN1bHRNZXNzYWdlLk1lc3NhZ2VUeXBlID09IDEgJiYgdGhpcy5yZXN1bHRNZXNzYWdlLlJlc3VsdCA9PSAxKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tYW4uZ2V0QWxlcnRGb3JOb3RpZnkodGhpcy5VUkwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXROb3RpZmljYXRpb25MaXN0QnlVc2VyKCk7XHJcbiAgICAgICAgICAgICAgICAvL31cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgTXNnIDogXCIgKyBlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXRWYWxpZGF0aW9uQ29sb3IoaXNBY2tub3dlbGRlZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzQWNrbm93ZWxkZWQgPT0gMCA/ICdib2xkJyA6ICdub3JtYWwnXHJcblxyXG4gICAgfVxyXG4gICAgcmVzZXRBbGxOb3RpZmljYXRpb24oKSB7XHJcbiAgICAgICAgLy90aGlzLnNzLnNob3dMb2FkZXIoKTtcclxuICAgICAgICB0aGlzLmNvbW1hbi5wb3N0QWxsQWxlcnRBY2tub3dsZWRnZW1lbnQodGhpcy51c2VyVE8sIHRoaXMuVVJMKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIHZSZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnJlc3VsdE1lc3NhZ2UgPSB2UmVzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzdWx0TWVzc2FnZS5NZXNzYWdlVHlwZSA9PSAxICYmIHRoaXMucmVzdWx0TWVzc2FnZS5SZXN1bHQgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuLmdldEFsZXJ0Rm9yTm90aWZ5KHRoaXMuVVJMKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkxpc3QgPSBbXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgTXNnIDogXCIgKyBlcnIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICByZWRpcmVjdEZ1bihhbGVydE1lc3NhZ2VUbzogTm90aWZpY2F0aW9uVE8pIHtcclxuICAgICAgICBpZiAoYWxlcnRNZXNzYWdlVG8uTmF2aWdhdGlvblVybCAhPSBudWxsIHx8IGFsZXJ0TWVzc2FnZVRvLk5hdmlnYXRpb25VcmwgIT0gXCJcIikge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nICsgYWxlcnRNZXNzYWdlVG8uTmF2aWdhdGlvblVybF0pO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgfVxyXG59IiwiXHJcbmltcG9ydCB7IEJyb3dzZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOb3RpZmljYXRpb25Db21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50L25vdGlmaWNhdGlvbl9jb21wb25lbnRzJ1xyXG5pbXBvcnQge05vdGlmaWNhdGlvblNlcnZpY2VzfSBmcm9tICcuL3NlcnZpY2VzL25vdGlmaWNhdGlvbl9zZXJ2aWNlcydcclxuaW1wb3J0IHsgSHR0cE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2h0dHAnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZSwgUm91dGVzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5jb25zdCBhcHBSb3V0ZXM6IFJvdXRlcyA9IFtcclxuICAgIHtwYXRoOiAnJywgY29tcG9uZW50OiBOb3RpZmljYXRpb25Db21wb25lbnR9XHJcbiAgXTtcclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIE5vdGlmaWNhdGlvbkNvbXBvbmVudFxyXG4gIF0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQnJvd3Nlck1vZHVsZSxIdHRwTW9kdWxlLFJvdXRlck1vZHVsZS5mb3JSb290KGFwcFJvdXRlcylcclxuICBdLFxyXG4gIHByb3ZpZGVyczpbTm90aWZpY2F0aW9uU2VydmljZXNdLFxyXG4gIGV4cG9ydHM6IFtOb3RpZmljYXRpb25Db21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOb3RpZnlNb2R1bGUgeyB9XHJcbiJdLCJuYW1lcyI6WyJDcnlwdG9KUy5BRVMiLCJDcnlwdG9KUy5lbmMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0EsQUFtQ0EsSUFBQTs7O3dCQXBDQTtJQTRDQyxDQUFBOzs7Ozs7QUM1Q0Q7QUFTQSxJQUFhLDBCQUEwQixHQUFHLGlDQUFpQyxDQUFDOztBQUM1RSxJQUFhLG9CQUFvQixHQUFHLDJCQUEyQixDQUFDOztJQUk1RCw4QkFBb0IsSUFBVTtRQUFWLFNBQUksR0FBSixJQUFJLENBQU07c0JBQ04sRUFBRTs2QkFDSyxJQUFJLGFBQWE7S0FGYjs7OztJQUduQyx3REFBeUI7OztJQUF6Qjs7UUFDSSxJQUFJLE1BQU0sR0FBa0IsRUFBRSxDQUFDO1FBQy9CLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFLMUUsT0FBTyxNQUFNLENBQUM7S0FDakI7Ozs7O0lBQ0QsZ0RBQWlCOzs7O0lBQWpCLFVBQWtCLEdBQUc7UUFDakIsU0FBUTtRQUNSLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7WUFDakQsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUNwRCxVQUFBLEdBQUc7O1lBQ0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxjQUFjLElBQUksQ0FBQyxHQUFBLENBQUMsQ0FBQyxNQUFNLENB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