ngx-render-material-forms 1.7.9 → 1.8.1

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.
@@ -6,8 +6,6 @@ import { FormControl } from '@angular/forms';
6
6
  import { Subject } from 'rxjs';
7
7
  import { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';
8
8
  import { HttpHeaders } from '@angular/common/http';
9
- import * as CryptoJS from 'crypto-js';
10
- import { isNullOrUndefined } from 'util';
11
9
  import * as i0 from "@angular/core";
12
10
  import * as i1 from "@angular/common/http";
13
11
  import * as i2 from "../common.service";
@@ -36,8 +34,8 @@ export class MaterialSelectComponent extends MaterialComponent {
36
34
  this.pageSize = 20;
37
35
  this.totalPages = 0;
38
36
  this.searchQuery = '';
39
- this.holy = '';
40
- this.grail = '';
37
+ // holy: any = '';
38
+ // grail: any = '';
41
39
  this.productsloadingFlag = false;
42
40
  this.searching = false;
43
41
  this.productList = [];
@@ -52,8 +50,10 @@ export class MaterialSelectComponent extends MaterialComponent {
52
50
  this.storeDependentItems = [];
53
51
  this.executionFlag = false;
54
52
  this.apiCounter = 0;
55
- this.holy = CryptoJS.enc.Base64.parse('8F/2+T2NXqUBQERR12R4sw==');
56
- this.grail = CryptoJS.enc.Base64.parse('yE0CgQbYzK5wqeoKTVzhOQ==');
53
+ // this.holy = CryptoJS.enc.Base64.parse('8F/2+T2NXqUBQERR12R4sw==');
54
+ // this.grail = CryptoJS.enc.Base64.parse('yE0CgQbYzK5wqeoKTVzhOQ==');
55
+ //this.holy = CryptoJS.enc.Base64.parse(this.commonService.getcombodeal());
56
+ //this.grail = CryptoJS.enc.Base64.parse(this.commonService.getglobedata());
57
57
  }
58
58
  onInputChange(event) {
59
59
  if (this.instance.component.key.toLowerCase() === 'vendorproductid' && event.target.value === '') {
@@ -66,28 +66,29 @@ export class MaterialSelectComponent extends MaterialComponent {
66
66
  this.searchItem = "";
67
67
  }
68
68
  }
69
- scrumble(msg) {
70
- if (!isNullOrUndefined(msg)) {
71
- var conceal = this.getcampaign(msg, this.holy, this.grail);
72
- var sha256 = CryptoJS.HmacSHA256(CryptoJS.enc.Base64.stringify(this.grail) + conceal.toString(), CryptoJS.enc.Base64.stringify(this.holy));
73
- var hashInBase64 = CryptoJS.enc.Base64.stringify(sha256);
74
- let keyValue = {
75
- "value": conceal.toString(),
76
- "mac": hashInBase64
77
- };
78
- var result = JSON.stringify(keyValue);
79
- var jumbled = CryptoJS.enc.Utf8.parse(result);
80
- return CryptoJS.enc.Base64.stringify(jumbled);
81
- }
82
- }
83
- getcampaign(data, holy, grail) {
84
- return CryptoJS.AES.encrypt(data.toString(), holy, {
85
- blockSize: 128,
86
- iv: grail,
87
- mode: CryptoJS.mode.CBC,
88
- padding: CryptoJS.pad.Pkcs7
89
- });
90
- }
69
+ // scrumble(msg) {
70
+ // if (!isNullOrUndefined(msg)) {
71
+ // var conceal = this.getcampaign(msg, this.holy, this.grail);
72
+ // var sha256 = CryptoJS.HmacSHA256(CryptoJS.enc.Base64.stringify(this.grail) + conceal.toString(), CryptoJS.enc.Base64.stringify(this.holy));
73
+ // var hashInBase64 = CryptoJS.enc.Base64.stringify(sha256);
74
+ // let keyValue = {
75
+ // "value": conceal.toString(),
76
+ // "mac": hashInBase64
77
+ // };
78
+ // var result = JSON.stringify(keyValue);
79
+ // var jumbled = CryptoJS.enc.Utf8.parse(result);
80
+ // return CryptoJS.enc.Base64.stringify(jumbled);
81
+ // }
82
+ // }
83
+ // getcampaign(data: any, holy: any, grail: any) {
84
+ // return CryptoJS.AES.encrypt(data.toString(), holy,
85
+ // {
86
+ // blockSize: 128,
87
+ // iv: grail,
88
+ // mode: CryptoJS.mode.CBC,
89
+ // padding: CryptoJS.pad.Pkcs7
90
+ // });
91
+ // }
91
92
  registerPanelScrollEvent(selectElem) {
92
93
  if (selectElem && selectElem?.panel) {
93
94
  // const panelElement = selectElem.panel.nativeElement;
@@ -150,20 +151,20 @@ export class MaterialSelectComponent extends MaterialComponent {
150
151
  else {
151
152
  console.error('User not authenticated or tokens missing.');
152
153
  }
153
- const envendorId = this.scrumble(vendorId);
154
- const enpageNumber = this.scrumble(pageNumber);
155
- const enpageSize = this.scrumble(pageSize);
156
- const ensearchQuery = this.scrumble(searchQuery);
157
- const encodeIncludeCurrencyId = this.scrumble(includeCurrencyId);
158
- let enactive = this.scrumble(onlyActive);
154
+ const envendorId = this.commonService.scrumble(vendorId);
155
+ const enpageNumber = this.commonService.scrumble(pageNumber);
156
+ const enpageSize = this.commonService.scrumble(pageSize);
157
+ const ensearchQuery = this.commonService.scrumble(searchQuery);
158
+ const encodeIncludeCurrencyId = this.commonService.scrumble(includeCurrencyId);
159
+ let enactive = this.commonService.scrumble(onlyActive);
159
160
  //Check if enactive is undefined, null, or blank
160
161
  if (enactive === undefined || enactive === null || enactive === '') {
161
- enactive = this.scrumble(true); // Set default value to true
162
+ enactive = this.commonService.scrumble(true); // Set default value to true
162
163
  }
163
164
  // Scrumble and handle the includeDescription parameter
164
- let endescription = this.scrumble(includeDescription);
165
+ let endescription = this.commonService.scrumble(includeDescription);
165
166
  if (!endescription) {
166
- endescription = this.scrumble(false); // Set to 'false' if undefined, null, or blank
167
+ endescription = this.commonService.scrumble(false); // Set to 'false' if undefined, null, or blank
167
168
  }
168
169
  const baseUrlMapping = {
169
170
  'localhost': 'http://localhost:58504',
@@ -539,4 +540,4 @@ SelectComponent.prototype.setItems = function (...args) {
539
540
  }
540
541
  };
541
542
  export { SelectComponent };
542
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZW5kZXItbWF0ZXJpYWwtZm9ybXMvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUE0QyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxlQUFlLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFVLFNBQVMsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBRTVGLE9BQU8sRUFBYyxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBMkV6QyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsaUJBQWlCO0lBK0I1RCxZQUFtQixPQUFtQixFQUFTLEdBQXNCLEVBQVMsSUFBZ0IsRUFBUyxhQUE0QjtRQUNqSSxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBREgsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUFTLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFTLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBMUI1SCxxQkFBZ0IsR0FBZ0IsSUFBSSxXQUFX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QUM7QUFDcEQsZUFBZSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLElBQUk7SUFDcEQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUM3QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLEVBQUU7UUFDekUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUNqRTtBQUNILENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSxlQUFlLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRlcmlhbENvbXBvbmVudCB9IGZyb20gJy4uL01hdGVyaWFsQ29tcG9uZW50JztcclxuaW1wb3J0IFNlbGVjdENvbXBvbmVudCBmcm9tICdmb3JtaW9qcy9jb21wb25lbnRzL3NlbGVjdC9TZWxlY3QuanMnO1xyXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tICdjcnlwdG8tanMnO1xyXG5pbXBvcnQgeyBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gJ3V0aWwnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uLnNlcnZpY2UnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ21hdC1mb3JtaW8tc2VsZWN0JyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG1hdC1mb3JtaW8tZm9ybS1maWVsZCBbaW5zdGFuY2VdPVwiaW5zdGFuY2VcIiBbY29tcG9uZW50VGVtcGxhdGVdPVwiY29tcG9uZW50VGVtcGxhdGVcIj48L21hdC1mb3JtaW8tZm9ybS1maWVsZD5cclxuICAgIDxuZy10ZW1wbGF0ZSAjY29tcG9uZW50VGVtcGxhdGUgbGV0LWhhc0xhYmVsPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgZnhGaWxsPlxyXG5cclxuICAgICAgICA8bWF0LWxhYmVsICpuZ0lmPVwiaGFzTGFiZWxcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbnN0YW5jZV09XCJpbnN0YW5jZVwiIG1hdEZvcm1pb0xhYmVsPjwvc3Bhbj5cclxuICAgICAgICA8L21hdC1sYWJlbD5cclxuXHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpbnN0YW5jZS5jb21wb25lbnQucHJlZml4XCIgbWF0UHJlZml4PlxyXG4gICAgICAgICAge3sgaW5zdGFuY2UuY29tcG9uZW50LnByZWZpeCB9fSZuYnNwO1xyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImluc3RhbmNlLmNvbXBvbmVudC5tdWx0aXBsZVwiXHJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaW5zdGFuY2UuY29tcG9uZW50LnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25DaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICBbY29tcGFyZVdpdGhdPVwiY29tcGFyZU9iamVjdHNcIlxyXG4gICAgICAgICAgICAgICAgI3Byb2R1Y3RTZWxlY3RcclxuICAgICAgICA+XHJcbiAgICAgICAgPG1hdC1vcHRpb24+XHJcbiAgICAgICAgPG5neC1tYXQtc2VsZWN0LXNlYXJjaCBbc2VhcmNoaW5nXT1cImluc3RhbmNlLmNvbXBvbmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlbmRvcnByb2R1Y3RpZCcgPyBzZWFyY2hpbmcgOiBmYWxzZVwiIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIiBwbGFjZWhvbGRlckxhYmVsPVwiVHlwZSB0byBzZWFyY2hcIiBbZm9ybUNvbnRyb2xdPVwid2Vic2l0ZU11bHRpRmlsdGVyQ3RybFwiPiBcclxuICAgICAgICA8bWF0LWljb24gbmd4TWF0U2VsZWN0U2VhcmNoQ2xlYXIgKGNsaWNrKT1cImNsZWFyUHJvZHVjdHMoKVwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L25neC1tYXQtc2VsZWN0LXNlYXJjaD5cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMgfCBhc3luY1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIiBjbGFzcz1cInZpcnR1YWwtZnVsbC12aWV3XCI+XHJcbiAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cIm9wdGlvbi5sYWJlbFwiPjwvc3Bhbj5cclxuICAgICAgICA8L21hdC1vcHRpb24+ICAgXHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIiFmaWx0ZXJlZE9wdGlvbnNMZW5ndGhcIiBkaXNhYmxlZD5cclxuICAgICAgICAgICAgPHNwYW4+Tm90aGluZyB3YXMgZm91bmQ8L3NwYW4+XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImluc3RhbmNlLmNvbXBvbmVudC5zdWZmaXhcIiBtYXRTdWZmaXg+XHJcbiAgICAgICAgICB7eyBpbnN0YW5jZS5jb21wb25lbnQuc3VmZml4IH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRXJyb3IoKVwiID57eyBnZXRFcnJvck1lc3NhZ2UoKSB9fTwvbWF0LWVycm9yPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICBgLFxyXG4gIHN0eWxlczogW2BcclxuICAuZXhhbXBsZS12aWV3cG9ydCB7XHJcbiAgICBoZWlnaHQ6IDIwMHB4O1xyXG4gIH1cclxuICBcclxuICAucHJvZHVjdC1waWNrZXIge1xyXG4gICAgb3ZlcmZsb3cteDogaGlkZGVuOyAvKiBEaXNhYmxlIGhvcml6b250YWwgc2Nyb2xsaW5nICovXHJcbiAgfVxyXG5cclxuICAudmlydHVhbC1mdWxsLXZpZXcge1xyXG4gICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XHJcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsICFpbXBvcnRhbnQ7XHJcbiAgICBsaW5lLWhlaWdodDogMS40ICFpbXBvcnRhbnQ7XHJcbiAgICB0ZXh0LW92ZXJmbG93OiBpbml0aWFsICFpbXBvcnRhbnQ7XHJcbiAgICBtaW4taGVpZ2h0OiA0OHB4ICFpbXBvcnRhbnQ7XHJcbiAgICBvdmVyZmxvdzogaW5pdGlhbCAhaW1wb3J0YW50O1xyXG4gICAgcGFkZGluZy10b3A6IDEwcHggIWltcG9ydGFudDtcclxuICAgIHBhZGRpbmctYm90dG9tOiAxMHB4ICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG5cclxuICA6Om5nLWRlZXAgLnByb2R1Y3QtcGlja2VyIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyIHtcclxuICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuICB9XHJcblxyXG4gIC52aXJ0dWFsLWZ1bGwtdmlldyAubWF0LXBzZXVkby1jaGVja2JveCB7XHJcbiAgICBhbGlnbi1zZWxmOiB0b3AgIWltcG9ydGFudDtcclxuICB9XHJcblxyXG5gXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBNYXRlcmlhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBzZWxlY3RPcHRpb25zOiBQcm9taXNlPGFueVtdPjtcclxuICBmaWx0ZXJlZE9wdGlvbnM6IFByb21pc2U8YW55W10+O1xyXG4gIGZpbHRlcmVkT3B0aW9uc0xlbmd0aDogbnVtYmVyO1xyXG4gIHNlbGVjdE9wdGlvbnNSZXNvbHZlOiBhbnk7XHJcbiAgcHVibGljIHdlYnNpdGVNdWx0aUN0cmw6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgcHVibGljIHdlYnNpdGVNdWx0aUZpbHRlckN0cmw6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgQFZpZXdDaGlsZCgnbXVsdGlTZWxlY3QnLCB7IHN0YXRpYzogdHJ1ZSB9KSBtdWx0aVNlbGVjdDogTWF0U2VsZWN0O1xyXG4gIHByb3RlY3RlZCBfb25EZXN0cm95ID0gbmV3IFN1YmplY3QoKTtcclxuICBAVmlld0NoaWxkKCdwcm9kdWN0U2VsZWN0Jykgc2VsZWN0RWxlbTogTWF0U2VsZWN0O1xyXG4gIC8vIFZhcmlhYmxlcyB0byB0cmFjayBwYWdpbmF0aW9uXHJcbiAgcGFnZU51bWJlciA9IDE7XHJcbiAgcGFnZVNpemUgPSAyMDtcclxuICB0b3RhbFBhZ2VzID0gMDtcclxuICBzZWFyY2hRdWVyeSA9ICcnO1xyXG4gIGhvbHk6IGFueSA9ICcnO1xyXG4gIGdyYWlsOiBhbnkgPSAnJztcclxuICBwcm9kdWN0c2xvYWRpbmdGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNlYXJjaGluZyA9IGZhbHNlO1xyXG4gIHByb2R1Y3RMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkVmFsdWU6IGFueSA9ICcnO1xyXG4gIHNlYXJjaEl0ZW0gPSBcIlwiO1xyXG4gIC8vIFZhcmlhYmxlIHRvIGhvbGQgdGhlIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBwYW5lbCBlbGVtZW50XHJcbiAgcHJpdmF0ZSBjdXJyZW50UGFuZWxFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG4gIG9wZW5Db3VudGVyOiBudW1iZXIgPSAxXHJcbiAgZmlyc3REcm9wZG93bkl0ZW1zOiBhbnkgPSBbXTtcclxuICBzZWNvbmREcm9wZG93bkl0ZW1zOiBhbnkgPSBbXTtcclxuICBzdG9yZVZhbHVlOiBhbnkgPSBbXVxyXG4gIHN0b3JlRGVwZW5kZW50SXRlbXM6IGFueSA9IFtdO1xyXG4gIGV4ZWN1dGlvbkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGFwaUNvdW50ZXI6IG51bWJlciA9IDA7XHJcbiAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHB1YmxpYyByZWY6IENoYW5nZURldGVjdG9yUmVmLCBwdWJsaWMgaHR0cDogSHR0cENsaWVudCwgcHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGVsZW1lbnQsIHJlZik7XHJcbiAgICB0aGlzLmhvbHkgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnBhcnNlKCc4Ri8yK1QyTlhxVUJRRVJSMTJSNHN3PT0nKTtcclxuICAgIHRoaXMuZ3JhaWwgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnBhcnNlKCd5RTBDZ1FiWXpLNXdxZW9LVFZ6aE9RPT0nKTtcclxuICB9XHJcblxyXG4gIG9uSW5wdXRDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJyAmJiBldmVudC50YXJnZXQudmFsdWUgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMub25DbGVhckFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJQcm9kdWN0cygpIHtcclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlbmRvcnByb2R1Y3RpZCcpIHtcclxuICAgICAgdGhpcy5vbkNsZWFyQWxsKCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoSXRlbSA9IFwiXCI7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHNjcnVtYmxlKG1zZykge1xyXG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChtc2cpKSB7XHJcbiAgICAgIHZhciBjb25jZWFsID0gdGhpcy5nZXRjYW1wYWlnbihtc2csIHRoaXMuaG9seSwgdGhpcy5ncmFpbCk7XHJcbiAgICAgIHZhciBzaGEyNTYgPSBDcnlwdG9KUy5IbWFjU0hBMjU2KENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KHRoaXMuZ3JhaWwpICsgY29uY2VhbC50b1N0cmluZygpLCBDcnlwdG9KUy5lbmMuQmFzZTY0LnN0cmluZ2lmeSh0aGlzLmhvbHkpKTtcclxuICAgICAgdmFyIGhhc2hJbkJhc2U2NCA9IENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KHNoYTI1Nik7XHJcbiAgICAgIGxldCBrZXlWYWx1ZSA9IHtcclxuICAgICAgICBcInZhbHVlXCI6IGNvbmNlYWwudG9TdHJpbmcoKSxcclxuICAgICAgICBcIm1hY1wiOiBoYXNoSW5CYXNlNjRcclxuICAgICAgfTtcclxuICAgICAgdmFyIHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KGtleVZhbHVlKTtcclxuICAgICAgdmFyIGp1bWJsZWQgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShyZXN1bHQpO1xyXG4gICAgICByZXR1cm4gQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkoanVtYmxlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRjYW1wYWlnbihkYXRhOiBhbnksIGhvbHk6IGFueSwgZ3JhaWw6IGFueSkge1xyXG4gICAgcmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KGRhdGEudG9TdHJpbmcoKSwgaG9seSxcclxuICAgICAge1xyXG4gICAgICAgIGJsb2NrU2l6ZTogMTI4LFxyXG4gICAgICAgIGl2OiBncmFpbCxcclxuICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcclxuICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcmVnaXN0ZXJQYW5lbFNjcm9sbEV2ZW50KHNlbGVjdEVsZW06IE1hdFNlbGVjdCkge1xyXG4gICAgaWYgKHNlbGVjdEVsZW0gJiYgc2VsZWN0RWxlbT8ucGFuZWwpIHtcclxuICAgICAgLy8gY29uc3QgcGFuZWxFbGVtZW50ID0gc2VsZWN0RWxlbS5wYW5lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYW5lbEVsZW1lbnQgPSBzZWxlY3RFbGVtLnBhbmVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhbmVsRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TY3JvbGwoZXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlbmRvcnByb2R1Y3RpZCcpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgaWYgKCFzY3JvbGxFbGVtZW50KSByZXR1cm47IC8vIEVuc3VyZSBzY3JvbGxFbGVtZW50IGlzIG5vdCB1bmRlZmluZWRcclxuICAgICAgY29uc3QgdHJhY2tIZWlnaHQgPSBzY3JvbGxFbGVtZW50LnNjcm9sbEhlaWdodCAtIHNjcm9sbEVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICBpZiAoaXNOYU4odHJhY2tIZWlnaHQpIHx8IHRyYWNrSGVpZ2h0IDw9IDApIHJldHVybjsgLy8gQ2hlY2sgaWYgdHJhY2tIZWlnaHQgaXMgdmFsaWRcclxuICAgICAgaWYgKHRoaXMub3BlbkNvdW50ZXIgPCAyKSB7XHJcbiAgICAgICAgY29uc3QgcmV0cmlldmVkT2JqZWN0ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc3RvcmFnZU9iamVjdCcpKTtcclxuICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSBOdW1iZXIocmV0cmlldmVkT2JqZWN0Py50b3RhbFBhZ2VzKTtcclxuICAgICAgICB0aGlzLnByb2R1Y3RzbG9hZGluZ0ZsYWcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucHJvZHVjdExpc3QgPSByZXRyaWV2ZWRPYmplY3Q/LmRhdGFTb3VyY2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucHJvZHVjdHNsb2FkaW5nRmxhZyAmJiBNYXRoLmZsb29yKHNjcm9sbEVsZW1lbnQ/LnNjcm9sbFRvcCAvIHRyYWNrSGVpZ2h0ICogMTAwKSA+IDUwKSB7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0c2xvYWRpbmdGbGFnID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vcGVuQ291bnRlciA9IHRoaXMub3BlbkNvdW50ZXIgKyAxO1xyXG4gICAgICAgIGlmICh0aGlzLnBhZ2VOdW1iZXIgPCB0aGlzLnRvdGFsUGFnZXMpIHtcclxuICAgICAgICAgIHRoaXMucGFnZU51bWJlciA9IHRoaXMucGFnZU51bWJlciArIDE7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRoaXMucGFnZU51bWJlciwgdGhpcy5wYWdlU2l6ZSwgdGhpcy5zZWFyY2hRdWVyeSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5wcm9kdWN0c2xvYWRpbmdGbGFnID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBGdW5jdGlvbiB0byBnZXQgdmFsdWUgYnkga2V5IGZyb20gdGhlIGFycmF5XHJcbiAgZ2V0VmFsdWVCeUtleShkYXRhLCBrZXkpIHtcclxuICAgIGlmICghZGF0YSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gbnVsbDsgLy8gUmV0dXJuIG51bGwgaWYgZGF0YSBpcyBlbXB0eSBvciB1bmRlZmluZWRcclxuICAgIH1cclxuICAgIGNvbnN0IGl0ZW0gPSBkYXRhLmZpbmQoa3YgPT4ga3Yua2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIHJldHVybiBpdGVtID8gaXRlbS52YWx1ZSA6IG51bGw7XHJcbiAgfVxyXG5cclxuXHJcbiAgbG9hZERhdGEocGFnZU51bWJlciwgcGFnZVNpemUsIHNlYXJjaFF1ZXJ5KSB7XHJcbiAgICBjb25zdCBwYXJhbXNEYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHJvZHVjdFBpY2tlclBhcmFtcycpKTtcclxuICAgIGNvbnN0IGluY2x1ZGVEZXNjcmlwdGlvbiA9IHRoaXMuZ2V0VmFsdWVCeUtleShwYXJhbXNEYXRhLCAnaW5jbHVkZURlc2NyaXB0aW9uJyk7XHJcbiAgICBjb25zdCB2ZW5kb3JJZCA9IHRoaXMuZ2V0VmFsdWVCeUtleShwYXJhbXNEYXRhLCAndmVuZG9ySWQnKTtcclxuICAgIGNvbnN0IG9ubHlBY3RpdmUgPSB0aGlzLmdldFZhbHVlQnlLZXkocGFyYW1zRGF0YSwgJ29ubHlBY3RpdmUnKTtcclxuICAgIGNvbnN0IGluY2x1ZGVDdXJyZW5jeUlkID0gdGhpcy5nZXRWYWx1ZUJ5S2V5KHBhcmFtc0RhdGEsICdpbmNsdWRlQ3VycmVuY3lJZCcpO1xyXG4gICAgdmFyIGN1cnJlbnRVc2VyID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY3VycmVudFVzZXInKSk7XHJcbiAgICBsZXQgaGVhZGVycztcclxuICAgIGlmIChjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5Ub2tlbnMgJiYgY3VycmVudFVzZXIuVG9rZW5zLkFjY2Vzc1Rva2VuKSB7XHJcbiAgICAgIHZhciBhY2Nlc3NUb2tlbiA9IGN1cnJlbnRVc2VyLlRva2Vucy5BY2Nlc3NUb2tlbjtcclxuICAgICAgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVXNlciBub3QgYXV0aGVudGljYXRlZCBvciB0b2tlbnMgbWlzc2luZy4nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlbnZlbmRvcklkID0gdGhpcy5zY3J1bWJsZSh2ZW5kb3JJZClcclxuICAgIGNvbnN0IGVucGFnZU51bWJlciA9IHRoaXMuc2NydW1ibGUocGFnZU51bWJlcilcclxuICAgIGNvbnN0IGVucGFnZVNpemUgPSB0aGlzLnNjcnVtYmxlKHBhZ2VTaXplKTtcclxuICAgIGNvbnN0IGVuc2VhcmNoUXVlcnkgPSB0aGlzLnNjcnVtYmxlKHNlYXJjaFF1ZXJ5KTtcclxuICAgIGNvbnN0IGVuY29kZUluY2x1ZGVDdXJyZW5jeUlkID0gdGhpcy5zY3J1bWJsZShpbmNsdWRlQ3VycmVuY3lJZCk7XHJcbiAgICBsZXQgZW5hY3RpdmUgPSB0aGlzLnNjcnVtYmxlKG9ubHlBY3RpdmUpO1xyXG4gICAgLy9DaGVjayBpZiBlbmFjdGl2ZSBpcyB1bmRlZmluZWQsIG51bGwsIG9yIGJsYW5rXHJcbiAgICBpZiAoZW5hY3RpdmUgPT09IHVuZGVmaW5lZCB8fCBlbmFjdGl2ZSA9PT0gbnVsbCB8fCBlbmFjdGl2ZSA9PT0gJycpIHtcclxuICAgICAgZW5hY3RpdmUgPSB0aGlzLnNjcnVtYmxlKHRydWUpOyAvLyBTZXQgZGVmYXVsdCB2YWx1ZSB0byB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2NydW1ibGUgYW5kIGhhbmRsZSB0aGUgaW5jbHVkZURlc2NyaXB0aW9uIHBhcmFtZXRlclxyXG4gICAgbGV0IGVuZGVzY3JpcHRpb24gPSB0aGlzLnNjcnVtYmxlKGluY2x1ZGVEZXNjcmlwdGlvbik7XHJcbiAgICBpZiAoIWVuZGVzY3JpcHRpb24pIHtcclxuICAgICAgZW5kZXNjcmlwdGlvbiA9IHRoaXMuc2NydW1ibGUoZmFsc2UpOyAgLy8gU2V0IHRvICdmYWxzZScgaWYgdW5kZWZpbmVkLCBudWxsLCBvciBibGFua1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJhc2VVcmxNYXBwaW5nID0ge1xyXG4gICAgICAnbG9jYWxob3N0JzogJ2h0dHA6Ly9sb2NhbGhvc3Q6NTg1MDQnLFxyXG4gICAgICAnbGluY29sbi52YXJ0b3BpYS5jb20nOiAnaHR0cHM6Ly9saW5jb2xuLWFwaS52YXJ0b3BpYS5jb20nLFxyXG4gICAgICAnc3RhZ2UudmFydG9waWEuY29tJzogJ2h0dHBzOi8vc3RhZ2UtYXBpLnZhcnRvcGlhLmNvbScsXHJcbiAgICAgICdteS52YXJ0b3BpYS5jb20nOiAnaHR0cHM6Ly9yZWFnYW4tYXBpLnZhcnRvcGlhLmNvbScsXHJcbiAgICAgICdqYWNrc29uLnZhcnRvcGlhLmNvbSc6ICdodHRwczovL2phY2tzb24tYXBpLnZhcnRvcGlhLmNvbSdcclxuICAgIH07XHJcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgaG9zdG5hbWVcclxuICAgIGNvbnN0IGhvc3RuYW1lID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xyXG4gICAgY29uc3QgYmFzZUFwaVVybCA9IGJhc2VVcmxNYXBwaW5nW2hvc3RuYW1lXSB8fCBudWxsO1xyXG4gICAgaW50ZXJmYWNlIFZlbmRvclByb2R1Y3RzUmVzcG9uc2Uge1xyXG4gICAgICBjb2RlOiBudW1iZXI7XHJcbiAgICAgIGRhdGE6IGFueTtcclxuICAgICAgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgICBzdGF0dXNDb2RlOiBudW1iZXI7XHJcbiAgICB9XHJcbiAgICBsZXQgdXJsID0gYCR7YmFzZUFwaVVybH0vYXBpL1ZlbmRvckZvcm1CdWlsZGVyL0dldFZlbmRvclByb2R1Y3RzP3ZlbmRvcklkPSR7ZW52ZW5kb3JJZH0mcGFnZU51bWJlcj0ke2VucGFnZU51bWJlcn0mcGFnZVNpemU9JHtlbnBhZ2VTaXplfSZzZWFyY2g9JHtlbnNlYXJjaFF1ZXJ5fSZvbmx5QWN0aXZlPSR7ZW5hY3RpdmV9JmluY2x1ZGVEZXNjcmlwdGlvbj0ke2VuZGVzY3JpcHRpb259YDtcclxuICAgIC8vIE9ubHkgYWRkIGluY2x1ZGVDdXJyZW5jeUlkIGlmIGl0IGhhcyBhIHZhbGlkIHZhbHVlXHJcbiAgICBpZiAoZW5jb2RlSW5jbHVkZUN1cnJlbmN5SWQgIT09IG51bGwgJiYgZW5jb2RlSW5jbHVkZUN1cnJlbmN5SWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB1cmwgKz0gYCZpbmNsdWRlQ3VycmVuY3lJZD0ke2VuY29kZUluY2x1ZGVDdXJyZW5jeUlkfWA7XHJcbiAgICB9XHJcbiAgICB0aGlzLmh0dHAuZ2V0PFZlbmRvclByb2R1Y3RzUmVzcG9uc2U+KHVybCwgeyBoZWFkZXJzIH0pLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5jb2RlID09PSAyMDApIHtcclxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd2ZW5kb3Jwcm9kdWN0aWQnKSB7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSByZXNwb25zZT8uZGF0YT8udG90YWxQYWdlcztcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc0xlbmd0aCA9IGRhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgaWYgKHRoaXMucHJvZHVjdExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBkYXRhLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gaXRlbVxyXG4gICAgICAgICAgICB9KS5mb3JFYWNoKGkgPT4gdGhpcy5wcm9kdWN0TGlzdC5wdXNoKGkpKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9kdWN0TGlzdCA9IGRhdGE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBVcGRhdGUgZmlsdGVyZWRPcHRpb25zIHdpdGggdHJhbnNmb3JtZWREYXRhXHJcbiAgICAgICAgICB2YXIgYWxsUHJvZHVjdExpc3QgPSB0aGlzLnRyYW5zZm9ybVJlc3BvbnNlRGF0YSh0aGlzLnByb2R1Y3RMaXN0KTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gUHJvbWlzZS5yZXNvbHZlKGFsbFByb2R1Y3RMaXN0KTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnByb2R1Y3RzbG9hZGluZ0ZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZSA9IHRoaXMuc2VsZWN0RWxlbT8ucGFuZWw/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChlbGUpIHtcclxuICAgICAgICAgICAgICBjb25zdCB0cmFja0hlaWdodCA9IGVsZS5zY3JvbGxIZWlnaHQgLSBlbGUub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgICAgY29uc3QgbWlkZGxlUG9zaXRpb24gPSB0cmFja0hlaWdodCAvIDIgLSA1MDtcclxuICAgICAgICAgICAgICBlbGUuc2Nyb2xsVG8oeyB0b3A6IG1pZGRsZVBvc2l0aW9uLCBiZWhhdmlvcjogJ2F1dG8nIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQYW5lbCBlbGVtZW50IGlzIG5vdCBhdmFpbGFibGUgeWV0LicpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSwgMjUwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIFV0aWxpdHkgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcclxuICB0cmFuc2Zvcm1SZXNwb25zZURhdGEoZGF0YTogQXJyYXk8eyB0ZXh0OiBhbnksIHZhbHVlOiBhbnksIGRhdGU6IGFueSB9PiB8IG51bGwgfCB1bmRlZmluZWQpOiBBcnJheTx7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIsIGRhdGU6IHN0cmluZyB9PiB7XHJcbiAgICAvLyBDaGVjayBpZiBkYXRhIGlzIG5vdCBudWxsLCB1bmRlZmluZWQsIGFuZCBpcyBhbiBhcnJheSB3aXRoIGVsZW1lbnRzXHJcbiAgICBpZiAoZGF0YSAmJiBBcnJheS5pc0FycmF5KGRhdGEpICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gZGF0YS5tYXAoaXRlbSA9PiAoe1xyXG4gICAgICAgIGxhYmVsOiBpdGVtLnRleHQsXHJcbiAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXHJcbiAgICAgICAgZGF0ZTogaXRlbS5kYXRlXHJcbiAgICAgIH0pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFJldHVybiBhbiBlbXB0eSBhcnJheSBpZiBkYXRhIGlzIG51bGwsIHVuZGVmaW5lZCwgb3IgZW1wdHlcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBmaWx0ZXJXZWJzaXRlTXVsdGkoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0T3B0aW9ucykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgc2VhcmNoID0gdGhpcy53ZWJzaXRlTXVsdGlGaWx0ZXJDdHJsLnZhbHVlO1xyXG4gICAgc2VhcmNoID0gc2VhcmNoLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuc2VsZWN0T3B0aW9ucy50aGVuKChvcHRpb25zKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLmxhYmVsLnJlcGxhY2UoLzxcXC8/c3BhbltePl0qPi9nLCBcIlwiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoKSAhPT0gLTEpO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc0xlbmd0aCA9IGZpbHRlcmVkLmxlbmd0aDtcclxuICAgICAgcmV0dXJuIGZpbHRlcmVkO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLl9vbkRlc3Ryb3kubmV4dCgnJyk7XHJcbiAgICB0aGlzLl9vbkRlc3Ryb3kuY29tcGxldGUoKTtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRQYW5lbEVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFuZWxFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLypFbmQqL1xyXG4gIHNldEluc3RhbmNlKGluc3RhbmNlOiBhbnkpIHtcclxuICAgIHN1cGVyLnNldEluc3RhbmNlKGluc3RhbmNlKTtcclxuICAgIHRoaXMuaW5zdGFuY2UudHJpZ2dlclVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25DbGVhckFsbCgpIHtcclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlbmRvcnByb2R1Y3RpZCcpIHtcclxuICAgICAgdGhpcy5wYWdlTnVtYmVyID0gMTtcclxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IDIwO1xyXG4gICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XHJcbiAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucHJvZHVjdExpc3QgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gJyc7XHJcbiAgICAgIHRoaXMubG9hZERhdGEodGhpcy5wYWdlTnVtYmVyLCB0aGlzLnBhZ2VTaXplLCB0aGlzLnNlYXJjaFF1ZXJ5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlY29uZERyb3Bkb3duKHZhbHVlOiBhbnkpIHtcclxuICAgIGNvbnN0IGFwaUVuZFBvaW50ID0gJ01hbmFnZVZlbmRvcnMvR2V0UmVmZXJlbmNlRGF0YUl0ZW1zQnlWZW5kb3JJZEFuZERhdGFWYWx1ZSc7XHJcbiAgICBsZXQgZmluYWxQYXJhbXMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYXNjYWRpbmdEcm9wZG93bnNQYXJhbXMnKSk7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaW5hbFBhcmFtcykpIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBmaW5hbFBhcmFtcy5maW5kSW5kZXgocGFyYW0gPT4gcGFyYW0ua2V5ID09PSAnZGF0YVZhbHVlJyk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IGV4aXN0cywgdXBkYXRlIGl0cyB2YWx1ZVxyXG4gICAgICAgIGZpbmFsUGFyYW1zW2luZGV4XS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIElmIHRoZSBvYmplY3QgZG9lc24ndCBleGlzdCwgYWRkIGl0IHRvIHRoZSBhcnJheVxyXG4gICAgICAgIGZpbmFsUGFyYW1zLnB1c2goeyBrZXk6ICdkYXRhVmFsdWUnLCB2YWx1ZTogdmFsdWUgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLmluaXRpYWxpemVBcGlQYXRoKGFwaUVuZFBvaW50LCBmaW5hbFBhcmFtcykuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNlY29uZERyb3Bkb3duSXRlbXMgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnNldERyb3Bkb3duSXRlbXModGhpcy5zZWNvbmREcm9wZG93bkl0ZW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zZWxlY3RFbGVtLm9wZW5lZENoYW5nZS5zdWJzY3JpYmUoYXN5bmMgKGlzT3BlbjogYm9vbGVhbikgPT4ge1xyXG4gICAgICBsZXQgaSA9IDBcclxuICAgICAgaWYgKGlzT3Blbikge1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb2R1Y3RQaWNrZXJGbGFnID0gdGhpcy5pbnN0YW5jZT8uY29tcG9uZW50Py5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIGxldCBjaGVja0ludm9rZUZyb21MaWJyYXJ5ID0gdGhpcy5jb21tb25TZXJ2aWNlLmNoZWNrSXNBdHRyaWJ1dGVUcnVlKG5ld1Byb2R1Y3RQaWNrZXJGbGFnLCBcImludm9rZUZyb21MaWJyYXJ5XCIpXHJcbiAgICAgICAgY29uc3QgZmlyc3RMZXZlbCA9ICh0aGlzLmdldFZlbmRvclJlZkxpc3QodGhpcy5pbnN0YW5jZSkgJiYgY2hlY2tJbnZva2VGcm9tTGlicmFyeSk7XHJcbiAgICAgICAgaWYgKGZpcnN0TGV2ZWwpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0RWxlbS52YWx1ZUNoYW5nZS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnNldERyb3BEb3duRmxhZyh0cnVlKTtcclxuICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlY29uZERyb3Bkb3duKHJlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSsrXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tWZW5kb3JSZWZJdGVtcyh0aGlzLmluc3RhbmNlKSAmJiBjaGVja0ludm9rZUZyb21MaWJyYXJ5KSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlRGVwZW5kZW50SXRlbXMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2Vjb25kRHJvcGRvd25JdGVtcyA9IHRoaXMuY29tbW9uU2VydmljZS5nZXREcm9wZG93bkl0ZW1zKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWNvbmREcm9wZG93bkl0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWNvbmREcm9wZG93bkl0ZW1zLmZvckVhY2goKHJlbmRlckVsZW1lbnQsIGluZGV4LCBhcnJheSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RvcmVEZXBlbmRlbnRJdGVtcy5wdXNoKHsgbGFiZWw6IHJlbmRlckVsZW1lbnRbJ3RleHQnXSwgdmFsdWU6IHRoaXMuY29tbW9uU2VydmljZS5vbmx5TnVtYmVycyhyZW5kZXJFbGVtZW50Wyd2YWx1ZSddKSA/IHJlbmRlckVsZW1lbnRbJ3ZhbHVlJ10gKyAnICcgOiByZW5kZXJFbGVtZW50Wyd2YWx1ZSddIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlLmdldERyb3BEb3duRmxhZygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVEZXBlbmRlbnRJdGVtcyA9IHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmRhdGEudmFsdWVzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBQcm9taXNlLnJlc29sdmUodGhpcy5zdG9yZURlcGVuZGVudEl0ZW1zKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0T3B0aW9ucyA9IFByb21pc2UucmVzb2x2ZSh0aGlzLnN0b3JlRGVwZW5kZW50SXRlbXMpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RPcHRpb25zLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNMZW5ndGggPSByZXN1bHQubGVuZ3RoXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlbmRvcnByb2R1Y3RpZCcpIHtcclxuICAgICAgdGhpcy5zZWxlY3RFbGVtLm9wZW5lZENoYW5nZS5zdWJzY3JpYmUoKGlzT3BlbjogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChpc09wZW4pIHtcclxuICAgICAgICAgIHRoaXMucGFnZU51bWJlciA9IDE7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gMjA7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hRdWVyeT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJdGVtPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy53ZWJzaXRlTXVsdGlGaWx0ZXJDdHJsLnNldFZhbHVlKHRoaXMuc2VhcmNoSXRlbSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgLy90aGlzLmxvYWREYXRhKHRoaXMucGFnZU51bWJlciwgdGhpcy5wYWdlU2l6ZSwgdGhpcy5zZWFyY2hRdWVyeSk7XHJcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyUGFuZWxTY3JvbGxFdmVudCh0aGlzLnNlbGVjdEVsZW0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZVBhbmVsU2Nyb2xsRXZlbnQoKTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAvLyBpZiAodGhpcy5zZWxlY3RlZFZhbHVlPy50b1N0cmluZygpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMucHJvZHVjdExpc3QgPSBbXTtcclxuICAgICAgICAgIC8vICAgdGhpcy5wYWdlTnVtYmVyID0gMTtcclxuICAgICAgICAgIC8vICAgdGhpcy5wYWdlU2l6ZSA9IDIwO1xyXG4gICAgICAgICAgLy8gICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XHJcbiAgICAgICAgICAvLyAgIHRoaXMubG9hZERhdGEodGhpcy5wYWdlTnVtYmVyLCB0aGlzLnBhZ2VTaXplLCB0aGlzLnNlYXJjaFF1ZXJ5KTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlUGFuZWxTY3JvbGxFdmVudCgpIHtcclxuICAgIC8vIFJlbW92ZSB0aGUgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyXHJcbiAgICBpZiAodGhpcy5jdXJyZW50UGFuZWxFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhbmVsRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLmJpbmQodGhpcykpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYW5lbEVsZW1lbnQgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8qbmV3IGxvZ2ljICovXHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd2ZW5kb3Jwcm9kdWN0aWQnKSB7XHJcbiAgICAgIHRoaXMud2Vic2l0ZU11bHRpRmlsdGVyQ3RybC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDAwKSwgLy8gVGltZSBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiBrZXkgZXZlbnRzXHJcbiAgICAgICAgICAvLyAgdGFwKCgpID0+IHRoaXMuc2VhcmNoaW5nID0gdHJ1ZSksXHJcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoc2VhcmNoUXVlcnkpID0+IHtcclxuICAgICAgICAgIGlmIChzZWFyY2hRdWVyeSAhPSAnJykge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wYWdlTnVtYmVyID0gMTtcclxuICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IDIwO1xyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IHNlYXJjaFF1ZXJ5O1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEl0ZW0gPSBzZWFyY2hRdWVyeVxyXG4gICAgICAgICAgICB0aGlzLmxvYWREYXRhKHRoaXMucGFnZU51bWJlciwgdGhpcy5wYWdlU2l6ZSwgc2VhcmNoUXVlcnkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53ZWJzaXRlTXVsdGlGaWx0ZXJDdHJsLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcldlYnNpdGVNdWx0aSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLypFbmQgKi9cclxuICAgIHRoaXMuc2VsZWN0T3B0aW9ucyA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0T3B0aW9uc1Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlbGVjdE9wdGlvbnMudGhlbigob3B0aW9ucykgPT4ge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc0xlbmd0aCA9IG9wdGlvbnMubGVuZ3RoO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnNlbGVjdE9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZShldmVudDogYW55LCBzdWJtaXREYXRhOiBhbnksIGF0dHJpYnV0ZXM6IGFueSkge1xyXG5cclxuICB9XHJcblxyXG4gIGNoZWNrVmVuZG9yUmVmSXRlbXMoaW5zdGFuY2UpIHtcclxuICAgIGNvbnN0IHNlbGVjdFZhbHVlcyA9IGluc3RhbmNlLmNvbXBvbmVudFsnc2VsZWN0VmFsdWVzJ107XHJcbiAgICBjb25zdCBkYXRhVXJsID0gaW5zdGFuY2UuY29tcG9uZW50WydkYXRhJ10/LnVybDtcclxuICAgIGNvbnN0IGlzU2VsZWN0VmFsdWVzVmFsaWQgPSBzZWxlY3RWYWx1ZXMgIT0gbnVsbCAmJiBzZWxlY3RWYWx1ZXMgIT09ICcnICYmIHNlbGVjdFZhbHVlcyAhPT0gdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgaXNEYXRhVXJsSW52YWxpZCA9IGRhdGFVcmwgPT0gbnVsbCB8fCBkYXRhVXJsID09PSAnJyB8fCBkYXRhVXJsID09PSB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gaXNTZWxlY3RWYWx1ZXNWYWxpZCAmJiBpc0RhdGFVcmxJbnZhbGlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmVuZG9yUmVmTGlzdChpbnN0YW5jZSkge1xyXG4gICAgY29uc3QgZGF0YVVybCA9IGluc3RhbmNlLmNvbXBvbmVudFsnZGF0YSddPy51cmw7XHJcbiAgICBjb25zdCBpc1NlbGVjdFZhbHVlc1ZhbGlkID0gZGF0YVVybCAhPSBudWxsICYmIGRhdGFVcmwgIT09ICcnICYmIGRhdGFVcmwgIT09IHVuZGVmaW5lZDtcclxuICAgIHJldHVybiBpc1NlbGVjdFZhbHVlc1ZhbGlkO1xyXG4gIH1cclxuXHJcbiAgaXNFcnJvcigpIHtcclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmVycm9yKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbC5zZXRFcnJvcnModGhpcy5pbnN0YW5jZS5jb21wb25lbnQudmFsaWRhdGUpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRFcnJvck1lc3NhZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZS5lcnJvciAmJiB0aGlzLmluc3RhbmNlLmVycm9yLm1lc3NhZ2VzKSB7XHJcbiAgICAgIGNvbnN0IHsgbWVzc2FnZXMgfSA9IHRoaXMuaW5zdGFuY2UuZXJyb3I7XHJcbiAgICAgIGlmIChtZXNzYWdlcy5sZW5ndGgpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG1zZyBvZiBtZXNzYWdlcykge1xyXG4gICAgICAgICAgaWYgKG1zZy5jb250ZXh0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2UucGFyZW50ICYmIHRoaXMuaW5zdGFuY2UucGFyZW50Ll9kYXRhKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UucGFyZW50Ll9kYXRhLnN1Ym1pdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UuZXJyb3IgPyB0aGlzLmluc3RhbmNlLmVycm9yLm1lc3NhZ2UgOiAnJztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbXBhcmVPYmplY3RzKG8xOiBhbnksIG8yOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBfLmlzRXF1YWwobzEsIG8yKTtcclxuICB9XHJcbn1cclxuU2VsZWN0Q29tcG9uZW50Lk1hdGVyaWFsQ29tcG9uZW50ID0gTWF0ZXJpYWxTZWxlY3RDb21wb25lbnQ7XHJcblxyXG4vLyBNYWtlIHN1cmUgd2UgZGV0ZWN0IGNoYW5nZXMgd2hlbiBuZXcgaXRlbXMgbWFrZSB0aGVpciB3YXkgaW50byB0aGUgc2VsZWN0IGRyb3Bkb3duLlxyXG5jb25zdCBzZXRJdGVtcyA9IFNlbGVjdENvbXBvbmVudC5wcm90b3R5cGUuc2V0SXRlbXM7XHJcblNlbGVjdENvbXBvbmVudC5wcm90b3R5cGUuc2V0SXRlbXMgPSBmdW5jdGlvbiAoLi4uYXJncykge1xyXG4gIHNldEl0ZW1zLmNhbGwodGhpcywgLi4uYXJncyk7XHJcbiAgaWYgKHRoaXMubWF0ZXJpYWxDb21wb25lbnQgJiYgdGhpcy5tYXRlcmlhbENvbXBvbmVudC5zZWxlY3RPcHRpb25zUmVzb2x2ZSkge1xyXG4gICAgdGhpcy5tYXRlcmlhbENvbXBvbmVudC5zZWxlY3RPcHRpb25zUmVzb2x2ZSh0aGlzLnNlbGVjdE9wdGlvbnMpO1xyXG4gIH1cclxufTtcclxuXHJcbmV4cG9ydCB7IFNlbGVjdENvbXBvbmVudCB9OyJdfQ==
543
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZW5kZXItbWF0ZXJpYWwtZm9ybXMvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUE0QyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxlQUFlLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFVLFNBQVMsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBRTVGLE9BQU8sRUFBYyxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUE2RS9ELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxpQkFBaUI7SUErQjVELFlBQW1CLE9BQW1CLEVBQVMsR0FBc0IsRUFBUyxJQUFnQixFQUFTLGFBQTRCO1FBQ2pJLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFESCxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBUyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUExQjVILHFCQUFnQixHQUFnQixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2xELDJCQUFzQixHQUFnQixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRXJELGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFB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c0Y7QUFDdEYsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDcEQsZUFBZSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLElBQUk7SUFDcEQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUM3QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLEVBQUU7UUFDekUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUNqRTtBQUNILENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSxlQUFlLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRlcmlhbENvbXBvbmVudCB9IGZyb20gJy4uL01hdGVyaWFsQ29tcG9uZW50JztcclxuaW1wb3J0IFNlbGVjdENvbXBvbmVudCBmcm9tICdmb3JtaW9qcy9jb21wb25lbnRzL3NlbGVjdC9TZWxlY3QuanMnO1xyXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tICdjcnlwdG8tanMnO1xyXG5pbXBvcnQgeyBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gJ3V0aWwnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uLnNlcnZpY2UnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ21hdC1mb3JtaW8tc2VsZWN0JyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG1hdC1mb3JtaW8tZm9ybS1maWVsZCBbaW5zdGFuY2VdPVwiaW5zdGFuY2VcIiBbY29tcG9uZW50VGVtcGxhdGVdPVwiY29tcG9uZW50VGVtcGxhdGVcIj48L21hdC1mb3JtaW8tZm9ybS1maWVsZD5cclxuICAgIDxuZy10ZW1wbGF0ZSAjY29tcG9uZW50VGVtcGxhdGUgbGV0LWhhc0xhYmVsPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgZnhGaWxsPlxyXG5cclxuICAgICAgICA8bWF0LWxhYmVsICpuZ0lmPVwiaGFzTGFiZWxcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbnN0YW5jZV09XCJpbnN0YW5jZVwiIG1hdEZvcm1pb0xhYmVsPjwvc3Bhbj5cclxuICAgICAgICA8L21hdC1sYWJlbD5cclxuXHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpbnN0YW5jZS5jb21wb25lbnQucHJlZml4XCIgbWF0UHJlZml4PlxyXG4gICAgICAgICAge3sgaW5zdGFuY2UuY29tcG9uZW50LnByZWZpeCB9fSZuYnNwO1xyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImluc3RhbmNlLmNvbXBvbmVudC5tdWx0aXBsZVwiXHJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaW5zdGFuY2UuY29tcG9uZW50LnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25DaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICBbY29tcGFyZVdpdGhdPVwiY29tcGFyZU9iamVjdHNcIlxyXG4gICAgICAgICAgICAgICAgI3Byb2R1Y3RTZWxlY3RcclxuICAgICAgICA+XHJcbiAgICAgICAgPG1hdC1vcHRpb24+XHJcbiAgICAgICAgPG5neC1tYXQtc2VsZWN0LXNlYXJjaCBbc2VhcmNoaW5nXT1cImluc3RhbmNlLmNvbXBvbmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlbmRvcnByb2R1Y3RpZCcgPyBzZWFyY2hpbmcgOiBmYWxzZVwiIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIiBwbGFjZWhvbGRlckxhYmVsPVwiVHlwZSB0byBzZWFyY2hcIiBbZm9ybUNvbnRyb2xdPVwid2Vic2l0ZU11bHRpRmlsdGVyQ3RybFwiPiBcclxuICAgICAgICA8bWF0LWljb24gbmd4TWF0U2VsZWN0U2VhcmNoQ2xlYXIgKGNsaWNrKT1cImNsZWFyUHJvZHVjdHMoKVwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L25neC1tYXQtc2VsZWN0LXNlYXJjaD5cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMgfCBhc3luY1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIiBjbGFzcz1cInZpcnR1YWwtZnVsbC12aWV3XCI+XHJcbiAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cIm9wdGlvbi5sYWJlbFwiPjwvc3Bhbj5cclxuICAgICAgICA8L21hdC1vcHRpb24+ICAgXHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIiFmaWx0ZXJlZE9wdGlvbnNMZW5ndGhcIiBkaXNhYmxlZD5cclxuICAgICAgICAgICAgPHNwYW4+Tm90aGluZyB3YXMgZm91bmQ8L3NwYW4+XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImluc3RhbmNlLmNvbXBvbmVudC5zdWZmaXhcIiBtYXRTdWZmaXg+XHJcbiAgICAgICAgICB7eyBpbnN0YW5jZS5jb21wb25lbnQuc3VmZml4IH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRXJyb3IoKVwiID57eyBnZXRFcnJvck1lc3NhZ2UoKSB9fTwvbWF0LWVycm9yPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICBgLFxyXG4gIHN0eWxlczogW2BcclxuICAuZXhhbXBsZS12aWV3cG9ydCB7XHJcbiAgICBoZWlnaHQ6IDIwMHB4O1xyXG4gIH1cclxuICBcclxuICAucHJvZHVjdC1waWNrZXIge1xyXG4gICAgb3ZlcmZsb3cteDogaGlkZGVuOyAvKiBEaXNhYmxlIGhvcml6b250YWwgc2Nyb2xsaW5nICovXHJcbiAgfVxyXG5cclxuICAudmlydHVhbC1mdWxsLXZpZXcge1xyXG4gICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XHJcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsICFpbXBvcnRhbnQ7XHJcbiAgICBsaW5lLWhlaWdodDogMS40ICFpbXBvcnRhbnQ7XHJcbiAgICB0ZXh0LW92ZXJmbG93OiBpbml0aWFsICFpbXBvcnRhbnQ7XHJcbiAgICBtaW4taGVpZ2h0OiA0OHB4ICFpbXBvcnRhbnQ7XHJcbiAgICBvdmVyZmxvdzogaW5pdGlhbCAhaW1wb3J0YW50O1xyXG4gICAgcGFkZGluZy10b3A6IDEwcHggIWltcG9ydGFudDtcclxuICAgIHBhZGRpbmctYm90dG9tOiAxMHB4ICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG5cclxuICA6Om5nLWRlZXAgLnByb2R1Y3QtcGlja2VyIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyIHtcclxuICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuICB9XHJcblxyXG4gIC52aXJ0dWFsLWZ1bGwtdmlldyAubWF0LXBzZXVkby1jaGVja2JveCB7XHJcbiAgICBhbGlnbi1zZWxmOiB0b3AgIWltcG9ydGFudDtcclxuICB9XHJcblxyXG5gXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBNYXRlcmlhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBzZWxlY3RPcHRpb25zOiBQcm9taXNlPGFueVtdPjtcclxuICBmaWx0ZXJlZE9wdGlvbnM6IFByb21pc2U8YW55W10+O1xyXG4gIGZpbHRlcmVkT3B0aW9uc0xlbmd0aDogbnVtYmVyO1xyXG4gIHNlbGVjdE9wdGlvbnNSZXNvbHZlOiBhbnk7XHJcbiAgcHVibGljIHdlYnNpdGVNdWx0aUN0cmw6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgcHVibGljIHdlYnNpdGVNdWx0aUZpbHRlckN0cmw6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgQFZpZXdDaGlsZCgnbXVsdGlTZWxlY3QnLCB7IHN0YXRpYzogdHJ1ZSB9KSBtdWx0aVNlbGVjdDogTWF0U2VsZWN0O1xyXG4gIHByb3RlY3RlZCBfb25EZXN0cm95ID0gbmV3IFN1YmplY3QoKTtcclxuICBAVmlld0NoaWxkKCdwcm9kdWN0U2VsZWN0Jykgc2VsZWN0RWxlbTogTWF0U2VsZWN0O1xyXG4gIC8vIFZhcmlhYmxlcyB0byB0cmFjayBwYWdpbmF0aW9uXHJcbiAgcGFnZU51bWJlciA9IDE7XHJcbiAgcGFnZVNpemUgPSAyMDtcclxuICB0b3RhbFBhZ2VzID0gMDtcclxuICBzZWFyY2hRdWVyeSA9ICcnO1xyXG4gIC8vIGhvbHk6IGFueSA9ICcnO1xyXG4gIC8vIGdyYWlsOiBhbnkgPSAnJztcclxuICBwcm9kdWN0c2xvYWRpbmdGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNlYXJjaGluZyA9IGZhbHNlO1xyXG4gIHByb2R1Y3RMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkVmFsdWU6IGFueSA9ICcnO1xyXG4gIHNlYXJjaEl0ZW0gPSBcIlwiO1xyXG4gIC8vIFZhcmlhYmxlIHRvIGhvbGQgdGhlIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBwYW5lbCBlbGVtZW50XHJcbiAgcHJpdmF0ZSBjdXJyZW50UGFuZWxFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG4gIG9wZW5Db3VudGVyOiBudW1iZXIgPSAxXHJcbiAgZmlyc3REcm9wZG93bkl0ZW1zOiBhbnkgPSBbXTtcclxuICBzZWNvbmREcm9wZG93bkl0ZW1zOiBhbnkgPSBbXTtcclxuICBzdG9yZVZhbHVlOiBhbnkgPSBbXVxyXG4gIHN0b3JlRGVwZW5kZW50SXRlbXM6IGFueSA9IFtdO1xyXG4gIGV4ZWN1dGlvbkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGFwaUNvdW50ZXI6IG51bWJlciA9IDA7XHJcbiAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHB1YmxpYyByZWY6IENoYW5nZURldGVjdG9yUmVmLCBwdWJsaWMgaHR0cDogSHR0cENsaWVudCwgcHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGVsZW1lbnQsIHJlZik7XHJcbiAgICAvLyB0aGlzLmhvbHkgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnBhcnNlKCc4Ri8yK1QyTlhxVUJRRVJSMTJSNHN3PT0nKTtcclxuICAgIC8vIHRoaXMuZ3JhaWwgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnBhcnNlKCd5RTBDZ1FiWXpLNXdxZW9LVFZ6aE9RPT0nKTtcclxuICAgIC8vdGhpcy5ob2x5ID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5wYXJzZSh0aGlzLmNvbW1vblNlcnZpY2UuZ2V0Y29tYm9kZWFsKCkpO1xyXG4gICAgLy90aGlzLmdyYWlsID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5wYXJzZSh0aGlzLmNvbW1vblNlcnZpY2UuZ2V0Z2xvYmVkYXRhKCkpO1xyXG4gIH1cclxuXHJcbiAgb25JbnB1dENoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd2ZW5kb3Jwcm9kdWN0aWQnICYmIGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gJycpIHtcclxuICAgICAgdGhpcy5vbkNsZWFyQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhclByb2R1Y3RzKCkge1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJykge1xyXG4gICAgICB0aGlzLm9uQ2xlYXJBbGwoKTtcclxuICAgICAgdGhpcy5zZWFyY2hJdGVtID0gXCJcIjtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gc2NydW1ibGUobXNnKSB7XHJcbiAgLy8gICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKG1zZykpIHtcclxuICAvLyAgICAgdmFyIGNvbmNlYWwgPSB0aGlzLmdldGNhbXBhaWduKG1zZywgdGhpcy5ob2x5LCB0aGlzLmdyYWlsKTtcclxuICAvLyAgICAgdmFyIHNoYTI1NiA9IENyeXB0b0pTLkhtYWNTSEEyNTYoQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkodGhpcy5ncmFpbCkgKyBjb25jZWFsLnRvU3RyaW5nKCksIENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KHRoaXMuaG9seSkpO1xyXG4gIC8vICAgICB2YXIgaGFzaEluQmFzZTY0ID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkoc2hhMjU2KTtcclxuICAvLyAgICAgbGV0IGtleVZhbHVlID0ge1xyXG4gIC8vICAgICAgIFwidmFsdWVcIjogY29uY2VhbC50b1N0cmluZygpLFxyXG4gIC8vICAgICAgIFwibWFjXCI6IGhhc2hJbkJhc2U2NFxyXG4gIC8vICAgICB9O1xyXG4gIC8vICAgICB2YXIgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkoa2V5VmFsdWUpO1xyXG4gIC8vICAgICB2YXIganVtYmxlZCA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKHJlc3VsdCk7XHJcbiAgLy8gICAgIHJldHVybiBDcnlwdG9KUy5lbmMuQmFzZTY0LnN0cmluZ2lmeShqdW1ibGVkKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIGdldGNhbXBhaWduKGRhdGE6IGFueSwgaG9seTogYW55LCBncmFpbDogYW55KSB7XHJcbiAgLy8gICByZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQoZGF0YS50b1N0cmluZygpLCBob2x5LFxyXG4gIC8vICAgICB7XHJcbiAgLy8gICAgICAgYmxvY2tTaXplOiAxMjgsXHJcbiAgLy8gICAgICAgaXY6IGdyYWlsLFxyXG4gIC8vICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxyXG4gIC8vICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xyXG4gIC8vICAgICB9KTtcclxuICAvLyB9XHJcblxyXG5cclxuICByZWdpc3RlclBhbmVsU2Nyb2xsRXZlbnQoc2VsZWN0RWxlbTogTWF0U2VsZWN0KSB7XHJcbiAgICBpZiAoc2VsZWN0RWxlbSAmJiBzZWxlY3RFbGVtPy5wYW5lbCkge1xyXG4gICAgICAvLyBjb25zdCBwYW5lbEVsZW1lbnQgPSBzZWxlY3RFbGVtLnBhbmVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhbmVsRWxlbWVudCA9IHNlbGVjdEVsZW0ucGFuZWwubmF0aXZlRWxlbWVudDtcclxuICAgICAgdGhpcy5jdXJyZW50UGFuZWxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNjcm9sbChldmVudCkge1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJykge1xyXG4gICAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgICBpZiAoIXNjcm9sbEVsZW1lbnQpIHJldHVybjsgLy8gRW5zdXJlIHNjcm9sbEVsZW1lbnQgaXMgbm90IHVuZGVmaW5lZFxyXG4gICAgICBjb25zdCB0cmFja0hlaWdodCA9IHNjcm9sbEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIGlmIChpc05hTih0cmFja0hlaWdodCkgfHwgdHJhY2tIZWlnaHQgPD0gMCkgcmV0dXJuOyAvLyBDaGVjayBpZiB0cmFja0hlaWdodCBpcyB2YWxpZFxyXG4gICAgICBpZiAodGhpcy5vcGVuQ291bnRlciA8IDIpIHtcclxuICAgICAgICBjb25zdCByZXRyaWV2ZWRPYmplY3QgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzdG9yYWdlT2JqZWN0JykpO1xyXG4gICAgICAgIHRoaXMudG90YWxQYWdlcyA9IE51bWJlcihyZXRyaWV2ZWRPYmplY3Q/LnRvdGFsUGFnZXMpO1xyXG4gICAgICAgIHRoaXMucHJvZHVjdHNsb2FkaW5nRmxhZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0TGlzdCA9IHJldHJpZXZlZE9iamVjdD8uZGF0YVNvdXJjZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5wcm9kdWN0c2xvYWRpbmdGbGFnICYmIE1hdGguZmxvb3Ioc2Nyb2xsRWxlbWVudD8uc2Nyb2xsVG9wIC8gdHJhY2tIZWlnaHQgKiAxMDApID4gNTApIHtcclxuICAgICAgICB0aGlzLnByb2R1Y3RzbG9hZGluZ0ZsYWcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9wZW5Db3VudGVyID0gdGhpcy5vcGVuQ291bnRlciArIDE7XHJcbiAgICAgICAgaWYgKHRoaXMucGFnZU51bWJlciA8IHRoaXMudG90YWxQYWdlcykge1xyXG4gICAgICAgICAgdGhpcy5wYWdlTnVtYmVyID0gdGhpcy5wYWdlTnVtYmVyICsgMTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubG9hZERhdGEodGhpcy5wYWdlTnVtYmVyLCB0aGlzLnBhZ2VTaXplLCB0aGlzLnNlYXJjaFF1ZXJ5KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnByb2R1Y3RzbG9hZGluZ0ZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEZ1bmN0aW9uIHRvIGdldCB2YWx1ZSBieSBrZXkgZnJvbSB0aGUgYXJyYXlcclxuICBnZXRWYWx1ZUJ5S2V5KGRhdGEsIGtleSkge1xyXG4gICAgaWYgKCFkYXRhIHx8IGRhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiBkYXRhIGlzIGVtcHR5IG9yIHVuZGVmaW5lZFxyXG4gICAgfVxyXG4gICAgY29uc3QgaXRlbSA9IGRhdGEuZmluZChrdiA9PiBrdi5rZXkudG9Mb3dlckNhc2UoKSA9PT0ga2V5LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLnZhbHVlIDogbnVsbDtcclxuICB9XHJcblxyXG5cclxuICBsb2FkRGF0YShwYWdlTnVtYmVyLCBwYWdlU2l6ZSwgc2VhcmNoUXVlcnkpIHtcclxuICAgIGNvbnN0IHBhcmFtc0RhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwcm9kdWN0UGlja2VyUGFyYW1zJykpO1xyXG4gICAgY29uc3QgaW5jbHVkZURlc2NyaXB0aW9uID0gdGhpcy5nZXRWYWx1ZUJ5S2V5KHBhcmFtc0RhdGEsICdpbmNsdWRlRGVzY3JpcHRpb24nKTtcclxuICAgIGNvbnN0IHZlbmRvcklkID0gdGhpcy5nZXRWYWx1ZUJ5S2V5KHBhcmFtc0RhdGEsICd2ZW5kb3JJZCcpO1xyXG4gICAgY29uc3Qgb25seUFjdGl2ZSA9IHRoaXMuZ2V0VmFsdWVCeUtleShwYXJhbXNEYXRhLCAnb25seUFjdGl2ZScpO1xyXG4gICAgY29uc3QgaW5jbHVkZUN1cnJlbmN5SWQgPSB0aGlzLmdldFZhbHVlQnlLZXkocGFyYW1zRGF0YSwgJ2luY2x1ZGVDdXJyZW5jeUlkJyk7XHJcbiAgICB2YXIgY3VycmVudFVzZXIgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW50VXNlcicpKTtcclxuICAgIGxldCBoZWFkZXJzO1xyXG4gICAgaWYgKGN1cnJlbnRVc2VyICYmIGN1cnJlbnRVc2VyLlRva2VucyAmJiBjdXJyZW50VXNlci5Ub2tlbnMuQWNjZXNzVG9rZW4pIHtcclxuICAgICAgdmFyIGFjY2Vzc1Rva2VuID0gY3VycmVudFVzZXIuVG9rZW5zLkFjY2Vzc1Rva2VuO1xyXG4gICAgICBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgYWNjZXNzVG9rZW5cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdVc2VyIG5vdCBhdXRoZW50aWNhdGVkIG9yIHRva2VucyBtaXNzaW5nLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVudmVuZG9ySWQgPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NydW1ibGUodmVuZG9ySWQpXHJcbiAgICBjb25zdCBlbnBhZ2VOdW1iZXIgPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NydW1ibGUocGFnZU51bWJlcilcclxuICAgIGNvbnN0IGVucGFnZVNpemUgPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NydW1ibGUocGFnZVNpemUpO1xyXG4gICAgY29uc3QgZW5zZWFyY2hRdWVyeSA9IHRoaXMuY29tbW9uU2VydmljZS5zY3J1bWJsZShzZWFyY2hRdWVyeSk7XHJcbiAgICBjb25zdCBlbmNvZGVJbmNsdWRlQ3VycmVuY3lJZCA9IHRoaXMuY29tbW9uU2VydmljZS5zY3J1bWJsZShpbmNsdWRlQ3VycmVuY3lJZCk7XHJcbiAgICBsZXQgZW5hY3RpdmUgPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NydW1ibGUob25seUFjdGl2ZSk7XHJcbiAgICAvL0NoZWNrIGlmIGVuYWN0aXZlIGlzIHVuZGVmaW5lZCwgbnVsbCwgb3IgYmxhbmtcclxuICAgIGlmIChlbmFjdGl2ZSA9PT0gdW5kZWZpbmVkIHx8IGVuYWN0aXZlID09PSBudWxsIHx8IGVuYWN0aXZlID09PSAnJykge1xyXG4gICAgICBlbmFjdGl2ZSA9IHRoaXMuY29tbW9uU2VydmljZS5zY3J1bWJsZSh0cnVlKTsgLy8gU2V0IGRlZmF1bHQgdmFsdWUgdG8gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFNjcnVtYmxlIGFuZCBoYW5kbGUgdGhlIGluY2x1ZGVEZXNjcmlwdGlvbiBwYXJhbWV0ZXJcclxuICAgIGxldCBlbmRlc2NyaXB0aW9uID0gdGhpcy5jb21tb25TZXJ2aWNlLnNjcnVtYmxlKGluY2x1ZGVEZXNjcmlwdGlvbik7XHJcbiAgICBpZiAoIWVuZGVzY3JpcHRpb24pIHtcclxuICAgICAgZW5kZXNjcmlwdGlvbiA9IHRoaXMuY29tbW9uU2VydmljZS5zY3J1bWJsZShmYWxzZSk7ICAvLyBTZXQgdG8gJ2ZhbHNlJyBpZiB1bmRlZmluZWQsIG51bGwsIG9yIGJsYW5rXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmFzZVVybE1hcHBpbmcgPSB7XHJcbiAgICAgICdsb2NhbGhvc3QnOiAnaHR0cDovL2xvY2FsaG9zdDo1ODUwNCcsXHJcbiAgICAgICdsaW5jb2xuLnZhcnRvcGlhLmNvbSc6ICdodHRwczovL2xpbmNvbG4tYXBpLnZhcnRvcGlhLmNvbScsXHJcbiAgICAgICdzdGFnZS52YXJ0b3BpYS5jb20nOiAnaHR0cHM6Ly9zdGFnZS1hcGkudmFydG9waWEuY29tJyxcclxuICAgICAgJ215LnZhcnRvcGlhLmNvbSc6ICdodHRwczovL3JlYWdhbi1hcGkudmFydG9waWEuY29tJyxcclxuICAgICAgJ2phY2tzb24udmFydG9waWEuY29tJzogJ2h0dHBzOi8vamFja3Nvbi1hcGkudmFydG9waWEuY29tJ1xyXG4gICAgfTtcclxuICAgIC8vIEdldCB0aGUgY3VycmVudCBob3N0bmFtZVxyXG4gICAgY29uc3QgaG9zdG5hbWUgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XHJcbiAgICBjb25zdCBiYXNlQXBpVXJsID0gYmFzZVVybE1hcHBpbmdbaG9zdG5hbWVdIHx8IG51bGw7XHJcbiAgICBpbnRlcmZhY2UgVmVuZG9yUHJvZHVjdHNSZXNwb25zZSB7XHJcbiAgICAgIGNvZGU6IG51bWJlcjtcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgICAgIHN0YXR1c0NvZGU6IG51bWJlcjtcclxuICAgIH1cclxuICAgIGxldCB1cmwgPSBgJHtiYXNlQXBpVXJsfS9hcGkvVmVuZG9yRm9ybUJ1aWxkZXIvR2V0VmVuZG9yUHJvZHVjdHM/dmVuZG9ySWQ9JHtlbnZlbmRvcklkfSZwYWdlTnVtYmVyPSR7ZW5wYWdlTnVtYmVyfSZwYWdlU2l6ZT0ke2VucGFnZVNpemV9JnNlYXJjaD0ke2Vuc2VhcmNoUXVlcnl9Jm9ubHlBY3RpdmU9JHtlbmFjdGl2ZX0maW5jbHVkZURlc2NyaXB0aW9uPSR7ZW5kZXNjcmlwdGlvbn1gO1xyXG4gICAgLy8gT25seSBhZGQgaW5jbHVkZUN1cnJlbmN5SWQgaWYgaXQgaGFzIGEgdmFsaWQgdmFsdWVcclxuICAgIGlmIChlbmNvZGVJbmNsdWRlQ3VycmVuY3lJZCAhPT0gbnVsbCAmJiBlbmNvZGVJbmNsdWRlQ3VycmVuY3lJZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHVybCArPSBgJmluY2x1ZGVDdXJyZW5jeUlkPSR7ZW5jb2RlSW5jbHVkZUN1cnJlbmN5SWR9YDtcclxuICAgIH1cclxuICAgIHRoaXMuaHR0cC5nZXQ8VmVuZG9yUHJvZHVjdHNSZXNwb25zZT4odXJsLCB7IGhlYWRlcnMgfSkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlbmRvcnByb2R1Y3RpZCcpIHtcclxuICAgICAgICAgIHRoaXMudG90YWxQYWdlcyA9IHJlc3BvbnNlPy5kYXRhPy50b3RhbFBhZ2VzO1xyXG4gICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGEuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zTGVuZ3RoID0gZGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICBpZiAodGhpcy5wcm9kdWN0TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGRhdGEubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBpdGVtXHJcbiAgICAgICAgICAgIH0pLmZvckVhY2goaSA9PiB0aGlzLnByb2R1Y3RMaXN0LnB1c2goaSkpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RMaXN0ID0gZGF0YTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIFVwZGF0ZSBmaWx0ZXJlZE9wdGlvbnMgd2l0aCB0cmFuc2Zvcm1lZERhdGFcclxuICAgICAgICAgIHZhciBhbGxQcm9kdWN0TGlzdCA9IHRoaXMudHJhbnNmb3JtUmVzcG9uc2VEYXRhKHRoaXMucHJvZHVjdExpc3QpO1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBQcm9taXNlLnJlc29sdmUoYWxsUHJvZHVjdExpc3QpO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucHJvZHVjdHNsb2FkaW5nRmxhZyA9IHRydWU7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZWxlID0gdGhpcy5zZWxlY3RFbGVtPy5wYW5lbD8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKGVsZSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrSGVpZ2h0ID0gZWxlLnNjcm9sbEhlaWdodCAtIGVsZS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgICBjb25zdCBtaWRkbGVQb3NpdGlvbiA9IHRyYWNrSGVpZ2h0IC8gMiAtIDUwO1xyXG4gICAgICAgICAgICAgIGVsZS5zY3JvbGxUbyh7IHRvcDogbWlkZGxlUG9zaXRpb24sIGJlaGF2aW9yOiAnYXV0bycgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1BhbmVsIGVsZW1lbnQgaXMgbm90IGF2YWlsYWJsZSB5ZXQuJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9LCAyNTApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gVXRpbGl0eSBmdW5jdGlvbiB0byB0cmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxyXG4gIHRyYW5zZm9ybVJlc3BvbnNlRGF0YShkYXRhOiBBcnJheTx7IHRleHQ6IGFueSwgdmFsdWU6IGFueSwgZGF0ZTogYW55IH0+IHwgbnVsbCB8IHVuZGVmaW5lZCk6IEFycmF5PHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IG51bWJlciwgZGF0ZTogc3RyaW5nIH0+IHtcclxuICAgIC8vIENoZWNrIGlmIGRhdGEgaXMgbm90IG51bGwsIHVuZGVmaW5lZCwgYW5kIGlzIGFuIGFycmF5IHdpdGggZWxlbWVudHNcclxuICAgIGlmIChkYXRhICYmIEFycmF5LmlzQXJyYXkoZGF0YSkgJiYgZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBkYXRhLm1hcChpdGVtID0+ICh7XHJcbiAgICAgICAgbGFiZWw6IGl0ZW0udGV4dCxcclxuICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcclxuICAgICAgICBkYXRlOiBpdGVtLmRhdGVcclxuICAgICAgfSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gUmV0dXJuIGFuIGVtcHR5IGFycmF5IGlmIGRhdGEgaXMgbnVsbCwgdW5kZWZpbmVkLCBvciBlbXB0eVxyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGZpbHRlcldlYnNpdGVNdWx0aSgpIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3RPcHRpb25zKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBzZWFyY2ggPSB0aGlzLndlYnNpdGVNdWx0aUZpbHRlckN0cmwudmFsdWU7XHJcbiAgICBzZWFyY2ggPSBzZWFyY2gudG9Mb3dlckNhc2UoKTtcclxuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5zZWxlY3RPcHRpb25zLnRoZW4oKG9wdGlvbnMpID0+IHtcclxuICAgICAgY29uc3QgZmlsdGVyZWQgPSBvcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwucmVwbGFjZSgvPFxcLz9zcGFuW14+XSo+L2csIFwiXCIpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gpICE9PSAtMSk7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zTGVuZ3RoID0gZmlsdGVyZWQubGVuZ3RoO1xyXG4gICAgICByZXR1cm4gZmlsdGVyZWQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuX29uRGVzdHJveS5uZXh0KCcnKTtcclxuICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhbmVsRWxlbWVudCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYW5lbEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbC5iaW5kKHRoaXMpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKkVuZCovXHJcbiAgc2V0SW5zdGFuY2UoaW5zdGFuY2U6IGFueSkge1xyXG4gICAgc3VwZXIuc2V0SW5zdGFuY2UoaW5zdGFuY2UpO1xyXG4gICAgdGhpcy5pbnN0YW5jZS50cmlnZ2VyVXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICBvbkNsZWFyQWxsKCkge1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJykge1xyXG4gICAgICB0aGlzLnBhZ2VOdW1iZXIgPSAxO1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gMjA7XHJcbiAgICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcclxuICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5wcm9kdWN0TGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5sb2FkRGF0YSh0aGlzLnBhZ2VOdW1iZXIsIHRoaXMucGFnZVNpemUsIHRoaXMuc2VhcmNoUXVlcnkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2Vjb25kRHJvcGRvd24odmFsdWU6IGFueSkge1xyXG4gICAgY29uc3QgYXBpRW5kUG9pbnQgPSAnTWFuYWdlVmVuZG9ycy9HZXRSZWZlcmVuY2VEYXRhSXRlbXNCeVZlbmRvcklkQW5kRGF0YVZhbHVlJztcclxuICAgIGxldCBmaW5hbFBhcmFtcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2Nhc2NhZGluZ0Ryb3Bkb3duc1BhcmFtcycpKTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbmFsUGFyYW1zKSkge1xyXG4gICAgICBjb25zdCBpbmRleCA9IGZpbmFsUGFyYW1zLmZpbmRJbmRleChwYXJhbSA9PiBwYXJhbS5rZXkgPT09ICdkYXRhVmFsdWUnKTtcclxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIC8vIElmIHRoZSBvYmplY3QgZXhpc3RzLCB1cGRhdGUgaXRzIHZhbHVlXHJcbiAgICAgICAgZmluYWxQYXJhbXNbaW5kZXhdLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBkb2Vzbid0IGV4aXN0LCBhZGQgaXQgdG8gdGhlIGFycmF5XHJcbiAgICAgICAgZmluYWxQYXJhbXMucHVzaCh7IGtleTogJ2RhdGFWYWx1ZScsIHZhbHVlOiB2YWx1ZSB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2UuaW5pdGlhbGl6ZUFwaVBhdGgoYXBpRW5kUG9pbnQsIGZpbmFsUGFyYW1zKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuc2Vjb25kRHJvcGRvd25JdGVtcyA9IHJlc3BvbnNlLmRhdGE7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2Uuc2V0RHJvcGRvd25JdGVtcyh0aGlzLnNlY29uZERyb3Bkb3duSXRlbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnNlbGVjdEVsZW0ub3BlbmVkQ2hhbmdlLnN1YnNjcmliZShhc3luYyAoaXNPcGVuOiBib29sZWFuKSA9PiB7XHJcbiAgICAgIGxldCBpID0gMFxyXG4gICAgICBpZiAoaXNPcGVuKSB7XHJcbiAgICAgICAgY29uc3QgbmV3UHJvZHVjdFBpY2tlckZsYWcgPSB0aGlzLmluc3RhbmNlPy5jb21wb25lbnQ/LmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgbGV0IGNoZWNrSW52b2tlRnJvbUxpYnJhcnkgPSB0aGlzLmNvbW1vblNlcnZpY2UuY2hlY2tJc0F0dHJpYnV0ZVRydWUobmV3UHJvZHVjdFBpY2tlckZsYWcsIFwiaW52b2tlRnJvbUxpYnJhcnlcIilcclxuICAgICAgICBjb25zdCBmaXJzdExldmVsID0gKHRoaXMuZ2V0VmVuZG9yUmVmTGlzdCh0aGlzLmluc3RhbmNlKSAmJiBjaGVja0ludm9rZUZyb21MaWJyYXJ5KTtcclxuICAgICAgICBpZiAoZmlyc3RMZXZlbCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RFbGVtLnZhbHVlQ2hhbmdlLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2Uuc2V0RHJvcERvd25GbGFnKHRydWUpO1xyXG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlU2Vjb25kRHJvcGRvd24ocmVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpKytcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICBpZiAodGhpcy5jaGVja1ZlbmRvclJlZkl0ZW1zKHRoaXMuaW5zdGFuY2UpICYmIGNoZWNrSW52b2tlRnJvbUxpYnJhcnkpIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVEZXBlbmRlbnRJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5zZWNvbmREcm9wZG93bkl0ZW1zID0gdGhpcy5jb21tb25TZXJ2aWNlLmdldERyb3Bkb3duSXRlbXMoKTtcclxuICAgICAgICAgIGlmICh0aGlzLnNlY29uZERyb3Bkb3duSXRlbXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlY29uZERyb3Bkb3duSXRlbXMuZm9yRWFjaCgocmVuZGVyRWxlbWVudCwgaW5kZXgsIGFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdG9yZURlcGVuZGVudEl0ZW1zLnB1c2goeyBsYWJlbDogcmVuZGVyRWxlbWVudFsndGV4dCddLCB2YWx1ZTogdGhpcy5jb21tb25TZXJ2aWNlLm9ubHlOdW1iZXJzKHJlbmRlckVsZW1lbnRbJ3ZhbHVlJ10pID8gcmVuZGVyRWxlbWVudFsndmFsdWUnXSArICcgJyA6IHJlbmRlckVsZW1lbnRbJ3ZhbHVlJ10gfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2UuZ2V0RHJvcERvd25GbGFnKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZURlcGVuZGVudEl0ZW1zID0gdGhpcy5pbnN0YW5jZS5jb21wb25lbnQuZGF0YS52YWx1ZXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFByb21pc2UucmVzb2x2ZSh0aGlzLnN0b3JlRGVwZW5kZW50SXRlbXMpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RPcHRpb25zID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMuc3RvcmVEZXBlbmRlbnRJdGVtcyk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbnMudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc0xlbmd0aCA9IHJlc3VsdC5sZW5ndGhcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJykge1xyXG4gICAgICB0aGlzLnNlbGVjdEVsZW0ub3BlbmVkQ2hhbmdlLnN1YnNjcmliZSgoaXNPcGVuOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzT3Blbikge1xyXG4gICAgICAgICAgdGhpcy5wYWdlTnVtYmVyID0gMTtcclxuICAgICAgICAgIHRoaXMucGFnZVNpemUgPSAyMDtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFF1ZXJ5Py5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaEl0ZW0/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLndlYnNpdGVNdWx0aUZpbHRlckN0cmwuc2V0VmFsdWUodGhpcy5zZWFyY2hJdGVtKTtcclxuICAgICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcclxuICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAvL3RoaXMubG9hZERhdGEodGhpcy5wYWdlTnVtYmVyLCB0aGlzLnBhZ2VTaXplLCB0aGlzLnNlYXJjaFF1ZXJ5KTtcclxuICAgICAgICAgIHRoaXMucmVnaXN0ZXJQYW5lbFNjcm9sbEV2ZW50KHRoaXMuc2VsZWN0RWxlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlUGFuZWxTY3JvbGxFdmVudCgpO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgIC8vIGlmICh0aGlzLnNlbGVjdGVkVmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgIC8vICAgdGhpcy5wcm9kdWN0TGlzdCA9IFtdO1xyXG4gICAgICAgICAgLy8gICB0aGlzLnBhZ2VOdW1iZXIgPSAxO1xyXG4gICAgICAgICAgLy8gICB0aGlzLnBhZ2VTaXplID0gMjA7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcclxuICAgICAgICAgIC8vICAgdGhpcy5sb2FkRGF0YSh0aGlzLnBhZ2VOdW1iZXIsIHRoaXMucGFnZVNpemUsIHRoaXMuc2VhcmNoUXVlcnkpO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVQYW5lbFNjcm9sbEV2ZW50KCkge1xyXG4gICAgLy8gUmVtb3ZlIHRoZSBzY3JvbGwgZXZlbnQgbGlzdGVuZXJcclxuICAgIGlmICh0aGlzLmN1cnJlbnRQYW5lbEVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFuZWxFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwuYmluZCh0aGlzKSk7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhbmVsRWxlbWVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLypuZXcgbG9naWMgKi9cclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlbmRvcnByb2R1Y3RpZCcpIHtcclxuICAgICAgdGhpcy53ZWJzaXRlTXVsdGlGaWx0ZXJDdHJsLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDEwMDApLCAvLyBUaW1lIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGtleSBldmVudHNcclxuICAgICAgICAgIC8vICB0YXAoKCkgPT4gdGhpcy5zZWFyY2hpbmcgPSB0cnVlKSxcclxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSlcclxuICAgICAgICAuc3Vic2NyaWJlKChzZWFyY2hRdWVyeSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHNlYXJjaFF1ZXJ5ICE9ICcnKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBhZ2VOdW1iZXIgPSAxO1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gMjA7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZHVjdExpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gc2VhcmNoUXVlcnk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSXRlbSA9IHNlYXJjaFF1ZXJ5XHJcbiAgICAgICAgICAgIHRoaXMubG9hZERhdGEodGhpcy5wYWdlTnVtYmVyLCB0aGlzLnBhZ2VTaXplLCBzZWFyY2hRdWVyeSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLndlYnNpdGVNdWx0aUZpbHRlckN0cmwudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyV2Vic2l0ZU11bHRpKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKkVuZCAqL1xyXG4gICAgdGhpcy5zZWxlY3RPcHRpb25zID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RPcHRpb25zUmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2VsZWN0T3B0aW9ucy50aGVuKChvcHRpb25zKSA9PiB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zTGVuZ3RoID0gb3B0aW9ucy5sZW5ndGg7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuc2VsZWN0T3B0aW9ucztcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBhbnksIHN1Ym1pdERhdGE6IGFueSwgYXR0cmlidXRlczogYW55KSB7XHJcblxyXG4gIH1cclxuXHJcbiAgY2hlY2tWZW5kb3JSZWZJdGVtcyhpbnN0YW5jZSkge1xyXG4gICAgY29uc3Qgc2VsZWN0VmFsdWVzID0gaW5zdGFuY2UuY29tcG9uZW50WydzZWxlY3RWYWx1ZXMnXTtcclxuICAgIGNvbnN0IGRhdGFVcmwgPSBpbnN0YW5jZS5jb21wb25lbnRbJ2RhdGEnXT8udXJsO1xyXG4gICAgY29uc3QgaXNTZWxlY3RWYWx1ZXNWYWxpZCA9IHNlbGVjdFZhbHVlcyAhPSBudWxsICYmIHNlbGVjdFZhbHVlcyAhPT0gJycgJiYgc2VsZWN0VmFsdWVzICE9PSB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBpc0RhdGFVcmxJbnZhbGlkID0gZGF0YVVybCA9PSBudWxsIHx8IGRhdGFVcmwgPT09ICcnIHx8IGRhdGFVcmwgPT09IHVuZGVmaW5lZDtcclxuICAgIHJldHVybiBpc1NlbGVjdFZhbHVlc1ZhbGlkICYmIGlzRGF0YVVybEludmFsaWQ7XHJcbiAgfVxyXG5cclxuICBnZXRWZW5kb3JSZWZMaXN0KGluc3RhbmNlKSB7XHJcbiAgICBjb25zdCBkYXRhVXJsID0gaW5zdGFuY2UuY29tcG9uZW50WydkYXRhJ10/LnVybDtcclxuICAgIGNvbnN0IGlzU2VsZWN0VmFsdWVzVmFsaWQgPSBkYXRhVXJsICE9IG51bGwgJiYgZGF0YVVybCAhPT0gJycgJiYgZGF0YVVybCAhPT0gdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIGlzU2VsZWN0VmFsdWVzVmFsaWQ7XHJcbiAgfVxyXG5cclxuICBpc0Vycm9yKCkge1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UuZXJyb3IpIHtcclxuICAgICAgdGhpcy5jb250cm9sLnNldEVycm9ycyh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC52YWxpZGF0ZSk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEVycm9yTWVzc2FnZSgpIHtcclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmVycm9yICYmIHRoaXMuaW5zdGFuY2UuZXJyb3IubWVzc2FnZXMpIHtcclxuICAgICAgY29uc3QgeyBtZXNzYWdlcyB9ID0gdGhpcy5pbnN0YW5jZS5lcnJvcjtcclxuICAgICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCkge1xyXG4gICAgICAgIGZvciAoY29uc3QgbXNnIG9mIG1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICBpZiAobXNnLmNvbnRleHQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UgJiYgdGhpcy5pbnN0YW5jZS5wYXJlbnQgJiYgdGhpcy5pbnN0YW5jZS5wYXJlbnQuX2RhdGEpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5wYXJlbnQuX2RhdGEuc3VibWl0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZS5lcnJvciA/IHRoaXMuaW5zdGFuY2UuZXJyb3IubWVzc2FnZSA6ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29tcGFyZU9iamVjdHMobzE6IGFueSwgbzI6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIF8uaXNFcXVhbChvMSwgbzIpO1xyXG4gIH1cclxufVxyXG5TZWxlY3RDb21wb25lbnQuTWF0ZXJpYWxDb21wb25lbnQgPSBNYXRlcmlhbFNlbGVjdENvbXBvbmVudDtcclxuXHJcbi8vIE1ha2Ugc3VyZSB3ZSBkZXRlY3QgY2hhbmdlcyB3aGVuIG5ldyBpdGVtcyBtYWtlIHRoZWlyIHdheSBpbnRvIHRoZSBzZWxlY3QgZHJvcGRvd24uXHJcbmNvbnN0IHNldEl0ZW1zID0gU2VsZWN0Q29tcG9uZW50LnByb3RvdHlwZS5zZXRJdGVtcztcclxuU2VsZWN0Q29tcG9uZW50LnByb3RvdHlwZS5zZXRJdGVtcyA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XHJcbiAgc2V0SXRlbXMuY2FsbCh0aGlzLCAuLi5hcmdzKTtcclxuICBpZiAodGhpcy5tYXRlcmlhbENvbXBvbmVudCAmJiB0aGlzLm1hdGVyaWFsQ29tcG9uZW50LnNlbGVjdE9wdGlvbnNSZXNvbHZlKSB7XHJcbiAgICB0aGlzLm1hdGVyaWFsQ29tcG9uZW50LnNlbGVjdE9wdGlvbnNSZXNvbHZlKHRoaXMuc2VsZWN0T3B0aW9ucyk7XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IHsgU2VsZWN0Q29tcG9uZW50IH07Il19