@openziti/ziti-console-lib 0.12.4 → 0.12.6
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/esm2022/lib/features/progress-meter/progress-meter.component.mjs +44 -0
- package/esm2022/lib/features/progress-wizard/progress-wizard.component.mjs +91 -0
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +4 -2
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +4 -2
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +4 -2
- package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.component.mjs +19 -19
- package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.helper.mjs +10 -4
- package/esm2022/lib/pages/auth-policies/auth-policies-page.service.mjs +3 -2
- package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.service.mjs +3 -2
- package/esm2022/lib/pages/config-types/config-types-page.service.mjs +3 -2
- package/esm2022/lib/pages/configurations/configurations-page.service.mjs +3 -2
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.service.mjs +3 -2
- package/esm2022/lib/pages/edge-routers/edge-routers-page.service.mjs +3 -2
- package/esm2022/lib/pages/identities/identities-page.service.mjs +3 -2
- package/esm2022/lib/pages/jwt-signers/jwt-signers-page.service.mjs +3 -2
- package/esm2022/lib/pages/posture-checks/posture-checks-page.service.mjs +3 -2
- package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.mjs +3 -2
- package/esm2022/lib/pages/service-policies/service-policies-page.service.mjs +3 -2
- package/esm2022/lib/pages/services/services-page.service.mjs +3 -2
- package/esm2022/lib/pages/terminators/terminators-page.service.mjs +3 -2
- package/esm2022/lib/pages/transit-routers/transit-routers-page.service.mjs +3 -2
- package/esm2022/lib/shared/list-page-service.class.mjs +21 -1
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/lib/ziti-console-lib.module.mjs +19 -5
- package/esm2022/public-api.mjs +5 -1
- package/fesm2022/openziti-ziti-console-lib.mjs +727 -544
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/lib/features/progress-meter/progress-meter.component.d.ts +19 -0
- package/lib/features/progress-meter/progress-meter.component.d.ts.map +1 -0
- package/lib/features/progress-wizard/progress-wizard.component.d.ts +31 -0
- package/lib/features/progress-wizard/progress-wizard.component.d.ts.map +1 -0
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +1 -1
- package/lib/features/visualizer/identity-service-path/identity-service-path.component.d.ts +1 -0
- package/lib/features/visualizer/identity-service-path/identity-service-path.component.d.ts.map +1 -1
- package/lib/features/visualizer/identity-service-path/identity-service-path.helper.d.ts.map +1 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts +1 -1
- package/lib/pages/auth-policies/auth-policies-page.service.d.ts.map +1 -1
- package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts.map +1 -1
- package/lib/pages/config-types/config-types-page.service.d.ts.map +1 -1
- package/lib/pages/configurations/configurations-page.service.d.ts.map +1 -1
- package/lib/pages/edge-router-policies/edge-router-policies-page.service.d.ts.map +1 -1
- package/lib/pages/edge-routers/edge-routers-page.service.d.ts.map +1 -1
- package/lib/pages/identities/identities-page.service.d.ts.map +1 -1
- package/lib/pages/jwt-signers/jwt-signers-page.service.d.ts.map +1 -1
- package/lib/pages/posture-checks/posture-checks-page.service.d.ts.map +1 -1
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.d.ts.map +1 -1
- package/lib/pages/service-policies/service-policies-page.service.d.ts.map +1 -1
- package/lib/pages/services/services-page.service.d.ts.map +1 -1
- package/lib/pages/terminators/terminators-page.service.d.ts.map +1 -1
- package/lib/pages/transit-routers/transit-routers-page.service.d.ts.map +1 -1
- package/lib/shared/list-page-service.class.d.ts +21 -0
- package/lib/shared/list-page-service.class.d.ts.map +1 -1
- package/lib/ziti-console-lib.module.d.ts +20 -18
- package/lib/ziti-console-lib.module.d.ts.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +4 -0
- package/public-api.d.ts.map +1 -1
package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.component.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint prefer-const: 1 */
|
|
2
|
-
import { Component, Inject,
|
|
2
|
+
import { Component, Inject, } from '@angular/core';
|
|
3
3
|
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
4
4
|
import { SETTINGS_SERVICE, } from '../../../services/settings.service';
|
|
5
5
|
import { ZITI_DATA_SERVICE, } from '../../../services/ziti-data.service';
|
|
@@ -24,6 +24,7 @@ class IdentityServicePathComponent {
|
|
|
24
24
|
this.router = router;
|
|
25
25
|
this.dialogRef = dialogRef;
|
|
26
26
|
this.data = data;
|
|
27
|
+
this.isDarkMode = false;
|
|
27
28
|
this.refreshRotate = false;
|
|
28
29
|
this.closeRotate = true;
|
|
29
30
|
this.filterText = 'fetching services..';
|
|
@@ -44,6 +45,8 @@ class IdentityServicePathComponent {
|
|
|
44
45
|
this.getEndpointNetworkAsCode();
|
|
45
46
|
this.autocompleteOptions = [];
|
|
46
47
|
this.isLoading = true;
|
|
48
|
+
const bgCol = d3.color(d3.select('body').style("background-color")).formatHex();
|
|
49
|
+
this.isDarkMode = bgCol == '#18191d' ? true : false;
|
|
47
50
|
}
|
|
48
51
|
getEndpointNetworkAsCode() {
|
|
49
52
|
const pagesize = 500;
|
|
@@ -303,16 +306,15 @@ class IdentityServicePathComponent {
|
|
|
303
306
|
link.each(function (d, i) {
|
|
304
307
|
const _this = d3.select(this);
|
|
305
308
|
if (d.status === 1) {
|
|
306
|
-
let doInUsage = true;
|
|
309
|
+
let doInUsage = true;
|
|
307
310
|
_this
|
|
308
311
|
.append('text')
|
|
309
|
-
// .text(d.netspeed)
|
|
310
312
|
.style('fill', 'rgb(255,198,22)')
|
|
311
313
|
.style('font-size', '11');
|
|
312
314
|
_this
|
|
313
315
|
.append('rect')
|
|
314
316
|
.attr('fill', function (d) {
|
|
315
|
-
return '
|
|
317
|
+
return 'white';
|
|
316
318
|
})
|
|
317
319
|
.attr('width', function (d) {
|
|
318
320
|
if (doInUsage) {
|
|
@@ -394,14 +396,12 @@ class IdentityServicePathComponent {
|
|
|
394
396
|
.attr('y', -25)
|
|
395
397
|
.attr('width', '40')
|
|
396
398
|
.attr('height', '40');
|
|
397
|
-
// node.append('title') .text(function (d) {return d.name;});
|
|
398
399
|
node
|
|
399
400
|
.append('text')
|
|
400
401
|
.attr('x', 10)
|
|
401
402
|
.attr('y', 12)
|
|
402
|
-
.
|
|
403
|
+
.attr('fill', 'var(--tableText)')
|
|
403
404
|
.text(function (d) {
|
|
404
|
-
// const name = d.type.includes('Service') ? d.alias : d.name;
|
|
405
405
|
return d.name;
|
|
406
406
|
});
|
|
407
407
|
simulation.nodes(nodes).on('tick', ticked);
|
|
@@ -492,7 +492,7 @@ class IdentityServicePathComponent {
|
|
|
492
492
|
}
|
|
493
493
|
}
|
|
494
494
|
function drawTooltip(event, d, endpointUtlizationJson) {
|
|
495
|
-
document.getElementById('epTooltip').innerHTML = readKeyValues(d, endpointUtlizationJson);
|
|
495
|
+
document.getElementById('epTooltip').innerHTML = readKeyValues(d, endpointUtlizationJson);
|
|
496
496
|
tooltip.style('display', 'block');
|
|
497
497
|
tooltip.style('white-space', 'pre-wrap');
|
|
498
498
|
const x = event.pageX + 'px';
|
|
@@ -525,35 +525,35 @@ class IdentityServicePathComponent {
|
|
|
525
525
|
else if (k === 'children') {
|
|
526
526
|
const kVal = d[k];
|
|
527
527
|
if (kVal && kVal !== '') {
|
|
528
|
-
info = info + '<div class="prop-row"
|
|
528
|
+
info = info + '<div class="prop-row">' + k + ': ' + kVal.length + '</div>';
|
|
529
529
|
}
|
|
530
530
|
}
|
|
531
531
|
else {
|
|
532
532
|
if (isAnObject(d[k])) {
|
|
533
533
|
const kVal = d[k];
|
|
534
534
|
if (kVal && kVal !== '') {
|
|
535
|
-
info = info + '<div class="prop-row"
|
|
535
|
+
info = info + '<div class="prop-row">' + k + ': ' + kVal.name + '</div>';
|
|
536
536
|
}
|
|
537
537
|
}
|
|
538
538
|
else if (d[k] instanceof Array) {
|
|
539
539
|
info =
|
|
540
540
|
info +
|
|
541
|
-
'<div class="prop-row"
|
|
541
|
+
'<div class="prop-row">' +
|
|
542
542
|
k +
|
|
543
|
-
'
|
|
543
|
+
': ' +
|
|
544
544
|
d[k].join('<br> ') +
|
|
545
|
-
'</div
|
|
545
|
+
'</div>';
|
|
546
546
|
}
|
|
547
547
|
else {
|
|
548
548
|
const vo = d[k];
|
|
549
549
|
if (vo && vo !== '') {
|
|
550
550
|
info =
|
|
551
551
|
info +
|
|
552
|
-
'<div class="prop-row"
|
|
552
|
+
'<div class="prop-row">' +
|
|
553
553
|
k +
|
|
554
|
-
'
|
|
554
|
+
': ' +
|
|
555
555
|
(vo !== null || vo !== '' ? d[k] : 'N/A') +
|
|
556
|
-
'</div
|
|
556
|
+
'</div>';
|
|
557
557
|
}
|
|
558
558
|
}
|
|
559
559
|
}
|
|
@@ -566,12 +566,12 @@ class IdentityServicePathComponent {
|
|
|
566
566
|
this.refreshRotate = false;
|
|
567
567
|
} // end of initTopoView
|
|
568
568
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityServicePathComponent, deps: [{ token: i1.IdentityServicePathHelper }, { token: SETTINGS_SERVICE }, { token: ZITI_DATA_SERVICE }, { token: i2.Router }, { token: i3.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
569
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: IdentityServicePathComponent, selector: "app-identity-visualizer", ngImport: i0, template: "<div [ngClass]=\"{ 'full-screen': fullScreen }\" class=\"modal solid\" id=\"IdentityVisualizerDataModal\">\n <div class=\"tp-data-header\">\n <div class=\"modaltitle\">Identity Service Path</div>\n <div (click)=\"hide()\" class=\"buttonBall icon-close\" id=\"EscZEndpointClose\"></div>\n <div (click)=\"toggleModalSize()\" class=\"buttonBall resize\" id=\"ResizeModalButton\"></div>\n </div>\n\n <div class=\"identity-topology-container\">\n\n <div style=\"width: 100%; height: 80px; float: left\">\n <div class=\"ep-topology-filter-container listBox row\">\n <input\n (keyup)=\"filterSearchArray()\"\n [(ngModel)]=\"selectedService\"\n [matAutocomplete]=\"auto\"\n class=\"topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to search identity accessible services.\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText\"\n class=\"clear-svc-icon icon-close\"\n id=\"ClearSearchFilter\"\n ></div>\n <div [hidden]=\"!noSearchResults\" class=\"no-results-warning\">No Results Found</div>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option.name\">\n {{ option.name }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"epTooltip\"></div>\n\n <svg style='pointer-events:all' height=\"1000\" id=\"IdentityTopology\" width=\"1200\">\n </svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n\n <div class=\"topology-legendA\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Component Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Unregistered / Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">Registered, Online</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle errored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n <div class=\"topology-legendB\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Link Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">In Usage</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_not_in_use\"></div>\n <div class=\"legend-text\">Usage Date N/A</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle linkerrored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n </div>\n</div>\n", styles: ["#IdentityVisualizerDataModal{overflow:hidden;width:75%;height:85%;background-color:var(--background);border-radius:1.5625rem;z-index:1001;margin:auto;inset:0rem;position:fixed}#IdentityVisualizerDataModal .buttonBall{cursor:pointer;font-weight:600}#IdentityVisualizerDataModal .buttonBall.icon-close{position:absolute;top:1.25rem;right:1.25rem;font-size:1.4375rem;color:var(--icon)}#IdentityVisualizerDataModal .buttonBall:hover{filter:brightness(50%)}#IdentityVisualizerDataModal .clear-svc-icon{font-size:1.4375rem;font-weight:600;position:absolute;top:.9375rem;right:2.5rem;color:var(--icon);cursor:pointer}#IdentityVisualizerDataModal .clear-svc-icon:hover{filter:brightness(50%)}#IdentityVisualizerDataModal.full-screen{width:100%;height:100%;border-radius:0}#IdentityVisualizerDataModal .ep-topology-filter-container{width:37%;display:flex;flex-direction:row;position:absolute;margin:1.25rem;padding:0}#IdentityVisualizerDataModal .buttonBall.resize{top:1.25rem;width:1.4375rem;height:1.4375rem;right:3.4375rem;background-image:url(/assets/svgs/Resize.svg);background-size:1.4375rem 1.4375rem;position:absolute;cursor:pointer}#IdentityVisualizerDataModal .identity-topology-container{display:flex;margin-left:-.3125rem;margin-top:.625rem;flex-direction:column;cursor:grab;background:#f5e9f2;background-image:linear-gradient(#ecd3e6 .125rem,transparent 0),linear-gradient(90deg,#ecd3e6 .125rem,transparent 0),linear-gradient(#ecd3e6 .0625rem,transparent 0),linear-gradient(90deg,#ecd3e6 .0625rem,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}#IdentityVisualizerDataModal .tp-data-header{height:2.5rem;font-size:1.5625rem;font-weight:600;margin-left:1.25rem;margin-top:.625rem;margin-bottom:.3125rem;font-family:Russo One;color:var(--primaryColor);font-size:1.875rem;text-transform:uppercase;font-weight:400}#IdentityVisualizerDataModal .node text{font:.75rem Open Sans,Arial,sans-serif}#IdentityVisualizerDataModal .modaltitle{filter:brightness(50%);padding-top:.375rem;padding-left:.3125rem}#IdentityVisualizerDataModal .modalbuttons{padding-right:1.25rem}#IdentityVisualizerDataModal .listBox.row .close{position:fixed;display:flex;flex-direction:column;font-family:icomoon!important;font-style:normal;font-weight:600;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--icon);text-align:center;font-size:2.1875rem;line-height:2.5rem;left:35%;top:17%;width:2.5rem;height:2.5rem;background-image:url(/assets/svgs/close.svg);z-index:600;background-position:center center;background-size:75%;cursor:pointer;transition:.3s;justify-content:end;align-items:center}#IdentityVisualizerDataModal .tp-topo-data-header{border:0rem solid black;height:75rem;font-size:.75rem;font-weight:400;margin-left:.75rem;margin-top:.1875rem;color:var(--primaryColor)}#IdentityVisualizerDataModal .services-select{width:25rem;flex-shrink:0;border-radius:1.6875rem;height:3.1875rem;margin-left:1.375rem;margin-top:.625rem;background-color:#fff;border-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);color:var(--tableText);padding-left:1.25rem}#IdentityVisualizerDataModal select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right .9375rem;background-repeat:no-repeat;background-size:1.125rem;padding-right:2.9375rem}#IdentityVisualizerDataModal .topology-filter-input{height:3.125rem;width:95%;border-radius:1.5625rem;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding-left:1.25rem}#IdentityVisualizerDataModal .topotip{display:none;position:fixed;background:var(--navigation);border:0rem;border-radius:.75rem;pointer-events:none;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .3s;padding:.3125rem 0;font-size:1.0625rem;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;max-width:28.125rem}#IdentityVisualizerDataModal .topology-legendA{border:0rem solid blue;width:12.5rem;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;display:inline-block;top:4.6875rem;right:0rem;background:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-top:0}#IdentityVisualizerDataModal .topology-legendB{width:12.5rem;border:0rem solid blue;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;top:12.5rem;right:0rem;background:var(--navigation);display:inline-block;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-left:.625rem}#IdentityVisualizerDataModal .legend-item{width:100%;height:100%;display:inline-block}#IdentityVisualizerDataModal .legend-item-head{width:105%;height:100%;display:inline-block;border:0rem solid blue;left:-.1875rem}#IdentityVisualizerDataModal .legend-circle{height:.75rem;width:.75rem;border-radius:.9375rem;display:inline-block;margin-top:.4375rem}#IdentityVisualizerDataModal .legend-circle.unregistered{background-color:#d8dce7}#IdentityVisualizerDataModal .legend-circle.registered_not_in_use{border:.0625rem solid #08dc5a;background-color:#fff}#IdentityVisualizerDataModal .legend-circle.registered_in_use{background-color:#08dc5a}#IdentityVisualizerDataModal .legend-circle.errored{background-color:#fb0d3d}#IdentityVisualizerDataModal .legend-circle.linkerrored{background-image:url(/assets/images/visualizer/link-cut.png);background-size:contain}#IdentityVisualizerDataModal .legend-text{display:inline-block;font-size:.9375rem;font-weight:600;color:var(--tableText);padding-left:.4375rem;padding-bottom:.25rem}#IdentityVisualizerDataModal .legend-text-heading{text-align:center;display:inline-block;font-size:.875rem;font-weight:600;color:var(--tableText);padding-left:.625rem;padding-top:.125rem;padding-bottom:.125rem;color:#8a2be2}#IdentityVisualizerDataModal .legend-text2{display:inline-block;font-size:.625rem;font-weight:400;color:var(--tableText);padding-left:.125rem;padding-bottom:.25rem}#IdentityVisualizerDataModal .filters-area{display:flex;flex-direction:row;align-items:center;justify-content:flex-end;margin-top:.625rem}#IdentityVisualizerDataModal .dateTimeField input{height:2.5rem;vertical-align:middle;margin-right:.0625rem}#IdentityVisualizerDataModal .p-datepicker table td{padding:0rem}#IdentityVisualizerDataModal .p-datepicker table td>span{padding:0rem}#IdentityVisualizerDataModal .p-timepicker{padding:.0625rem}#IdentityVisualizerDataModal .p-datepicker-header,#IdentityVisualizerDataModal .p-datepicker-header-group{padding:0rem}#IdentityVisualizerDataModal .p-datepicker .p-timepicker button:last-child{height:.9375rem}#IdentityVisualizerDataModal .p-datepicker .p-timepicker button{height:.9375rem}#IdentityVisualizerDataModal .ng-tns-c15-3{font-size:.9375rem;font-weight:700}#IdentityVisualizerDataModal .p-datepicker .p-datepicker-buttonbar{padding:0rem}#IdentityVisualizerDataModal .reset-button{height:3.125rem;width:3.125rem;margin-top:-7%;margin-left:70%;border-radius:3.125rem;margin-right:.625rem;background-size:contain;--background-image: url(/assets/svgs/refresh.svg);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:.3s}#IdentityVisualizerDataModal .refresh-button{position:absolute;display:inline-block;height:2.6875rem;width:7.625rem;margin-top:-5.3125rem;margin-left:65%;border-radius:.625rem;margin-right:.625rem;font-color:blue;font-weight:700}#IdentityVisualizerDataModal .reset-button:hover{filter:brightness(90%);transform:scale(.97);transition:.3s}#IdentityVisualizerDataModal .reset-button:active{transform:scale(.9);transition:.3s}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#IdentityVisualizerDataModal .rotating{animation:rotating 2s linear infinite}.tool-tip-container .prop-row{display:grid;grid-template-columns:2fr 3fr;grid-gap:.625rem;grid-template-areas:\"propName propVal\";height:-moz-fit-content;height:fit-content;min-height:1.5625rem;align-items:center;padding:0 .625rem}.tool-tip-container .prop-row:nth-child(2n){background-color:var(--formBackground)}.tool-tip-container .prop-row .prop-name{grid-area:propName;font-weight:700}.tool-tip-container .prop-row .prop-val{grid-area:propVal}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i8.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
569
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: IdentityServicePathComponent, selector: "app-identity-visualizer", ngImport: i0, template: "<div [ngClass]=\"{ 'full-screen': fullScreen }\" class=\"modal solid\" id=\"IdentityVisualizer\">\n <div class=\"tp-data-header\">\n <div class=\"modaltitle\">Identity Service Path</div>\n <div (click)=\"hide()\" class=\"buttonBall icon-close\" id=\"EscZEndpointClose\"></div>\n <div (click)=\"toggleModalSize()\" class=\"buttonBall resize\" id=\"ResizeModalButton\"></div>\n </div>\n <div [ngClass]=\"isDarkMode==true?'darkMode':'lightMode'\" class=\"identity-topology-container\">\n <div style=\"width: 100%; height: 80px; float: left\">\n <div class=\"ep-topology-filter-container listBox row\">\n <input\n (keyup)=\"filterSearchArray()\"\n [(ngModel)]=\"selectedService\"\n [matAutocomplete]=\"auto\"\n class=\"topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to search identity accessible services.\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText\"\n class=\"clear-svc-icon icon-close\"\n id=\"ClearSearchFilter\"\n ></div>\n <div [hidden]=\"!noSearchResults\" class=\"no-results-warning\">No Results Found</div>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option.name\">\n {{ option.name }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"epTooltip\"></div>\n\n <svg style='pointer-events:all' height=\"1000\" id=\"IdentityTopology\" width=\"1200\">\n </svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n\n <div class=\"topology-legendA\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Component Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Unregistered / Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">Registered, Online</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle errored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n <div class=\"topology-legendB\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Link Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">In Usage</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_not_in_use\"></div>\n <div class=\"legend-text\">Usage Date N/A</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle linkerrored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n </div>\n</div>\n", styles: ["#IdentityVisualizer{overflow:hidden;width:75%;height:85%;background-color:var(--background);border-radius:1.5625rem;z-index:1001;margin:auto;inset:0rem;position:fixed}#IdentityVisualizer .buttonBall{cursor:pointer;font-weight:600}#IdentityVisualizer .buttonBall.icon-close{position:absolute;top:1.25rem;right:1.25rem;font-size:1.4375rem;color:var(--icon)}#IdentityVisualizer .buttonBall:hover{filter:brightness(50%)}#IdentityVisualizer .clear-svc-icon{font-size:1.4375rem;font-weight:600;position:relative;top:.9375rem;right:2.5rem;color:var(--icon);cursor:pointer}#IdentityVisualizer .clear-svc-icon:hover{filter:brightness(50%)}#IdentityVisualizer.full-screen{width:100%;height:100%;border-radius:0}.ep-topology-filter-container{width:37%;display:flex;flex-direction:row;position:absolute;margin:1.25rem;padding:0}.buttonBall.resize{top:1.25rem;width:1.4375rem;height:1.4375rem;right:3.4375rem;background-image:url(/assets/svgs/Resize.svg);background-size:1.4375rem 1.4375rem;position:absolute;cursor:pointer}.identity-topology-container{display:flex;margin-left:-.3125rem;margin-top:.625rem;flex-direction:column;cursor:grab}.lightMode{background:#f5e9f2;background-image:linear-gradient(#ecd3e6 .125rem,transparent 0),linear-gradient(90deg,#ecd3e6 .125rem,transparent 0),linear-gradient(#ecd3e6 .0625rem,transparent 0),linear-gradient(90deg,#ecd3e6 .0625rem,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}.darkMode{background:#000a17;background-image:linear-gradient(#001127 .125rem,transparent 0),linear-gradient(90deg,#001127 .125rem,transparent 0),linear-gradient(#001127 1px,transparent 0),linear-gradient(90deg,#001127 1px,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}.tp-data-header{height:2.5rem;font-size:1.5625rem;font-weight:600;margin-left:1.25rem;margin-top:.625rem;margin-bottom:.3125rem;font-family:Russo One;color:var(--primaryColor);font-size:1.875rem;text-transform:uppercase;font-weight:400}.node text{font:.75rem Open Sans,Arial,sans-serif}.modaltitle{padding-top:.375rem;padding-left:.3125rem;color:var(--primaryColor)}.modalbuttons{padding-right:1.25rem}.listBox.row .close{position:fixed;display:flex;flex-direction:column;font-family:icomoon!important;font-style:normal;font-weight:600;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--icon);text-align:center;font-size:2.1875rem;line-height:2.5rem;left:35%;top:17%;width:2.5rem;height:2.5rem;background-image:url(/assets/svgs/close.svg);z-index:600;background-position:center center;background-size:75%;cursor:pointer;transition:.3s;justify-content:end;align-items:center}.tp-topo-data-header{border:0rem solid black;height:75rem;font-size:.75rem;font-weight:400;margin-left:.75rem;margin-top:.1875rem;color:var(--primaryColor)}.services-select{width:25rem;flex-shrink:0;border-radius:1.6875rem;height:3.1875rem;margin-left:1.375rem;margin-top:.625rem;background-color:#fff;border-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);color:var(--tableText);padding-left:1.25rem}select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right .9375rem;background-repeat:no-repeat;background-size:1.125rem;padding-right:2.9375rem}.topology-filter-input{height:3.125rem;width:95%;border-radius:1.5625rem;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding-left:1.25rem}.topotip{display:none;position:fixed;background:var(--navigation);border:.1rem;border-radius:.75rem;pointer-events:none;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .3s;padding:.3125rem 0;font-size:1.0625rem;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;padding:1rem}.topology-legendA{border:0rem solid blue;width:12.5rem;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;display:inline-block;top:4.6875rem;right:0rem;background:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-top:0}.topology-legendB{width:12.5rem;border:0rem solid blue;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;top:12.5rem;right:0rem;background:var(--navigation);display:inline-block;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-left:.625rem}.legend-item{width:100%;height:100%;display:inline-block}.legend-item-head{width:105%;height:100%;display:inline-block;border:0rem solid blue;left:-.1875rem}.legend-circle{height:.75rem;width:.75rem;border-radius:.9375rem;display:inline-block;margin-top:.4375rem}.legend-circle.unregistered{background-color:#d8dce7}.legend-circle.registered_not_in_use{border:.0625rem solid #08dc5a;background-color:#fff}.legend-circle.registered_in_use{background-color:#08dc5a}.legend-circle.errored{background-color:#fb0d3d}.legend-circle.linkerrored{background-image:url(/assets/images/visualizer/link-cut.png);background-size:contain}.legend-text{display:inline-block;font-size:.9375rem;font-weight:600;color:var(--tableText);padding-left:.4375rem;padding-bottom:.25rem}.legend-text-heading{text-align:center;display:inline-block;font-size:.875rem;font-weight:600;color:var(--tableText);padding-left:.625rem;padding-top:.125rem;padding-bottom:.125rem;color:#8a2be2}.legend-text2{display:inline-block;font-size:.625rem;font-weight:400;color:var(--tableText);padding-left:.125rem;padding-bottom:.25rem}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.rotating{animation:rotating 2s linear infinite}.tool-tip-container .prop-row{display:grid;grid-template-columns:auto auto;grid-gap:.625rem;height:-moz-fit-content;height:fit-content;width:-moz-fit-content;width:fit-content;min-height:1.5625rem;align-items:center;padding:.5rem}.tool-tip-container .prop-row:nth-child(2n){background-color:var(--formBackground)}::ng-deep .cdk-overlay-pane:not(.mat-mdc-autocomplete-panel-above) div.mat-mdc-autocomplete-panel{border-radius:14px;background:var(--background);color:var(--tableText)}::ng-deep .mat-mdc-option.mdc-list-item{align-items:center;color:var(--tableText)}::ng-deep .mat-mdc-option.mdc-list-item:hover:not(.mat-option-disabled),::ng-deep .mat-mdc-option.mdc-list-item:focus:not(.mat-option-disabled){border-color:var(--primaryColor);border-radius:14px;border:.01rem solid var(--primaryColor)}::ng-deep .mat-mdc-raised-button .mdc-button__ripple{border:.1rem solid var(--primaryColor)}::ng-deep .p-button.p-button-icon-only{width:1.357rem}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i8.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }] }); }
|
|
570
570
|
}
|
|
571
571
|
export { IdentityServicePathComponent };
|
|
572
572
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityServicePathComponent, decorators: [{
|
|
573
573
|
type: Component,
|
|
574
|
-
args: [{ selector: 'app-identity-visualizer', encapsulation: ViewEncapsulation.None, template: "<div [ngClass]=\"{ 'full-screen': fullScreen }\" class=\"modal solid\" id=\"IdentityVisualizerDataModal\">\n <div class=\"tp-data-header\">\n <div class=\"modaltitle\">Identity Service Path</div>\n <div (click)=\"hide()\" class=\"buttonBall icon-close\" id=\"EscZEndpointClose\"></div>\n <div (click)=\"toggleModalSize()\" class=\"buttonBall resize\" id=\"ResizeModalButton\"></div>\n </div>\n\n <div class=\"identity-topology-container\">\n\n <div style=\"width: 100%; height: 80px; float: left\">\n <div class=\"ep-topology-filter-container listBox row\">\n <input\n (keyup)=\"filterSearchArray()\"\n [(ngModel)]=\"selectedService\"\n [matAutocomplete]=\"auto\"\n class=\"topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to search identity accessible services.\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText\"\n class=\"clear-svc-icon icon-close\"\n id=\"ClearSearchFilter\"\n ></div>\n <div [hidden]=\"!noSearchResults\" class=\"no-results-warning\">No Results Found</div>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option.name\">\n {{ option.name }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"epTooltip\"></div>\n\n <svg style='pointer-events:all' height=\"1000\" id=\"IdentityTopology\" width=\"1200\">\n </svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n\n <div class=\"topology-legendA\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Component Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Unregistered / Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">Registered, Online</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle errored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n <div class=\"topology-legendB\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Link Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">In Usage</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_not_in_use\"></div>\n <div class=\"legend-text\">Usage Date N/A</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle linkerrored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n </div>\n</div>\n", styles: ["#IdentityVisualizerDataModal{overflow:hidden;width:75%;height:85%;background-color:var(--background);border-radius:1.5625rem;z-index:1001;margin:auto;inset:0rem;position:fixed}#IdentityVisualizerDataModal .buttonBall{cursor:pointer;font-weight:600}#IdentityVisualizerDataModal .buttonBall.icon-close{position:absolute;top:1.25rem;right:1.25rem;font-size:1.4375rem;color:var(--icon)}#IdentityVisualizerDataModal .buttonBall:hover{filter:brightness(50%)}#IdentityVisualizerDataModal .clear-svc-icon{font-size:1.4375rem;font-weight:600;position:absolute;top:.9375rem;right:2.5rem;color:var(--icon);cursor:pointer}#IdentityVisualizerDataModal .clear-svc-icon:hover{filter:brightness(50%)}#IdentityVisualizerDataModal.full-screen{width:100%;height:100%;border-radius:0}#IdentityVisualizerDataModal .ep-topology-filter-container{width:37%;display:flex;flex-direction:row;position:absolute;margin:1.25rem;padding:0}#IdentityVisualizerDataModal .buttonBall.resize{top:1.25rem;width:1.4375rem;height:1.4375rem;right:3.4375rem;background-image:url(/assets/svgs/Resize.svg);background-size:1.4375rem 1.4375rem;position:absolute;cursor:pointer}#IdentityVisualizerDataModal .identity-topology-container{display:flex;margin-left:-.3125rem;margin-top:.625rem;flex-direction:column;cursor:grab;background:#f5e9f2;background-image:linear-gradient(#ecd3e6 .125rem,transparent 0),linear-gradient(90deg,#ecd3e6 .125rem,transparent 0),linear-gradient(#ecd3e6 .0625rem,transparent 0),linear-gradient(90deg,#ecd3e6 .0625rem,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}#IdentityVisualizerDataModal .tp-data-header{height:2.5rem;font-size:1.5625rem;font-weight:600;margin-left:1.25rem;margin-top:.625rem;margin-bottom:.3125rem;font-family:Russo One;color:var(--primaryColor);font-size:1.875rem;text-transform:uppercase;font-weight:400}#IdentityVisualizerDataModal .node text{font:.75rem Open Sans,Arial,sans-serif}#IdentityVisualizerDataModal .modaltitle{filter:brightness(50%);padding-top:.375rem;padding-left:.3125rem}#IdentityVisualizerDataModal .modalbuttons{padding-right:1.25rem}#IdentityVisualizerDataModal .listBox.row .close{position:fixed;display:flex;flex-direction:column;font-family:icomoon!important;font-style:normal;font-weight:600;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--icon);text-align:center;font-size:2.1875rem;line-height:2.5rem;left:35%;top:17%;width:2.5rem;height:2.5rem;background-image:url(/assets/svgs/close.svg);z-index:600;background-position:center center;background-size:75%;cursor:pointer;transition:.3s;justify-content:end;align-items:center}#IdentityVisualizerDataModal .tp-topo-data-header{border:0rem solid black;height:75rem;font-size:.75rem;font-weight:400;margin-left:.75rem;margin-top:.1875rem;color:var(--primaryColor)}#IdentityVisualizerDataModal .services-select{width:25rem;flex-shrink:0;border-radius:1.6875rem;height:3.1875rem;margin-left:1.375rem;margin-top:.625rem;background-color:#fff;border-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);color:var(--tableText);padding-left:1.25rem}#IdentityVisualizerDataModal select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right .9375rem;background-repeat:no-repeat;background-size:1.125rem;padding-right:2.9375rem}#IdentityVisualizerDataModal .topology-filter-input{height:3.125rem;width:95%;border-radius:1.5625rem;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding-left:1.25rem}#IdentityVisualizerDataModal .topotip{display:none;position:fixed;background:var(--navigation);border:0rem;border-radius:.75rem;pointer-events:none;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .3s;padding:.3125rem 0;font-size:1.0625rem;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;max-width:28.125rem}#IdentityVisualizerDataModal .topology-legendA{border:0rem solid blue;width:12.5rem;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;display:inline-block;top:4.6875rem;right:0rem;background:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-top:0}#IdentityVisualizerDataModal .topology-legendB{width:12.5rem;border:0rem solid blue;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;top:12.5rem;right:0rem;background:var(--navigation);display:inline-block;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-left:.625rem}#IdentityVisualizerDataModal .legend-item{width:100%;height:100%;display:inline-block}#IdentityVisualizerDataModal .legend-item-head{width:105%;height:100%;display:inline-block;border:0rem solid blue;left:-.1875rem}#IdentityVisualizerDataModal .legend-circle{height:.75rem;width:.75rem;border-radius:.9375rem;display:inline-block;margin-top:.4375rem}#IdentityVisualizerDataModal .legend-circle.unregistered{background-color:#d8dce7}#IdentityVisualizerDataModal .legend-circle.registered_not_in_use{border:.0625rem solid #08dc5a;background-color:#fff}#IdentityVisualizerDataModal .legend-circle.registered_in_use{background-color:#08dc5a}#IdentityVisualizerDataModal .legend-circle.errored{background-color:#fb0d3d}#IdentityVisualizerDataModal .legend-circle.linkerrored{background-image:url(/assets/images/visualizer/link-cut.png);background-size:contain}#IdentityVisualizerDataModal .legend-text{display:inline-block;font-size:.9375rem;font-weight:600;color:var(--tableText);padding-left:.4375rem;padding-bottom:.25rem}#IdentityVisualizerDataModal .legend-text-heading{text-align:center;display:inline-block;font-size:.875rem;font-weight:600;color:var(--tableText);padding-left:.625rem;padding-top:.125rem;padding-bottom:.125rem;color:#8a2be2}#IdentityVisualizerDataModal .legend-text2{display:inline-block;font-size:.625rem;font-weight:400;color:var(--tableText);padding-left:.125rem;padding-bottom:.25rem}#IdentityVisualizerDataModal .filters-area{display:flex;flex-direction:row;align-items:center;justify-content:flex-end;margin-top:.625rem}#IdentityVisualizerDataModal .dateTimeField input{height:2.5rem;vertical-align:middle;margin-right:.0625rem}#IdentityVisualizerDataModal .p-datepicker table td{padding:0rem}#IdentityVisualizerDataModal .p-datepicker table td>span{padding:0rem}#IdentityVisualizerDataModal .p-timepicker{padding:.0625rem}#IdentityVisualizerDataModal .p-datepicker-header,#IdentityVisualizerDataModal .p-datepicker-header-group{padding:0rem}#IdentityVisualizerDataModal .p-datepicker .p-timepicker button:last-child{height:.9375rem}#IdentityVisualizerDataModal .p-datepicker .p-timepicker button{height:.9375rem}#IdentityVisualizerDataModal .ng-tns-c15-3{font-size:.9375rem;font-weight:700}#IdentityVisualizerDataModal .p-datepicker .p-datepicker-buttonbar{padding:0rem}#IdentityVisualizerDataModal .reset-button{height:3.125rem;width:3.125rem;margin-top:-7%;margin-left:70%;border-radius:3.125rem;margin-right:.625rem;background-size:contain;--background-image: url(/assets/svgs/refresh.svg);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:.3s}#IdentityVisualizerDataModal .refresh-button{position:absolute;display:inline-block;height:2.6875rem;width:7.625rem;margin-top:-5.3125rem;margin-left:65%;border-radius:.625rem;margin-right:.625rem;font-color:blue;font-weight:700}#IdentityVisualizerDataModal .reset-button:hover{filter:brightness(90%);transform:scale(.97);transition:.3s}#IdentityVisualizerDataModal .reset-button:active{transform:scale(.9);transition:.3s}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#IdentityVisualizerDataModal .rotating{animation:rotating 2s linear infinite}.tool-tip-container .prop-row{display:grid;grid-template-columns:2fr 3fr;grid-gap:.625rem;grid-template-areas:\"propName propVal\";height:-moz-fit-content;height:fit-content;min-height:1.5625rem;align-items:center;padding:0 .625rem}.tool-tip-container .prop-row:nth-child(2n){background-color:var(--formBackground)}.tool-tip-container .prop-row .prop-name{grid-area:propName;font-weight:700}.tool-tip-container .prop-row .prop-val{grid-area:propVal}\n"] }]
|
|
574
|
+
args: [{ selector: 'app-identity-visualizer', template: "<div [ngClass]=\"{ 'full-screen': fullScreen }\" class=\"modal solid\" id=\"IdentityVisualizer\">\n <div class=\"tp-data-header\">\n <div class=\"modaltitle\">Identity Service Path</div>\n <div (click)=\"hide()\" class=\"buttonBall icon-close\" id=\"EscZEndpointClose\"></div>\n <div (click)=\"toggleModalSize()\" class=\"buttonBall resize\" id=\"ResizeModalButton\"></div>\n </div>\n <div [ngClass]=\"isDarkMode==true?'darkMode':'lightMode'\" class=\"identity-topology-container\">\n <div style=\"width: 100%; height: 80px; float: left\">\n <div class=\"ep-topology-filter-container listBox row\">\n <input\n (keyup)=\"filterSearchArray()\"\n [(ngModel)]=\"selectedService\"\n [matAutocomplete]=\"auto\"\n class=\"topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to search identity accessible services.\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText\"\n class=\"clear-svc-icon icon-close\"\n id=\"ClearSearchFilter\"\n ></div>\n <div [hidden]=\"!noSearchResults\" class=\"no-results-warning\">No Results Found</div>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option.name\">\n {{ option.name }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"epTooltip\"></div>\n\n <svg style='pointer-events:all' height=\"1000\" id=\"IdentityTopology\" width=\"1200\">\n </svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n\n <div class=\"topology-legendA\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Component Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Unregistered / Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">Registered, Online</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle errored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n <div class=\"topology-legendB\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Link Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">In Usage</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_not_in_use\"></div>\n <div class=\"legend-text\">Usage Date N/A</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle linkerrored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n </div>\n</div>\n", styles: ["#IdentityVisualizer{overflow:hidden;width:75%;height:85%;background-color:var(--background);border-radius:1.5625rem;z-index:1001;margin:auto;inset:0rem;position:fixed}#IdentityVisualizer .buttonBall{cursor:pointer;font-weight:600}#IdentityVisualizer .buttonBall.icon-close{position:absolute;top:1.25rem;right:1.25rem;font-size:1.4375rem;color:var(--icon)}#IdentityVisualizer .buttonBall:hover{filter:brightness(50%)}#IdentityVisualizer .clear-svc-icon{font-size:1.4375rem;font-weight:600;position:relative;top:.9375rem;right:2.5rem;color:var(--icon);cursor:pointer}#IdentityVisualizer .clear-svc-icon:hover{filter:brightness(50%)}#IdentityVisualizer.full-screen{width:100%;height:100%;border-radius:0}.ep-topology-filter-container{width:37%;display:flex;flex-direction:row;position:absolute;margin:1.25rem;padding:0}.buttonBall.resize{top:1.25rem;width:1.4375rem;height:1.4375rem;right:3.4375rem;background-image:url(/assets/svgs/Resize.svg);background-size:1.4375rem 1.4375rem;position:absolute;cursor:pointer}.identity-topology-container{display:flex;margin-left:-.3125rem;margin-top:.625rem;flex-direction:column;cursor:grab}.lightMode{background:#f5e9f2;background-image:linear-gradient(#ecd3e6 .125rem,transparent 0),linear-gradient(90deg,#ecd3e6 .125rem,transparent 0),linear-gradient(#ecd3e6 .0625rem,transparent 0),linear-gradient(90deg,#ecd3e6 .0625rem,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}.darkMode{background:#000a17;background-image:linear-gradient(#001127 .125rem,transparent 0),linear-gradient(90deg,#001127 .125rem,transparent 0),linear-gradient(#001127 1px,transparent 0),linear-gradient(90deg,#001127 1px,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}.tp-data-header{height:2.5rem;font-size:1.5625rem;font-weight:600;margin-left:1.25rem;margin-top:.625rem;margin-bottom:.3125rem;font-family:Russo One;color:var(--primaryColor);font-size:1.875rem;text-transform:uppercase;font-weight:400}.node text{font:.75rem Open Sans,Arial,sans-serif}.modaltitle{padding-top:.375rem;padding-left:.3125rem;color:var(--primaryColor)}.modalbuttons{padding-right:1.25rem}.listBox.row .close{position:fixed;display:flex;flex-direction:column;font-family:icomoon!important;font-style:normal;font-weight:600;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--icon);text-align:center;font-size:2.1875rem;line-height:2.5rem;left:35%;top:17%;width:2.5rem;height:2.5rem;background-image:url(/assets/svgs/close.svg);z-index:600;background-position:center center;background-size:75%;cursor:pointer;transition:.3s;justify-content:end;align-items:center}.tp-topo-data-header{border:0rem solid black;height:75rem;font-size:.75rem;font-weight:400;margin-left:.75rem;margin-top:.1875rem;color:var(--primaryColor)}.services-select{width:25rem;flex-shrink:0;border-radius:1.6875rem;height:3.1875rem;margin-left:1.375rem;margin-top:.625rem;background-color:#fff;border-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);color:var(--tableText);padding-left:1.25rem}select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right .9375rem;background-repeat:no-repeat;background-size:1.125rem;padding-right:2.9375rem}.topology-filter-input{height:3.125rem;width:95%;border-radius:1.5625rem;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding-left:1.25rem}.topotip{display:none;position:fixed;background:var(--navigation);border:.1rem;border-radius:.75rem;pointer-events:none;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .3s;padding:.3125rem 0;font-size:1.0625rem;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;padding:1rem}.topology-legendA{border:0rem solid blue;width:12.5rem;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;display:inline-block;top:4.6875rem;right:0rem;background:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-top:0}.topology-legendB{width:12.5rem;border:0rem solid blue;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;top:12.5rem;right:0rem;background:var(--navigation);display:inline-block;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-left:.625rem}.legend-item{width:100%;height:100%;display:inline-block}.legend-item-head{width:105%;height:100%;display:inline-block;border:0rem solid blue;left:-.1875rem}.legend-circle{height:.75rem;width:.75rem;border-radius:.9375rem;display:inline-block;margin-top:.4375rem}.legend-circle.unregistered{background-color:#d8dce7}.legend-circle.registered_not_in_use{border:.0625rem solid #08dc5a;background-color:#fff}.legend-circle.registered_in_use{background-color:#08dc5a}.legend-circle.errored{background-color:#fb0d3d}.legend-circle.linkerrored{background-image:url(/assets/images/visualizer/link-cut.png);background-size:contain}.legend-text{display:inline-block;font-size:.9375rem;font-weight:600;color:var(--tableText);padding-left:.4375rem;padding-bottom:.25rem}.legend-text-heading{text-align:center;display:inline-block;font-size:.875rem;font-weight:600;color:var(--tableText);padding-left:.625rem;padding-top:.125rem;padding-bottom:.125rem;color:#8a2be2}.legend-text2{display:inline-block;font-size:.625rem;font-weight:400;color:var(--tableText);padding-left:.125rem;padding-bottom:.25rem}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.rotating{animation:rotating 2s linear infinite}.tool-tip-container .prop-row{display:grid;grid-template-columns:auto auto;grid-gap:.625rem;height:-moz-fit-content;height:fit-content;width:-moz-fit-content;width:fit-content;min-height:1.5625rem;align-items:center;padding:.5rem}.tool-tip-container .prop-row:nth-child(2n){background-color:var(--formBackground)}::ng-deep .cdk-overlay-pane:not(.mat-mdc-autocomplete-panel-above) div.mat-mdc-autocomplete-panel{border-radius:14px;background:var(--background);color:var(--tableText)}::ng-deep .mat-mdc-option.mdc-list-item{align-items:center;color:var(--tableText)}::ng-deep .mat-mdc-option.mdc-list-item:hover:not(.mat-option-disabled),::ng-deep .mat-mdc-option.mdc-list-item:focus:not(.mat-option-disabled){border-color:var(--primaryColor);border-radius:14px;border:.01rem solid var(--primaryColor)}::ng-deep .mat-mdc-raised-button .mdc-button__ripple{border:.1rem solid var(--primaryColor)}::ng-deep .p-button.p-button-icon-only{width:1.357rem}\n"] }]
|
|
575
575
|
}], ctorParameters: function () { return [{ type: i1.IdentityServicePathHelper }, { type: i9.SettingsService, decorators: [{
|
|
576
576
|
type: Inject,
|
|
577
577
|
args: [SETTINGS_SERVICE]
|
|
@@ -584,4 +584,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
584
584
|
}] }]; } });
|
|
585
585
|
class ServiceData {
|
|
586
586
|
}
|
|
587
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktc2VydmljZS1wYXRoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy92aXN1YWxpemVyL2lkZW50aXR5LXNlcnZpY2UtcGF0aC9pZGVudGl0eS1zZXJ2aWNlLXBhdGguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Zpc3VhbGl6ZXIvaWRlbnRpdHktc2VydmljZS1wYXRoL2lkZW50aXR5LXNlcnZpY2UtcGF0aC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsT0FBTyxFQUNMLFNBQVMsRUFFVCxNQUFNLEVBRU4saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFFekUsT0FBTyxFQUNMLGdCQUFnQixHQUVqQixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFDTCxpQkFBaUIsR0FFbEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3QyxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUV6QixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7Ozs7OztBQU12QixNQU1hLDRCQUE0QjtJQXdCdkMsWUFDVSx5QkFBb0QsRUFDM0IsZUFBZ0MsRUFDOUIsV0FBNEIsRUFDdkQsTUFBYyxFQUNkLFNBQXFELEVBQzdCLElBQVM7UUFMakMsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQUMzQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQ3ZELFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxjQUFTLEdBQVQsU0FBUyxDQUE0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SUFBSSxDQUFDLGdDQUFnQyxDQUFDO2dDQUMzQyxjQUFjLENBQUM7cUJBQ2xCO3lCQUFNO3dCQUNMLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDaEIsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTs0QkFDbkIsSUFBSTtnQ0FDRixJQUFJO29DQUNKLCtDQUErQztvQ0FDL0MsQ0FBQztvQ0FDRCwrQkFBK0I7b0NBQy9CLENBQUMsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQ0FDekMsY0FBYyxDQUFDO3lCQUNsQjtxQkFDRjtpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxTQUFTLFVBQVUsQ0FBQyxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxZQUFZLE1BQU0sSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQztRQUN6RCxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQyxDQUFDLHNCQUFzQjsrR0E5bkJiLDRCQUE0QiwyREEwQjdCLGdCQUFnQixhQUNoQixpQkFBaUIsK0RBR2pCLGVBQWU7bUdBOUJkLDRCQUE0QiwrRENqQ3pDLG1zSEFvRkE7O1NEbkRhLDRCQUE0Qjs0RkFBNUIsNEJBQTRCO2tCQU54QyxTQUFTOytCQUNFLHlCQUF5QixpQkFDcEIsaUJBQWlCLENBQUMsSUFBSTs7MEJBOEJsQyxNQUFNOzJCQUFDLGdCQUFnQjs7MEJBQ3ZCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFHeEIsTUFBTTsyQkFBQyxlQUFlOztBQW1tQjNCLE1BQU0sV0FBVztDQUdoQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBwcmVmZXItY29uc3Q6IDEgKi9cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgVmlld0NoaWxkLFxuICBJbmplY3QsXG4gIE9uSW5pdCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIFNFVFRJTkdTX1NFUlZJQ0UsXG4gIFNldHRpbmdzU2VydmljZSxcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQge1xuICBaSVRJX0RBVEFfU0VSVklDRSxcbiAgWml0aURhdGFTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy96aXRpLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBJZGVudGl0eVNlcnZpY2VQYXRoSGVscGVyIH0gZnJvbSAnLi9pZGVudGl0eS1zZXJ2aWNlLXBhdGguaGVscGVyJztcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pZGVudGl0eS12aXN1YWxpemVyJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6ICcuL2lkZW50aXR5LXNlcnZpY2UtcGF0aC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lkZW50aXR5LXNlcnZpY2UtcGF0aC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBJZGVudGl0eVNlcnZpY2VQYXRoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIGQzO1xuICByZWZyZXNoUm90YXRlID0gZmFsc2U7XG4gIGNsb3NlUm90YXRlID0gdHJ1ZTtcbiAgZmlsdGVyVGV4dCA9ICdmZXRjaGluZyBzZXJ2aWNlcy4uJztcbiAgbm9TZWFyY2hSZXN1bHRzID0gZmFsc2U7XG4gIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcbiAgZnVsbFNjcmVlbiA9IGZhbHNlO1xuICBzZXJ2aWNlT3B0aW9uczogYW55O1xuICBlbmRwb2ludERhdGE7XG4gIG5ldHdvcmtHcmFwaDtcbiAgZ3JhcGhKc29uT2JqO1xuICBzZXJ2aWNlcztcbiAgZWRnZXJvdXRlcnM7XG4gIGVuZHBvaW50cyA9IFtdO1xuICBzZWxlY3RlZFNlcnZpY2UgPSAnJztcbiAgc2VydmljZVNlbGVjdEVycm9yO1xuICBkb0VuZHBvaW50SGFzQXBwd2FucyA9IGZhbHNlO1xuICBkb0VuZHBvaW50SGFzUHVibGljUm91dGVycyA9IGZhbHNlO1xuICBkb0VuZHBvaW50SGFzU2VydmljZXNJblByaXZhdGVOdyA9IGZhbHNlO1xuICBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgY291bnRHcnAyTmRzID0gMDtcbiAgY291bnRHcnAzTmRzID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGlkZW50aXR5U2VydmljZVBhdGhIZWxwZXI6IElkZW50aXR5U2VydmljZVBhdGhIZWxwZXIsXG4gICAgQEluamVjdChTRVRUSU5HU19TRVJWSUNFKSBwdWJsaWMgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXG4gICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgcHJpdmF0ZSB6aXRpU2VydmljZTogWml0aURhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxJZGVudGl0eVNlcnZpY2VQYXRoQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueVxuICApIHtcbiAgICB0aGlzLmVuZHBvaW50RGF0YSA9IGRhdGEuaWRlbnRpdHk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldEVuZHBvaW50TmV0d29ya0FzQ29kZSgpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIGdldEVuZHBvaW50TmV0d29ya0FzQ29kZSgpIHtcbiAgICBjb25zdCBwYWdlc2l6ZSA9IDUwMDtcbiAgICBjb25zdCBzZXJ2aWNlc19wYWdpbmcgPSB7XG4gICAgICBzZWFyY2hPbjogJ25hbWUnLFxuICAgICAgZmlsdGVyOiAnJyxcbiAgICAgIHRvdGFsOiBwYWdlc2l6ZSxcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBzb3J0OiAnbmFtZScsXG4gICAgICBvcmRlcjogJ2FzYycsXG4gICAgfTtcblxuICAgIHRoaXMueml0aVNlcnZpY2VcbiAgICAgIC5nZXQoYGlkZW50aXRpZXMvJHt0aGlzLmVuZHBvaW50RGF0YS5pZH0vc2VydmljZXNgLCBzZXJ2aWNlc19wYWdpbmcsIFtdKVxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLnNlcnZpY2VzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgIHRoaXMuY2xvc2VSb3RhdGUgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXRoaXMuc2VydmljZXMgfHwgdGhpcy5zZXJ2aWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLnNlcnZpY2VzID0gW107XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlT3B0aW9ucyA9IFtdO1xuICAgICAgICAgIHRoaXMuc2VydmljZU9wdGlvbnMucHVzaChub1NlcnZpY2VzKCkpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlID0gJ1NlcnZpY2VzIG5vdCBmb3VuZCBmb3IgYSBzZWxlY3RlZCBpZGVudGl0eSc7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBwYWdlcyA9IE1hdGguY2VpbChyZXN1bHQubWV0YS5wYWdpbmF0aW9uLnRvdGFsQ291bnQgLyBwYWdlc2l6ZSk7XG4gICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMjsgcGFnZSA8PSBwYWdlczsgcGFnZSsrKSB7XG4gICAgICAgICAgICBzZXJ2aWNlc19wYWdpbmcucGFnZSA9IHBhZ2U7XG4gICAgICAgICAgICBjb25zdCB0bXBfcHJvbWlzZSA9IHRoaXMueml0aVNlcnZpY2VcbiAgICAgICAgICAgICAgLmdldChcbiAgICAgICAgICAgICAgICBgaWRlbnRpdGllcy8ke3RoaXMuZW5kcG9pbnREYXRhLmlkfS9zZXJ2aWNlc2AsXG4gICAgICAgICAgICAgICAgc2VydmljZXNfcGFnaW5nLFxuICAgICAgICAgICAgICAgIFtdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnRoZW4oKHBhZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBwYWdlUmVzdWx0LmRhdGEuZm9yRWFjaCgoc2VydikgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5wdXNoKHNlcnYpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgIC5nZXQoYGlkZW50aXRpZXMvJHt0aGlzLmVuZHBvaW50RGF0YS5pZH0vZWRnZS1yb3V0ZXJzYCwge30sIFtdKVxuICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGdlcm91dGVycyA9IFtdO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5kYXRhLmZvckVhY2goKHJlYykgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lZGdlcm91dGVycy5wdXNoKHJlYyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlT3B0aW9ucyA9IGNyZWF0ZVNlcnZpY2VPcHRpb25zKHRoaXMuc2VydmljZXMpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJUZXh0ID1cbiAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlT3B0aW9ucy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNlcnZpY2VPcHRpb25zWzBdLm5hbWU7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VydmljZSA9XG4gICAgICAgICAgICAgIHRoaXMuc2VydmljZU9wdGlvbnMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgPyAnU2VydmljZXMgbm90IGZvdW5kIGZvciBhIHNlbGVjdGVkIGlkZW50aXR5J1xuICAgICAgICAgICAgICAgIDogdGhpcy5zZXJ2aWNlT3B0aW9uc1swXS5uYW1lO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gdGhpcy5zZXJ2aWNlT3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMuc2VydmljZUNoYW5nZWQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVTZXJ2aWNlT3B0aW9ucyhfc2VydmljZXMpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBbXTtcbiAgICAgIGNvbnN0IHNlcnZpY2VOYW1lcyA9IFtdO1xuICAgICAgX3NlcnZpY2VzPy5maW5kKChzcnZpY2UpID0+IHtcbiAgICAgICAgaWYgKCFzZXJ2aWNlTmFtZXMuaW5jbHVkZXMoc3J2aWNlLm5hbWUpKSB7XG4gICAgICAgICAgc2VydmljZU5hbWVzLnB1c2goc3J2aWNlLm5hbWUpO1xuICAgICAgICAgIGNvbnN0IHNkID0gbmV3IFNlcnZpY2VEYXRhKCk7XG4gICAgICAgICAgc2QuaWQgPSBzcnZpY2UuaWQ7XG4gICAgICAgICAgc2QubmFtZSA9IHNydmljZS5uYW1lO1xuICAgICAgICAgIG9wdGlvbnMucHVzaChzZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9TZXJ2aWNlcygpIHtcbiAgICAgIGNvbnN0IHNkID0gbmV3IFNlcnZpY2VEYXRhKCk7XG4gICAgICBzZC5pZCA9ICcnO1xuICAgICAgc2QubmFtZSA9ICdOTyBTRVJWSUNFUyc7XG4gICAgICByZXR1cm4gc2Q7XG4gICAgfVxuICB9IC8vIGVuZCBvZiBnZXRFbmRwb2ludE5ldHdvcmtBc0NvZGVcblxuICBmaWx0ZXJTZWFyY2hBcnJheSgpIHtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSB0aGlzLnNlcnZpY2VPcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgb3B0aW9uLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkU2VydmljZS50b0xvd2VyQ2FzZSgpKVxuICAgICk7XG4gIH1cblxuICBjbGVhclNlYXJjaEZpbHRlcigpIHtcbiAgICB0aGlzLmZpbHRlclRleHQgPSAnWW91IGNhbiBmaWx0ZXIgc2VydmljZXMgYnkgdHlwaW5nIGhlcmUnO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuc2VydmljZU9wdGlvbnM7XG4gICAgdGhpcy5zZWxlY3RlZFNlcnZpY2UgPSAnJztcbiAgfVxuXG4gIGF1dG9jb21wbGV0ZVNlYXJjaChldmVudCkge1xuICAgIHRoaXMuc2VydmljZUNoYW5nZWQoKTtcbiAgfVxuXG4gIHNlcnZpY2VDaGFuZ2VkKCkge1xuICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgIGNvbnN0IGFsbFByb21pc2VzID0gW107XG4gICAgIGxldCBzZXJ2aWNlT2IgPSBudWxsO1xuICAgICBsZXQgc2VydmljZV9jb25maWdzID0gW107XG5cbiAgICAgc2VydmljZU9iID0gdGhpcy5zZXJ2aWNlcyAmJiB0aGlzLnNlcnZpY2VzLmZpbmQoKHJlYykgPT4ge1xuICAgICAgcmV0dXJuICAocmVjLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlKTtcbiAgICAgfSk7XG5cbiAgICAgaWYgKCFzZXJ2aWNlT2IpIHtcbiAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgIHJldHVybjtcbiAgICAgfVxuXG4gICAgIGNvbnN0IGNvbmZpZ3NfdXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2Uoc2VydmljZU9iLCAnY29uZmlncycpO1xuXG4gICAgIGNvbnN0IGNvbmZpZ1Byb21pc2UgPSB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAuZ2V0KGNvbmZpZ3NfdXJsLCB7fSwgW10pXG4gICAgICAudGhlbigoY29uZmlncykgPT4ge1xuICAgICAgICBzZXJ2aWNlX2NvbmZpZ3MgPSBjb25maWdzICYmIGNvbmZpZ3MuZGF0YSA/IGNvbmZpZ3MuZGF0YSA6IFtdO1xuICAgICAgfSk7XG4gICAgIGNvbnN0IHNlcnZpY2VfZWRnZV9yb3V0ZXJfcG9saWNpZXNfdXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UoXG4gICAgICBzZXJ2aWNlT2IsXG4gICAgICAnc2VydmljZS1lZGdlLXJvdXRlci1wb2xpY2llcydcbiAgICAgKTtcbiAgICAgY29uc3Qgc2VydmljZV9wb2xpY2llc191cmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShcbiAgICAgIHNlcnZpY2VPYixcbiAgICAgICdzZXJ2aWNlLXBvbGljaWVzJ1xuICAgICApLnJlcGxhY2UoJy4vJywgJycpOyAvLyBkaWFsLCBCaW5kIGluZm9cblxuICAgIGxldCBiaW5kUG9saWNpZXMgPSBbXTtcbiAgICBsZXQgYmluZElkbmV0aXRpZXMgPSBbXTtcbiAgICBjb25zdCBwcm9taXNlMiA9IHRoaXMueml0aVNlcnZpY2VcbiAgICAgIC5nZXQoc2VydmljZV9wb2xpY2llc191cmwsIHt9LCBbXSlcbiAgICAgIC50aGVuKChwb2xpY2llcykgPT4ge1xuICAgICAgICBjb25zdCBpZGVudGl0eVByb21pc2VzID0gW107XG4gICAgICAgIF8uaXNBcnJheShwb2xpY2llcy5kYXRhKSAmJiBwb2xpY2llcy5kYXRhLmZvckVhY2goKHBvbGljeSkgPT4ge1xuICAgICAgICAgIGlmIChwb2xpY3kudHlwZSA9PT0gJ0JpbmQnKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kSWRlbnRpdGllc1VybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKFxuICAgICAgICAgICAgICBwb2xpY3ksXG4gICAgICAgICAgICAgICdpZGVudGl0aWVzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHByb21zZSA9IHRoaXMueml0aVNlcnZpY2VcbiAgICAgICAgICAgICAgLmdldChiaW5kSWRlbnRpdGllc1VybC5yZXBsYWNlKCcuLycsICcnKSwge30sIFtdKVxuICAgICAgICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICByZXMuZGF0YS5mb3JFYWNoKChycykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW1Ub0FycmF5KGJpbmRJZG5ldGl0aWVzLCBycyk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtVG9BcnJheShiaW5kSWRuZXRpdGllcywgcmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZGVudGl0eVByb21pc2VzLnB1c2gocHJvbXNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBQcm9taXNlLmFsbChpZGVudGl0eVByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnN0YXJ0VmlzUHJvY2VzcyhiaW5kSWRuZXRpdGllcywgc2VydmljZU9iLCBzZXJ2aWNlX2NvbmZpZ3MpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBhZGRJdGVtVG9BcnJheShiaW5kSWRuZXRpdGllcywgb2IpIHtcbiAgICBpZiAoIWJpbmRJZG5ldGl0aWVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IG9iLmlkKSkge1xuICAgICAgYmluZElkbmV0aXRpZXMucHVzaChvYik7XG4gICAgfVxuICAgIHJldHVybiBiaW5kSWRuZXRpdGllcztcbiAgfVxuXG4gIGdldExpbmtGb3JSZXNvdXJjZShvYiwgcmVzb3VyY2UpIHtcbiAgICByZXR1cm4gb2JbJ19saW5rcyddW3Jlc291cmNlXVsnaHJlZiddO1xuICB9XG5cbiAgc3RhcnRWaXNQcm9jZXNzKGJpbmRJZG5ldGl0aWVzLCBzZWxlY3RlZFNlcnZpY2VPYiwgc2VydmljZUNvbmZpZ3MpIHtcbiAgICB0aGlzLmNvdW50R3JwMk5kcyA9IDA7XG4gICAgdGhpcy5jb3VudEdycDNOZHMgPSAwO1xuICAgIGlmIChfLmlzRW1wdHkodGhpcy5zZWxlY3RlZFNlcnZpY2UpKSB7XG4gICAgICB0aGlzLnNlcnZpY2VTZWxlY3RFcnJvciA9ICFfLmlzRW1wdHkodGhpcy5zZWxlY3RlZFNlcnZpY2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5ncmFwaEpzb25PYmogPSB0aGlzLmlkZW50aXR5U2VydmljZVBhdGhIZWxwZXIuZ2V0RW5kcG9pbnRHcmFwaE9iaihcbiAgICAgICAgdGhpcy5lbmRwb2ludERhdGEsXG4gICAgICAgIGJpbmRJZG5ldGl0aWVzLFxuICAgICAgICB0aGlzLmVkZ2Vyb3V0ZXJzLFxuICAgICAgICBzZWxlY3RlZFNlcnZpY2VPYixcbiAgICAgICAgc2VydmljZUNvbmZpZ3NcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGNvdW50R3JwMU5kcyA9IDA7XG4gICAgdGhpcy5kb0VuZHBvaW50SGFzU2VydmljZXNJblByaXZhdGVOdyA9IGZhbHNlO1xuICAgIHRoaXMuZG9FbmRwb2ludEhhc1B1YmxpY1JvdXRlcnMgPSBmYWxzZTtcbiAgICB0aGlzLmRvRW5kcG9pbnRIYXNBcHB3YW5zID0gZmFsc2U7XG4gICAgdGhpcy5ncmFwaEpzb25PYmoubm9kZXMuZm9yRWFjaCgobmQpID0+IHtcbiAgICAgIGlmIChuZC5ncm91cCA9PT0gJzMnKSB7XG4gICAgICAgIHRoaXMuY291bnRHcnAzTmRzKys7XG4gICAgICB9XG4gICAgICBpZiAobmQuZ3JvdXAuaW5jbHVkZXMoJzInKSkge1xuICAgICAgICB0aGlzLmNvdW50R3JwMk5kcysrO1xuICAgICAgfVxuICAgICAgaWYgKG5kLmdyb3VwID09PSAnMScpIHtcbiAgICAgICAgY291bnRHcnAxTmRzKys7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5jb3VudEdycDNOZHMgPiAwKSB7XG4gICAgICB0aGlzLmRvRW5kcG9pbnRIYXNTZXJ2aWNlc0luUHJpdmF0ZU53ID0gdHJ1ZTsgLy8gc2hvdyBwcml2YXRlL2N1c3RvbWVyIG5ldHdvcmsgYm94LCB3aWxsIGJlIGRlY2lkZWQgd2l0aCB0aGlzIHZhcmlhYmxlLlxuICAgIH1cbiAgICBpZiAodGhpcy5jb3VudEdycDJOZHMgPiAwKSB7XG4gICAgICB0aGlzLmRvRW5kcG9pbnRIYXNQdWJsaWNSb3V0ZXJzID0gdHJ1ZTsgLy8gc2hvdyBwdWJsaWMgbmV0d29yayBib3gsIHdpbGwgYmUgZGVjaWRlZCB3aXRoIHRoaXMgdmFyaWFibGUuXG4gICAgfVxuXG4gICAgaWYgKGNvdW50R3JwMU5kcyA+IDApIHtcbiAgICAgIHRoaXMuZG9FbmRwb2ludEhhc0FwcHdhbnMgPSB0cnVlOyAvLyBzaG93IHByaXZhdGUgbmV0d29yayBib3gsIHdpbGwgYmUgZGVjaWRlZCB3aXRoIHRoaXMgdmFyaWFibGUuXG4gICAgfVxuICAgIHRoaXMuaW5pdFRvcG9WaWV3KCk7XG4gIH1cblxuICB0b2dnbGVNb2RhbFNpemUoKSB7XG4gICAgdGhpcy5mdWxsU2NyZWVuID0gIXRoaXMuZnVsbFNjcmVlbjtcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIGluaXRUb3BvVmlldygpIHtcbiAgICBjb25zdCBtYXJnaW4gPSB7IHRvcDogMTAsIHJpZ2h0OiA5MCwgYm90dG9tOiAzMCwgbGVmdDogMCB9O1xuICAgIGNvbnN0IHdpZHRoID0gMTEwMCAtIG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0O1xuICAgIGNvbnN0IGhlaWdodCA9IDExMDAgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbTtcbiAgICBjb25zdCBjb2xvcnMgPSBkMy5zY2FsZU9yZGluYWwoZDMuc2NoZW1lQ2F0ZWdvcnkxMCk7XG4gICAgY29uc3QgdG9vbHRpcCA9IGQzLnNlbGVjdCgnI2VwVG9vbHRpcCcpO1xuXG4gICAgbGV0IHN2ZyA9IGQzLnNlbGVjdCgnI0lkZW50aXR5VG9wb2xvZ3knKSxcbiAgICAgIG5vZGUsXG4gICAgICBsaW5rO1xuXG4gICAgY29uc3QgaGFuZGxlWm9vbSA9IChlKSA9PiBzdmcuYXR0cigndHJhbnNmb3JtJywgZS50cmFuc2Zvcm0pO1xuICAgIGNvbnN0IHpvb20gPSBkMy56b29tKCkub24oJ3pvb20nLCBoYW5kbGVab29tKTtcblxuICAgIHN2Z1xuICAgICAgLmF0dHIoJ3dpZHRoJywgJzEwMCUnKVxuICAgICAgLmF0dHIoJ2hlaWdodCcsICcxMDAlJylcbiAgICAgIC8vIC5jYWxsKHpvb20pXG4gICAgICAuYXR0cigndmlld0JveCcsICcwICcgKyAtMTAgKyAnICcgKyB3aWR0aCArICcgJyArIGhlaWdodClcbiAgICAgIC5hcHBlbmQoJ2cnKVxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIC0zMDAgKyAnLCcgKyAyMjUgKyAnKScpO1xuXG4gICAgc3ZnLnNlbGVjdEFsbCgnZycpLnJlbW92ZSgpO1xuXG4gICAgY29uc3Qgc2ltdWxhdGlvbjogYW55ID0gZDNcbiAgICAgIC5mb3JjZVNpbXVsYXRpb24oKVxuICAgICAgLmZvcmNlKFxuICAgICAgICAnbGluaycsXG4gICAgICAgIGQzXG4gICAgICAgICAgLmZvcmNlTGluaygpXG4gICAgICAgICAgLmlkKGZ1bmN0aW9uIChkOiBhbnkpIHtcbiAgICAgICAgICAgIHJldHVybiBkLmlkO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmRpc3RhbmNlKDEwMClcbiAgICAgICAgICAuc3RyZW5ndGgoMSlcbiAgICAgIClcbiAgICAgIC5mb3JjZSgnY2hhcmdlJywgZDMuZm9yY2VNYW55Qm9keSgpKVxuICAgICAgLmZvcmNlKCdjZW50ZXInLCBkMy5mb3JjZUNlbnRlcih3aWR0aCAvIDIsIGhlaWdodCAvIDIpKTtcblxuICAgIGNvbnN0IGxpbmtzID0gdGhpcy5ncmFwaEpzb25PYmoubGlua3M7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmdyYXBoSnNvbk9iai5ub2RlcztcblxuICAgIGxpbmsgPSBzdmdcbiAgICAgIC5zZWxlY3RBbGwoJ2cubGluZS5saW5lJylcbiAgICAgIC5kYXRhKGxpbmtzKVxuICAgICAgLmVudGVyKClcbiAgICAgIC5hcHBlbmQoJ2cnKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpbmsnKVxuICAgICAgLmF0dHIoJ21hcmtlci1lbmQnLCAndXJsKCNhcnJvd2hlYWQpJyk7XG5cbiAgICBsaW5rXG4gICAgICAuYXBwZW5kKCdsaW5lJylcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgaWYgKGQuc3RhdHVzID09PSAxIHx8IGQuc3RhdHVzID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiAxLjU7IC8vTWF0aC5zcXJ0KGQud2VpZ2h0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5zdHlsZSgnc3Ryb2tlJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgaWYgKGQuc3RhdHVzID09PSAxKSB7XG4gICAgICAgICAgbGV0IGRvSW5Vc2FnZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiAnIzAwY2QxMyc7XG4gICAgICAgIH0gZWxzZSBpZiAoZC5zdGF0dXMgPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuICcjZDhkY2U3JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJyNmZjAwNGUnO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGxpbmsuZWFjaChmdW5jdGlvbiAodGhpczogYW55LCBkOiBhbnksIGkpIHtcbiAgICAgIGNvbnN0IF90aGlzID0gZDMuc2VsZWN0KHRoaXMpO1xuICAgICAgaWYgKGQuc3RhdHVzID09PSAxKSB7XG4gICAgICAgIGxldCBkb0luVXNhZ2UgPSB0cnVlOyAvLyBmYWxzZTtcbiAgICAgICAgX3RoaXNcbiAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAgICAgICAvLyAudGV4dChkLm5ldHNwZWVkKVxuICAgICAgICAgIC5zdHlsZSgnZmlsbCcsICdyZ2IoMjU1LDE5OCwyMiknKVxuICAgICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzExJyk7XG4gICAgICAgIF90aGlzXG4gICAgICAgICAgLmFwcGVuZCgncmVjdCcpXG4gICAgICAgICAgLmF0dHIoJ2ZpbGwnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgcmV0dXJuICcjNTU1JztcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICBpZiAoZG9JblVzYWdlKSB7XG4gICAgICAgICAgICAgIHJldHVybiAzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDAuMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgaWYgKGRvSW5Vc2FnZSkge1xuICAgICAgICAgICAgICByZXR1cm4gMztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiAwLjE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuYXBwZW5kKCdhbmltYXRlJyk7XG5cbiAgICAgICAgX3RoaXMuc2VsZWN0KCdyZWN0JykuYXBwZW5kKCdhbmltYXRlJyk7XG4gICAgICB9IGVsc2UgaWYgKGQuc3RhdHVzID09PSAwKSB7XG4gICAgICAgIF90aGlzXG4gICAgICAgICAgLmFwcGVuZCgnaW1hZ2UnKVxuICAgICAgICAgIC5hdHRyKCd4bGluazpocmVmJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICcvYXNzZXRzL2ltYWdlcy92aXN1YWxpemVyL2xpbmstY3V0LnBuZyc7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuYXR0cignd2lkdGgnLCAnMjAnKVxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCAnMjQnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIG5vZGUgPSBzdmdcbiAgICAgIC5zZWxlY3RBbGwoJy5ub2RlJylcbiAgICAgIC5kYXRhKG5vZGVzKVxuICAgICAgLmVudGVyKClcbiAgICAgIC5hcHBlbmQoJ2cnKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ25vZGUnKTtcblxuICAgIG5vZGVcbiAgICAgIC5hcHBlbmQoJ2ltYWdlJylcbiAgICAgIC5hdHRyKCd4bGluazpocmVmJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgY29uc3Qgcm91dGVySW1hZ2VQYXRoID0gJy9hc3NldHMvaW1hZ2VzL3Zpc3VhbGl6ZXIvUm91dGVycy5wbmcnO1xuICAgICAgICBjb25zdCBub25Qcm92aXNpb25lZFJvdXRlckltYWdlUGF0aCA9XG4gICAgICAgICAgJy9hc3NldHMvaW1hZ2VzL3Zpc3VhbGl6ZXIvRVIucG5nJztcbiAgICAgICAgY29uc3QgZXJyUm91dGVySW1hZ2VQYXRoID0gJy9hc3NldHMvaW1hZ2VzL3Zpc3VhbGl6ZXIvZXJyb3JfZXIucG5nJztcbiAgICAgICAgY29uc3QgZXJyRW5kcG9pbnRJbWFnZVBhdGggPSAnL2Fzc2V0cy9pbWFnZXMvdmlzdWFsaXplci9ob3N0LWVycm9yLnBuZyc7XG4gICAgICAgIGNvbnN0IHVucmVnaXN0ZXJlZEVuZHBvaW50SW1hZ2VQYXRoID1cbiAgICAgICAgICAnL2Fzc2V0cy9pbWFnZXMvdmlzdWFsaXplci9ob3N0X3VucmVnaXN0ZXJlZC5wbmcnO1xuICAgICAgICBjb25zdCBlbmRQb2ludFBhdGggPSAnL2Fzc2V0cy9pbWFnZXMvdmlzdWFsaXplci9ob3N0LnBuZyc7XG5cbiAgICAgICAgaWYgKGQudHlwZS5pbmNsdWRlcygnSWRlbnRpdHknKSAmJiBkLnN0YXR1cyA9PT0gJ1VuLVJlZ2lzdGVyZWQnKSB7XG4gICAgICAgICAgcmV0dXJuIHVucmVnaXN0ZXJlZEVuZHBvaW50SW1hZ2VQYXRoO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGQudHlwZS5pbmNsdWRlcygnSWRlbnRpdHknKSAmJlxuICAgICAgICAgIGQuYXBpU2Vzc2lvbiA9PT0gJ1llcycgJiZcbiAgICAgICAgICBkLnN0YXR1cyA9PT0gJ1JlZ2lzdGVyZWQnXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBlbmRQb2ludFBhdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgZC50eXBlLmluY2x1ZGVzKCdJZGVudGl0eScpICYmXG4gICAgICAgICAgKGQucm91dGVyQ29ubmVjdGlvbiA9PT0gJ05vJyB8fCBkLmFwaVNlc3Npb24gPT09ICdObycpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBlcnJFbmRwb2ludEltYWdlUGF0aDtcbiAgICAgICAgfSBlbHNlIGlmIChkLnR5cGUuaW5jbHVkZXMoJ0lkZW50aXR5JykpIHtcbiAgICAgICAgICByZXR1cm4gZW5kUG9pbnRQYXRoO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGQudHlwZS5pbmNsdWRlcygnUm91dGVyJykgJiZcbiAgICAgICAgICAoZC5zdGF0dXMgPT09ICdFUlJPUicgfHwgZC5vbmxpbmUgPT09ICdObycpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBlcnJSb3V0ZXJJbWFnZVBhdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoZC50eXBlLmluY2x1ZGVzKCdSb3V0ZXInKSAmJiBkLnN0YXR1cyA9PT0gJ1BST1ZJU0lPTkVEJykge1xuICAgICAgICAgIHJldHVybiByb3V0ZXJJbWFnZVBhdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoZC50eXBlLmluY2x1ZGVzKCdSb3V0ZXInKSkge1xuICAgICAgICAgIHJldHVybiBub25Qcm92aXNpb25lZFJvdXRlckltYWdlUGF0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkLmdyb3VwID09PSAnNCcpIHtcbiAgICAgICAgICByZXR1cm4gJy9hc3NldHMvaW1hZ2VzL3Zpc3VhbGl6ZXIvc2VydmljZS5wbmcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5hdHRyKCd4JywgLTI1KVxuICAgICAgLmF0dHIoJ3knLCAtMjUpXG4gICAgICAuYXR0cignd2lkdGgnLCAnNDAnKVxuICAgICAgLmF0dHIoJ2hlaWdodCcsICc0MCcpO1xuXG4gICAgLy8gbm9kZS5hcHBlbmQoJ3RpdGxlJykgLnRleHQoZnVuY3Rpb24gKGQpIHtyZXR1cm4gZC5uYW1lO30pO1xuXG4gICAgbm9kZVxuICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAuYXR0cigneCcsIDEwKVxuICAgICAgLmF0dHIoJ3knLCAxMilcbiAgICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnNjAwJylcbiAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XG4gICAgICAgIC8vIGNvbnN0IG5hbWUgPSBkLnR5cGUuaW5jbHVkZXMoJ1NlcnZpY2UnKSA/IGQuYWxpYXMgOiBkLm5hbWU7XG4gICAgICAgIHJldHVybiBkLm5hbWU7XG4gICAgICB9KTtcblxuICAgIHNpbXVsYXRpb24ubm9kZXMobm9kZXMpLm9uKCd0aWNrJywgdGlja2VkKTtcblxuICAgIHNpbXVsYXRpb24uZm9yY2UoJ2xpbmsnKS5saW5rcyhsaW5rcyk7XG4gICAgbm9kZS5vbignbW91c2VvdmVyJywgKGV2ZW50LCBkKSA9PiB7XG4gICAgICBjb25zdCBlbmRwb2ludFV0bGl6YXRpb25Kc29uID0ge307XG4gICAgICBkcmF3VG9vbHRpcChldmVudCwgZCwgZW5kcG9pbnRVdGxpemF0aW9uSnNvbik7XG4gICAgfSk7XG5cbiAgICBub2RlLm9uKCdtb3VzZW91dCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlbW92ZVRvb2x0aXAoKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHRpY2tlZCgpIHtcbiAgICAgIG5vZGUuYXR0cigndHJhbnNmb3JtJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoJyArIGQucG9zeCArICcsJyArIGQucG9zeSArICcpJztcbiAgICAgIH0pO1xuXG4gICAgICBsaW5rXG4gICAgICAgIC5zZWxlY3QoJ2xpbmUnKVxuICAgICAgICAuYXR0cigneDEnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgIHJldHVybiBkLnNvdXJjZS5wb3N4O1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cigneTEnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgIHJldHVybiBkLnNvdXJjZS5wb3N5O1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cigneDInLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgIHJldHVybiBkLnRhcmdldC5wb3N4O1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cigneTInLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgIHJldHVybiBkLnRhcmdldC5wb3N5O1xuICAgICAgICB9KTtcblxuICAgICAgbGlua1xuICAgICAgICAuc2VsZWN0KCdpbWFnZScpXG4gICAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICBjb25zdCB4MSA9IGQuc291cmNlLnBvc3gsXG4gICAgICAgICAgICB4MiA9IGQudGFyZ2V0LnBvc3gsXG4gICAgICAgICAgICB4ID0geDEgLSAoeDEgLSB4MikgLyAyO1xuXG4gICAgICAgICAgcmV0dXJuIHggLSA4O1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgY29uc3QgeTEgPSBkLnNvdXJjZS5wb3N5LFxuICAgICAgICAgICAgeTIgPSBkLnRhcmdldC5wb3N5LFxuICAgICAgICAgICAgeSA9IHkxIC0gKHkxIC0geTIpIC8gMjtcblxuICAgICAgICAgIHJldHVybiB5IC0gMTI7XG4gICAgICAgIH0pO1xuXG4gICAgICBsaW5rXG4gICAgICAgIC5zZWxlY3QoJ3JlY3QnKVxuICAgICAgICAuYXR0cignb3BhY2l0eScsIDEpXG4gICAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICByZXR1cm4gZC5zb3VyY2UucG9zeDtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgIHJldHVybiBkLnNvdXJjZS5wb3N5O1xuICAgICAgICB9KVxuICAgICAgICAuc2VsZWN0QWxsKCdhbmltYXRlJylcbiAgICAgICAgLmVhY2goZnVuY3Rpb24gKHRoaXM6IGFueSwgZDogYW55LCBpKSB7XG4gICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgICAuYXR0cignYXR0cmlidXRlTmFtZScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd4JztcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmF0dHIoJ2Zyb20nLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbiA9IGQuc291cmNlLnBvc3ggLSAxO1xuICAgICAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuYXR0cigndG8nLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQudGFyZ2V0LnBvc3g7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkMy5zZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgLmF0dHIoJ2F0dHJpYnV0ZU5hbWUnLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd5JztcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmF0dHIoJ2Zyb20nLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQuc291cmNlLnBvc3k7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5hdHRyKCd0bycsIGZ1bmN0aW9uIChkOiBhbnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZC50YXJnZXQucG9zeTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZDMuc2VsZWN0KHRoaXMpXG4gICAgICAgICAgICAuYXR0cignYXR0cmlidXRlVHlwZScsICdYTUwnKVxuICAgICAgICAgICAgLmF0dHIoJ2JlZ2luJywgJzAuNXMnKVxuICAgICAgICAgICAgLmF0dHIoJ2R1cicsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnMS4wcyc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoJ3JlcGVhdENvdW50JywgJ2luZGVmaW5pdGUnKTtcbiAgICAgICAgfSk7XG4gICAgfSAvLyBlbmQgb2YgdGlja2VkXG5cbiAgICBmdW5jdGlvbiByZW1vdmVUb29sdGlwKCkge1xuICAgICAgaWYgKHRvb2x0aXApIHtcbiAgICAgICAgdG9vbHRpcC5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZHJhd1Rvb2x0aXAoZXZlbnQsIGQsIGVuZHBvaW50VXRsaXphdGlvbkpzb24pIHtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcFRvb2x0aXAnKS5pbm5lckhUTUwgPSByZWFkS2V5VmFsdWVzKFxuICAgICAgICBkLFxuICAgICAgICBlbmRwb2ludFV0bGl6YXRpb25Kc29uXG4gICAgICApOyAvLyByZWFkT2JqZWN0VmFsdWVzKGQpO1xuICAgICAgdG9vbHRpcC5zdHlsZSgnZGlzcGxheScsICdibG9jaycpO1xuICAgICAgdG9vbHRpcC5zdHlsZSgnd2hpdGUtc3BhY2UnLCAncHJlLXdyYXAnKTtcbiAgICAgIGNvbnN0IHggPSBldmVudC5wYWdlWCArICdweCc7XG4gICAgICBjb25zdCB5ID0gZXZlbnQucGFnZVkgKyAncHgnO1xuICAgICAgdG9vbHRpcC5zdHlsZSgnbGVmdCcsIHgpO1xuICAgICAgdG9vbHRpcC5zdHlsZSgndG9wJywgeSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhZEtleVZhbHVlcyhkLCBlbmRwb2ludFV0bGl6YXRpb25Kc29uKSB7XG4gICAgICBsZXQgaW5mbyA9XG4gICAgICAgIFwiPGRpdiBjbGFzcz0ndG9vbC10aXAtY29udGFpbmVyJyBzdHlsZT0nZm9udC1zaXplOjE0cHg7Zm9udC1mYW1pbHk6T3BlbiBTYW5zOyBmb250LXdlaWdodDogNjAwOyBmb250LWNvbG9yOiB2YXIoLS10YWJsZVRleHQpOyc+XCI7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZCk7XG5cbiAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgayA9PT0gJ3N0YXR1cycgfHxcbiAgICAgICAgICBrID09PSAncG9zeScgfHxcbiAgICAgICAgICBrID09PSAncG9zeCcgfHxcbiAgICAgICAgICBrID09PSAnZ3JvdXAnIHx8XG4gICAgICAgICAgayA9PT0gJ2hvc3RlZEVkZ2VJZCcgfHxcbiAgICAgICAgICBrID09PSAndmFsdWUnIHx8XG4gICAgICAgICAgayA9PT0gJ2luZGV4JyB8fFxuICAgICAgICAgIGsgPT09ICdwYXJlbnQnIHx8XG4gICAgICAgICAgayA9PT0gJ2RlcHRoJyB8fFxuICAgICAgICAgIGsgPT09ICd4JyB8fFxuICAgICAgICAgIGsgPT09ICd5JyB8fFxuICAgICAgICAgIGsgPT09ICdpZCcgfHxcbiAgICAgICAgICBrID09PSAneDAnIHx8XG4gICAgICAgICAgayA9PT0gJ3kwJyB8fFxuICAgICAgICAgIGsgPT09ICd2eScgfHxcbiAgICAgICAgICBrID09PSAndngnXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGsgPT09ICdjaGlsZHJlbicpIHtcbiAgICAgICAgICBjb25zdCBrVmFsOiBhbnkgPSBkW2tdO1xuICAgICAgICAgIGlmIChrVmFsICYmIGtWYWwgIT09ICcnKSB7XG4gICAgICAgICAgICBpbmZvID0gaW5mbyArICc8ZGl2IGNsYXNzPVwicHJvcC1yb3dcIj48ZGl2IGNsYXNzPVwicHJvcC1uYW1lXCI+JyArIGsgKyAnOjwvZGl2PjxkaXYgY2xhc3M9XCJwcm9wLXZhbFwiPicgKyBrVmFsLmxlbmd0aCArICc8L2Rpdj48L2Rpdj4nO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaXNBbk9iamVjdChkW2tdKSkge1xuICAgICAgICAgICAgY29uc3Qga1ZhbDogYW55ID0gZFtrXTtcbiAgICAgICAgICAgIGlmIChrVmFsICYmIGtWYWwgIT09ICcnKSB7XG4gICAgICAgICAgICAgIGluZm8gPSBpbmZvICsgJzxkaXYgY2xhc3M9XCJwcm9wLXJvd1wiPjxkaXYgY2xhc3M9XCJwcm9wLW5hbWVcIj4nICsgayArICc6PC9kaXY+PGRpdiBjbGFzcz1cInByb3AtdmFsXCI+JyArIGtWYWwubmFtZSArICc8L2Rpdj48L2Rpdj4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoZFtrXSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICBpbmZvID1cbiAgICAgICAgICAgICAgaW5mbyArXG4gICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwicHJvcC1yb3dcIj48ZGl2IGNsYXNzPVwicHJvcC1uYW1lXCI+JyArXG4gICAgICAgICAgICAgIGsgK1xuICAgICAgICAgICAgICAnOjwvZGl2PjxkaXYgY2xhc3M9XCJwcm9wLXZhbFwiPicgK1xuICAgICAgICAgICAgICBkW2tdLmpvaW4oJzxicj4gJm5ic3A7Jm5ic3A7ICZuYnNwOyZuYnNwOycpICtcbiAgICAgICAgICAgICAgJzwvZGl2PjwvZGl2Pic7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZvID0gZFtrXTtcbiAgICAgICAgICAgIGlmICh2byAmJiB2byAhPT0gJycpIHtcbiAgICAgICAgICAgICAgaW5mbyA9XG4gICAgICAgICAgICAgICAgaW5mbyArXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJwcm9wLXJvd1wiPjxkaXYgY2xhc3M9XCJwcm9wLW5hbWVcIj4nICtcbiAgICAgICAgICAgICAgICBrICtcbiAgICAgICAgICAgICAgICAnOjwvZGl2PjxkaXYgY2xhc3M9XCJwcm9wLXZhbFwiPicgK1xuICAgICAgICAgICAgICAgICh2byAhPT0gbnVsbCB8fCB2byAhPT0gJycgPyBkW2tdIDogJ04vQScpICtcbiAgICAgICAgICAgICAgICAnPC9kaXY+PC9kaXY+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaW5mbyArICc8L2Rpdj4nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQW5PYmplY3Qobykge1xuICAgICAgcmV0dXJuIG8gaW5zdGFuY2VvZiBPYmplY3QgJiYgby5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuICAgIH1cblxuICAgIHRoaXMucmVmcmVzaFJvdGF0ZSA9IGZhbHNlO1xuICB9IC8vIGVuZCBvZiBpbml0VG9wb1ZpZXdcbn1cblxuY2xhc3MgU2VydmljZURhdGEge1xuICBpZDtcbiAgbmFtZTtcbn1cblxuIiwiPGRpdiBbbmdDbGFzc109XCJ7ICdmdWxsLXNjcmVlbic6IGZ1bGxTY3JlZW4gfVwiIGNsYXNzPVwibW9kYWwgc29saWRcIiBpZD1cIklkZW50aXR5VmlzdWFsaXplckRhdGFNb2RhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0cC1kYXRhLWhlYWRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWx0aXRsZVwiPklkZW50aXR5IFNlcnZpY2UgUGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IChjbGljayk9XCJoaWRlKClcIiBjbGFzcz1cImJ1dHRvbkJhbGwgaWNvbi1jbG9zZVwiIGlkPVwiRXNjWkVuZHBvaW50Q2xvc2VcIj48L2Rpdj5cbiAgICAgICAgPGRpdiAoY2xpY2spPVwidG9nZ2xlTW9kYWxTaXplKClcIiBjbGFzcz1cImJ1dHRvbkJhbGwgcmVzaXplXCIgaWQ9XCJSZXNpemVNb2RhbEJ1dHRvblwiPjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImlkZW50aXR5LXRvcG9sb2d5LWNvbnRhaW5lclwiPlxuXG4gICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiA4MHB4OyBmbG9hdDogbGVmdFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVwLXRvcG9sb2d5LWZpbHRlci1jb250YWluZXIgbGlzdEJveCByb3dcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cImZpbHRlclNlYXJjaEFycmF5KClcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkU2VydmljZVwiXG4gICAgICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidG9wb2xvZ3ktZmlsdGVyLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJmaWx0ZXJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIHRvIHNlYXJjaCBpZGVudGl0eSBhY2Nlc3NpYmxlIHNlcnZpY2VzLlwiXG4gICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VhcmNoRmlsdGVyKClcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlclRleHRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNsZWFyLXN2Yy1pY29uIGljb24tY2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cIkNsZWFyU2VhcmNoRmlsdGVyXCJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBbaGlkZGVuXT1cIiFub1NlYXJjaFJlc3VsdHNcIiBjbGFzcz1cIm5vLXJlc3VsdHMtd2FybmluZ1wiPk5vIFJlc3VsdHMgRm91bmQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJhdXRvY29tcGxldGVTZWFyY2goJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGF1dG9jb21wbGV0ZU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3BvdGlwXCIgaWQ9XCJlcFRvb2x0aXBcIj48L2Rpdj5cblxuICAgICAgICAgICAgPHN2ZyBzdHlsZT0ncG9pbnRlci1ldmVudHM6YWxsJyBoZWlnaHQ9XCIxMDAwXCIgaWQ9XCJJZGVudGl0eVRvcG9sb2d5XCIgd2lkdGg9XCIxMjAwXCI+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDxsaWItbG9hZGluZy1pbmRpY2F0b3IgKm5nSWY9XCJpc0xvYWRpbmdcIiBbaXNMb2FkaW5nXT1cImlzTG9hZGluZ1wiPjwvbGliLWxvYWRpbmctaW5kaWNhdG9yPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b3BvbG9neS1sZWdlbmRBXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW0taGVhZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dC1oZWFkaW5nXCI+Q29tcG9uZW50IFN0YXR1czwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSB1bnJlZ2lzdGVyZWRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRleHRcIj5VbnJlZ2lzdGVyZWQgLyBPZmZsaW5lPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtY2lyY2xlIHJlZ2lzdGVyZWRfaW5fdXNlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC10ZXh0XCI+UmVnaXN0ZXJlZCwgT25saW5lPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtY2lyY2xlIGVycm9yZWRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRleHRcIj5FcnJvcmVkPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRvcG9sb2d5LWxlZ2VuZEJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbS1oZWFkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC10ZXh0LWhlYWRpbmdcIj5MaW5rIFN0YXR1czwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSB1bnJlZ2lzdGVyZWRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRleHRcIj5PZmZsaW5lPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtY2lyY2xlIHJlZ2lzdGVyZWRfaW5fdXNlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC10ZXh0XCI+SW4gVXNhZ2U8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1jaXJjbGUgcmVnaXN0ZXJlZF9ub3RfaW5fdXNlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC10ZXh0XCI+VXNhZ2UgRGF0ZSBOL0E8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1jaXJjbGUgbGlua2Vycm9yZWRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRleHRcIj5FcnJvcmVkPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
587
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktc2VydmljZS1wYXRoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy92aXN1YWxpemVyL2lkZW50aXR5LXNlcnZpY2UtcGF0aC9pZGVudGl0eS1zZXJ2aWNlLXBhdGguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Zpc3VhbGl6ZXIvaWRlbnRpdHktc2VydmljZS1wYXRoL2lkZW50aXR5LXNlcnZpY2UtcGF0aC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsT0FBTyxFQUNMLFNBQVMsRUFFVCxNQUFNLEdBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RSxPQUFPLEVBQ0wsZ0JBQWdCLEdBRWpCLE1BQU0sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyxFQUNMLGlCQUFpQixHQUVsQixNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7O0FBTXZCLE1BS2EsNEJBQTRCO0lBeUJ2QyxZQUNVLHlCQUFvRCxFQUMzQixlQUFnQyxFQUM5QixXQUE0QixFQUN2RCxNQUFjLEVBQ2QsU0FBcUQsRUFDN0IsSUFBUztRQUxqQyw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQzNCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDdkQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQTRDO1FBQzdCLFNBQUks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OzBCQUd4QixNQUFNOzJCQUFDLGVBQWU7O0FBaW1CM0IsTUFBTSxXQUFXO0NBR2hCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IHByZWZlci1jb25zdDogMSAqL1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBWaWV3Q2hpbGQsXG4gIEluamVjdCxcbiAgT25Jbml0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgU0VUVElOR1NfU0VSVklDRSxcbiAgU2V0dGluZ3NTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFpJVElfREFUQV9TRVJWSUNFLFxuICBaaXRpRGF0YVNlcnZpY2UsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ppdGktZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IElkZW50aXR5U2VydmljZVBhdGhIZWxwZXIgfSBmcm9tICcuL2lkZW50aXR5LXNlcnZpY2UtcGF0aC5oZWxwZXInO1xuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWlkZW50aXR5LXZpc3VhbGl6ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vaWRlbnRpdHktc2VydmljZS1wYXRoLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaWRlbnRpdHktc2VydmljZS1wYXRoLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIElkZW50aXR5U2VydmljZVBhdGhDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgZDM7XG4gIGlzRGFya01vZGUgPSBmYWxzZTtcbiAgcmVmcmVzaFJvdGF0ZSA9IGZhbHNlO1xuICBjbG9zZVJvdGF0ZSA9IHRydWU7XG4gIGZpbHRlclRleHQgPSAnZmV0Y2hpbmcgc2VydmljZXMuLic7XG4gIG5vU2VhcmNoUmVzdWx0cyA9IGZhbHNlO1xuICBhdXRvY29tcGxldGVPcHRpb25zID0gW107XG4gIGZ1bGxTY3JlZW4gPSBmYWxzZTtcbiAgc2VydmljZU9wdGlvbnM6IGFueTtcbiAgZW5kcG9pbnREYXRhO1xuICBuZXR3b3JrR3JhcGg7XG4gIGdyYXBoSnNvbk9iajtcbiAgc2VydmljZXM7XG4gIGVkZ2Vyb3V0ZXJzO1xuICBlbmRwb2ludHMgPSBbXTtcbiAgc2VsZWN0ZWRTZXJ2aWNlID0gJyc7XG4gIHNlcnZpY2VTZWxlY3RFcnJvcjtcbiAgZG9FbmRwb2ludEhhc0FwcHdhbnMgPSBmYWxzZTtcbiAgZG9FbmRwb2ludEhhc1B1YmxpY1JvdXRlcnMgPSBmYWxzZTtcbiAgZG9FbmRwb2ludEhhc1NlcnZpY2VzSW5Qcml2YXRlTncgPSBmYWxzZTtcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG4gIGNvdW50R3JwMk5kcyA9IDA7XG4gIGNvdW50R3JwM05kcyA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpZGVudGl0eVNlcnZpY2VQYXRoSGVscGVyOiBJZGVudGl0eVNlcnZpY2VQYXRoSGVscGVyLFxuICAgIEBJbmplY3QoU0VUVElOR1NfU0VSVklDRSkgcHVibGljIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgIEBJbmplY3QoWklUSV9EQVRBX1NFUlZJQ0UpIHByaXZhdGUgeml0aVNlcnZpY2U6IFppdGlEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8SWRlbnRpdHlTZXJ2aWNlUGF0aENvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnlcbiAgKSB7XG4gICAgdGhpcy5lbmRwb2ludERhdGEgPSBkYXRhLmlkZW50aXR5O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5nZXRFbmRwb2ludE5ldHdvcmtBc0NvZGUoKTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgY29uc3QgYmdDb2wgPSBkMy5jb2xvcihkMy5zZWxlY3QoJ2JvZHknKS5zdHlsZShcImJhY2tncm91bmQtY29sb3JcIikpLmZvcm1hdEhleCgpO1xuICAgIHRoaXMuaXNEYXJrTW9kZSA9IGJnQ29sID09JyMxODE5MWQnID8gdHJ1ZTogZmFsc2U7XG4gIH1cblxuICBnZXRFbmRwb2ludE5ldHdvcmtBc0NvZGUoKSB7XG4gICAgY29uc3QgcGFnZXNpemUgPSA1MDA7XG4gICAgY29uc3Qgc2VydmljZXNfcGFnaW5nID0ge1xuICAgICAgc2VhcmNoT246ICduYW1lJyxcbiAgICAgIGZpbHRlcjogJycsXG4gICAgICB0b3RhbDogcGFnZXNpemUsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc29ydDogJ25hbWUnLFxuICAgICAgb3JkZXI6ICdhc2MnLFxuICAgIH07XG5cbiAgICB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAuZ2V0KGBpZGVudGl0aWVzLyR7dGhpcy5lbmRwb2ludERhdGEuaWR9L3NlcnZpY2VzYCwgc2VydmljZXNfcGFnaW5nLCBbXSlcbiAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICB0aGlzLmNsb3NlUm90YXRlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2VzIHx8IHRoaXMuc2VydmljZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlcyA9IFtdO1xuICAgICAgICAgIHRoaXMuc2VydmljZU9wdGlvbnMgPSBbXTtcbiAgICAgICAgICB0aGlzLnNlcnZpY2VPcHRpb25zLnB1c2gobm9TZXJ2aWNlcygpKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VydmljZSA9ICdTZXJ2aWNlcyBub3QgZm91bmQgZm9yIGEgc2VsZWN0ZWQgaWRlbnRpdHknO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwocmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IC8gcGFnZXNpemUpO1xuICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgICAgZm9yIChsZXQgcGFnZSA9IDI7IHBhZ2UgPD0gcGFnZXM7IHBhZ2UrKykge1xuICAgICAgICAgICAgc2VydmljZXNfcGFnaW5nLnBhZ2UgPSBwYWdlO1xuICAgICAgICAgICAgY29uc3QgdG1wX3Byb21pc2UgPSB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgICAgYGlkZW50aXRpZXMvJHt0aGlzLmVuZHBvaW50RGF0YS5pZH0vc2VydmljZXNgLFxuICAgICAgICAgICAgICAgIHNlcnZpY2VzX3BhZ2luZyxcbiAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC50aGVuKChwYWdlUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcGFnZVJlc3VsdC5kYXRhLmZvckVhY2goKHNlcnYpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXMucHVzaChzZXJ2KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRtcF9wcm9taXNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgICAgICAuZ2V0KGBpZGVudGl0aWVzLyR7dGhpcy5lbmRwb2ludERhdGEuaWR9L2VkZ2Utcm91dGVyc2AsIHt9LCBbXSlcbiAgICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRnZXJvdXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICByZXN1bHQuZGF0YS5mb3JFYWNoKChyZWMpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZWRnZXJvdXRlcnMucHVzaChyZWMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZU9wdGlvbnMgPSBjcmVhdGVTZXJ2aWNlT3B0aW9ucyh0aGlzLnNlcnZpY2VzKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVGV4dCA9XG4gICAgICAgICAgICAgIHRoaXMuc2VydmljZU9wdGlvbnMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgIDogdGhpcy5zZXJ2aWNlT3B0aW9uc1swXS5uYW1lO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlcnZpY2UgPVxuICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VPcHRpb25zLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgID8gJ1NlcnZpY2VzIG5vdCBmb3VuZCBmb3IgYSBzZWxlY3RlZCBpZGVudGl0eSdcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2VydmljZU9wdGlvbnNbMF0ubmFtZTtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuc2VydmljZU9wdGlvbnM7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VDaGFuZ2VkKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlU2VydmljZU9wdGlvbnMoX3NlcnZpY2VzKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gW107XG4gICAgICBjb25zdCBzZXJ2aWNlTmFtZXMgPSBbXTtcbiAgICAgIF9zZXJ2aWNlcz8uZmluZCgoc3J2aWNlKSA9PiB7XG4gICAgICAgIGlmICghc2VydmljZU5hbWVzLmluY2x1ZGVzKHNydmljZS5uYW1lKSkge1xuICAgICAgICAgIHNlcnZpY2VOYW1lcy5wdXNoKHNydmljZS5uYW1lKTtcbiAgICAgICAgICBjb25zdCBzZCA9IG5ldyBTZXJ2aWNlRGF0YSgpO1xuICAgICAgICAgIHNkLmlkID0gc3J2aWNlLmlkO1xuICAgICAgICAgIHNkLm5hbWUgPSBzcnZpY2UubmFtZTtcbiAgICAgICAgICBvcHRpb25zLnB1c2goc2QpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vU2VydmljZXMoKSB7XG4gICAgICBjb25zdCBzZCA9IG5ldyBTZXJ2aWNlRGF0YSgpO1xuICAgICAgc2QuaWQgPSAnJztcbiAgICAgIHNkLm5hbWUgPSAnTk8gU0VSVklDRVMnO1xuICAgICAgcmV0dXJuIHNkO1xuICAgIH1cbiAgfSAvLyBlbmQgb2YgZ2V0RW5kcG9pbnROZXR3b3JrQXNDb2RlXG5cbiAgZmlsdGVyU2VhcmNoQXJyYXkoKSB7XG4gICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gW107XG4gICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gdGhpcy5zZXJ2aWNlT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgIG9wdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWxlY3RlZFNlcnZpY2UudG9Mb3dlckNhc2UoKSlcbiAgICApO1xuICB9XG5cbiAgY2xlYXJTZWFyY2hGaWx0ZXIoKSB7XG4gICAgdGhpcy5maWx0ZXJUZXh0ID0gJ1lvdSBjYW4gZmlsdGVyIHNlcnZpY2VzIGJ5IHR5cGluZyBoZXJlJztcbiAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSB0aGlzLnNlcnZpY2VPcHRpb25zO1xuICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlID0gJyc7XG4gIH1cblxuICBhdXRvY29tcGxldGVTZWFyY2goZXZlbnQpIHtcbiAgICB0aGlzLnNlcnZpY2VDaGFuZ2VkKCk7XG4gIH1cblxuICBzZXJ2aWNlQ2hhbmdlZCgpIHtcbiAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICBjb25zdCBhbGxQcm9taXNlcyA9IFtdO1xuICAgICBsZXQgc2VydmljZU9iID0gbnVsbDtcbiAgICAgbGV0IHNlcnZpY2VfY29uZmlncyA9IFtdO1xuXG4gICAgIHNlcnZpY2VPYiA9IHRoaXMuc2VydmljZXMgJiYgdGhpcy5zZXJ2aWNlcy5maW5kKChyZWMpID0+IHtcbiAgICAgIHJldHVybiAgKHJlYy5uYW1lID09PSB0aGlzLnNlbGVjdGVkU2VydmljZSk7XG4gICAgIH0pO1xuXG4gICAgIGlmICghc2VydmljZU9iKSB7XG4gICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICByZXR1cm47XG4gICAgIH1cblxuICAgICBjb25zdCBjb25maWdzX3VybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKHNlcnZpY2VPYiwgJ2NvbmZpZ3MnKTtcblxuICAgICBjb25zdCBjb25maWdQcm9taXNlID0gdGhpcy56aXRpU2VydmljZVxuICAgICAgLmdldChjb25maWdzX3VybCwge30sIFtdKVxuICAgICAgLnRoZW4oKGNvbmZpZ3MpID0+IHtcbiAgICAgICAgc2VydmljZV9jb25maWdzID0gY29uZmlncyAmJiBjb25maWdzLmRhdGEgPyBjb25maWdzLmRhdGEgOiBbXTtcbiAgICAgIH0pO1xuICAgICBjb25zdCBzZXJ2aWNlX2VkZ2Vfcm91dGVyX3BvbGljaWVzX3VybCA9IHRoaXMuZ2V0TGlua0ZvclJlc291cmNlKFxuICAgICAgc2VydmljZU9iLFxuICAgICAgJ3NlcnZpY2UtZWRnZS1yb3V0ZXItcG9saWNpZXMnXG4gICAgICk7XG4gICAgIGNvbnN0IHNlcnZpY2VfcG9saWNpZXNfdXJsID0gdGhpcy5nZXRMaW5rRm9yUmVzb3VyY2UoXG4gICAgICBzZXJ2aWNlT2IsXG4gICAgICAnc2VydmljZS1wb2xpY2llcydcbiAgICAgKS5yZXBsYWNlKCcuLycsICcnKTsgLy8gZGlhbCwgQmluZCBpbmZvXG5cbiAgICBsZXQgYmluZFBvbGljaWVzID0gW107XG4gICAgbGV0IGJpbmRJZG5ldGl0aWVzID0gW107XG4gICAgY29uc3QgcHJvbWlzZTIgPSB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAuZ2V0KHNlcnZpY2VfcG9saWNpZXNfdXJsLCB7fSwgW10pXG4gICAgICAudGhlbigocG9saWNpZXMpID0+IHtcbiAgICAgICAgY29uc3QgaWRlbnRpdHlQcm9taXNlcyA9IFtdO1xuICAgICAgICBfLmlzQXJyYXkocG9saWNpZXMuZGF0YSkgJiYgcG9saWNpZXMuZGF0YS5mb3JFYWNoKChwb2xpY3kpID0+IHtcbiAgICAgICAgICBpZiAocG9saWN5LnR5cGUgPT09ICdCaW5kJykge1xuICAgICAgICAgICAgY29uc3QgYmluZElkZW50aXRpZXNVcmwgPSB0aGlzLmdldExpbmtGb3JSZXNvdXJjZShcbiAgICAgICAgICAgICAgcG9saWN5LFxuICAgICAgICAgICAgICAnaWRlbnRpdGllcydcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBwcm9tc2UgPSB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgIC5nZXQoYmluZElkZW50aXRpZXNVcmwucmVwbGFjZSgnLi8nLCAnJyksIHt9LCBbXSlcbiAgICAgICAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuZm9yRWFjaCgocnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtVG9BcnJheShiaW5kSWRuZXRpdGllcywgcnMpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSXRlbVRvQXJyYXkoYmluZElkbmV0aXRpZXMsIHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWRlbnRpdHlQcm9taXNlcy5wdXNoKHByb21zZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgUHJvbWlzZS5hbGwoaWRlbnRpdHlQcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zdGFydFZpc1Byb2Nlc3MoYmluZElkbmV0aXRpZXMsIHNlcnZpY2VPYiwgc2VydmljZV9jb25maWdzKTtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYWRkSXRlbVRvQXJyYXkoYmluZElkbmV0aXRpZXMsIG9iKSB7XG4gICAgaWYgKCFiaW5kSWRuZXRpdGllcy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBvYi5pZCkpIHtcbiAgICAgIGJpbmRJZG5ldGl0aWVzLnB1c2gob2IpO1xuICAgIH1cbiAgICByZXR1cm4gYmluZElkbmV0aXRpZXM7XG4gIH1cblxuICBnZXRMaW5rRm9yUmVzb3VyY2Uob2IsIHJlc291cmNlKSB7XG4gICAgcmV0dXJuIG9iWydfbGlua3MnXVtyZXNvdXJjZV1bJ2hyZWYnXTtcbiAgfVxuXG4gIHN0YXJ0VmlzUHJvY2VzcyhiaW5kSWRuZXRpdGllcywgc2VsZWN0ZWRTZXJ2aWNlT2IsIHNlcnZpY2VDb25maWdzKSB7XG4gICAgdGhpcy5jb3VudEdycDJOZHMgPSAwO1xuICAgIHRoaXMuY291bnRHcnAzTmRzID0gMDtcbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMuc2VsZWN0ZWRTZXJ2aWNlKSkge1xuICAgICAgdGhpcy5zZXJ2aWNlU2VsZWN0RXJyb3IgPSAhXy5pc0VtcHR5KHRoaXMuc2VsZWN0ZWRTZXJ2aWNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZ3JhcGhKc29uT2JqID0gdGhpcy5pZGVudGl0eVNlcnZpY2VQYXRoSGVscGVyLmdldEVuZHBvaW50R3JhcGhPYmooXG4gICAgICAgIHRoaXMuZW5kcG9pbnREYXRhLFxuICAgICAgICBiaW5kSWRuZXRpdGllcyxcbiAgICAgICAgdGhpcy5lZGdlcm91dGVycyxcbiAgICAgICAgc2VsZWN0ZWRTZXJ2aWNlT2IsXG4gICAgICAgIHNlcnZpY2VDb25maWdzXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjb3VudEdycDFOZHMgPSAwO1xuICAgIHRoaXMuZG9FbmRwb2ludEhhc1NlcnZpY2VzSW5Qcml2YXRlTncgPSBmYWxzZTtcbiAgICB0aGlzLmRvRW5kcG9pbnRIYXNQdWJsaWNSb3V0ZXJzID0gZmFsc2U7XG4gICAgdGhpcy5kb0VuZHBvaW50SGFzQXBwd2FucyA9IGZhbHNlO1xuICAgIHRoaXMuZ3JhcGhKc29uT2JqLm5vZGVzLmZvckVhY2goKG5kKSA9PiB7XG4gICAgICBpZiAobmQuZ3JvdXAgPT09ICczJykge1xuICAgICAgICB0aGlzLmNvdW50R3JwM05kcysrO1xuICAgICAgfVxuICAgICAgaWYgKG5kLmdyb3VwLmluY2x1ZGVzKCcyJykpIHtcbiAgICAgICAgdGhpcy5jb3VudEdycDJOZHMrKztcbiAgICAgIH1cbiAgICAgIGlmIChuZC5ncm91cCA9PT0gJzEnKSB7XG4gICAgICAgIGNvdW50R3JwMU5kcysrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuY291bnRHcnAzTmRzID4gMCkge1xuICAgICAgdGhpcy5kb0VuZHBvaW50SGFzU2VydmljZXNJblByaXZhdGVOdyA9IHRydWU7IC8vIHNob3cgcHJpdmF0ZS9jdXN0b21lciBuZXR3b3JrIGJveCwgd2lsbCBiZSBkZWNpZGVkIHdpdGggdGhpcyB2YXJpYWJsZS5cbiAgICB9XG4gICAgaWYgKHRoaXMuY291bnRHcnAyTmRzID4gMCkge1xuICAgICAgdGhpcy5kb0VuZHBvaW50SGFzUHVibGljUm91dGVycyA9IHRydWU7IC8vIHNob3cgcHVibGljIG5ldHdvcmsgYm94LCB3aWxsIGJlIGRlY2lkZWQgd2l0aCB0aGlzIHZhcmlhYmxlLlxuICAgIH1cblxuICAgIGlmIChjb3VudEdycDFOZHMgPiAwKSB7XG4gICAgICB0aGlzLmRvRW5kcG9pbnRIYXNBcHB3YW5zID0gdHJ1ZTsgLy8gc2hvdyBwcml2YXRlIG5ldHdvcmsgYm94LCB3aWxsIGJlIGRlY2lkZWQgd2l0aCB0aGlzIHZhcmlhYmxlLlxuICAgIH1cbiAgICB0aGlzLmluaXRUb3BvVmlldygpO1xuICB9XG5cbiAgdG9nZ2xlTW9kYWxTaXplKCkge1xuICAgIHRoaXMuZnVsbFNjcmVlbiA9ICF0aGlzLmZ1bGxTY3JlZW47XG4gIH1cblxuICBoaWRlKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBpbml0VG9wb1ZpZXcoKSB7XG4gICAgY29uc3QgbWFyZ2luID0geyB0b3A6IDEwLCByaWdodDogOTAsIGJvdHRvbTogMzAsIGxlZnQ6IDAgfTtcbiAgICBjb25zdCB3aWR0aCA9IDExMDAgLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5yaWdodDtcbiAgICBjb25zdCBoZWlnaHQgPSAxMTAwIC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b207XG4gICAgY29uc3QgY29sb3JzID0gZDMuc2NhbGVPcmRpbmFsKGQzLnNjaGVtZUNhdGVnb3J5MTApO1xuICAgIGNvbnN0IHRvb2x0aXAgPSBkMy5zZWxlY3QoJyNlcFRvb2x0aXAnKTtcblxuICAgIGxldCBzdmcgPSBkMy5zZWxlY3QoJyNJZGVudGl0eVRvcG9sb2d5JyksXG4gICAgICBub2RlLFxuICAgICAgbGluaztcblxuICAgIGNvbnN0IGhhbmRsZVpvb20gPSAoZSkgPT4gc3ZnLmF0dHIoJ3RyYW5zZm9ybScsIGUudHJhbnNmb3JtKTtcbiAgICBjb25zdCB6b29tID0gZDMuem9vbSgpLm9uKCd6b29tJywgaGFuZGxlWm9vbSk7XG5cbiAgICBzdmdcbiAgICAgIC5hdHRyKCd3aWR0aCcsICcxMDAlJylcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCAnMTAwJScpXG4gICAgICAvLyAuY2FsbCh6b29tKVxuICAgICAgLmF0dHIoJ3ZpZXdCb3gnLCAnMCAnICsgLTEwICsgJyAnICsgd2lkdGggKyAnICcgKyBoZWlnaHQpXG4gICAgICAuYXBwZW5kKCdnJylcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAtMzAwICsgJywnICsgMjI1ICsgJyknKTtcblxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cnKS5yZW1vdmUoKTtcblxuICAgIGNvbnN0IHNpbXVsYXRpb246IGFueSA9IGQzXG4gICAgICAuZm9yY2VTaW11bGF0aW9uKClcbiAgICAgIC5mb3JjZShcbiAgICAgICAgJ2xpbmsnLFxuICAgICAgICBkM1xuICAgICAgICAgIC5mb3JjZUxpbmsoKVxuICAgICAgICAgIC5pZChmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICByZXR1cm4gZC5pZDtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5kaXN0YW5jZSgxMDApXG4gICAgICAgICAgLnN0cmVuZ3RoKDEpXG4gICAgICApXG4gICAgICAuZm9yY2UoJ2NoYXJnZScsIGQzLmZvcmNlTWFueUJvZHkoKSlcbiAgICAgIC5mb3JjZSgnY2VudGVyJywgZDMuZm9yY2VDZW50ZXIod2lkdGggLyAyLCBoZWlnaHQgLyAyKSk7XG5cbiAgICBjb25zdCBsaW5rcyA9IHRoaXMuZ3JhcGhKc29uT2JqLmxpbmtzO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ncmFwaEpzb25PYmoubm9kZXM7XG5cbiAgICBsaW5rID0gc3ZnXG4gICAgICAuc2VsZWN0QWxsKCdnLmxpbmUubGluZScpXG4gICAgICAuZGF0YShsaW5rcylcbiAgICAgIC5lbnRlcigpXG4gICAgICAuYXBwZW5kKCdnJylcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaW5rJylcbiAgICAgIC5hdHRyKCdtYXJrZXItZW5kJywgJ3VybCgjYXJyb3doZWFkKScpO1xuXG4gICAgbGlua1xuICAgICAgLmFwcGVuZCgnbGluZScpXG4gICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgIGlmIChkLnN0YXR1cyA9PT0gMSB8fCBkLnN0YXR1cyA9PT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gMS41OyAvL01hdGguc3FydChkLndlaWdodCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuc3R5bGUoJ3N0cm9rZScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgIGlmIChkLnN0YXR1cyA9PT0gMSkge1xuICAgICAgICAgIGxldCBkb0luVXNhZ2UgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gJyMwMGNkMTMnO1xuICAgICAgICB9IGVsc2UgaWYgKGQuc3RhdHVzID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiAnI2Q4ZGNlNyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICcjZmYwMDRlJztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBsaW5rLmVhY2goZnVuY3Rpb24gKHRoaXM6IGFueSwgZDogYW55LCBpKSB7XG4gICAgICBjb25zdCBfdGhpcyA9IGQzLnNlbGVjdCh0aGlzKTtcbiAgICAgIGlmIChkLnN0YXR1cyA9PT0gMSkge1xuICAgICAgICBsZXQgZG9JblVzYWdlID0gdHJ1ZTtcbiAgICAgICAgX3RoaXNcbiAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAncmdiKDI1NSwxOTgsMjIpJylcbiAgICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMScpO1xuICAgICAgICBfdGhpc1xuICAgICAgICAgIC5hcHBlbmQoJ3JlY3QnKVxuICAgICAgICAgIC5hdHRyKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgIHJldHVybiAnd2hpdGUnO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmF0dHIoJ3dpZHRoJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgIGlmIChkb0luVXNhZ2UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gMC4xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICBpZiAoZG9JblVzYWdlKSB7XG4gICAgICAgICAgICAgIHJldHVybiAzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDAuMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hcHBlbmQoJ2FuaW1hdGUnKTtcblxuICAgICAgICBfdGhpcy5zZWxlY3QoJ3JlY3QnKS5hcHBlbmQoJ2FuaW1hdGUnKTtcbiAgICAgIH0gZWxzZSBpZiAoZC5zdGF0dXMgPT09IDApIHtcbiAgICAgICAgX3RoaXNcbiAgICAgICAgICAuYXBwZW5kKCdpbWFnZScpXG4gICAgICAgICAgLmF0dHIoJ3hsaW5rOmhyZWYnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJy9hc3NldHMvaW1hZ2VzL3Zpc3VhbGl6ZXIvbGluay1jdXQucG5nJztcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hdHRyKCd3aWR0aCcsICcyMCcpXG4gICAgICAgICAgLmF0dHIoJ2hlaWdodCcsICcyNCcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbm9kZSA9IHN2Z1xuICAgICAgLnNlbGVjdEFsbCgnLm5vZGUnKVxuICAgICAgLmRhdGEobm9kZXMpXG4gICAgICAuZW50ZXIoKVxuICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAuYXR0cignY2xhc3MnLCAnbm9kZScpO1xuXG4gICAgbm9kZVxuICAgICAgLmFwcGVuZCgnaW1hZ2UnKVxuICAgICAgLmF0dHIoJ3hsaW5rOmhyZWYnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICBjb25zdCByb3V0ZXJJbWFnZVBhdGggPSAnL2Fzc2V0cy9pbWFnZXMvdmlzdWFsaXplci9Sb3V0ZXJzLnBuZyc7XG4gICAgICAgIGNvbnN0IG5vblByb3Zpc2lvbmVkUm91dGVySW1hZ2VQYXRoID1cbiAgICAgICAgICAnL2Fzc2V0cy9pbWFnZXMvdmlzdWFsaXplci9FUi5wbmcnO1xuICAgICAgICBjb25zdCBlcnJSb3V0ZXJJbWFnZVBhdGggPSAnL2Fzc2V0cy9pbWFnZXMvdmlzdWFsaXplci9lcnJvcl9lci5wbmcnO1xuICAgICAgICBjb25zdCBlcnJFbmRwb2ludEltYWdlUGF0aCA9ICcvYXNzZXRzL2ltYWdlcy92aXN1YWxpemVyL2hvc3QtZXJyb3IucG5nJztcbiAgICAgICAgY29uc3QgdW5yZWdpc3RlcmVkRW5kcG9pbnRJbWFnZVBhdGggPVxuICAgICAgICAgICcvYXNzZXRzL2ltYWdlcy92aXN1YWxpemVyL2hvc3RfdW5yZWdpc3RlcmVkLnBuZyc7XG4gICAgICAgIGNvbnN0IGVuZFBvaW50UGF0aCA9ICcvYXNzZXRzL2ltYWdlcy92aXN1YWxpemVyL2hvc3QucG5nJztcblxuICAgICAgICBpZiAoZC50eXBlLmluY2x1ZGVzKCdJZGVudGl0eScpICYmIGQuc3RhdHVzID09PSAnVW4tUmVnaXN0ZXJlZCcpIHtcbiAgICAgICAgICByZXR1cm4gdW5yZWdpc3RlcmVkRW5kcG9pbnRJbWFnZVBhdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgZC50eXBlLmluY2x1ZGVzKCdJZGVudGl0eScpICYmXG4gICAgICAgICAgZC5hcGlTZXNzaW9uID09PSAnWWVzJyAmJlxuICAgICAgICAgIGQuc3RhdHVzID09PSAnUmVnaXN0ZXJlZCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGVuZFBvaW50UGF0aDtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBkLnR5cGUuaW5jbHVkZXMoJ0lkZW50aXR5JykgJiZcbiAgICAgICAgICAoZC5yb3V0ZXJDb25uZWN0aW9uID09PSAnTm8nIHx8IGQuYXBpU2Vzc2lvbiA9PT0gJ05vJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGVyckVuZHBvaW50SW1hZ2VQYXRoO1xuICAgICAgICB9IGVsc2UgaWYgKGQudHlwZS5pbmNsdWRlcygnSWRlbnRpdHknKSkge1xuICAgICAgICAgIHJldHVybiBlbmRQb2ludFBhdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgZC50eXBlLmluY2x1ZGVzKCdSb3V0ZXInKSAmJlxuICAgICAgICAgIChkLnN0YXR1cyA9PT0gJ0VSUk9SJyB8fCBkLm9ubGluZSA9PT0gJ05vJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGVyclJvdXRlckltYWdlUGF0aDtcbiAgICAgICAgfSBlbHNlIGlmIChkLnR5cGUuaW5jbHVkZXMoJ1JvdXRlcicpICYmIGQuc3RhdHVzID09PSAnUFJPVklTSU9ORUQnKSB7XG4gICAgICAgICAgcmV0dXJuIHJvdXRlckltYWdlUGF0aDtcbiAgICAgICAgfSBlbHNlIGlmIChkLnR5cGUuaW5jbHVkZXMoJ1JvdXRlcicpKSB7XG4gICAgICAgICAgcmV0dXJuIG5vblByb3Zpc2lvbmVkUm91dGVySW1hZ2VQYXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGQuZ3JvdXAgPT09ICc0Jykge1xuICAgICAgICAgIHJldHVybiAnL2Fzc2V0cy9pbWFnZXMvdmlzdWFsaXplci9zZXJ2aWNlLnBuZyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmF0dHIoJ3gnLCAtMjUpXG4gICAgICAuYXR0cigneScsIC0yNSlcbiAgICAgIC5hdHRyKCd3aWR0aCcsICc0MCcpXG4gICAgICAuYXR0cignaGVpZ2h0JywgJzQwJyk7XG5cbiAgICBub2RlXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAgIC5hdHRyKCd4JywgMTApXG4gICAgICAuYXR0cigneScsIDEyKVxuICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tdGFibGVUZXh0KScpXG4gICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xuICAgICAgICByZXR1cm4gZC5uYW1lO1xuICAgICAgfSk7XG5cbiAgICBzaW11bGF0aW9uLm5vZGVzKG5vZGVzKS5vbigndGljaycsIHRpY2tlZCk7XG5cbiAgICBzaW11bGF0aW9uLmZvcmNlKCdsaW5rJykubGlua3MobGlua3MpO1xuICAgIG5vZGUub24oJ21vdXNlb3ZlcicsIChldmVudCwgZCkgPT4ge1xuICAgICAgY29uc3QgZW5kcG9pbnRVdGxpemF0aW9uSnNvbiA9IHt9O1xuICAgICAgZHJhd1Rvb2x0aXAoZXZlbnQsIGQsIGVuZHBvaW50VXRsaXphdGlvbkpzb24pO1xuICAgIH0pO1xuXG4gICAgbm9kZS5vbignbW91c2VvdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZW1vdmVUb29sdGlwKCk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiB0aWNrZWQoKSB7XG4gICAgICBub2RlLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgIHJldHVybiAndHJhbnNsYXRlKCcgKyBkLnBvc3ggKyAnLCcgKyBkLnBvc3kgKyAnKSc7XG4gICAgICB9KTtcblxuICAgICAgbGlua1xuICAgICAgICAuc2VsZWN0KCdsaW5lJylcbiAgICAgICAgLmF0dHIoJ3gxJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICByZXR1cm4gZC5zb3VyY2UucG9zeDtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoJ3kxJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICByZXR1cm4gZC5zb3VyY2UucG9zeTtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoJ3gyJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICByZXR1cm4gZC50YXJnZXQucG9zeDtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoJ3kyJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICByZXR1cm4gZC50YXJnZXQucG9zeTtcbiAgICAgICAgfSk7XG5cbiAgICAgIGxpbmtcbiAgICAgICAgLnNlbGVjdCgnaW1hZ2UnKVxuICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgY29uc3QgeDEgPSBkLnNvdXJjZS5wb3N4LFxuICAgICAgICAgICAgeDIgPSBkLnRhcmdldC5wb3N4LFxuICAgICAgICAgICAgeCA9IHgxIC0gKHgxIC0geDIpIC8gMjtcblxuICAgICAgICAgIHJldHVybiB4IC0gODtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgIGNvbnN0IHkxID0gZC5zb3VyY2UucG9zeSxcbiAgICAgICAgICAgIHkyID0gZC50YXJnZXQucG9zeSxcbiAgICAgICAgICAgIHkgPSB5MSAtICh5MSAtIHkyKSAvIDI7XG5cbiAgICAgICAgICByZXR1cm4geSAtIDEyO1xuICAgICAgICB9KTtcblxuICAgICAgbGlua1xuICAgICAgICAuc2VsZWN0KCdyZWN0JylcbiAgICAgICAgLmF0dHIoJ29wYWNpdHknLCAxKVxuICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgcmV0dXJuIGQuc291cmNlLnBvc3g7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICByZXR1cm4gZC5zb3VyY2UucG9zeTtcbiAgICAgICAgfSlcbiAgICAgICAgLnNlbGVjdEFsbCgnYW5pbWF0ZScpXG4gICAgICAgIC5lYWNoKGZ1bmN0aW9uICh0aGlzOiBhbnksIGQ6IGFueSwgaSkge1xuICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICBkMy5zZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgLmF0dHIoJ2F0dHJpYnV0ZU5hbWUnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAneCc7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5hdHRyKCdmcm9tJywgZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG4gPSBkLnNvdXJjZS5wb3N4IC0gMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmF0dHIoJ3RvJywgZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnRhcmdldC5wb3N4O1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpXG4gICAgICAgICAgICAgIC5hdHRyKCdhdHRyaWJ1dGVOYW1lJywgZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAneSc7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5hdHRyKCdmcm9tJywgZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnNvdXJjZS5wb3N5O1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuYXR0cigndG8nLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQudGFyZ2V0LnBvc3k7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgLmF0dHIoJ2F0dHJpYnV0ZVR5cGUnLCAnWE1MJylcbiAgICAgICAgICAgIC5hdHRyKCdiZWdpbicsICcwLjVzJylcbiAgICAgICAgICAgIC5hdHRyKCdkdXInLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICByZXR1cm4gJzEuMHMnO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKCdyZXBlYXRDb3VudCcsICdpbmRlZmluaXRlJyk7XG4gICAgICAgIH0pO1xuICAgIH0gLy8gZW5kIG9mIHRpY2tlZFxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlVG9vbHRpcCgpIHtcbiAgICAgIGlmICh0b29sdGlwKSB7XG4gICAgICAgIHRvb2x0aXAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRyYXdUb29sdGlwKGV2ZW50LCBkLCBlbmRwb2ludFV0bGl6YXRpb25Kc29uKSB7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXBUb29sdGlwJykuaW5uZXJIVE1MID0gcmVhZEtleVZhbHVlcyhcbiAgICAgICAgZCxcbiAgICAgICAgZW5kcG9pbnRVdGxpemF0aW9uSnNvblxuICAgICAgKTtcbiAgICAgIHRvb2x0aXAuc3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgIHRvb2x0aXAuc3R5bGUoJ3doaXRlLXNwYWNlJywgJ3ByZS13cmFwJyk7XG4gICAgICBjb25zdCB4ID0gZXZlbnQucGFnZVggKyAncHgnO1xuICAgICAgY29uc3QgeSA9IGV2ZW50LnBhZ2VZICsgJ3B4JztcbiAgICAgIHRvb2x0aXAuc3R5bGUoJ2xlZnQnLCB4KTtcbiAgICAgIHRvb2x0aXAuc3R5bGUoJ3RvcCcsIHkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRLZXlWYWx1ZXMoZCwgZW5kcG9pbnRVdGxpemF0aW9uSnNvbikge1xuICAgICAgbGV0IGluZm8gPVxuICAgICAgICBcIjxkaXYgY2xhc3M9J3Rvb2wtdGlwLWNvbnRhaW5lcicgc3R5bGU9J2ZvbnQtc2l6ZToxNHB4O2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1jb2xvcjogdmFyKC0tdGFibGVUZXh0KTsnPlwiO1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGQpO1xuXG4gICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGsgPT09ICdzdGF0dXMnIHx8XG4gICAgICAgICAgayA9PT0gJ3Bvc3knIHx8XG4gICAgICAgICAgayA9PT0gJ3Bvc3gnIHx8XG4gICAgICAgICAgayA9PT0gJ2dyb3VwJyB8fFxuICAgICAgICAgIGsgPT09ICdob3N0ZWRFZGdlSWQnIHx8XG4gICAgICAgICAgayA9PT0gJ3ZhbHVlJyB8fFxuICAgICAgICAgIGsgPT09ICdpbmRleCcgfHxcbiAgICAgICAgICBrID09PSAncGFyZW50JyB8fFxuICAgICAgICAgIGsgPT09ICdkZXB0aCcgfHxcbiAgICAgICAgICBrID09PSAneCcgfHxcbiAgICAgICAgICBrID09PSAneScgfHxcbiAgICAgICAgICBrID09PSAnaWQnIHx8XG4gICAgICAgICAgayA9PT0gJ3gwJyB8fFxuICAgICAgICAgIGsgPT09ICd5MCcgfHxcbiAgICAgICAgICBrID09PSAndnknIHx8XG4gICAgICAgICAgayA9PT0gJ3Z4J1xuICAgICAgICApIHtcbiAgICAgICAgICAvLyBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmIChrID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICAgICAgY29uc3Qga1ZhbDogYW55ID0gZFtrXTtcbiAgICAgICAgICBpZiAoa1ZhbCAmJiBrVmFsICE9PSAnJykge1xuICAgICAgICAgICAgIGluZm8gPSBpbmZvICsgJzxkaXYgY2xhc3M9XCJwcm9wLXJvd1wiPicgKyBrICsgJzogJyArIGtWYWwubGVuZ3RoICsgJzwvZGl2Pic7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpc0FuT2JqZWN0KGRba10pKSB7XG4gICAgICAgICAgICBjb25zdCBrVmFsOiBhbnkgPSBkW2tdO1xuICAgICAgICAgICAgaWYgKGtWYWwgJiYga1ZhbCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgaW5mbyA9IGluZm8gKyAnPGRpdiBjbGFzcz1cInByb3Atcm93XCI+JyArIGsgKyAnOiAnICsga1ZhbC5uYW1lICsgJzwvZGl2Pic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChkW2tdIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIGluZm8gPVxuICAgICAgICAgICAgICBpbmZvICtcbiAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJwcm9wLXJvd1wiPicgK1xuICAgICAgICAgICAgICBrICtcbiAgICAgICAgICAgICAgJzogJyArXG4gICAgICAgICAgICAgIGRba10uam9pbignPGJyPiAmbmJzcDsmbmJzcDsgJm5ic3A7Jm5ic3A7JykgK1xuICAgICAgICAgICAgICAnPC9kaXY+JztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgdm8gPSBkW2tdO1xuICAgICAgICAgICAgaWYgKHZvICYmIHZvICE9PSAnJykge1xuICAgICAgICAgICAgICBpbmZvID1cbiAgICAgICAgICAgICAgICBpbmZvICtcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInByb3Atcm93XCI+JyArXG4gICAgICAgICAgICAgICAgayArXG4gICAgICAgICAgICAgICAgJzogJyArXG4gICAgICAgICAgICAgICAgKHZvICE9PSBudWxsIHx8IHZvICE9PSAnJyA/IGRba10gOiAnTi9BJykgK1xuICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBpbmZvICsgJzwvZGl2Pic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBbk9iamVjdChvKSB7XG4gICAgICByZXR1cm4gbyBpbnN0YW5jZW9mIE9iamVjdCAmJiBvLmNvbnN0cnVjdG9yID09PSBPYmplY3Q7XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoUm90YXRlID0gZmFsc2U7XG4gIH0gLy8gZW5kIG9mIGluaXRUb3BvVmlld1xufVxuXG5jbGFzcyBTZXJ2aWNlRGF0YSB7XG4gIGlkO1xuICBuYW1lO1xufVxuXG4iLCI8ZGl2IFtuZ0NsYXNzXT1cInsgJ2Z1bGwtc2NyZWVuJzogZnVsbFNjcmVlbiB9XCIgY2xhc3M9XCJtb2RhbCBzb2xpZFwiIGlkPVwiSWRlbnRpdHlWaXN1YWxpemVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInRwLWRhdGEtaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbHRpdGxlXCI+SWRlbnRpdHkgU2VydmljZSBQYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgKGNsaWNrKT1cImhpZGUoKVwiIGNsYXNzPVwiYnV0dG9uQmFsbCBpY29uLWNsb3NlXCIgaWQ9XCJFc2NaRW5kcG9pbnRDbG9zZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IChjbGljayk9XCJ0b2dnbGVNb2RhbFNpemUoKVwiIGNsYXNzPVwiYnV0dG9uQmFsbCByZXNpemVcIiBpZD1cIlJlc2l6ZU1vZGFsQnV0dG9uXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBbbmdDbGFzc109XCJpc0RhcmtNb2RlPT10cnVlPydkYXJrTW9kZSc6J2xpZ2h0TW9kZSdcIiBjbGFzcz1cImlkZW50aXR5LXRvcG9sb2d5LWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogODBweDsgZmxvYXQ6IGxlZnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlcC10b3BvbG9neS1maWx0ZXItY29udGFpbmVyIGxpc3RCb3ggcm93XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJmaWx0ZXJTZWFyY2hBcnJheSgpXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFNlcnZpY2VcIlxuICAgICAgICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRvcG9sb2d5LWZpbHRlci1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiZmlsdGVyVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB0byBzZWFyY2ggaWRlbnRpdHkgYWNjZXNzaWJsZSBzZXJ2aWNlcy5cIlxuICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlYXJjaEZpbHRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbGVhci1zdmMtaWNvbiBpY29uLWNsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJDbGVhclNlYXJjaEZpbHRlclwiXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCIhbm9TZWFyY2hSZXN1bHRzXCIgY2xhc3M9XCJuby1yZXN1bHRzLXdhcm5pbmdcIj5ObyBSZXN1bHRzIEZvdW5kPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwiYXV0b2NvbXBsZXRlU2VhcmNoKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBhdXRvY29tcGxldGVPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvbi5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9wb3RpcFwiIGlkPVwiZXBUb29sdGlwXCI+PC9kaXY+XG5cbiAgICAgICAgICAgIDxzdmcgc3R5bGU9J3BvaW50ZXItZXZlbnRzOmFsbCcgaGVpZ2h0PVwiMTAwMFwiIGlkPVwiSWRlbnRpdHlUb3BvbG9neVwiIHdpZHRoPVwiMTIwMFwiPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8bGliLWxvYWRpbmctaW5kaWNhdG9yICpuZ0lmPVwiaXNMb2FkaW5nXCIgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIj48L2xpYi1sb2FkaW5nLWluZGljYXRvcj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9wb2xvZ3ktbGVnZW5kQVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtLWhlYWRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRleHQtaGVhZGluZ1wiPkNvbXBvbmVudCBTdGF0dXM8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1jaXJjbGUgdW5yZWdpc3RlcmVkXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC10ZXh0XCI+VW5yZWdpc3RlcmVkIC8gT2ZmbGluZTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSByZWdpc3RlcmVkX2luX3VzZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dFwiPlJlZ2lzdGVyZWQsIE9ubGluZTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSBlcnJvcmVkXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC10ZXh0XCI+RXJyb3JlZDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b3BvbG9neS1sZWdlbmRCXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW0taGVhZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dC1oZWFkaW5nXCI+TGluayBTdGF0dXM8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1jaXJjbGUgdW5yZWdpc3RlcmVkXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC10ZXh0XCI+T2ZmbGluZTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSByZWdpc3RlcmVkX2luX3VzZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dFwiPkluIFVzYWdlPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtY2lyY2xlIHJlZ2lzdGVyZWRfbm90X2luX3VzZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dFwiPlVzYWdlIERhdGUgTi9BPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtY2lyY2xlIGxpbmtlcnJvcmVkXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC10ZXh0XCI+RXJyb3JlZDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|