UNPKG

vega-footer-logo

Version:

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

353 lines (343 loc) 41.3 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/http'), require('rxjs/operators'), require('crypto-js'), require('@angular/router'), require('@angular/platform-browser')) : typeof define === 'function' && define.amd ? define('vega-footer-logo', ['exports', '@angular/core', '@angular/http', 'rxjs/operators', 'crypto-js', '@angular/router', '@angular/platform-browser'], factory) : (factory((global['vega-footer-logo'] = {}),global.ng.core,global.ng.http,global.rxjs.operators,global.CryptoJS,global.ng.router,global.ng.platformBrowser)); }(this, (function (exports,core,http,operators,CryptoJS,router,platformBrowser) { 'use strict'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var ResultMessage = (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 = (function () { function NotificationServices(http$$1) { this.http = http$$1; 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(operators.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 http.Headers({ 'Content-Type': 'application/json' }); /** @type {?} */ var options = new http.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 http.Headers({ 'Content-Type': 'application/json' }); /** @type {?} */ var options = new http.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 = CryptoJS.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 = CryptoJS.AES.decrypt(data, "secret key 123"); /** @type {?} */ var plaintext = bytes.toString(CryptoJS.enc.Utf8); return plaintext; } return null; }; NotificationServices.decorators = [ { type: core.Injectable } ]; /** @nocollapse */ NotificationServices.ctorParameters = function () { return [ { type: http.Http } ]; }; return NotificationServices; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var NotificationComponent = (function () { function NotificationComponent(comman, router$$1, route) { this.comman = comman; this.router = router$$1; 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: core.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.Router }, { type: router.ActivatedRoute } ]; }; NotificationComponent.propDecorators = { URL: [{ type: core.Input }] }; return NotificationComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ /** @type {?} */ var appRoutes = [ { path: '', component: NotificationComponent } ]; var NotifyModule = (function () { function NotifyModule() { } NotifyModule.decorators = [ { type: core.NgModule, args: [{ declarations: [ NotificationComponent ], imports: [ platformBrowser.BrowserModule, http.HttpModule, router.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 */ exports.NotifyModule = NotifyModule; exports.ɵa = NotificationComponent; exports.ɵb = NotificationServices; Object.defineProperty(exports, '__esModule', { value: true }); }))); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVnYS1mb290ZXItbG9nby51bWQuanMubWFwIiwic291cmNlcyI6WyJuZzovL3ZlZ2EtZm9vdGVyLWxvZ28vYXBwL25vdGlmaWNhdGlvbi9tb2RlbC9ub3RpZmljYXRpb25UTy50cyIsIm5nOi8vdmVnYS1mb290ZXItbG9nby9hcHAvbm90aWZpY2F0aW9uL3NlcnZpY2VzL25vdGlmaWNhdGlvbl9zZXJ2aWNlcy50cyIsIm5nOi8vdmVnYS1mb290ZXItbG9nby9hcHAvbm90aWZpY2F0aW9uL2NvbXBvbmVudC9ub3RpZmljYXRpb25fY29tcG9uZW50cy50cyIsIm5nOi8vdmVnYS1mb290ZXItbG9nby9hcHAvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbl9tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25UTyB7XHJcbiAgICBwdWJsaWMgSWRBbGVydFVzZXI/OiBudW1iZXJcclxuICAgIHB1YmxpYyBBbGVydEluc3RhbmNlSWQ/OiBudW1iZXJcclxuICAgIHB1YmxpYyBVc2VySWQ/OiBudW1iZXJcclxuICAgIHB1YmxpYyBSb2xlSWQ/OiBudW1iZXJcclxuICAgIHB1YmxpYyBSYWlzZWRCeVVzZXJOYW1lPzogc3RyaW5nXHJcbiAgICBwdWJsaWMgQWxlcnRDb21tZW50Pzogc3RyaW5nXHJcbiAgICBwdWJsaWMgUmFpc2VkT25TdHI/OiBzdHJpbmdcclxuICAgIHB1YmxpYyBSYWlzZWRPbj86IERhdGVcclxuICAgIHB1YmxpYyBJc0Fja25vd2xlZGdlZD86IG51bWJlclxyXG4gICAgcHVibGljIElzUmVzZXRlZD86IG51bWJlclxyXG4gICAgcHVibGljIE5hdmlnYXRpb25Vcmw/OiBzdHJpbmdcclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyVE8ge1xyXG4gICAgcHVibGljIFVzZXJMb2dpbj86IHN0cmluZ1xyXG4gICAgcHVibGljIElkVXNlcj86IG51bWJlclxyXG4gICAgcHVibGljIFVzZXJQYXNzd2Q/OiBzdHJpbmdcclxuICAgIHB1YmxpYyBVc2VyRGlzcGxheU5hbWU/OiBzdHJpbmdcclxuICAgIHB1YmxpYyBSZWdpc3RlcmVkRGV2aWNlSWQ/OiBudW1iZXJcclxuICAgIHB1YmxpYyBEZWFjdGl2YXRlZE9uPzogbnVtYmVyXHJcbiAgICBwdWJsaWMgRGVhY3RpdmF0ZWRCeT86IG51bWJlclxyXG4gICAgcHVibGljIEltZWlOdW1iZXI/OiBudW1iZXJcclxuICAgIC8vIHB1YmxpYyBUb2tlbj8gOiBzdHJpbmdcclxuICAgIHB1YmxpYyBJc0FjdGl2ZT86IG51bWJlclxyXG4gICAgcHVibGljIENyZWF0ZWRCeT86IHN0cmluZ1xyXG4gICAgcHVibGljIENyZWF0ZWRPbj86IHN0cmluZ1xyXG4gICAgcHVibGljIFVwZGF0ZWRCeT86IHN0cmluZ1xyXG4gICAgcHVibGljIFVwZGF0ZWRPbj86IHN0cmluZ1xyXG4gICAgcHVibGljIHVzZXJuYW1lPzogc3RyaW5nXHJcbiAgICBwdWJsaWMgcGFzc3dvcmQ/OiBzdHJpbmdcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBSZXN1bHRNZXNzYWdlIHtcclxuICAgIHB1YmxpYyBFeGNlcHRpb24/OiBFcnJvclxyXG4gICAgcHVibGljIFRhZz86IE9iamVjdFxyXG4gICAgcHVibGljIE1lc3NhZ2VUeXBlPzogYW55XHJcbiAgICBwdWJsaWMgVGV4dD86IHN0cmluZ1xyXG4gICAgcHVibGljIFJlc3VsdD86IG51bWJlclxyXG4gICAgcHVibGljIERpc3BsYXlNZXNzYWdlPzogc3RyaW5nXHJcblxyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIENvbW1hb25Vc2VyVE97XHJcbiAgICBwdWJsaWMgVXNlckxvZ2luPyA6IHN0cmluZ1xyXG4gICAgcHVibGljIElkVXNlcj8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBJc0FjdGl2ZT8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBVc2VyUGFzc3dkPyA6IHN0cmluZ1xyXG4gICAgcHVibGljIFVzZXJSb2xlTGlzdD8gOiBVc2VyUm9sZVRPW11cclxuICAgIHB1YmxpYyBMb2dpblRPPyA6IExvZ2luVE9cclxuICAgIHB1YmxpYyBQZXJzb25JZD8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBBZGRyZXNzSWQ/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgT3JnYW5pemF0aW9uSWQ/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgT3JnYW5pemF0aW9uTmFtZT8gOiBzdHJpbmdcclxuICAgIHB1YmxpYyBVc2VyRGlzcGxheU5hbWU/IDogc3RyaW5nXHJcbiAgICBwdWJsaWMgTWVudVN0cnVjdHVyZVRPTGlzdD8gOiBNZW51SW5mb3JtYXRpb25bXVxyXG4gICAgcHVibGljIFN5c0VsZUFjY2Vzc0RDVD8gOiB7fVxyXG4gICAgcHVibGljIFJlZ2lzdGVyZWREZXZpY2VJZD8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBJc1NwZWNpYWxDbmY/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgVXNlclBlcnNvblRPPyA6IFBlcnNvbkluZm8gPSBuZXcgUGVyc29uSW5mbygpO1xyXG4gICAgcHVibGljIFVzZXJFeHRUTz8gOiBVc2VyRXh0VE8gXHJcbiAgICBwdWJsaWMgSW1laU51bWJlcj8gOiBzdHJpbmdcclxuICAgIHB1YmxpYyBSZXN1bHQ/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgVGFnPyA6IG9iamVjdFxyXG4gICAgcHVibGljIE1vZHVsZVRPTGlzdD86TW9kdWxlVE9bXTtcclxuXHJcbiAgICBcclxufVxyXG5leHBvcnQgY2xhc3MgUGVyc29uSW5mb1xyXG57XHJcbiAgICAgICBcclxuICAgIHB1YmxpYyBJZFBlcnNvbj86bnVtYmVyO1xyXG4gICAgcHVibGljIFNhbHV0YXRpb25JZD86bnVtYmVyO1xyXG4gICAgcHVibGljIFNhbHV0YXRpb25OYW1lPzpzdHJpbmc7XHJcbiAgICBwdWJsaWMgTW9iaWxlTm8/OnN0cmluZzsgICAgIFxyXG4gICAgcHVibGljIEFsdGVybmF0ZU1vYk5vPzpzdHJpbmc7ICAgXHJcbiAgICBwdWJsaWMgUGhvbmVObz86c3RyaW5nOyAgIFxyXG4gICAgcHVibGljIERhdGVPZkJpcnRoPzpEYXRlOyAgIFxyXG4gICAgcHVibGljIEZpcnN0TmFtZT86c3RyaW5nOyAgIFxyXG4gICAgcHVibGljIE1pZE5hbWU/OnN0cmluZzsgICBcclxuICAgIHB1YmxpYyBMYXN0TmFtZT86c3RyaW5nOyAgIFxyXG4gICAgcHVibGljIFByaW1hcnlFbWFpbD86c3RyaW5nOyAgIFxyXG4gICAgcHVibGljIEFsdGVybmF0ZUVtYWlsPzpzdHJpbmc7ICAgXHJcbiAgICBwdWJsaWMgQ29tbWVudHM/OnN0cmluZzsgICBcclxuICAgIHB1YmxpYyBTZXFObz86bnVtYmVyOyAgIFxyXG4gICAgcHVibGljIFBob3RvQmFzZTY0PzpzdHJpbmc7XHJcbiAgICBwdWJsaWMgRGF0ZU9mQmlydGhTdHI/OnN0cmluZztcclxuICAgIHB1YmxpYyBEb2JEYXk/Om51bWJlcjtcclxuICAgIHB1YmxpYyBEb2JNb250aD86bnVtYmVyO1xyXG4gICAgcHVibGljIERvYlllYXI/Om51bWJlcjtcclxuICAgIHB1YmxpYyBEaXNwbGF5TmFtZT86c3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyUm9sZVRPe1xyXG4gICAgcHVibGljIElkVXNlclJvbGU/IDogc3RyaW5nXHJcbiAgICBwdWJsaWMgVXNlcklkPyA6IG51bWJlclxyXG4gICAgcHVibGljIFJvbGVJZD8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBJc0FjdGl2ZT8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBDcmVhdGVkQnk/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgQ3JlYXRlZE9uPyA6IERhdGVcclxuICAgIHB1YmxpYyBSb2xlRGVzYz8gOiBzdHJpbmdcclxuICAgIHB1YmxpYyBFbmFibGVBcmVhQWxsb2M/Om51bWJlclxyXG59XHJcbmV4cG9ydCBjbGFzcyBMb2dpblRPe1xyXG4gICAgcHVibGljIElkTG9naW4/IDogc3RyaW5nXHJcbiAgICBwdWJsaWMgVXNlcklkPyA6IG51bWJlclxyXG4gICAgcHVibGljIExvZ2luRGF0ZT8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBMb2dvdXREYXRlPyA6IHN0cmluZ1xyXG4gICAgcHVibGljIExvZ2luSVA/IDogc3RyaW5nXHJcbiAgICBwdWJsaWMgTG9uZ2l0dWRlPyA6IHN0cmluZ1xyXG4gICAgcHVibGljIExhdGl0dWRlPyA6IHN0cmluZ1xyXG4gICAgXHJcbn1cclxuXHJcbi8vU2FuamF5IFsyMDE3LTA2LTA2XSBGb3IgUmVnaW9uYWwgTWFuYWdlciBhbmQgRmllbGQgT2ZmaWNlciBEaWZmZXJlbnQgQyZGcyBhcmVhIGlzIGFsbG9jYXRlZFxyXG5leHBvcnQgY2xhc3MgVXNlckFyZWFBbGxvY2F0aW9uVE97XHJcbiAgICBwdWJsaWMgSWRBcmVhQWxsb2NEdGw/IDogTnVtYmVyXHJcbiAgICBwdWJsaWMgVXNlcklkPyA6IG51bWJlclxyXG4gICAgcHVibGljIENuZk9yZ0lkPyA6IG51bWJlclxyXG4gICAgcHVibGljIERpc3RyaWN0SWQ/IDogTnVtYmVyXHJcbiAgICBwdWJsaWMgQ3JlYXRlZEJ5PyA6IE51bWJlclxyXG4gICAgcHVibGljIElzQWN0aXZlPyA6IE51bWJlclxyXG4gICAgcHVibGljIENyZWF0ZWRPbj8gOiBEYXRlXHJcbiAgICBwdWJsaWMgQ3JlYXRlZE9uU3RyPyA6IFN0cmluZ1xyXG4gICAgcHVibGljIFJlbWFyaz8gOiBTdHJpbmdcclxuICAgIHB1YmxpYyBVc2VyTmFtZT8gOiBTdHJpbmdcclxuICAgIHB1YmxpYyBEaXN0cmljdE5hbWU/IDogU3RyaW5nXHJcbiAgICBwdWJsaWMgQ25mT3JnTmFtZT8gOiBTdHJpbmcgICAgXHJcbiAgICBcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJFeHRUT3tcclxuICAgIHB1YmxpYyBVc2VySWQ/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgUGVyc29uSWQ/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgT3JnYW5pemF0aW9uSWQ/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgQWRkcmVzc0lkPyA6IE51bWJlclxyXG4gICAgcHVibGljIENyZWF0ZWRCeT8gOiBOdW1iZXJcclxuICAgIHB1YmxpYyBDb21tZW50cz8gOiBzdHJpbmdcclxuICAgIHB1YmxpYyBDcmVhdGVkT24/IDogRGF0ZVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzICBNZW51SW5mb3JtYXRpb25cclxue1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICBwdWJsaWMgSWRNZW51Om51bWJlcixcclxuICAgICAgIHB1YmxpYyBTeXNFbGVtZW50SWQ6bnVtYmVyLFxyXG4gICAgICAgcHVibGljIE1lbnVOYW1lOnN0cmluZyxcclxuICAgICAgIHB1YmxpYyBNZW51RGVzYzpzdHJpbmcsXHJcbiAgICAgICBwdWJsaWMgUGFyZW50TWVudUlkOm51bWJlcixcclxuICAgICAgIHB1YmxpYyBNb2R1bGVJZDpudW1iZXIsXHJcbiAgICAgICBwdWJsaWMgU2VyTm86bnVtYmVyLFxyXG4gICAgICAgcHVibGljIENyZWF0ZWRPbjpEYXRlLFxyXG4gICAgICAgcHVibGljIFN1Yk1lbnVMaXN0IDogTWVudUluZm9ybWF0aW9uW10gLFxyXG4gICAgICAgcHVibGljIE1lbnVBY3Rpb246c3RyaW5nLFxyXG4gICAgICAgcHVibGljIE1lbnVJdGVtSWNvbjpzdHJpbmcsIFxyXG4gICAgICAgcHVibGljIE1lbnVTaG9ydEN1dDpzdHJpbmcsIFxyXG4gICAgICAvLyBwdWJsaWMgSW1nUGF0aDpzdHJpbmdcclxuICAgICAgIFxyXG4gICAgICAgICl7fVxyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBNb2R1bGVUT1xyXG57XHJcbiAgICBJZE1vZHVsZT86bnVtYmVyXHJcbm1vZHVsZU5hbWU/OnN0cmluZ1xyXG5tb2R1bGVEZXNjPzpzdHJpbmdcclxuY3JlYXRlZE9uPzpzdHJpbmdcclxuTmF2aWdhdGVVcmw/OnN0cmluZ1xyXG5Jc0FjdGl2ZT86bnVtYmVyXHJcbkxvZ29Vcmw/OnN0cmluZ1xyXG5BbmRyb2lkVXJsPzpzdHJpbmdcclxuSXNTdWJzY3JpYmU/Om51bWJlcjtcclxufVxyXG5cclxuXHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cCwgSGVhZGVycywgUmVzcG9uc2UsIFJlcXVlc3RPcHRpb25zLCBCYXNlUmVxdWVzdE9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci9odHRwJztcclxuaW1wb3J0IHsgVXNlclRPLCBOb3RpZmljYXRpb25UTywgUmVzdWx0TWVzc2FnZSwgQ29tbWFvblVzZXJUTyB9IGZyb20gJy4uL21vZGVsL25vdGlmaWNhdGlvblRPJ1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCByZXRyeSxtYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBIdHRwSGVhZGVycyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tIFwiY3J5cHRvLWpzXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsRXJyb3JPYnNlcnZlcn0gZnJvbSAncnhqcyc7XHJcbmV4cG9ydCBjb25zdCBnbkdldEFsbEFjdGl2ZUFsZXJ0TGlzdCA9IFwiTm90aWZ5L0dldEFsbEFjdGl2ZUFsZXJ0TGlzdD91c2VySWQ9XCI7XHJcbmV4cG9ydCBjb25zdCBnblBvc3RBbGVydEFja25vd2xlZGdlbWVudCA9IFwiTm90aWZ5L1Bvc3RBbGVydEFja25vd2xlZGdlbWVudFwiO1xyXG5leHBvcnQgY29uc3QgZ25Qb3N0UmVzZXRBbGxBbGVydHMgPSBcIk5vdGlmeS9Qb3N0UmVzZXRBbGxBbGVydHNcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvblNlcnZpY2VzIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cCkgeyB9XHJcbiAgICB1c2VyVE86IENvbW1hb25Vc2VyVE8gPSB7fVxyXG4gICAgcmVzdWx0TWVzc2FnZTogUmVzdWx0TWVzc2FnZSA9IG5ldyBSZXN1bHRNZXNzYWdlO1xyXG4gICAgZ2V0VXNlclRPRnJvbUxvY2FsU3RvcmFnZSgpOiBDb21tYW9uVXNlclRPIHtcclxuICAgICAgICBsZXQgdXNlclRvOiBDb21tYW9uVXNlclRPID0ge307XHJcbiAgICAgICAgdXNlclRvID0gSlNPTi5wYXJzZSh0aGlzLmRlY3J5cHRpb24obG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjdXJyZW50VXNlclwiKSkpO1xyXG4gICAgICAgIGlmICh1c2VyVG8gPT0gdW5kZWZpbmVkIHx8IHVzZXJUbyA9PSBudWxsKSB7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1c2VyVG87XHJcbiAgICB9XHJcbiAgICBnZXRBbGVydEZvck5vdGlmeShVcmwpIHtcclxuICAgICAgICBkZWJ1Z2dlclxyXG4gICAgICAgIGlmICh0aGlzLnVzZXJUTyA9PSBudWxsICYmIHRoaXMudXNlclRPID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0QWxsQWN0aXZlTm90aWZpY2F0aW9uKHRoaXMudXNlclRPLFVybCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIHYgPSByZXMuZmlsdGVyKHAgPT4gcC5Jc0Fja25vd2xlZGdlZCA9PSAwKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZ05vdGlmaWNhdGlvblwiKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZ05vdGlmaWNhdGlvblwiKS5pbm5lclRleHQgPSB2ID09IDAgPyAnJyA6IHYudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHsgfVxyXG4gICAgICAgIClcclxuXHJcbiAgICB9XHJcbiAgICBnZXRBbGxBY3RpdmVOb3RpZmljYXRpb24oVXNlclRvOiBDb21tYW9uVXNlclRPLG1hc3RlckJhc2VVcmw6c3RyaW5nKTogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25UT1tdPiB7XHJcbiAgICAgICAgLy9sZXQga2V5cyA9IFwiaHR0cHM6Ly9zaW1wbHlkZWxpdmVyZGVtby52ZWdhaW5ub3ZhdGlvbnMuY28uaW4vbWFkaGF2c2ltcGxpZGVsaXZlcmFwaS9hcGkvTm90aWZ5L0dldEFsbEFjdGl2ZUFsZXJ0TGlzdD91c2VySWQ9MSZyb2xlSWQ9MVwiXHJcbiAgICAgICAgLy9sZXQga2V5cyA9IG1hc3RlckJhc2VVcmwgKyBnbkdldEFsbEFjdGl2ZUFsZXJ0TGlzdCArIFVzZXJUby5JZFVzZXIgKyBcIiZyb2xlSWQ9XCIgKyBVc2VyVG8uVXNlclJvbGVMaXN0WzBdLlJvbGVJZFxyXG4gICAgICAgIGxldCBrZXlzID0gbWFzdGVyQmFzZVVybCArIFwiTm90aWZ5L0dldEFsbEFjdGl2ZUFsZXJ0TGlzdD91c2VySWQ9MSZyb2xlSWQ9MVwiO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAgICAgLmdldChrZXlzKS5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UuanNvbigpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdEFsZXJ0QWNrbm93bGVkZ2VtZW50KG5vdGlmaWNhdGlvblRvOiBOb3RpZmljYXRpb25UT1xyXG4gICAgICAgICwgbG9naW5JZDogbnVtYmVyLFVSTDpzdHJpbmcpIHtcclxuICAgICAgICB2YXIgcGFyYW1zID0ge1xyXG4gICAgICAgICAgICBhbGVydFVzZXJzVE86IG5vdGlmaWNhdGlvblRvLFxyXG4gICAgICAgICAgICBsb2dpblVzZXJJZDogbG9naW5JZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IGJvZHlTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShwYXJhbXMpO1xyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xyXG4gICAgICAgIGxldCBvcHRpb25zID0gbmV3IFJlcXVlc3RPcHRpb25zKHsgaGVhZGVyczogaGVhZGVycyB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoVVJMICsgZ25Qb3N0QWxlcnRBY2tub3dsZWRnZW1lbnQsIGJvZHlTdHJpbmcsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3RBbGxBbGVydEFja25vd2xlZGdlbWVudCh1c2VyVG86IENvbW1hb25Vc2VyVE8sVVJMOnN0cmluZykge1xyXG4gICAgICAgIHZhciBwYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIGxvZ2luVXNlcklkOiB1c2VyVG8uSWRVc2VyLFxyXG4gICAgICAgICAgICByb2xlSWQ6IHVzZXJUby5Vc2VyUm9sZUxpc3RbMF0uUm9sZUlkXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgYm9keVN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcyk7XHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSk7XHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBuZXcgUmVxdWVzdE9wdGlvbnMoeyBoZWFkZXJzOiBoZWFkZXJzIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChVUkwgKyBnblBvc3RSZXNldEFsbEFsZXJ0cywgYm9keVN0cmluZywgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5jcnlwdGlvbihkYXRhKSB7XHJcbiAgICAgICAgZGF0YSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xyXG4gICAgICAgIC8vIEVuY3J5cHRcclxuICAgICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KGRhdGEudG9TdHJpbmcoKSwgXCJzZWNyZXQga2V5IDEyM1wiKTtcclxuICAgICAgICByZXR1cm4gY2lwaGVydGV4dC50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgZGVjcnlwdGlvbihkYXRhKSB7XHJcbiAgICAgICAgLy8gRGVjcnlwdFxyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIHZhciBieXRlcyA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KGRhdGEsIFwic2VjcmV0IGtleSAxMjNcIik7XHJcbiAgICAgICAgICAgIHZhciBwbGFpbnRleHQgPSBieXRlcy50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwbGFpbnRleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgSW5wdXQsIFBpcGUsIEluamVjdGFibGUsIFBpcGVUcmFuc2Zvcm0sIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IH0gZnJvbSAncnhqcy9SeCc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2VzIH0gZnJvbSAnLi4vc2VydmljZXMvbm90aWZpY2F0aW9uX3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVXNlclRPLCBOb3RpZmljYXRpb25UTywgUmVzdWx0TWVzc2FnZSwgQ29tbWFvblVzZXJUTyB9IGZyb20gJy4uL21vZGVsL25vdGlmaWNhdGlvblRPJ1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuLy9pbXBvcnQgeyBMaXN0U2VydmljZSwgSUxvYWRlciB9IGZyb20gXCIuLi8uLi9jb21tb24vc2VydmljZS9nZXREcm9wZG93bkxpc3Quc2VydmljZVwiO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdub3RpZmljYXRpb24nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuLi9ub3RpZmljYXRpb24uaHRtbCcsXHJcblxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICB1c2VyVE86IENvbW1hb25Vc2VyVE8gPSB7fTtcclxuICAgIEBJbnB1dCgpIFVSTDogc3RyaW5nO1xyXG4gICAgcmVzdWx0TWVzc2FnZTogUmVzdWx0TWVzc2FnZSA9IG5ldyBSZXN1bHRNZXNzYWdlO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBjb21tYW46IE5vdGlmaWNhdGlvblNlcnZpY2VzXHJcbiAgICAgICAgLCBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgICAgICAgLCByb3V0ZTogQWN0aXZhdGVkUm91dGVcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMudXNlclRPID0gdGhpcy5jb21tYW4uZ2V0VXNlclRPRnJvbUxvY2FsU3RvcmFnZSgpO1xyXG4gICAgfVxyXG4gICAgbm90aWZpY2F0aW9uTGlzdDogTm90aWZpY2F0aW9uVE9bXSA9IFtdO1xyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tYW4uZ2V0QWxlcnRGb3JOb3RpZnkodGhpcy5VUkwpO1xyXG4gICAgICAgIHRoaXMuZ2V0Tm90aWZpY2F0aW9uTGlzdEJ5VXNlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE5vdGlmaWNhdGlvbkxpc3RCeVVzZXIoKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25MaXN0ID0gW11cclxuICAgICAgICB0aGlzLmNvbW1hbi5nZXRBbGxBY3RpdmVOb3RpZmljYXRpb24odGhpcy51c2VyVE8sIHRoaXMuVVJMKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvblJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkxpc3QgPSBub3RpZmljYXRpb25SZXM7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyIDogJyArIGVycik7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIG1hcmtBc1JlYWRUb05vdGlmaWNhdGlvbihhbGVydE1lc3NhZ2VUbzogTm90aWZpY2F0aW9uVE8sIGlzUmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgaWYgKGFsZXJ0TWVzc2FnZVRvLklzQWNrbm93bGVkZ2VkICE9IDAgJiYgIWlzUmVzZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNSZXNldCkge1xyXG4gICAgICAgICAgICBhbGVydE1lc3NhZ2VUby5Jc1Jlc2V0ZWQgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbW1hbi5wb3N0QWxlcnRBY2tub3dsZWRnZW1lbnQoYWxlcnRNZXNzYWdlVG8sIHRoaXMudXNlclRPLklkVXNlciwgdGhpcy5VUkwpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgdlJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBkZWJ1Z2dlclxyXG4gICAgICAgICAgICAgICAgLy8gaWYgKHRoaXMucmVzdWx0TWVzc2FnZS5NZXNzYWdlVHlwZSA9PSAxICYmIHRoaXMucmVzdWx0TWVzc2FnZS5SZXN1bHQgPT0gMSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuLmdldEFsZXJ0Rm9yTm90aWZ5KHRoaXMuVVJMKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Tm90aWZpY2F0aW9uTGlzdEJ5VXNlcigpO1xyXG4gICAgICAgICAgICAgICAgLy99XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIE1zZyA6IFwiICsgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VmFsaWRhdGlvbkNvbG9yKGlzQWNrbm93ZWxkZWQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBpc0Fja25vd2VsZGVkID09IDAgPyAnYm9sZCcgOiAnbm9ybWFsJ1xyXG5cclxuICAgIH1cclxuICAgIHJlc2V0QWxsTm90aWZpY2F0aW9uKCkge1xyXG4gICAgICAgIC8vdGhpcy5zcy5zaG93TG9hZGVyKCk7XHJcbiAgICAgICAgdGhpcy5jb21tYW4ucG9zdEFsbEFsZXJ0QWNrbm93bGVkZ2VtZW50KHRoaXMudXNlclRPLCB0aGlzLlVSTCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICB2UmVzID0+IHtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5yZXN1bHRNZXNzYWdlID0gdlJlcztcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc3VsdE1lc3NhZ2UuTWVzc2FnZVR5cGUgPT0gMSAmJiB0aGlzLnJlc3VsdE1lc3NhZ2UuUmVzdWx0ID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbi5nZXRBbGVydEZvck5vdGlmeSh0aGlzLlVSTCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25MaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIE1zZyA6IFwiICsgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcmVkaXJlY3RGdW4oYWxlcnRNZXNzYWdlVG86IE5vdGlmaWNhdGlvblRPKSB7XHJcbiAgICAgICAgaWYgKGFsZXJ0TWVzc2FnZVRvLk5hdmlnYXRpb25VcmwgIT0gbnVsbCB8fCBhbGVydE1lc3NhZ2VUby5OYXZpZ2F0aW9uVXJsICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJyArIGFsZXJ0TWVzc2FnZVRvLk5hdmlnYXRpb25VcmxdKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgIH1cclxufSIsIlxyXG5pbXBvcnQgeyBCcm93c2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Tm90aWZpY2F0aW9uQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudC9ub3RpZmljYXRpb25fY29tcG9uZW50cydcclxuaW1wb3J0IHtOb3RpZmljYXRpb25TZXJ2aWNlc30gZnJvbSAnLi9zZXJ2aWNlcy9ub3RpZmljYXRpb25fc2VydmljZXMnXHJcbmltcG9ydCB7IEh0dHBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9odHRwJztcclxuaW1wb3J0IHtSb3V0ZXJNb2R1bGUsIFJvdXRlc30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuY29uc3QgYXBwUm91dGVzOiBSb3V0ZXMgPSBbXHJcbiAgICB7cGF0aDogJycsIGNvbXBvbmVudDogTm90aWZpY2F0aW9uQ29tcG9uZW50fVxyXG4gIF07XHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBOb3RpZmljYXRpb25Db21wb25lbnRcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEJyb3dzZXJNb2R1bGUsSHR0cE1vZHVsZSxSb3V0ZXJNb2R1bGUuZm9yUm9vdChhcHBSb3V0ZXMpXHJcbiAgXSxcclxuICBwcm92aWRlcnM6W05vdGlmaWNhdGlvblNlcnZpY2VzXSxcclxuICBleHBvcnRzOiBbTm90aWZpY2F0aW9uQ29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTm90aWZ5TW9kdWxlIHsgfVxyXG4iXSwibmFtZXMiOlsiaHR0cCIsIm1hcCIsIkhlYWRlcnMiLCJSZXF1ZXN0T3B0aW9ucyIsIkNyeXB0b0pTLkFFUyIsIkNyeXB0b0pTLmVuYyIsIkluamVjdGFibGUiLCJIdHRwIiwicm91dGVyIiwiQ29tcG9uZW50IiwiUm91dGVyIiwiQWN0aXZhdGVkUm91dGUiLCJJbnB1dCIsIk5nTW9kdWxlIiwiQnJvd3Nlck1vZHVsZSIsIkh0dHBNb2R1bGUiLCJSb3V0ZXJNb2R1bGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFDQSxJQW1DQSxJQUFBOzs7NEJBcENBO1FBNENDLENBQUE7Ozs7OztBQzVDRDtBQVNBLFFBQWEsMEJBQTBCLEdBQUcsaUNBQWlDLENBQUM7O0FBQzVFLFFBQWEsb0JBQW9CLEdBQUcsMkJBQTJCLENBQUM7O1FBSTVELDhCQUFvQkEsT0FBVTtZQUFWLFNBQUksR0FBSkEsT0FBSSxDQUFNOzBCQUNOLEVBQUU7aUNBQ0ssSUFBSSxhQUFhO1NBRmI7Ozs7UUFHbkMsd0RBQXlCOzs7WUFBekI7O2dCQUNJLElBQUksTUFBTSxHQUFrQixFQUFFLENBQUM7Z0JBQy9CLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBSzFFLE9BQU8sTUFBTSxDQUFDO2FBQ2pCOzs7OztRQUNELGdEQUFpQjs7OztZQUFqQixVQUFrQixHQUFHO2dCQUNqQixTQUFRO2dCQUNSLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7b0JBQ2pELE9BQU87aUJBQ1Y7Z0JBQ0QsSUFB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