dbweb-common
Version:
用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上
178 lines • 25.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, HostBinding } from '@angular/core';
import { CurrentService, ElementsService, ProjectService, fullApiPath } from 'dbweb-core';
import { exportAnimation } from './animal';
import { ExportService } from './export.service';
var ExportComponent = /** @class */ (function () {
function ExportComponent(svr, prj, eles, cur) {
this.svr = svr;
this.prj = prj;
this.eles = eles;
this.cur = cur;
this.hostClass = true;
this.subs = [];
}
/**
* @return {?}
*/
ExportComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.svr.init();
};
/**
* @return {?}
*/
ExportComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.subs.forEach((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.unsubscribe(); }));
};
/**
* @param {?} event
* @return {?}
*/
ExportComponent.prototype.selectChecked = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.svr.columns.forEach((/**
* @param {?} v
* @return {?}
*/
function (v) { return (v.selected = event.checked); }));
};
/**
* @return {?}
*/
ExportComponent.prototype.doExport = /**
* @return {?}
*/
function () {
var _this = this;
this.svr
.doExport({
Format: this.svr.format,
DB: this.svr.dbName,
TableName: this.svr.tableName,
Encoding: this.svr.encoding,
Columns: this.svr.columns.filter((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.selected; })).map((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.Name; }))
})
.subscribe((/**
* @param {?} v
* @return {?}
*/
function (v) {
_this.svr.step = 'inTheExpord';
/** @type {?} */
var startTime = new Date();
_this.svr.taskInfoURL = _this.prj.frontURL('task', v.TaskInfoURL);
_this.svr.zipFileURL = fullApiPath(v.ZipFileSignURL);
_this.subs.push(_this.cur.wsCtrl.observable.subscribe((/**
* @param {?} mes
* @return {?}
*/
function (mes) {
if (mes.Data.TaskID === v.TaskID) {
if (!mes.Data.Completed) {
/** @type {?} */
var g = mes.Data.Data / _this.svr.rowCount;
_this.svr.exportProgress = g * 100;
/** @type {?} */
var d = new Date().getTime() - startTime.getTime();
_this.svr.timeRemaining = (d / g) * (1 - g);
}
else {
_this.svr.exportProgress = 100;
_this.svr.step = 'complete';
}
}
})));
}));
};
/**
* @param {?} type
* @return {?}
*/
ExportComponent.prototype.chineseString = /**
* @param {?} type
* @return {?}
*/
function (type) {
if (type === 'STR') {
return '字符串';
}
else if (type === 'INT') {
return '整型';
}
else if (type === 'DATE') {
return '日期';
}
else if (type === 'FLOAT') {
return '浮点';
}
else if (type === 'BYTEA') {
return '二进制';
}
};
ExportComponent.decorators = [
{ type: Component, args: [{
selector: 'common-export',
template: "<ng-container [ngSwitch]=\"svr.step\">\r\n\t\t<!-- **** \u6570\u636E\u5BFC\u51FA\u8868\u603B **** -->\r\n\t\t<div class=\"export-data\" *ngSwitchCase=\"'toPrepare'\">\r\n\t\t\t\t<!-- **** \u6570\u636E\u5BFC\u51FA\u8868\uFF08\u4E0A\uFF09 **** -->\r\n\t\t\t\t<div class=\"data-wrapper\">\r\n\t\t\t\t\t<!-- ** \u6570\u636E\u5BFC\u51FA\u5927\u6807\u9898 ** -->\r\n\t\t\t\t\t<header class=\"data-title\">\u6570\u636E\u5BFC\u51FA</header>\r\n\t\t\t\t\t<!-- ** \u6570\u636E\u5BFC\u51FA\u6B63\u8868 ** -->\r\n\t\t\t\t\t<section class=\"export-table\">\r\n\t\t\t\t\t\t<table>\r\n\t\t\t\t\t\t\t<!-- * \u8868\u5934 * -->\r\n\t\t\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t<th>\u6765\u6E90</th>\r\n\t\t\t\t\t\t\t\t\t<th>\u8BB0\u5F55\u6570</th>\r\n\t\t\t\t\t\t\t\t\t<th>\u683C\u5F0F</th>\r\n\t\t\t\t\t\t\t\t\t<th>\u7F16\u7801</th>\r\n\t\t\t\t\t\t\t\t\t<th>\u76EE\u6807\u6570\u636E\u5E93</th>\r\n\t\t\t\t\t\t\t\t\t<th>\u76EE\u6807\u8868</th>\r\n\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t</thead>\r\n\t\t\t\t\t\t\t<!-- * \u8868\u5355\u6B63\u4F53 * -->\r\n\t\t\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t\t\t<!-- \u6765\u6E90 -->\r\n\t\t\t\t\t\t\t\t\t<td>{{svr.srcElementTitle}}</td>\r\n\t\t\t\t\t\t\t\t\t<!-- \u8BB0\u5F55\u6570 -->\r\n\t\t\t\t\t\t\t\t\t<td>{{svr.rowCount}}</td>\r\n\t\t\t\t\t\t\t\t\t<!-- \u683C\u5F0F -->\r\n\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t\t\t\t\t<mat-select class=\"export-slt\" [(ngModel)]=\"svr.format\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-option value=\"csv\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCSV(\u9017\u53F7\u5206\u9694\u6587\u672C)\r\n\t\t\t\t\t\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-option value=\"txt\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tTXT(TAB\u5206\u9694\u6587\u672C)\r\n\t\t\t\t\t\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-option value=\"json\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tJSON\r\n\t\t\t\t\t\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-option value=\"excel\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tXLS(Excel\u683C\u5F0F\u6587\u4EF6)\r\n\t\t\t\t\t\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-option value=\"sqlite3\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tSQLITE3\r\n\t\t\t\t\t\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-option value=\"mytable\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\u6570\u636E\u5E93\u8868\r\n\t\t\t\t\t\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t\t\t\t\t\t</mat-select>\r\n\t\t\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t<!-- \u7F16\u7801 -->\r\n\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t\t\t\t\t<mat-select [(ngModel)]=\"svr.encoding\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-option value=\"utf8\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tUTF-8\r\n\t\t\t\t\t\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-option value=\"gbk\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tGBK\r\n\t\t\t\t\t\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t\t\t\t\t\t</mat-select>\r\n\t\t\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t<!-- \u76EE\u6807\u6570\u636E\u5E93 -->\r\n\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t\t\t\t\t<mat-select [(ngModel)]=\"svr.dbName\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[disabled]=\"svr.format!=='mytable'\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-option value=\"\">(\u7A7A)</mat-option>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<mat-option *ngFor=\"let item of svr.dbNames\" [value]=\"item\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{item}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t\t\t\t\t\t</mat-select>\r\n\t\t\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t<!-- \u76EE\u6807\u8868 -->\r\n\t\t\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t\t\t\t\t<input matInput [(ngModel)]=\"svr.tableName\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[disabled]=\"svr.format!=='mytable'\">\r\n\t\t\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t</tbody>\r\n\t\t\t\t\t\t</table>\r\n\t\t\t\t\t</section>\r\n\t\t\t\t</div>\r\n\t\t\r\n\t\t\t\t<!-- *** \u6307\u6807\u9009\u62E9\u8868\u5355\uFF08\u4E0B\uFF09 *** -->\r\n\t\t\t\t<div class=\"select-wrapper\">\r\n\t\t\t\t\t<!-- ** \u9009\u62E9\u8868\u5927\u6807\u9898 ** -->\r\n\t\t\t\t\t<header class=\"select-title\">\u6307\u6807\u9009\u62E9</header>\r\n\t\t\t\t\t<!-- ** \u9009\u62E9\u8868\u6B63\u8868 ** -->\r\n\t\t\t\t\t<section class=\"select-table\">\r\n\t\t\t\t\t\t<!-- * \u9009\u62E9\u8868 * -->\r\n\t\t\t\t\t\t<table mat-table [dataSource]=\"svr.columns\">\r\n\t\t\t\t\t\t\t<!-- \u9009\u62E9\u6846 -->\r\n\t\t\t\t\t\t\t<ng-container class=\"slt-checkbox\" matColumnDef=\"select\">\r\n\t\t\t\t\t\t\t\t<th mat-header-cell *matHeaderCellDef>\r\n\t\t\t\t\t\t\t\t\t<mat-checkbox (change)=\"selectChecked($event)\"\r\n\t\t\t\t\t\t\t\t\t\t[checked]=\"svr.isAllSelected()\"\r\n\t\t\t\t\t\t\t\t\t\t[indeterminate]=\"svr.hasSelected() && !svr.isAllSelected()\">\r\n\t\t\t\t\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let row\">\r\n\t\t\t\t\t\t\t\t\t<mat-checkbox [(ngModel)]=\"row.selected\">\r\n\t\t\t\t\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- \u5E8F\u53F7 -->\r\n\t\t\t\t\t\t\t<ng-container matColumnDef=\"position\">\r\n\t\t\t\t\t\t\t\t<th mat-header-cell *matHeaderCellDef>\r\n\t\t\t\t\t\t\t\t\t\u5E8F\u53F7</th>\r\n\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let element,index as i\">\r\n\t\t\t\t\t\t\t\t\t{{ i+1 }}\r\n\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- \u540D\u79F0 -->\r\n\t\t\t\t\t\t\t<ng-container matColumnDef=\"name\">\r\n\t\t\t\t\t\t\t\t<th mat-header-cell *matHeaderCellDef>\r\n\t\t\t\t\t\t\t\t\t\u540D\u79F0</th>\r\n\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let element\">\r\n\t\t\t\t\t\t\t\t\t{{ element.Name }}\r\n\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- \u5B57\u6BB5\u7C7B\u578B -->\r\n\t\t\t\t\t\t\t<ng-container matColumnDef=\"type\">\r\n\t\t\t\t\t\t\t\t<th mat-header-cell *matHeaderCellDef>\r\n\t\t\t\t\t\t\t\t\t\u5B57\u6BB5\u7C7B\u578B\r\n\t\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let element\">\r\n\t\t\t\t\t\t\t\t\t{{ chineseString(element.Type) }}\r\n\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- \u957F\u5EA6 -->\r\n\t\t\t\t\t\t\t<ng-container matColumnDef=\"maxlength\">\r\n\t\t\t\t\t\t\t\t<th mat-header-cell *matHeaderCellDef>\r\n\t\t\t\t\t\t\t\t\t\u957F\u5EA6\r\n\t\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t\t\t<td mat-cell *matCellDef=\"let element\">\r\n\t\t\t\t\t\t\t\t\t{{ element.MaxLength }}\r\n\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- \u8868\u5934\u8BBE\u7F6E -->\r\n\t\t\t\t\t\t\t<tr mat-header-row\r\n\t\t\t\t\t\t\t\t*matHeaderRowDef=\"['select','position','name','type','maxlength']; sticky: true\">\r\n\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t<tr mat-row\r\n\t\t\t\t\t\t\t\t*matRowDef=\"let row; columns: ['select','name','position','type','maxlength']\">\r\n\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t</table>\r\n\t\t\t\t\t</section>\r\n\t\t\t\t\t<footer class=\"btn\">\r\n\t\t\t\t\t\t\t<button class=\"export-btn\" mat-button type=\"button\" (click)=\"doExport()\">\u5BFC\u51FA</button>\r\n\t\t\t\t\t</footer>\r\n\t\t\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\r\n\t<!-- \u76EE\u524D\u4E0D\u4E00\u5B9A\u9700\u8981 -->\r\n <div class=\"expording\" *ngSwitchCase=\"'inTheExpord'\">\r\n\r\n\t\t<div class=\"expording-wrapper\">\r\n\t\t\t<div class=\"expording-title\">\r\n\t\t\t\t\u6570\u636E\u6B63\u5728\u5BFC\u51FA\uFF0C\u5269\u4F59\r\n\t\t\t\t<span class=\"expording-num\">{{ svr.timeRemaining }}</span>\r\n\t\t\t\t\u79D2\r\n\t\t\t</div>\r\n\t\t\t<div class=\"expording-text\">\r\n\t\t\t\t\u540E\u53F0\u6B63\u5728\u5BFC\u51FA\u6570\u636E\uFF0C\u8BF7\u8010\u5FC3\u7B49\u5F85\uFF0C\u7ED3\u675F\u540E\u5373\u53EF\u4E0B\u8F7D\uFF1B\u672C\u9875\u9762\u5173\u95ED\u540E\u53EF\u5728<u class=\"text-check\">\u4EFB\u52A1\u67E5\u8BE2</u>\u4E2D\u67E5\u770B\u8FDB\u5EA6\r\n\t\t\t</div>\r\n\t\t\t<div>\r\n\t\t\t\t<mat-progress-bar color=\"accent\" mode=\"determinate\"\r\n\t\t\t\t\t[value]=\"svr.exportProgress\"> </mat-progress-bar>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"prepare\" *ngSwitchCase=\"'complete'\">\r\n\t\t<div class=\"prepare-wrapper\">\r\n\t\t\t<div class=\"prepare-title\">\u6587\u4EF6\u5DF2\u7ECF\u51C6\u5907\u5B8C\u6BD5</div>\r\n\t\t\t<div class=\"prepare-text\">\r\n\t\t\t\t\u53EF\u67E5\u770B\u4E0B\u8F7D\u6587\u4EF6\u7684\u5185\u5BB9\u6216\u76F4\u63A5\u8FDB\u884C\u4E0B\u8F7D\uFF1B\u672C\u9875\u9762\u5173\u95ED\u540E\u53EF\u5728<u class=\"text-check\"><a\r\n\t\t\t\t\t\t[routerLink]=\"svr.taskInfoURL\">\u4EFB\u52A1\u660E\u7EC6</a></u>\u9875\u9762\u4E2D\u67E5\u770B\u8FDB\u5EA6\r\n\t\t\t</div>\r\n\t\t\t<div class=\"btn\">\r\n\t\t\t\t<a mat-button [href]=\"svr.zipFileURL\"\r\n\t\t\t\t\t*ngIf=\"svr.format !=='mytable'\">\u4E0B\u8F7D</a>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</ng-container>\r\n\r\n",
animations: [exportAnimation],
providers: [ExportService],
styles: ["a{text-decoration:none}.export-data .data-wrapper,.export-data .select-wrapper{max-width:960px;min-width:688px;margin:0 auto;box-sizing:border-box;border-radius:4px;padding:16px 24px;box-shadow:0 5px 13px 0 rgba(0,0,0,.14)}.export-data .data-title,.export-data .select-title{margin-bottom:16px}.export-data .export-table,.export-data .select-table{width:100%}.export-data .data-wrapper{height:160px}.export-data .data-wrapper .data-title{font:20px bold}.export-data .data-wrapper .export-table{font-size:14px}.export-data .data-wrapper .export-table table{width:100%;border-collapse:collapse;box-sizing:border-box}.export-data .data-wrapper .export-table td,.export-data .data-wrapper .export-table th{height:40px;padding:0 8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;box-sizing:border-box}.export-data .data-wrapper .export-table th{text-align:left}.export-data .select-wrapper{height:auto;margin-top:16px}.export-data .select-wrapper .select-title{font:16px bold}.export-data .select-wrapper .select-table{width:100%;max-height:535px;overflow:auto;box-shadow:0 5px 13px 0 rgba(0,0,0,.14)}.export-data .select-wrapper table{width:100%;box-sizing:border-box}.export-data .select-wrapper .slt-checkbox{width:50px}.export-data .select-wrapper td,.export-data .select-wrapper th{height:32px;box-sizing:border-box}.export-data .select-wrapper .btn{width:100%;text-align:right;margin-top:16px}.export-data .select-wrapper .btn .export-btn{width:80px;height:32px;line-height:32px;color:#fff;font-size:14px}.expording{display:flex;justify-content:center;align-items:center;width:100%;height:calc(100vh - 30px)}.expording .expording-wrapper{width:624px;height:456px;margin-top:-60px;background:url(/front/assets/export/prepare.png) top center/300px 300px no-repeat;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);box-sizing:border-box}.expording .expording-wrapper .expording-text,.expording .expording-wrapper .expording-title{width:100%;box-sizing:border-box}.expording .expording-wrapper .expording-title{padding:271px 128px 0;font-size:24px}.expording .expording-wrapper .expording-text{padding:16px 128px 88px;font-size:16px}.expording .expording-wrapper .expording-text .text-check{font-weight:700}.prepare{display:flex;justify-content:center;align-items:center;width:100%;height:calc(100vh - 30px)}.prepare .prepare-wrapper{width:624px;height:456px;margin-top:-60px;background:url(/front/assets/export/done.png) top center/300px 300px no-repeat;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);box-sizing:border-box}.prepare .prepare-wrapper .expording-text,.prepare .prepare-wrapper .expording-title{width:100%;box-sizing:border-box}.prepare .prepare-wrapper .prepare-title{padding:271px 128px 0;font-size:24px}.prepare .prepare-wrapper .prepare-text{padding:16px 128px 0;font-size:16px}.prepare .prepare-wrapper .prepare-text .text-check{font-weight:700}.prepare .prepare-wrapper .btn{width:100%;text-align:right;padding:35px 32px 25px 0;box-sizing:border-box}.prepare .prepare-wrapper .btn a{width:80px;height:32px;line-height:32px;color:#fff;font-size:14px}"]
}] }
];
/** @nocollapse */
ExportComponent.ctorParameters = function () { return [
{ type: ExportService },
{ type: ProjectService },
{ type: ElementsService },
{ type: CurrentService }
]; };
ExportComponent.propDecorators = {
hostClass: [{ type: HostBinding, args: ['class.export',] }]
};
return ExportComponent;
}());
export { ExportComponent };
if (false) {
/** @type {?} */
ExportComponent.prototype.hostClass;
/** @type {?} */
ExportComponent.prototype.subs;
/** @type {?} */
ExportComponent.prototype.svr;
/** @type {?} */
ExportComponent.prototype.prj;
/**
* @type {?}
* @private
*/
ExportComponent.prototype.eles;
/**
* @type {?}
* @private
*/
ExportComponent.prototype.cur;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2Rid2ViLWNvbW1vbi8iLCJzb3VyY2VzIjpbImxpYi9leHBvcnQvZXhwb3J0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUF1QixNQUFNLGtCQUFrQixDQUFDO0FBRXRFO0lBV0MseUJBQ1EsR0FBa0IsRUFDbEIsR0FBbUIsRUFDbEIsSUFBcUIsRUFDckIsR0FBbUI7UUFIcEIsUUFBRyxHQUFILEdBQUcsQ0FBZTtRQUNsQixRQUFHLEdBQUgsR0FBRyxDQUFnQjtRQUNsQixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixRQUFHLEdBQUgsR0FBRyxDQUFnQjtRQVBDLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDOUMsU0FBSSxHQUFtQixFQUFFLENBQUM7SUFPdkIsQ0FBQzs7OztJQUVKLGtDQUFROzs7SUFBUjtRQUNDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakIsQ0FBQzs7OztJQUNELHFDQUFXOzs7SUFBWDtRQUNDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTzs7OztRQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFmLENBQWUsRUFBQyxDQUFDO0lBQ3pDLENBQUM7Ozs7O0lBRUQsdUNBQWE7Ozs7SUFBYixVQUFjLEtBQXdCO1FBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU87Ozs7UUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxD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LEVBQUUsZUFBZTtvQkFDekIsaTNSQUFzQztvQkFFdEMsVUFBVSxFQUFFLENBQUMsZUFBZSxDQUFDO29CQUM3QixTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUM7O2lCQUMxQjs7OztnQkFSUSxhQUFhO2dCQUhvQixjQUFjO2dCQUEvQixlQUFlO2dCQUEvQixjQUFjOzs7NEJBYXJCLFdBQVcsU0FBQyxjQUFjOztJQWdFNUIsc0JBQUM7Q0FBQSxBQXhFRCxJQXdFQztTQWpFWSxlQUFlOzs7SUFDM0Isb0NBQThDOztJQUM5QywrQkFBMEI7O0lBR3pCLDhCQUF5Qjs7SUFDekIsOEJBQTBCOzs7OztJQUMxQiwrQkFBNkI7Ozs7O0lBQzdCLDhCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwnO1xyXG5pbXBvcnQgeyBDdXJyZW50U2VydmljZSwgRWxlbWVudHNTZXJ2aWNlLCBQcm9qZWN0U2VydmljZSwgZnVsbEFwaVBhdGggfSBmcm9tICdkYndlYi1jb3JlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGV4cG9ydEFuaW1hdGlvbiB9IGZyb20gJy4vYW5pbWFsJztcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSwgRXhwb3J0VGFza1dTTWVzc2FnZSB9IGZyb20gJy4vZXhwb3J0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdjb21tb24tZXhwb3J0JyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vZXhwb3J0LmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9leHBvcnQuY29tcG9uZW50LnNjc3MnXSxcclxuXHRhbmltYXRpb25zOiBbZXhwb3J0QW5pbWF0aW9uXSxcclxuXHRwcm92aWRlcnM6IFtFeHBvcnRTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXhwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cdEBIb3N0QmluZGluZygnY2xhc3MuZXhwb3J0JykgaG9zdENsYXNzID0gdHJ1ZTtcclxuXHRzdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHB1YmxpYyBzdnI6IEV4cG9ydFNlcnZpY2UsXHJcblx0XHRwdWJsaWMgcHJqOiBQcm9qZWN0U2VydmljZSxcclxuXHRcdHByaXZhdGUgZWxlczogRWxlbWVudHNTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjdXI6IEN1cnJlbnRTZXJ2aWNlXHJcblx0KSB7fVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdHRoaXMuc3ZyLmluaXQoKTtcclxuXHR9XHJcblx0bmdPbkRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLnN1YnMuZm9yRWFjaCh2ID0+IHYudW5zdWJzY3JpYmUoKSk7XHJcblx0fVxyXG5cclxuXHRzZWxlY3RDaGVja2VkKGV2ZW50OiBNYXRDaGVja2JveENoYW5nZSkge1xyXG5cdFx0dGhpcy5zdnIuY29sdW1ucy5mb3JFYWNoKHYgPT4gKHYuc2VsZWN0ZWQgPSBldmVudC5jaGVja2VkKSk7XHJcblx0fVxyXG5cdGRvRXhwb3J0KCkge1xyXG5cdFx0dGhpcy5zdnJcclxuXHRcdFx0LmRvRXhwb3J0KHtcclxuXHRcdFx0XHRGb3JtYXQ6IHRoaXMuc3ZyLmZvcm1hdCxcclxuXHRcdFx0XHREQjogdGhpcy5zdnIuZGJOYW1lLFxyXG5cdFx0XHRcdFRhYmxlTmFtZTogdGhpcy5zdnIudGFibGVOYW1lLFxyXG5cdFx0XHRcdEVuY29kaW5nOiB0aGlzLnN2ci5lbmNvZGluZyxcclxuXHRcdFx0XHRDb2x1bW5zOiB0aGlzLnN2ci5jb2x1bW5zLmZpbHRlcih2ID0+IHYuc2VsZWN0ZWQpLm1hcCh2ID0+IHYuTmFtZSlcclxuXHRcdFx0fSlcclxuXHRcdFx0LnN1YnNjcmliZSh2ID0+IHtcclxuXHRcdFx0XHR0aGlzLnN2ci5zdGVwID0gJ2luVGhlRXhwb3JkJztcclxuXHRcdFx0XHRjb25zdCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0XHRcdHRoaXMuc3ZyLnRhc2tJbmZvVVJMID0gdGhpcy5wcmouZnJvbnRVUkwoJ3Rhc2snLCB2LlRhc2tJbmZvVVJMKTtcclxuXHRcdFx0XHR0aGlzLnN2ci56aXBGaWxlVVJMID0gZnVsbEFwaVBhdGgodi5aaXBGaWxlU2lnblVSTCk7XHJcblx0XHRcdFx0dGhpcy5zdWJzLnB1c2goXHJcblx0XHRcdFx0XHR0aGlzLmN1ci53c0N0cmwub2JzZXJ2YWJsZS5zdWJzY3JpYmUoKG1lczogRXhwb3J0VGFza1dTTWVzc2FnZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAobWVzLkRhdGEuVGFza0lEID09PSB2LlRhc2tJRCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmICghbWVzLkRhdGEuQ29tcGxldGVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBnID0gbWVzLkRhdGEuRGF0YSAvIHRoaXMuc3ZyLnJvd0NvdW50O1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zdnIuZXhwb3J0UHJvZ3Jlc3MgPSBnICogMTAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnRUaW1lLmdldFRpbWUoKTtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc3ZyLnRpbWVSZW1haW5pbmcgPSAoZCAvIGcpICogKDEgLSBnKTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zdnIuZXhwb3J0UHJvZ3Jlc3MgPSAxMDA7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnN2ci5zdGVwID0gJ2NvbXBsZXRlJztcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cdGNoaW5lc2VTdHJpbmcodHlwZTogc3RyaW5nKSB7XHJcblx0XHRpZiAodHlwZSA9PT0gJ1NUUicpIHtcclxuXHRcdFx0cmV0dXJuICflrZfnrKbkuLInO1xyXG5cdFx0fSBlbHNlIGlmICh0eXBlID09PSAnSU5UJykge1xyXG5cdFx0XHRyZXR1cm4gJ+aVtOWeiyc7XHJcblx0XHR9IGVsc2UgaWYgKHR5cGUgPT09ICdEQVRFJykge1xyXG5cdFx0XHRyZXR1cm4gJ+aXpeacnyc7XHJcblx0XHR9IGVsc2UgaWYgKHR5cGUgPT09ICdGTE9BVCcpIHtcclxuXHRcdFx0cmV0dXJuICfmta7ngrknO1xyXG5cdFx0fSBlbHNlIGlmICh0eXBlID09PSAnQllURUEnKSB7XHJcblx0XHRcdHJldHVybiAn5LqM6L+b5Yi2JztcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIl19