@vgroup/dialbox 0.7.84 → 0.7.86

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.
@@ -1426,7 +1426,7 @@ export class CallProgressComponent {
1426
1426
  else if (this.missCallInfo?.data?.data?.recordId == data?.id && !callToAccept.parameters?.CallSid) {
1427
1427
  clearInterval(intervalId);
1428
1428
  const sid = callToAccept.parameters?.CallSid;
1429
- this.twilioService.isConnectingIncomingCallId.next('');
1429
+ this.isConnectingIncomingCallId = '';
1430
1430
  this.isConnectingIncomingCallId = '';
1431
1431
  this.acceptedCallList = this.acceptedCallList.filter(c => c.callSid !== sid);
1432
1432
  this.twilioService.acceptedCallList = this.twilioService.acceptedCallList.filter((c) => c.parameters?.CallSid !== sid);
@@ -1878,7 +1878,9 @@ export class CallProgressComponent {
1878
1878
  console.log(ev);
1879
1879
  try {
1880
1880
  let selfCall = this.newIncomingCallsList.find((res) => res?.conferenceId == this.currentCall?.conferenceId)?.participants.find((resData) => ((this.deviceNumberList.includes(resData?.from) && resData?.client) || (this.deviceNumberList.includes(resData?.to) && resData?.direction == 'incoming-call' && resData?.host)) && !resData?.isLeft);
1881
+ console.log(selfCall);
1881
1882
  let device = this.twilioService.getIncomingCallById(selfCall?.callSid || selfCall?.clientSid);
1883
+ console.log(device);
1882
1884
  if (device && device?._status == 'open') {
1883
1885
  device.sendDigits(String(ev.key));
1884
1886
  }
@@ -2389,4 +2391,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
2389
2391
  }], outgoingContactName: [{
2390
2392
  type: Input
2391
2393
  }] } });
2392
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvY29tcG9uZW50cy9jYWxsLXByb2dyZXNzL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGlhbGJveC9zcmMvbGliL2NvbXBvbmVudHMvY2FsbC1wcm9ncmVzcy9jYWxsLXByb2dyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFRLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQW1COUMsTUFBTSxPQUFPLHFCQUFxQjtJQTZIaEMsWUFBb0IsZ0JBQWtDLEVBQVUsR0FBc0IsRUFDN0UsYUFBNEIsRUFDM0IsU0FBMkIsRUFDM0IsMEJBQXNEO1FBSDVDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUM3RSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQiwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO1FBNUh2RCx5QkFBb0IsR0FBUSxFQUFFLENBQUM7UUFDL0IsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFDdkIsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FB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QUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBa0JHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFpRkUsbUJBQW1CO3NCQUEzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2FsbCwgRGV2aWNlIH0gZnJvbSAnQHR3aWxpby92b2ljZS1zZGsnO1xyXG5pbXBvcnQgeyBFeHRlbnNpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9leHRlbnNpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFR3aWxpb1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3R3aWxpby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnRzJztcclxuaW1wb3J0IHN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xyXG5pbXBvcnQgeyBrZXlwYWQgfSBmcm9tICcuLi8uLi8uLi9rZXlwYWQnO1xyXG5pbXBvcnQgeyBpbnRlcnZhbCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9pbmNvbWVpbmctY2FsbC1zb2NrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IElwQWRkcmVzc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2lwLWFkZHJlc3Muc2VydmljZSc7XHJcbmludGVyZmFjZSBDYWxsRGV0YWlscyB7XHJcbiAgY2FsbFNpZDogc3RyaW5nO1xyXG4gIGNhbGxTdGF0dXM6IHN0cmluZztcclxufVxyXG5pbnRlcmZhY2UgQ2FsbFN0YXR1c1Jlc3BvbnNlIHtcclxuICBjYWxsRGV0YWlsczogQ2FsbERldGFpbHM7XHJcbiAgcmVzcG9uc2U6IHN0cmluZztcclxuICBlcnJvclR5cGU6IG51bWJlcjtcclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgc3RhdHVzOiBudW1iZXI7XHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItY2FsbC1wcm9ncmVzcycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYWxsUHJvZ3Jlc3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgY2FsbERhdGE6IGFueTtcclxuICBASW5wdXQoKSBzZWxlY3RlZENhbGxlcklkOiBhbnk7XHJcbiAgQElucHV0KCkgbmV3SW5jb21pbmdDYWxsRGF0YT86IENhbGw7IC8vXHJcbiAgQElucHV0KCkgbmV3SW5jb21pbmdDYWxsc0xpc3Q6IGFueSA9IFtdO1xyXG4gIEBJbnB1dCgpIGNhbGxlcklkTGlzdDogYW55ID0gW107XHJcbiAgQElucHV0KCkgbmV3Q2FsbENvbmZlcmVuY2U6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIG1pc3NDYWxsSW5mbzogYW55ID0ge307XHJcbiAgQElucHV0KCkgdXNlclNldHRpbmdJbmZvOiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBkZXZpY2VJZDogYW55O1xyXG4gIEBJbnB1dCgpIGNhbGxBY3Rpb246IGFueTtcclxuICBASW5wdXQoKSBjb25mZXJlbmNlQ2FsbEluZm86IGFueTtcclxuICBASW5wdXQoKSBpbmNvbWluZ0Zyb21JbWFnZTpzdHJpbmcgPSAnJ1xyXG4gIHVzZXJJZDogYW55O1xyXG4gIEBPdXRwdXQoKSBlbmRDYWxsRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgaW5jb21pbmdDYWxsc05ld0luZm86IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7Ly9cclxuICBAT3V0cHV0KCkgbWluaW1pc2VFdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIGRldmljZT86IERldmljZTtcclxuICBjYWxsITogQ2FsbCB8IGFueTtcclxuICBzaG93UmluZ0FuaW1hdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRpbWVyOiBzdHJpbmcgPSAnMDA6MDAnO1xyXG4gIGludGVydmFsSWQ6IGFueTtcclxuICBzaG93S2V5cGFkOiBib29sZWFuID0gZmFsc2U7XHJcbiAga2V5cGFkVmFsID0ga2V5cGFkO1xyXG4gIGNhbGxJbnB1dDogc3RyaW5nID0gJyc7XHJcbiAgaXNNdXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcGVuZGluZ011dGVVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTsgXHJcbiAgaW50ZW5kZWRNdXRlU3RhdGU6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcclxuICBkaXNiYWxlRW5kQ2FsbEJ0bjogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2hvd0NsZWFyQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNDb2xsb3BzID0gZmFsc2U7XHJcbiAgY3VycmVudENhbGw6IGFueTtcclxuICBpc0NvbmZlcmVuY2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc091dGdvaW5nQ2FsbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQE91dHB1dCgpIGluY29taW5nQ2FsbEluaXRpYXRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBpc0xvYWRlcnNob3duOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIGVuZEluY29taW5nQ2FsbEV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8vIFJlY29yZGluZyB2YXJpYWJsZXNcclxuICBjYWxsU2lkOiBhbnk7XHJcbiAgaXNSZWNvcmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1BhdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRpbWVyU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG4gIHRpbWVFbGFwc2VkID0gMDsgLy8gaW4gc2Vjb25kc1xyXG4gIHJlY29yZENhbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbmNvbWluZ0NhbGxTaWQ6IGFueTtcclxuICBjYWxsU3RhdHVzOiBzdHJpbmcgPSAncmluZ2luZyc7ICAgIC8vXHJcbiAgaW5jb21pbmdSZWNvcmRDYWxsPzogYW55O1xyXG4gIHNlbGVjdGVkSW5jb21pbmdDYWxsOiBhbnk7XHJcbiAgc2hvd0NvbnRhY3RzUGFuZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0FkZFJlbW92ZVBhcnRpY2lwYW50OiBib29sZWFuID0gZmFsc2U7ICAgLy9cclxuICBpc0NvbmN1cnJlbnRJbmNvbWluZzogYm9vbGVhbiA9IGZhbHNlOyAgIC8vXHJcbiAgaGVsZENhbGw/OiBDYWxsOyAgLy9cclxuICBpc0NhbGxPbkhvbGQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjb250YWN0czogYW55W10gPSBbXTtcclxuICBjdXJyZW50Q2FsbExpc3Q6IGFueVtdID0gW107XHJcbiAgY29uZmVyZW5jZUlkOiBhbnk7XHJcbiAgYWxsUGFydGljaXBlbnRMaXN0OiBhbnk7XHJcbiAgaXNDbGlja0V4cGFuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzQ2FsbEluUHJvZ3Jlc3MhOiBib29sZWFuO1xyXG4gIGlzQ3VycmVudEluY29taW5nQ2FsbExpc3Q6IGFueSA9IFtdO1xyXG4gIGlzQ29uZmVyZW5jZUNhbGxIb2xkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRVc2VySW5mbzogYW55O1xyXG4gIGlzU2VhcmNoVmlzaWJsZSA9IGZhbHNlO1xyXG4gIGlzRXhwYW5kZWQgPSBmYWxzZTtcclxuICBzZWFyY2hUZXh0ID0gJyc7XHJcbiAgZmlsdGVyZWRMaXN0OiBhbnkgPSBbXTtcclxuICBmaWx0ZXJlZFBhcnRpY2lwZW50TGlzdDogYW55O1xyXG4gIHNob3dCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1Jpbmdpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0RpcmVjdENhbGxPcHRpb25TaG93OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlhbEFsZXJ0ID0ge1xyXG4gICAgbXNnOiAnJyxcclxuICAgIHNob3c6IGZhbHNlXHJcbiAgfVxyXG4gIGxlZnRQYXJ0aWNpcGVudDogYW55ID0ge307XHJcbiAgY29uZmVyZW5jZUNhbGxMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGlzSW5jb21pbmdDYWxsQnRuRGlzYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzQ29ubmVjdGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhvc3RudW1iZXI6IGFueTtcclxuICBpc05ld0FkZGVkQ2FsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRldmljZU51bWJlckxpc3Q6IGFueSA9IFtdO1xyXG4gIG91ck51bWJlckluZm86IGFueSA9IHt9O1xyXG4gIGN1cnJlbnRDb25mZXJlbmNlQ2FsbDogYW55ID0ge307XHJcbiAgaXNSZWFzb25DaGVja2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNBbGxBY2NlcHRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGxlYXZlUmVhc29uOiBzdHJpbmcgPSAnJztcclxuICAvLyAyNC1ob3VyIHRpbWUgcGlja2VyXHJcbiAgbGVhdmVIb3VyOiBzdHJpbmcgPSAnJztcclxuICBsZWF2ZU1pbnV0ZTogc3RyaW5nID0gJyc7XHJcbiAgaG91cnM6IHN0cmluZ1tdID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpKTtcclxuICBtaW51dGVzOiBzdHJpbmdbXSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDYwIH0sIChfLCBpKSA9PiBpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSk7XHJcbiAgc2hvd0hvdXJEcm9wZG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dNaW51dGVEcm9wZG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkQ29uZjogYW55O1xyXG4gIHNob3dDb25mZXJlbmNlV2FybmluZ01vZGFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcGVuZGluZ0NhbGxEYXRhOiBhbnkgPSBudWxsO1xyXG4gIGNhbGxOdW1iZXJUb2FzdCA9IHtcclxuICAgIHNob3c6IGZhbHNlLFxyXG4gICAgdHlwZTogJ2FsZXJ0LXN1Y2Nlc3MnLFxyXG4gICAgbnVtYmVyOiAnJyxcclxuICAgIGRpc3BsYXlOdW06ICcnXHJcbiAgfTtcclxuICBpc1VuaG9sZENvbmZlcmVuY2VDYWxsOiBhbnk7ICAvL1xyXG4gIGNvbmZlcmVuY2VDYWxsTnVsbENvdW50OiBudW1iZXIgPSAwO1xyXG4gIGFsbENvblBhcnRpY2lwZW50TGlzdDogYW55ID0ge307XHJcbiAgY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdDogYW55O1xyXG4gIHByaXZhdGUgYWNjZXB0ZWRDYWxsTGlzdDogYW55W10gPSBbXTtcclxuICBpc0hvbGRCdG5EaXNhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQzJDb25mb0xpc3Q6IGFueSA9IHt9O1xyXG4gIHByaXZhdGUgbGFzdEFjdGl2ZUNvbmZlcmVuY2VJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBwZW5kaW5nQXV0b1VuaG9sZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkQ29uZk5hbWU6IGFueTtcclxuICBwZW5kaW5nTXV0ZVBhcnRpY2lwYW50czogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XHJcbiAgaW50ZW5kZWRNdXRlU3RhdGVzOiBNYXA8c3RyaW5nLCBib29sZWFuPiA9IG5ldyBNYXAoKTtcclxuICBzaG93TmV3Q2FsbExvYWRlcjpib29sZWFuID0gZmFsc2U7XHJcbiAgbmV3Q2FsbExvYWRlckRhdGE6IHsgbmFtZTogc3RyaW5nOyBwaG9uZTogc3RyaW5nLCBpbWc/OiBzdHJpbmcgfSA9IHsgbmFtZTogJycsIHBob25lOiAnJywgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgfTtcclxuICBASW5wdXQoKSBvdXRnb2luZ0NvbnRhY3ROYW1lID0gJyc7XHJcbiAgc2hvd0xlYXZlQ29uZmlybWF0aW9uTW9kYWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsZWF2ZUNvbmZQYXJ0aWNpcGFudDogYW55ID0gbnVsbDtcclxuICBsZWF2ZUNvbmZDb25mZXJlbmNlTmFtZTogc3RyaW5nID0gJyc7XHJcbiAgaXNQYXJ0aWNpcGFudFBhbmVsTG9hZGluZyA9IGZhbHNlO1xyXG4gIGlzQ29ubmVjdGluZ0luY29taW5nQ2FsbElkOiBhbnk7XHJcbiAgcGVuZGluZ05ld0NhbGxIZWxkUGFydGljaXBhbnQ6IGFueSA9IG51bGw7XHJcbiAgaXNDYWxsQ2FuY2VsbGVkID0gZmFsc2U7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBleHRlbnNpb25TZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgdHdpbGlvU2VydmljZTogVHdpbGlvU2VydmljZSxcclxuICAgIHByaXZhdGUgaXBTZXJ2aWNlOiBJcEFkZHJlc3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZTogSW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuY2FsbCA9IHRoaXMudHdpbGlvU2VydmljZS5jYWxsO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBTdWJzY3JpYmUgdG8gaW5jb21pbmcgY2FsbHMgZnJvbSBUd2lsaW9TZXJ2aWNlXHJcbiAgICAgdGhpcy5HZXRDb250YWN0c0xpc3QoKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmV4dGVuc2lvblNlcnZpY2UudXNlcklkKSB7XHJcbiAgICAgICAgdGhpcy51c2VySWQgPSB0aGlzLmV4dGVuc2lvblNlcnZpY2UudXNlcklkO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN1YnNjcmliaW5nIHRvIGluY29taW5nIGNhbGxzOicsIGUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kZXZpY2VOdW1iZXJMaXN0ID0gdGhpcy5jYWxsZXJJZExpc3QubWFwKChyZXM6IGFueSkgPT4gcmVzLm51bWJlcik7XHJcbiAgIFxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKHRoaXMudXNlcklkKSB7XHJcbiAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS51c2VySWQgPSB0aGlzLnVzZXJJZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlc1snY2FsbERhdGEnXSkge1xyXG4gICAgICBpZiAoY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LmlzSW5jb21pbmdDYWxsKSB7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5kaXNwbGF5TnVtIHx8IGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5mcm9tKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHtcclxuICAgICAgICAgIC4uLmNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlLFxyXG4gICAgICAgICAgaWQ6ICcxMjUnLFxyXG4gICAgICAgICAgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXHJcbiAgICAgICAgICBpc0hvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgaXNNdXRlOiBmYWxzZSxcclxuICAgICAgICAgIGlzQ29uZmVyZW5jZTogZmFsc2UsXHJcbiAgICAgICAgICBpc0FjY2VwdENhbGw6IHRydWUsXHJcbiAgICAgICAgICBkaWFsOiB0cnVlLFxyXG4gICAgICAgICAgcGhvbmU6IGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5waG9uZSxcclxuICAgICAgICAgIHBhcnRpY2lwYW50SWQ6ICcxMjEnLFxyXG4gICAgICAgICAgbmFtZTogY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/Lm5hbWUgfHwgY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LmZyb21OYW1lIHx8IGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy50b05hbWUgfHwgJycsXHJcbiAgICAgICAgICB0aW1lOiB0aGlzLnRpbWVyLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vbkFkZE5ld0NhbGwoY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snbmV3SW5jb21pbmdDYWxsc0xpc3QnXT8uY3VycmVudFZhbHVlPy5sZW5ndGggfHwgY2hhbmdlc1snbmV3SW5jb21pbmdDYWxsc0xpc3QnXT8ucHJldmlvdXNWYWx1ZT8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuaXNQYXJ0aWNpcGFudFBhbmVsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRldmljZU51bWJlckxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5kZXZpY2VOdW1iZXJMaXN0ID0gdGhpcy5jYWxsZXJJZExpc3QubWFwKChyZXM6IGFueSkgPT4gcmVzLm51bWJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCduZXdJbmNvbWluZ0NhbGxzTGlzdCcsIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QpO1xyXG4gICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZm9yRWFjaCgoY2FsbEluZm86IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VJZCA9IGkgPT0gMCA/IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3RbaV0uY29uZmVyZW5jZUlkIDogdGhpcy5jb25mZXJlbmNlSWQ7XHJcbiAgICAgICAgICBsZXQgb3VyTnVtYmVySW5mbyA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3RbaV0/LnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+XHJcbiAgICAgICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pICYmIHJlc0RhdGE/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgJiYgcmVzRGF0YT8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICghcmVzRGF0YT8uYnVzaW5lc3NOdW1iZXIgfHwgKHJlc0RhdGE/LmJ1c2luZXNzTnVtYmVyICYmIGNhbGxJbmZvPy5wYXJ0aWNpcGFudHM/Lmxlbmd0aCA9PSAxKSkpKSAmJiAhcmVzRGF0YT8uaXNMZWZ0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBpZiAoIXRoaXMucGVuZGluZ011dGVVcGRhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5pc011dGUgPSAhb3VyTnVtYmVySW5mbz8uaXNIb2xkID8gb3VyTnVtYmVySW5mbz8uaXNNdXRlIDogdGhpcy5pc011dGU7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG91ck51bWJlckluZm8/LmlzTXV0ZSA9PT0gdGhpcy5pbnRlbmRlZE11dGVTdGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzTXV0ZSA9IG91ck51bWJlckluZm8/LmlzTXV0ZTtcclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nTXV0ZVVwZGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmludGVuZGVkTXV0ZVN0YXRlID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vdGhpcy5pc011dGUgPSAhb3VyTnVtYmVySW5mbz8uaXNIb2xkID8gb3VyTnVtYmVySW5mbz8uaXNNdXRlIDogdGhpcy5pc011dGU7XHJcbiAgICAgICAgICBsZXQgY3VycmVudGNhbGxQYXJ0aWNpcGFudExpc3RJRCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbHRlcigocmVzKT0+IHJlcy5jb25mZXJlbmNlSWQgPT0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdFtpXT8uY29uZmVyZW5jZUlkKS5tYXAoKHJlcyk9PiByZXMucGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgICBsZXQgdXBkYXRlZExpc3QgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZpbHRlcigoY29uZjogYW55KSA9PiBjb25mLmNvbmZlcmVuY2VJZCA9PT0gY2FsbEluZm8uY29uZmVyZW5jZUlkKS5mbGF0TWFwKChjb25mOiBhbnkpID0+IGNvbmYucGFydGljaXBhbnRzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmlkKSk7XHJcbiAgICAgICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0W2ldLnBhcnRpY2lwYW50cy5tYXAoKHJlczphbnkpID0+IHJlcy5pZCk7XHJcbiAgICAgICAgICBjdXJyZW50Y2FsbFBhcnRpY2lwYW50TGlzdElELmZvckVhY2goKHBhcnRpY2lwYW50SWQ6YW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmKCF1cGRhdGVkTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudElkKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmlsdGVyKChyZXNJbmZvOmFueSkgPT4gcmVzSW5mbz8ucGFydGljaXBhbnRJZCAhPT0gcGFydGljaXBhbnRJZCB8fCAocmVzSW5mbz8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiAhcmVzSW5mbz8uaXNBY2NlcHRDYWxsKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGlmIChvdXJOdW1iZXJJbmZvPy5pZCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZWRQYXJ0aWNpcGFudExpc3QodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdFtpXT8ucGFydGljaXBhbnRzKTtcclxuICAgICAgICAgICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdFtpXS5wYXJ0aWNpcGFudHMuZm9yRWFjaChhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzPy5ob3N0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3RudW1iZXIgPSByZXM7XHJcbiAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICBpZihvdXJOdW1iZXJJbmZvPy5pc0NvbmZlcmVuY2UgfHwgKHRoaXMuaG9zdG51bWJlcj8uaXNDb25mZXJlbmNlICYmIHRoaXMuaG9zdG51bWJlcj8uY29uZmVyZW5jZUlkID09IHJlcz8uY29uZmVyZW5jZUlkKSB8fCBjYWxsSW5mbz8ucGFydGljaXBhbnRzPy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ29uZmVyZW5jZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhY3Q6IGFueSA9IHt9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250YWN0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRhY3QgPSB0aGlzLmNvbnRhY3RzLmZpbmQoKHJlc0RhdGEpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzRGF0YT8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlciA9PSAocmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyByZXM/LmZyb20gOiByZXM/LnRvKVxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2FsbExpc3Q/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IGl0ZW0/LmlkID09IHJlcz8uaWQpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEgJiYgIXJlcy5pc0xlZnQgJiYgcmVzPy5zdGF0dXMgIT0gJ25vLWFuc3dlcicgJiYgcmVzPy5zdGF0dXMgIT0gJ2NhbmNlbGVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgLi4ucmVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZnJvbU5hbWU6IHRoaXMuZ2V0TmFtZShyZXM/LmZyb20pIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdG9OYW1lOiAgdGhpcy5nZXROYW1lKHJlcz8udG8pIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaW1nOiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IChyZXM/LmZyb21JbWFnZSB8fCByZXM/LmltZykgIDogcmVzPy50b0ltYWdlIHx8IGNvbnRhY3Q/LmltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIixcclxuICAgICAgICAgICAgICAgICAgICAgIGlzSG9sZDogcmVzPy5pc0hvbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0NvbmZlcmVuY2VIb2xkOiB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGggPiAxID8gb3VyTnVtYmVySW5mbz8uaXNIb2xkIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc05vdGlmaWNhdGlvbjogY2FsbEluZm8/Ll9pc05vdGlmaWNhdGlvbiAmJiAhdGhpcy5nZXRTdGF0dXMocmVzKSAmJiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzTXV0ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0NvbmZlcmVuY2U6IHRoaXMuaXNDb25mZXJlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY2NlcHRDYWxsOiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHRoaXMuZ2V0U3RhdHVzKHJlcykgOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZGlhbDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHBob25lOiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHJlcz8uZnJvbSA6IHJlcz8udG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsTGFiZWw6IGNhbGxJbmZvPy5jYWxsTGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkOiByZXM/LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29uZmVyZW5jZVNpZDogY2FsbEluZm8/LmNvbmZlcmVuY2VTaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXM/Lm5hbWUgfHwgcmVzPy5mcm9tTmFtZSB8fCByZXM/LnRvTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IHRoaXMuZ2V0VGltZURpZmZlcmVuY2UocmVzPy5qb2luZWRBdCB8fCBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dDb250YWN0c1BhbmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyh0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseUZpbHRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZighdGhpcy50aW1lciB8fCB0aGlzLnRpbWVyID09ICcwMDowMCcpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFRpbWVyKG91ck51bWJlckluZm8/LmpvaW5lZEF0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggIT0gLTEgJiYgKHJlcz8uaXNMZWZ0IHx8IHJlcz8uc3RhdHVzID09ICduby1hbnN3ZXInIHx8IHJlcz8uc3RhdHVzID09ICdjYW5jZWxlZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudENhbGxMaXN0W2luZGV4XT8uaWQgPT0gdGhpcy5jdXJyZW50Q2FsbD8uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dDb250YWN0c1BhbmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyh0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcih0aGlzLmN1cnJlbnRDYWxsPy5qb2luZWRBdCk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggIT0gLTEgJiYgIXJlcz8uaXNMZWZ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRpY2lwYW50SWQgPSByZXMuaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGEgbXV0ZSB1cGRhdGUgaXMgcGVuZGluZyBmb3IgdGhpcyBwYXJ0aWNpcGFudFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTXV0ZVBlbmRpbmcgPSB0aGlzLnBlbmRpbmdNdXRlUGFydGljaXBhbnRzLmhhcyhwYXJ0aWNpcGFudElkKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlbmRlZE11dGUgPSB0aGlzLmludGVuZGVkTXV0ZVN0YXRlcy5nZXQocGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVwZGF0ZWRNdXRlOiBib29sZWFuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc011dGVQZW5kaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc2VydmVyIGFscmVhZHkgY29uZmlybWVkIG91ciBjaGFuZ2UsIGFjY2VwdCBpdCBhbmQgY2xlYXIgcGVuZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5pc011dGUgPT09IGludGVuZGVkTXV0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkTXV0ZSA9IHJlcy5pc011dGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ011dGVQYXJ0aWNpcGFudHMuZGVsZXRlKHBhcnRpY2lwYW50SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVuZGVkTXV0ZVN0YXRlcy5kZWxldGUocGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGtlZXAgdGhlIGN1cnJlbnQgbG9jYWwgdmFsdWUgKGlnbm9yZSB0aGUgc3RhbGUgc2VydmVyIHN0YXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkTXV0ZSA9IHRoaXMuY3VycmVudENhbGxMaXN0W2luZGV4XS5pc011dGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIHBlbmRpbmcgbXV0ZSDigJMgdHJ1c3QgdGhlIHNlcnZlciB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZE11dGUgPSByZXMuaXNNdXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAuLi5yZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICBmcm9tTmFtZTogdGhpcy5nZXROYW1lKHJlcz8uZnJvbSkgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0b05hbWU6ICB0aGlzLmdldE5hbWUocmVzPy50bykgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpbWc6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gKHJlcz8uZnJvbUltYWdlIHx8IHJlcz8uaW1nKSA6IHJlcz8udG9JbWFnZSB8fCBjb250YWN0Py5pbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0luY29taW5nQ2FsbDogcmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0hvbGQ6IHJlcz8uaXNIb2xkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNDb25mZXJlbmNlSG9sZDogdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoID4gMSA/IG91ck51bWJlckluZm8/LmlzSG9sZCA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNOb3RpZmljYXRpb246IGNhbGxJbmZvPy5faXNOb3RpZmljYXRpb24gJiYgIXRoaXMuZ2V0U3RhdHVzKHJlcykgJiYgcmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc011dGU6IHVwZGF0ZWRNdXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNDb25mZXJlbmNlOiB0aGlzLmlzQ29uZmVyZW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzQWNjZXB0Q2FsbDogcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHRoaXMuZ2V0U3RhdHVzKHJlcykgOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZGlhbDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHBob25lOiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHJlcz8uZnJvbSA6IHJlcz8udG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkOiByZXM/LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29uZmVyZW5jZVNpZDogY2FsbEluZm8/LmNvbmZlcmVuY2VTaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsTGFiZWw6IGNhbGxJbmZvPy5jYWxsTGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXM/Lm5hbWUgfHwgcmVzPy5mcm9tTmFtZSB8fCByZXM/LnRvTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IHRoaXMuZ2V0VGltZURpZmZlcmVuY2UocmVzPy5qb2luZWRBdCB8fCBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXJlcy5pc0xlZnQgJiYgcmVzPy5zdGF0dXMgIT0gJ25vLWFuc3dlcicgJiYgcmVzPy5zdGF0dXMgIT0gJ2NhbmNlbGVkJykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5yZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbU5hbWU6IHRoaXMuZ2V0TmFtZShyZXM/LmZyb20pIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvTmFtZTogIHRoaXMuZ2V0TmFtZShyZXM/LnRvKSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICBpbWc6IHJlcy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyAocmVzPy5mcm9tSW1hZ2UgfHwgcmVzPy5pbWcpIDogcmVzPy50b0ltYWdlIHx8IGNvbnRhY3Q/LmltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgICAgICAgICAgICAgICBpc0luY29taW5nQ2FsbDogcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIixcclxuICAgICAgICAgICAgICAgICAgICBpc0hvbGQ6IHJlcz8uaXNIb2xkLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzQ29uZmVyZW5jZUhvbGQ6IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3Q/Lmxlbmd0aCA+IDEgPyBvdXJOdW1iZXJJbmZvPy5pc0hvbGQgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBpc05vdGlmaWNhdGlvbjogY2FsbEluZm8/Ll9pc05vdGlmaWNhdGlvbiAmJiAhdGhpcy5nZXRTdGF0dXMocmVzKSAmJiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBpc011dGU6IHJlcz8uaXNNdXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzQ29uZmVyZW5jZTogdGhpcy5pc0NvbmZlcmVuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNBY2NlcHRDYWxsOiByZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gdGhpcy5nZXRTdGF0dXMocmVzKSA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlhbDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBwaG9uZTogcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHJlcz8uZnJvbSA6IHJlcz8udG8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogcmVzLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZlcmVuY2VTaWQ6IGNhbGxJbmZvPy5jb25mZXJlbmNlU2lkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxMYWJlbDogY2FsbEluZm8/LmNhbGxMYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXM/Lm5hbWUgfHwgcmVzPy5mcm9tTmFtZSB8fCByZXM/LnRvTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0aW1lOiB0aGlzLmdldFRpbWVEaWZmZXJlbmNlKHJlcz8uam9pbmVkQXQgfHwgbmV3IERhdGUoKS50b1VUQ1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSAnMDA6MDAnO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VGltZXIocmVzPy5qb2luZWRBdCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5pc0xvYWRlcnNob3cubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxOdWxsQ291bnQgPSAwO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYodGhpcy5jb25mZXJlbmNlQ2FsbE51bGxDb3VudCA+IDUgJiYgIXRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ2FsbCBlbmQgaW4gMjk5JylcclxuICAgICAgICAgICAgdGhpcy5pc1JpbmdpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzUmluZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb25mZXJlbmNlQ2FsbEhvbGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q29udGFjdHNQYW5lbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBObyBjYWxsIGluIHByb2dyZXNzOiByZXNldCB0aGUgaW5jb21pbmctbXV0ZSBzd2l0Y2ggYmFjayB0byBkZWZhdWx0IChvZmYpLlxyXG4gICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2Uuc2V0SW5jb21pbmdNdXRlZChmYWxzZSk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuaXNVbmhvbGRDb25mZXJlbmNlQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0ge31cclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1JpbmdpbmcpIHtcclxuICAgICAgICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jYWxsLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9wVGltZXIoKTtcclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsTnVsbENvdW50Kys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAvLyBSZW1vdmUgcGFydGljaXBhbnQgZGF0YSBmb3IgY29uZmVyZW5jZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBhY3RpdmUgbGlzdFxyXG4gICAgICAgIGNvbnN0IGFjdGl2ZUNvbmZlcmVuY2VJZHMgPSBuZXcgU2V0KHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uY29uZmVyZW5jZUlkKSk7XHJcbiAgICAgICAgZm9yIChjb25zdCBjb25mSWQgb2YgT2JqZWN0LmtleXModGhpcy5hbGxDb25QYXJ0aWNpcGVudExpc3QpKSB7XHJcbiAgICAgICAgICBpZiAoIWFjdGl2ZUNvbmZlcmVuY2VJZHMuaGFzKGNvbmZJZCkpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYWxsQ29uUGFydGljaXBlbnRMaXN0W2NvbmZJZF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB2YWxpZFZhbHVlcyA9IG5ldyBTZXQodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5mbGF0TWFwKChpdGVtOiBhbnkpID0+IGl0ZW0/LnBhcnRpY2lwYW50cy5tYXAoKHZhbDogYW55KSA9PiB2YWw/LmlkKSkpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IHZhbGlkVmFsdWVzLmhhcyhpdGVtPy5wYXJ0aWNpcGFudElkKSk7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRDYWxsOmFueSA9IFtdO1xyXG4gICAgICAgIHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5maW5kKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiBpdGVtPy5wYXJ0aWNpcGFudHM/LmZpbmQoKHBhcnRpY2lwYW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYoKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LmZyb20pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnICYmIHBhcnRpY2lwYW50Py5jbGllbnQpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LnRvKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiBwYXJ0aWNpcGFudD8uY2xpZW50KSkgJiYgIXBhcnRpY2lwYW50Py5pc0xlZnQgJiYgIXBhcnRpY2lwYW50Py5pc0hvbGQgJiYgIXBhcnRpY2lwYW50Py5idXNpbmVzc051bWJlcikge1xyXG4gICAgICAgICAgICAgIGN1cnJlbnRDYWxsLnB1c2gocGFydGljaXBhbnQpO1xyXG4gICAgICAgICAgICAgIHRoaXMudGltZXIgPSB0aGlzLmdldFRpbWVEaWZmZXJlbmNlKHBhcnRpY2lwYW50Py5qb2luZWRBdCB8fCBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHBhcnRpY2lwYW50Py5ob3N0KSB7XHJcbiAgICAgICAgICAgICAgaXRlbVsndGltZXInXSA9IHRoaXMuZ2V0VGltZURpZmZlcmVuY2UocGFydGljaXBhbnQ/LmpvaW5lZEF0IHx8IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py5mcm9tKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyAmJiBwYXJ0aWNpcGFudD8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py50bykgJiYgcGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgcGFydGljaXBhbnQ/LmNsaWVudCkpICYmICFwYXJ0aWNpcGFudD8uaXNMZWZ0ICYmICFwYXJ0aWNpcGFudD8uaXNIb2xkICYmICFwYXJ0aWNpcGFudD8uYnVzaW5lc3NOdW1iZXJcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gRGV0ZWN0IGRpc2Nvbm5lY3QgdnMuIGhvbGQgdHJhbnNpdGlvbiBleGFjdGx5IG9uY2UgcGVyIGV2ZW50LlxyXG4gICAgICAgIC8vIFNhbWUgcGFydGljaXBhbnQgZmlsdGVyIGFzIGdldEN1cnJlbnRDYWxsSW5mbygpICh3aXRob3V0ICFpc0hvbGQpIHRvIHN0YXkgY29uc2lzdGVudC5cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsICYmICFjdXJyZW50Q2FsbFswXT8uaXNIb2xkKSB7XHJcbiAgICAgICAgICB0aGlzLmxhc3RBY3RpdmVDb25mZXJlbmNlSWQgPSB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8uY29uZmVyZW5jZUlkO1xyXG4gICAgICAgICAgdGhpcy5wZW5kaW5nQXV0b1VuaG9sZCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXN0QWN0aXZlQ29uZmVyZW5jZUlkICYmICF0aGlzLnBlbmRpbmdBdXRvVW5ob2xkKSB7XHJcbiAgICAgICAgICBjb25zdCBsYXN0Q29uZiA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmluZCgoYzogYW55KSA9PiBjLmNvbmZlcmVuY2VJZCA9PSB0aGlzLmxhc3RBY3RpdmVDb25mZXJlbmNlSWQpO1xyXG4gICAgICAgICAgY29uc3Qgb3VyUGFydGljaXBhbnRJbkxhc3RDb25mID0gbGFzdENvbmY/LnBhcnRpY2lwYW50cz8uZmluZCgocDogYW55KSA9PlxyXG4gICAgICAgICAgICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwPy5mcm9tKSAmJiBwPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnICYmIHA/LmNsaWVudCkgfHxcclxuICAgICAgICAgICAgICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocD8udG8pICYmIHA/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgcD8uY2xpZW50ICYmICFwPy5idXNpbmVzc051bWJlcikpICYmICFwPy5pc0xlZnRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICAvLyBDb25mZXJlbmNlIGdvbmUgT1Igb3VyIHBhcnRpY2lwYW50IG5vdCBoZWxkIOKGkiB0aGUgYWN0aXZlIGNhbGwgZGlzY29ubmVjdGVkIOKGkiBxdWV1ZSBhdXRvLXVuaG9sZFxyXG4gICAgICAgICAgaWYgKCFsYXN0Q29uZiB8fCAhb3VyUGFydGljaXBhbnRJbkxhc3RDb25mPy5pc0hvbGQpIHtcclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQXV0b1VuaG9sZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LnBhcnRpY2lwYW50cy5sZW5ndGggPT0gMiAmJiB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8ucGFydGljaXBhbnRzWzBdPy5pZCkge1xyXG4gICAgICAgICAgY29uc3Qgb3duTnVtYmVycyA9IHRoaXMuZGV2aWNlTnVtYmVyTGlzdCAmJiB0aGlzLmRldmljZU51bWJlckxpc3QubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICA/IHRoaXMuZGV2aWNlTnVtYmVyTGlzdFxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICBjb25zdCBjYWxsZXJOdW1iZXIgPSB0aGlzLmNhbGxEYXRhPy5mcm9tIHx8IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uaXNDb25mZXJlbmNlSG9sZCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKG93bk51bWJlcnMpIHtcclxuICAgICAgICAgICAgICAvLyBPcmlnaW5hbCBsb2dpYyDigJMgd29ya3Mgd2hlbiB0aGUgY2FsbGVy4oCRSUQgbGlzdCBpcyBsb2FkZWRcclxuICAgICAgICAgICAgICByZXR1cm4gKHJlcz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyAmJiByZXM/LmNsaWVudCAmJiAhb3duTnVtYmVycy5pbmNsdWRlcyhyZXM/LmZyb20pKSB8fFxyXG4gICAgICAgICAgICAgICAgKHJlcz8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiByZXM/LmNsaWVudCAmJiAhb3duTnVtYmVycy5pbmNsdWRlcyhyZXM/LnRvKSAmJiAhcmVzPy5idXNpbmVzc051bWJlcikgfHxcclxuICAgICAgICAgICAgICAgICghcmVzPy5jbGllbnQgJiYgcmVzPy5pc0FjY2VwdENhbGwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIFNhZmUgZmFsbGJhY2s6IGV4Y2x1ZGUgdGhlIHBhcnRpY2lwYW50IHdob3NlIG51bWJlciBtYXRjaGVzIHRoZSBjYWxsZXIgSUQgd2UgdXNlZFxyXG4gICAgICAgICAgICAgIGNvbnN0IGlzT3duID0gKHJlcz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyAmJiByZXM/LmZyb20gPT09IGNhbGxlck51bWJlcikgfHxcclxuICAgICAgICAgICAgICAgIChyZXM/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgcmVzPy50byA9PT0gY2FsbGVyTnVtYmVyICYmICFyZXM/LmJ1c2luZXNzTnVtYmVyKTtcclxuICAgICAgICAgICAgICByZXR1cm4gIWlzT3duO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHsgLi4uc2VsZWN0ZWQsIGlzQWNjZXB0Q2FsbDogdHJ1ZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAgZWxzZSBpZiAodGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LnBhcnRpY2lwYW50cz8ubGVuZ3RoID4gMiAmJiB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8ucGFydGljaXBhbnRzWzFdPy5pc0NvbmZlcmVuY2UpIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChyZXM6IGFueSkgPT4gIXJlcz8uaXNDb25mZXJlbmNlSG9sZCk7XHJcbiAgICAgICAgICB0aGlzLmlzQ29uZmVyZW5jZSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmKHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5wYXJ0aWNpcGFudHM/Lmxlbmd0aCA9PSAxICYmIHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5wYXJ0aWNpcGFudHNbMF0/LmlkKXtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChjYWxsSW5mbzphbnkpPT4gY2FsbEluZm8/LmlkID09IHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5wYXJ0aWNpcGFudHNbMF0/LmlkKTtcclxuICAgICAgICAgIGlmKHRoaXMuY3VycmVudENhbGw/LmNsaWVudCAmJiB0aGlzLmN1cnJlbnRDYWxsPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxbJ2NsaWVudCddPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbFsnaXNBY2NlcHRDYWxsJ109IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudENhbGwsICd0aGlzLmN1cnJlbnRDYWxsIDQ2MScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZighdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGwgJiZ0aGlzLmN1cnJlbnRDYWxsICYmIHRoaXMuY3VycmVudENhbGxMaXN0Py5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZCgocmVzOiBhbnkpID0+IHJlcz8uaWQgPT0gdGhpcy5jdXJyZW50Q2FsbD8uaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsICYmICF0aGlzLmlzTmV3QWRkZWRDYWxsKSB7XHJcbiAgICAgICAgICBsZXQgY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbyA9IHRoaXMuZ2V0Q3VycmVudENhbGxJbmZvKCk7XHJcbiAgICAgICAgICBpZiAoIWN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/LmlkICYmIHRoaXMucGVuZGluZ0F1dG9VbmhvbGQpIHtcclxuICAgICAgICAgICAgLy8gU2VhcmNoIEFMTCBjb25mZXJlbmNlcyBleGNlcHQgdGhlIG9uZSB0aGF0IGp1c3QgZGlzY29ubmVjdGVkLlxyXG4gICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIGEgc2luZ2xlLWNvbmZlcmVuY2UgaG9sZCAoaW5jbHVkaW5nIGJyaWVmIGlzTGVmdCByYWNlIGNvbmRpdGlvbnMpXHJcbiAgICAgICAgICAgIC8vIGZyb20gZXZlciB0cmlnZ2VyaW5nIGFuIHVuaG9sZCDigJQgd2Ugb25seSB1bmhvbGQgYSBESUZGRVJFTlQgaGVsZCBjb25mZXJlbmNlLlxyXG4gICAgICAgICAgICBsZXQgaG9sZENhbGxJbmZvOiBhbnkgPSBudWxsO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbmYgb2YgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCkge1xyXG4gICAgICAgICAgICAgIGlmIChjb25mLmNvbmZlcmVuY2VJZCA9PSB0aGlzLmxhc3RBY3RpdmVDb25mZXJlbmNlSWQpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIGhvbGRDYWxsSW5mbyA9IGNvbmYucGFydGljaXBhbnRzLmZpbmQoKGNhbGxJbmZvOiBhbnkpID0+ICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGNhbGxJbmZvPy5mcm9tKSAmJiBjYWxsSW5mbz8uY2xpZW50KVxyXG4gICAgICAgICAgICAgICAgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhjYWxsSW5mbz8udG8pICYmIGNhbGxJbmZvPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnKSkgJiYgIWNhbGxJbmZvPy5pc0xlZnQgJiYgY2FsbEluZm8/LmlzSG9sZCAmJiAhY2FsbEluZm8/LmJ1c2luZXNzTnVtYmVyKTtcclxuICAgICAgICAgICAgICBpZiAoaG9sZENhbGxJbmZvKSBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaG9sZENhbGxJbmZvPy5pZCAmJiAhdGhpcy5pc1VuaG9sZENvbmZlcmVuY2VDYWxsKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW2hvbGRDYWxsSW5mbz8uaWRdLFxyXG4gICAgICAgICAgICAgICAgY29uZmVyZW5jZUlkOiBob2xkQ2FsbEluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgICAgIGhvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXV0ZTogaG9sZENhbGxJbmZvPy5tdXRlIHx8IGZhbHNlXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYoaG9sZEluZm8/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hvbGRJbmZvIDM4NycsIGhvbGRJbmZvKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSBob2xkQ2FsbEluZm8/LmNvbmZlcmVuY2VJZDtcclxuICAgICAgICAgICAgICB0aGlzLmlzVW5ob2xkQ29uZmVyZW5jZUNhbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdBdXRvVW5ob2xkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5sYXN0QWN0aXZlQ29uZmVyZW5jZUlkID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LmNvbmZlcmVuY2VJZCAmJiB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQpIHtcclxuICAgICAgICAgIHRoaXMudGltZXIgPSB0aGlzLmdldFRpbWVEaWZmZXJlbmNlKHRoaXMuY3VycmVudENhbGw/LmpvaW5lZEF0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRVc2VySW5mbz8ucGFydGljaXBhbnRJZCkge1xyXG4gICAgICAgICAgbGV0IHNlbGVjdGVkVXNlciA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbT8uaWQgPT0gdGhpcy5zZWxlY3RlZFVzZXJJbmZvPy5wYXJ0aWNpcGFudElkKTtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZFVzZXIgJiYgKHNlbGVjdGVkVXNlcj8uY29uZmVyZW5jZUlkID09IHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5jb25mZXJlbmNlSWQgfHwgdGhpcy5pc0NsaWNrRXhwYW5kKSkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZFVzZXIuSXNVc2VySW5mb1Nob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZihzZWxlY3RlZFVzZXIuYnVzaW5lc3NOdW1iZXIgPT0gdHJ1ZSAmJiAhc2VsZWN0ZWRVc2VyLnVzZXJJbmZvSWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUMyQ0luZm9QYW5lbChzZWxlY3RlZFVzZXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbyA9IHNlbGVjdGVkVXNlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrVGV4dEhlaWdodCgpO1xyXG4gICAgICAgICAgfSBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHJlc0luZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChpdGVtOiBhbnkpID0+ICEhaXRlbT8uYnVzaW5lc3NOdW1iZXIgJiYgdGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGl0ZW0/LnRvKSk7XHJcbiAgICAgICAgICBpZiAocmVzSW5kZXggPiAtMSAmJiAodGhpcy5jdXJyZW50Q2FsbExpc3RbcmVzSW5kZXhdPy5jb25mZXJlbmNlSWQgPT0gdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkIHx8IHRoaXMuaXNDbGlja0V4cGFuZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3RbcmVzSW5kZXhdWydJc1VzZXJJbmZvU2hvdyddID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gdGhpcy5jdXJyZW50Q2FsbExpc3RbcmVzSW5kZXhdO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrVGV4dEhlaWdodCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmN1cnJlbnRDYWxsPy5idXNpbmVzc051bWJlciAmJiB0aGlzLkMyQ29uZm9MaXN0W3RoaXMuY3VycmVudENhbGw/LnBhcnRpY2lwYW50SWRdKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsWyd1c2VySW5mb0lkJ10gPSB0aGlzLkMyQ29uZm9MaXN0W3RoaXMuY3VycmVudENhbGw/LnBhcnRpY2lwYW50SWRdO1xyXG4gICAgICAgICAgaWYoIXRoaXMuaXNDbGlja0V4cGFuZCAmJiAhdGhpcy5zZWxlY3RlZFVzZXJJbmZvICkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSB0aGlzLkMyQ29uZm9MaXN0W3RoaXMuY3VycmVudENhbGw/LnBhcnRpY2lwYW50SWRdO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZih0aGlzLmN1cnJlbnRDYWxsTGlzdFswXT8uYnVzaW5lc3NOdW1iZXIgJiYgIXRoaXMuQzJDb25mb0xpc3RbdGhpcy5jdXJyZW50Q2FsbExpc3RbMF0/LnBhcnRpY2lwYW50SWRdICYmICF0aGlzLmN1cnJlbnRDYWxsTGlzdFswXT8uaXNBY2NlcHRDYWxsKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSB0aGlzLmN1cnJlbnRDYWxsTGlzdFswXTtcclxuICAgICAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy5pc0FsbEFjY2VwdGVkID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZXZlcnkoKGNhbGw6IGFueSkgPT4gY2FsbD8uaXNBY2NlcHRDYWxsKVxyXG4gICAgICAgIGNvbnN0IHVuaXF1ZUxpc3QgPSBbXHJcbiAgICAgICAgICAuLi5uZXcgTWFwKHRoaXMuY3VycmVudENhbGxMaXN0Lm1hcChpdGVtID0+IFtpdGVtLmNvbmZlcmVuY2VJZCwgaXRlbV0pKS52YWx1ZXMoKVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxMaXN0ID0gdW5pcXVlTGlzdC5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoe1xyXG4gICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5jb25mZXJlbmNlQ2FsbExpc3QuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICBsZXQgcGFydGljaXBhbnRMaXN0ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZCgocmVzOiBhbnkpID0+IHJlcz8uY29uZmVyZW5jZUlkID09IGl0ZW0/LmNvbmZlcmVuY2VJZCAmJiByZXM/LmJ1c2luZXNzTnVtYmVyICYmICFyZXM/Lmhvc3QpO1xyXG4gICAgICAgICAgaWYocGFydGljaXBhbnRMaXN0Py5pZCkge1xyXG4gICAgICAgICAgICBpdGVtWydpc0J1c2luZXNzTnVtYmVyJ10gPSBwYXJ0aWNpcGFudExpc3Q/LmJ1c2luZXNzTnVtYmVyO1xyXG4gICAgICAgICAgICBpdGVtWydidXNpbmVzc1BhcnRpY2lwYW50SWQnXSA9IHBhcnRpY2lwYW50TGlzdD8ucGFydGljaXBhbnRJZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTsgXHJcbiAgICAgICAgdGhpcy5jb25mZXJlbmNlQ2FsbE51bGxDb3VudCA9IDA7XHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICBpZih0aGlzLmNvbmZlcmVuY2VDYWxsTnVsbENvdW50ID4gNSAmJiAhdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3Q/Lmxlbmd0aCl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJzQxMScpXHJcbiAgICAgICAgdGhpcy5pc1JpbmdpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQ29uY3VycmVudEluY29taW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYodGhpcy5jYWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmNhbGwuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB7fVxyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBpZiAodGhpcy5pc1JpbmdpbmcpIHtcclxuICAgICAgICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UucGF1c2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1JpbmdpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gZmFsc2U7XHJcbiAgICAgICAgLy8gTm8gY2FsbCBpbiBwcm9ncmVzczogcmVzZXQgdGhlIGluY29taW5nLW11dGUgc3dpdGNoIGJhY2sgdG8gZGVmYXVsdCAob2ZmKS5cclxuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2Uuc2V0SW5jb21pbmdNdXRlZChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5zdG9wVGltZXIoKTtcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb25mZXJlbmNlQ2FsbE51bGxDb3VudCArPTE7XHJcbiAgICAgICAgLy8gdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2NhbGxBY3Rpb24nXT8uY3VycmVudFZhbHVlICYmIHRoaXMuY2FsbEFjdGlvbj8udHlwZSA9PSAncmVKb2luJykge1xyXG4gICAgICB0aGlzLmRldmljZU51bWJlckxpc3QgPSB0aGlzLmNhbGxlcklkTGlzdC5tYXAoKHJlczogYW55KSA9PiByZXMubnVtYmVyKTtcclxuICAgICAgbGV0IGRhdGEgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbT8uY29uZmVyZW5jZUlkID09IHRoaXMuY2FsbEFjdGlvbj8uY29uZmVyZW5jZUlkKT8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT4gcmVzRGF0YT8uaG9zdCk7XHJcbiAgICAgIGlmKGRhdGE/LmlzTGVmdCB8fCAhZGF0YSkge1xyXG4gICAgICAgIHRoaXMucmVqb2luSG9zdCh0aGlzLmNhbGxBY3Rpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snbmV3Q2FsbENvbmZlcmVuY2UnXT8uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuQ2FsbFRvVW5zYXZlZE51bWJlcih0aGlzLm5ld0NhbGxDb25mZXJlbmNlPy5udW1iZXIsIHRydWUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyByZWpvaW5Ib3N0KGNhbGxJbmZvOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmKHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIGxldCBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvID0gdGhpcy5nZXRDdXJyZW50Q2FsbEluZm8oKTtcclxuICAgICAgICBpZiAoY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbz8uaWQpIHtcclxuICAgICAgICAgIGxldCBob2xkSW5mbzogYW55ID0gdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW2N1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/LmlkXSxcclxuICAgICAgICAgICAgY29uZmVyZW5jZUlkOiBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICAgIGhvbGQ6IHRydWUsXHJcbiAgICAgICAgICAgIG11dGU6IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/Lm11dGUgfHwgZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYoaG9sZEluZm8/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignaG9sZEluZm8gMzg3JywgaG9sZEluZm8pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHJlam9pblBhcnRpY2lwZW50SW5mbyA9IGNhbGxJbmZvPy5wYXJ0aWNpcGFudHMuZmluZCgocmVzRGF0YTogYW55KSA9PlxyXG4gICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSlcclxuICAgICAgICAgICYmIHJlc0RhdGE/LmNsaWVudCAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnKSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNEYXRhPy5idXNpbmVzc051bWJlciAmJiByZXNEYXRhPy5ob3N0KSAmJiByZXNEYXRhPy5pc0xlZnQpXHJcbiAgICAgIClcclxuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IHRydWU7XHJcbiAgICAgIC8vIDHvuI/ig6MgR2V0IG5ldyB0b2tlbiBmb3Igc2FtZSBjb25mZXJlbmNlXHJcbiAgICAgIGNvbnN0IHRva2VuRGF0YTogYW55ID0gYXdhaXQgdGhpcy5nZXRPdXRnb2luZ0NhbGxUb2tlbihjYWxsSW5mbz8uY29uZmVyZW5jZUlkKTtcclxuICAgICAgLy8gMu+4j+KDoyBSZWNvbm5lY3QgZGV2aWNlXHJcbiAgICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHtcclxuICAgICAgICBjb2RlY1ByZWZlcmVuY2VzOiBbJ29wdXMnLCAncGNtdSddLFxyXG4gICAgICAgIGNsb3NlUHJvdGVjdGlvbjogdHJ1ZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5kZXZpY2UgPSBuZXcgRGV2aWNlKHRva2VuRGF0YS50b2tlbi52YWx1ZSwgb3B0aW9ucyk7XHJcblxyXG4gICAgICB0aGlzLmNhbGwgPSBhd2FpdCB0aGlzLmRldmljZS5jb25uZWN0KHtcclxuICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgIEZyb206IHJlam9pblBhcnRpY2lwZW50SW5mby5mcm9tLFxyXG4gICAgICAgICAgVG86IHJlam9pblBhcnRpY2lwZW50SW5mby50byxcclxuICAgICAgICAgIEVudjogZW52aXJvbm1lbnQuYWJiLFxyXG4gICAgICAgICAgVG9rZW46IHRva2VuRGF0YS50b2tlbi5pZCxcclxuICAgICAgICAgIEV4dDogcmVqb2luUGFydGljaXBlbnRJbmZvLmV4dE51bSxcclxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogcmVqb2luUGFydGljaXBlbnRJbmZvPy5jb25mZXJlbmNlSWRcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJ0Y0NvbnN0cmFpbnRzOiB7IGF1ZGlvOiB7IGRldmljZUlkOiAnZGVmYXVsdCcgfSB9LFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMudHdpbGlvU2VydmljZS5jYWxsID0gdGhpcy5jYWxsO1xyXG4gICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgYWRkQ2xpZW50UGFydGljaXBhbnRSZXMgPSB0aGlzLmFkZENsaWVudFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgICAgICBmcm9tOiByZWpvaW5QYXJ0aWNpcGVudEluZm8uZnJvbSxcclxuICAgICAgICAgICAgICByb3V0ZTogXCJPVVRHT0lOR1wiLFxyXG4gICAgICAgICAgICAgIHBhcnRpY2lwYW50TnVtYmVyOiByZWpvaW5QYXJ0aWNpcGVudEluZm8/LnRvLFxyXG4gICAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogcmVqb2luUGFydGljaXBlbnRJbmZvPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgcHJveHk6ICcnLFxyXG4gICAgICAgICAgICAgIGNvdW50cnljb2RlOiAnJyxcclxuICAgICAgICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICAgICAgICBjbGllbnRTaWQ6IHRoaXMuY2FsbD8ucGFyYW1ldGVyc1snQ2FsbFNpZCddLFxyXG4gICAgICAgICAgICAgIHJlY29yZElkOiByZWpvaW5QYXJ0aWNpcGVudEluZm8/LmlkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSByZWpvaW5QYXJ0aWNpcGVudEluZm8/LmNvbmZlcmVuY2VJZDtcclxuICAgICAgICAgICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKCk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBhZGRDbGllbnRQYXJ0aWNpcGFudDonLCBlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdSZWpvaW4gZmFpbGVkJywgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWFwVXNlckluZm8ocGFydGljaXBhbnRJbmZvOiBhbnksIGNhbGxlckluZm86IGFueSkge1xyXG4gICAgcGFydGljaXBhbnRJbmZvWydlbWFpbCddID0gY2FsbGVySW5mby5lbWFpbDtcclxuICAgICAgcGFydGljaXBhbnRJbmZvWyduYW1lJ10gPSBjYWxsZXJJbmZvLm5hbWU7XHJcbiAgICAgIHBhcnRpY2lwYW50SW5mb1snaW1hZ2UnXSA9IGNhbGxlckluZm8uaW1hZ2U7XHJcbiAgICAgIHBhcnRpY2lwYW50SW5mb1snZXh0ZW5zaW9uJ10gPSBjYWxsZXJJbmZvLmV4dGVuc2lvbjtcclxuICAgICAgcGFydGljaXBhbnRJbmZvWyd1c2VySW5mb0lkJ10gPSBjYWxsZXJJbmZvLmlkO1xyXG4gICAgICBwYXJ0aWNpcGFudEluZm9bJ21lc3NhZ2UnXSA9IGNhbGxlckluZm8ubWVzc2FnZTtcclxuICAgICAgcGFydGljaXBhbnRJbmZvIFsnbm90ZSddID0gY2FsbGVySW5mby5ub3RlO1xyXG4gICAgICBwYXJ0aWNpcGFudEluZm9bJ251bWJlciddID0gY2FsbGVySW5mby5udW1iZXI7XHJcbiAgICAgIHBhcnRpY2lwYW50SW5mb1sncG9pbnROYW1lJ10gPSBjYWxsZXJJbmZvLnBvaW50TmFtZTtcclxuICAgICAgcGFydGljaXBhbnRJbmZvWydzb2Z0cGhvbmVUd2lsaW9BdXRoSWQnXSA9IGNhbGxlckluZm8uc29mdHBob25lVHdpbGlvQXV0aElkO1xyXG4gICAgICBwYXJ0aWNpcGFudEluZm9bJ3NvdXJjZU5hbWUnXSA9IGNhbGxlckluZm8uc291cmNlTmFtZTtcclxuICAgICAgcGFydGljaXBhbnRJbmZvWydzdWJqZWN0J10gPSBjYWxsZXJJbmZvLnN1YmplY3Q7XHJcbiAgICAgIHJldHVybiB7Li4ucGFydGljaXBhbnRJbmZvfTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZWRQYXJ0aWNpcGFudExpc3QocGFydGljaXBhbnQ6YW55KSB7XHJcbiAgICBpZihwYXJ0aWNpcGFudD8ubGVuZ3RoKXtcclxuICAgICAgdGhpcy5hbGxDb25QYXJ0aWNpcGVudExpc3RbcGFydGljaXBhbnRbMF0/LmNvbmZlcmVuY2VJZF0gPSBwYXJ0aWNpcGFudDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmFsbENvblBhcnRpY2lwZW50TGlzdFtwYXJ0aWNpcGFudFswXT8uY29uZmVyZW5jZUlkXTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCAmJiAhIXRoaXMuYWxsQ29uUGFydGljaXBlbnRMaXN0Py5bdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0XT8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucGFydGljaXBhbnRMaXN0SW5kbyh0aGlzLmFsbENvblBhcnRpY2lwZW50TGlzdFt0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3RdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5jb25mZXJlbmNlSWQ7XHJcbiAgICAgIHRoaXMucGFydGljaXBhbnRMaXN0SW5kbygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcGFydGljaXBhbnRMaXN0SW5kbyhwYXJ0aWNpcGFudHM/OiBhbnkpIHtcclxuICAgIGlmICghcGFydGljaXBhbnRzPy5sZW5ndGgpIHtcclxuICAgICAgaWYgKHRoaXMuYWxsUGFydGljaXBlbnRMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgcGFydGljaXBhbnRzLm1hcChhc3luYyAocDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZnJvbU5hbWUgPSBhd2FpdCB0aGlzLmdldE5hbWUocC5mcm9tKTtcclxuICAgICAgICBjb25zdCB0b05hbWUgPSBhd2FpdCB0aGlzLmdldE5hbWUocC50byk7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ucCwgZnJvbU5hbWU6IGZyb21OYW1lIHx8IHAuZnJvbU5hbWUsIHRvTmFtZTogdG9OYW1lIHx8IHAudG9OYW1lIH07XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEJ1aWxkIGEgbG9va3VwIG1hcCBmcm9tIHRoZSBjdXJyZW50IHJlbmRlcmVkIGxpc3Qgc28gd2UgY2FuIHJldXNlIHRoZSBzYW1lXHJcbiAgICAvLyBvYmplY3QgcmVmZXJlbmNlIGZvciBwYXJ0aWNpcGFudHMgd2hvc2UgZGF0YSBoYXNuJ3QgY2hhbmdlZC5cclxuICAgIC8vIEFuZ3VsYXIncyAqbmdGb3IgdXNlcyBvYmplY3QgaWRlbnRpdHkgKD09PSkgdG8gZGVjaWRlIHdoZXRoZXIgdG8gcmUtcmVuZGVyIGEgcm93O1xyXG4gICAgLy8ga2VlcGluZyB0aGUgc2FtZSByZWZlcmVuY2UgcHJldmVudHMgRE9NIGRlc3RydWN0aW9uL3JlY3JlYXRpb24gYW5kIGVsaW1pbmF0ZXMgZmxpY2tlcmluZy5cclxuICAgIGNvbnN0IGV4aXN0aW5nTWFwID0gbmV3IE1hcDxhbnksIGFueT4oXHJcbiAgICAgICh0aGlzLmFsbFBhcnRpY2lwZW50TGlzdCB8fCBbXSkubWFwKChwOiBhbnkpID0+IFtwLmlkLCBwXSlcclxuICAgICk7XHJcblxyXG4gICAgbGV0IGFueUNoYW5nZSA9IHJlc29sdmVkLmxlbmd0aCAhPT0gKHRoaXMuYWxsUGFydGljaXBlbnRMaXN0Py5sZW5ndGggfHwgMCk7XHJcblxyXG4gICAgY29uc3QgbWVyZ2VkOiBhbnlbXSA9IHJlc29sdmVkLm1hcCgobmV3UDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gZXhpc3RpbmdNYXAuZ2V0KG5ld1AuaWQpO1xyXG4gICAgICBpZiAoIWV4aXN0aW5nKSB7XHJcbiAgICAgICAgYW55Q2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gbmV3UDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaXNNdXRlUGVuZGluZyA9IHRoaXMucGVuZGluZ011dGVQYXJ0aWNpcGFudHMuaGFzKG5ld1AuaWQpO1xyXG4gICAgICBjb25zdCBpbnRlbmRlZE11dGUgPSB0aGlzLmludGVuZGVkTXV0ZVN0YXRlcy5nZXQobmV3UC5pZCk7XHJcbiAgICAgIGlmIChpc011dGVQZW5kaW5nICYmIGludGVuZGVkTXV0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKG5ld1AuaXNNdXRlID09PSBpbnRlbmRlZE11dGUpIHtcclxuICAgICAgICAgIHRoaXMucGVuZGluZ011dGVQYXJ0aWNpcGFudHMuZGVsZXRlKG5ld1AuaWQpO1xyXG4gICAgICAgICAgdGhpcy5pbnRlbmRlZE11dGVTdGF0ZXMuZGVsZXRlKG5ld1AuaWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuZXdQID0geyAuLi5uZXdQLCBpc011dGU6IGV4aXN0aW5nLmlzTXV0ZSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY2hhbmdlZCA9IE9iamVjdC5rZXlzKG5ld1ApLnNvbWUoayA9PiBleGlzdGluZ1trXSAhPT0gbmV3UFtrXSk7XHJcbiAgICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgICAgYW55Q2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4geyAuLi5leGlzdGluZywgLi4ubmV3UCB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBleGlzdGluZztcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChhbnlDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbmZOYW1lID0gdGhpcy5jb25mZXJlbmNlQ2FsbExpc3QuZmluZCgocmVzOiBhbnkpID0+IHJlcz8uY29uZmVyZW5jZUlkID09IHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCk/LmNhbGxMYWJlbCB8fCAnJztcclxuICAgICAgdGhpcy5hbGxQYXJ0aWNpcGVudExpc3QgPSBtZXJnZWQ7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSBbLi4ubWVyZ2VkXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dDYWxsaW5nVG9hc3QobnVtYmVyOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY2FsbE51bWJlclRvYXN0ID0ge1xyXG4gICAgICBzaG93OiB0cnVlLFxyXG4gICAgICB0eXBlOiAnYWxlcnQtc3VjY2VzcycsXHJcbiAgICAgIG51bWJlcjogbnVtYmVyLFxyXG4gICAgICBkaXNwbGF5TnVtOiBudW1iZXJcclxuICAgIH07XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LnNob3cgPSBmYWxzZTtcclxuICAgIH0sIDcwMDApO1xyXG4gIH1cclxuICBnZXRTdGF0dXMocmVzOiBhbnkpIHtcclxuICAgIGlmIChyZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIikge1xyXG4gICAgICByZXR1cm4gcmVzPy5jYWxsU3RhdHVzID09ICdyaW5naW5nJyA/IGZhbHNlIDogIXJlcz8uaXNMZWZ0XHJcbiAgICB9IGVsc2UgaWYocmVzPy5kaXJlY3Rpb24gPT0gXCJvdXRnb2luZy1jYWxsXCIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBHZXRDb250YWN0c0xpc3QoKSB7XHJcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB8fCAnJztcclxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5yZWFkQ29udGFjdHModG9rZW4pLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMucGhvbmVCb29rKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbnRhY3RzID0gcmVzLnBob25lQm9vaztcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gcmVzLnBob25lQm9vaztcclxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzKSkge1xyXG4gICAgICAgICAgdGhpcy5jb250YWN0cyA9IHJlcztcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gcmVzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNvbnRhY3RzID0gW107XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjb250YWN0czonLCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5jb250YWN0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gW107XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIGFkZFJlczogYW55O1xyXG4gIGFzeW5jIHN0YXJ0Q2FsbChjYWxsRGF0YTogYW55LCBpc05ld0NvbmZlcmVuY2U/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jdXJyZW50Q2FsbExpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5zZXRJbmNvbWluZ011dGVkKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICBjaGFubmVsSWQ6IGVudmlyb25tZW50LmNoYW5uZWxJZCxcclxuICAgICAgICB1c2VySWQ6IHRoaXMudXNlcklkIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcclxuICAgICAgICB0bzogY2FsbERhdGEucGhvbmUsXHJcbiAgICAgICAgZnJvbU51bWJlcjogY2FsbERhdGEuZnJvbSxcclxuICAgICAgICBzY29wZTogJ2xvY2FsJyxcclxuICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICBmaXJzdG5hbWU6IG51bGwsXHJcbiAgICAgICAgbGFzdG5hbWU6IG51bGwsXHJcbiAgICAgICAgY291bnRyeWNvZGU6IG51bGwsXHJcbiAgICAgICAgbnVtYmVyOiBudWxsLFxyXG4gICAgICAgIG51bW90cDogbnVsbCxcclxuICAgICAgICBleHRlbnNpb246IG51bGwsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuY3VycmVudENhbGwgPSB7XHJcbiAgICAgICAgYnVzaW5lc3NOdW1iZXI6IGZhbHNlLFxyXG4gICAgICAgIGNhbGxTaWQ6ICcnLFxyXG4gICAgICAgIGNhbGxTdGF0dXM6ICcnLFxyXG4gICAgICAgIGNvbmZlcmVuY2VJZDogJycsXHJcbiAgICAgICAgZGlhbDogdHJ1ZSxcclxuICAgICAgICBkaXJlY3Rpb246ICdvdXRnb2luZy1jYWxsJyxcclxuICAgICAgICBmb3J3YXJkZWRUbzogJycsXHJcbiAgICAgICAgZnJvbTogY2FsbERhdGEuZnJvbSxcclxuICAgICAgICBpZDogJ3l5dWdnaGpiJyxcclxuICAgICAgICBpbWc6IGNhbGxEYXRhLmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgaXNBY2NlcHRDYWxsOiB0cnVlLFxyXG4gICAgICAgIGlzQ29uZmVyZW5jZTogZmFsc2UsXHJcbiAgICAgICAgaXNIb2xkOiBmYWxzZSxcclxuICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXHJcbiAgICAgICAgaXNMZWZ0OiBmYWxzZSxcclxuICAgICAgICBpc011dGU6IGZhbHNlLFxyXG4gICAgICAgIGpvaW5lZEF0OiAnJyxcclxuICAgICAgICBuYW1lOiBjYWxsRGF0YT8ubmFtZSB8fCAnJyxcclxuICAgICAgICBwYXJ0aWNpcGFudElkOiAnJyxcclxuICAgICAgICBwaG9uZTogY2FsbERhdGE/LnBob25lIHx8ICcnLFxyXG4gICAgICAgIHJvbGU6ICdjYWxsZWUnLFxyXG4gICAgICAgIHN0YXR1czogJycsXHJcbiAgICAgICAgdGltZTogJycsXHJcbiAgICAgICAgdG86IGNhbGxEYXRhPy5waG9uZSB8fCAnJyxcclxuICAgICAgICB0b05hbWU6IGNhbGxEYXRhPy5uYW1lIHx8ICcnLFxyXG4gICAgICAgIHVzZXJJZDogdGhpcy51c2VySWQgfHwgY2FsbERhdGE/LnVzZXJJZFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmluaXRpYXRlQ2FsbChwYXlsb2FkKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzQ2FsbENhbmNlbGxlZCkge1xyXG4gICAgICAgIHRoaXMudW5ob2xkUGVuZGluZ0NvbmZlcmVuY2UoKTtcclxuICAgICAgICB0aGlzLmlzQ2FsbENhbmNlbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb25mZXJlbmNlSWQgPSByZXNwb25zZT8uY2FsbGF1dGg/LmlkO1xyXG4gICAgICB0aGlzLmlzQ2FsbENhbmNlbGxlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgIHRoaXMucGVuZGluZ05ld0NhbGxIZWxkUGFydGljaXBhbnQgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IHsgaWQ6IGNhbGxBdXRoSWQsIHJlY29yZENhbGwsICB0b2tlbkRhdGF9ID0gYXdhaXQgdGhpcy5nZXRDYWxsQXV0aElkKHJlc3BvbnNlKTtcclxuICAgICAgICB0aGlzLnJlY29yZENhbGwgPSByZWNvcmRDYWxsOyAvLyBTdG9yZSB0aGUgcmVjb3JkQ2FsbCB2YWx1ZVxyXG4gICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdFRvRGV2aWNlKGNhbGxBdXRoSWQsIGNhbGxEYXRhLCB0b2tlbkRhdGEpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucG9sbENhbGxTdGF0dXMoY2FsbEF1dGhJZCk7XHJcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgYWRkQ2xpZW50UGFydGljaXBhbnRSZXM6YW55ID0gdGhpcy5hZGRDbGllbnRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgICAgZnJvbTogY2FsbERhdGE/LmZyb20sXHJcbiAgICAgICAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcclxuICAgICAgICAgICAgICBwYXJ0aWNpcGFudE51bWJlcjogY2FsbERhdGE/LnBob25lLFxyXG4gICAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogcmVzcG9uc2U/LmNhbGxhdXRoPy5pZCxcclxuICAgICAgICAgICAgICB1c2VySWQ6IHRoaXMudXNlcklkIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgICBwcm94eTogJycsXHJcbiAgICAgICAgICAgICAgY291bnRyeWNvZGU6ICcnLFxyXG4gICAgICAgICAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICAgICAgICAgIGNsaWVudFNpZDogdGhpcy5jYWxsPy5wYXJhbWV0ZXJzWydDYWxsU2lkJ11cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIGlmKGFkZENsaWVudFBhcnRpY2lwYW50UmVzPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICAgIC8vICAgc3dhbChcIkVycm9yXCIsIGFkZENsaWVudFBhcnRpY2lwYW50UmVzPy5tZXNzYWdlLmpvaW4oXCI8YnIvPlwiKSwgXCJlcnJvclwiKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICB0aGlzLmFkZFJlcyA9IGF3YWl0IHRoaXMuYWRkUGFydGljaXBhbnRUb0NhbGwoe1xyXG4gICAgICAgICAgICAgIGZyb206IGNhbGxEYXRhPy5mcm9tLFxyXG4gICAgICAgICAgICAgIHJvdXRlOiBcIk9VVEdPSU5HXCIsXHJcbiAgICAgICAgICAgICAgcGFydGljaXBhbnROdW1iZXI6IGNhbGxEYXRhPy5waG9uZSxcclxuICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHJlc3BvbnNlPy5jYWxsYXV0aD8uaWQsXHJcbiAgICAgICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgcHJveHk6ICcnLFxyXG4gICAgICAgICAgICAgIGNvdW50cnljb2RlOiAnJyxcclxuICAgICAgICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmKGlzTmV3Q29uZmVyZW5jZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IHJlc3BvbnNlPy5jYWxsYXV0aD8uaWQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNOZXdBZGRlZENhbGwgPSBmYWxzZVxyXG4gICAgICAgICAgICBpZih0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmlzTG9hZGVyc2hvdy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVyc2hvd24uZW1pdChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0ID0gcmVzcG9uc2U/LmNhbGxhdXRoPy5pZDtcclxuICAgICAgICAgICAgLy8gYXdhaXQgdGhpcy5nZXRBbGxQYXJ0aWNpcGFudHMocmVzcG9uc2U/LmNhbGxhdXRoPy5pZCk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFkZGluZyBpbml0aWFsIHBhcnRpY2lwYW50OicsIGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDE1MDApXHJcbiAgICAgICAgLy8gUG9sbCB0aGUgc3RhdHVzIGZvciAzMC00NSBzZWNvbmRzXHJcbiAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2Uuc3RhdHVzID09IDIwMSkge1xyXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5pc0xvYWRlcnNob3cubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRlcnNob3duLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuaXNOZXdBZGRlZENhbGwgPSBmYWxzZTtcclxuICAgICAgICBzd2FsKFwiRXJyb3JcIiwgcmVzcG9uc2UubWVzc2FnZS5qb2luKFwiPGJyLz5cIiksIFwiZXJyb3JcIik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zaG93TmV3Q2FsbExvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChpc05ld0NvbmZlcmVuY2UpIHtcclxuICAgICAgICAgIHRoaXMudW5ob2xkUGVuZGluZ0NvbmZlcmVuY2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5lbmRDYWxsKCk7IC8vIHJlZ3VsYXIgY2FsbCBmYWlsdXJlIOKAkyBkaXNjb25uZWN0IGV2ZXJ5dGhpbmdcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgICB0aGlzLmVuZENhbGwoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25NdXRlVXNlcihjOiBhbnkpIHtcclxuICAgIGNvbnN0IHBhcnRpY2lwYW50SWQgPSBjLmlkO1xyXG4gICAgY29uc3QgbmV3TXV0ZVN0YXRlID0gIWMuaXNNdXRlO1xyXG5cclxuICAgIFxyXG4gICAgdGhpcy5wZW5kaW5nTXV0ZVBhcnRpY2lwYW50cy5hZGQocGFydGljaXBhbnRJZCk7XHJcbiAgICB0aGlzLmludGVuZGVkTXV0ZVN0YXRlcy5zZXQocGFydGljaXBhbnRJZCwgbmV3TXV0ZVN0YXRlKTtcclxuXHJcbiAgICBjLmlzTXV0ZSA9IG5ld011dGVTdGF0ZTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGxldCBtdXRlSW5mbzogYW55ID0gYXdhaXQgdGhpcy5vbk11dGVQYXJ0aWNpcGFudCh7XHJcbiAgICAgIHBhcnRpY2lwYW50SWQ6IFtwYXJ0aWNpcGFudElkXSxcclxuICAgICAgY29uZmVyZW5jZUlkOiBjPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgIGhvbGQ6IGMuaXNIb2xkLFxyXG4gICAgICBtdXRlOiBuZXdNdXRlU3RhdGVcclxuICAgIH0pO1xyXG4gICAgaWYobXV0ZUluZm8/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgc3dhbChcIkVycm9yXCIsIG11dGVJbmZvPy5tZXNzYWdlPy5qb2luPy4oXCI8YnIvPlwiKSB8fCAnSW50ZXJuYWwgU2VydmVyIEVycm9yJywgXCJlcnJvclwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvL3JlbW92ZSBwZW5kaW5nIGd1YXJkIGFmdGVyIDUgc2Vjb25kcyBpZiBubyBjb25maXJtYXRpb25cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5wZW5kaW5nTXV0ZVBhcnRpY2lwYW50cy5oYXMocGFydGljaXBhbnRJZCkpIHtcclxuICAgICAgICB0aGlzLnBlbmRpbmdNdXRlUGFydGljaXBhbnRzLmRlbGV0ZShwYXJ0aWNpcGFudElkKTtcclxuICAgICAgICB0aGlzLmludGVuZGVkTXV0ZVN0YXRlcy5kZWxldGUocGFydGljaXBhbnRJZCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDUwMDApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Ib2xkQ2FsbChjOiBhbnkpIHtcclxuICAgIHRoaXMuaXNIb2xkQnRuRGlzYWJsZSA9IHRydWU7XHJcbiAgICBpZigoKGM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgJiYgdGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGM/LmZyb20pKSB8fCAoYz8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiB0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoYz8udG8pKSkgJiYgYz8uY2xpZW50ICYmICFjPy5idXNpbmVzc051bWJlcikge1xyXG4gICAgICBsZXQgdW5Ib2xkSW5mbzogYW55ID0ge307XHJcbiAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZm9yRWFjaChhc3luYyAoY2FsbDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgaWYgKGNhbGw/LmNvbmZlcmVuY2VJZCA9PSBjPy5jb25mZXJlbmNlSWQpIHtcclxuICAgICAgICAgIGxldCBwYXJ0aWNpcGFudEluZm8gPSBjYWxsLnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+XHJcbiAgICAgICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pKSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNEYXRhPy5idXNpbmVzc051bWJlcikpICYmICFyZXNEYXRhPy5pc0xlZnQgJiYgcmVzRGF0YT8uY2xpZW50XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBpZiAocGFydGljaXBhbnRJbmZvPy5pZCApIHtcclxuICAgICAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtwYXJ0aWNpcGFudEluZm8/LmlkXSxcclxuICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHBhcnRpY2lwYW50SW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICAgIGhvbGQ6ICFwYXJ0aWNpcGFudEluZm8/LmlzSG9sZCxcclxuICAgICAgICAgICAgICBtdXRlOiBwYXJ0aWNpcGFudEluZm8/Lm11dGUgfHwgZmFsc2VcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmKGhvbGRJbmZvPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgc3dhbChcIkVycm9yXCIsIGhvbGRJbmZvPy5tZXNzYWdlPy5qb2luPy4oXCI8YnIvPlwiKSB8fCAnSW50ZXJuYWwgU2VydmVyIEVycm9yJywgXCJlcnJvclwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZihjPy5pc0hvbGQpIHtcclxuICAgICAgICAgICAgdW5Ib2xkSW5mbyA9IGNhbGwucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICAgICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy5mcm9tKSkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiAhcmVzRGF0YT8uYnVzaW5lc3NOdW1iZXIpKSAmJiAhcmVzRGF0YT8uaXNMZWZ0ICYmICFyZXNEYXRhPy5pc0hvbGQgJiYgcmVzRGF0YT8uY2xpZW50XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB1bkhvbGRJbmZvID0gY2FsbC5wYXJ0aWNpcGFudHMuZmluZCgocmVzRGF0YTogYW55KSA9PlxyXG4gICAgICAgICAgICAvLyAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pKSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNEYXRhPy5idXNpbmVzc051bWJlcikpICYmICFyZXNEYXRhPy5pc0xlZnQgJiYgcmVzRGF0YT8uaXNIb2xkICYmIHJlc0RhdGE/LmNsaWVudFxyXG4gICAgICAgICAgICAvLyApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGluZGV4ID09IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3Q/Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCd1bkhvbGRJbmZvJywgdW5Ib2xkSW5mbylcclxuICAgICAgICAgIGlmICh1bkhvbGRJbmZvPy5pZCkge1xyXG4gICAgICAgICAgICBsZXQgaG9sZEluZm86IGFueSA9IGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW3VuSG9sZEluZm8/LmlkXSxcclxuICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHVuSG9sZEluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgICBob2xkOiAhdW5Ib2xkSW5mbz8uaXNIb2xkLFxyXG4gICAgICAgICAgICAgIG11dGU6IHVuSG9sZEluZm8/Lm11dGUgfHwgZmFsc2VcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmKGhvbGRJbmZvPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignaG9sZEluZm8gODA1JywgaG9sZEluZm8pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pc0hvbGRCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSG9sZEJ0bkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgIHBhcnRpY2lwYW50SWQ6IFtjLmlkXSxcclxuICAgICAgICBjb25mZXJlbmNlSWQ6IGM/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICBob2xkOiAhYy5pc0hvbGQsXHJcbiAgICAgICAgbXV0ZTogYz8ubXV0ZSB8fCBmYWxzZVxyXG4gICAgICB9KTtcclxuICAgICAgaWYoaG9sZEluZm8/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdob2xkSW5mbyA4MTknLCBob2xkSW5mbylcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzSG9sZEJ0bkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgYy5pc0hvbGQgPSAhYy5pc0hvbGQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSBjPy5jb25mZXJlbmNlSWQ7XHJcbiAgICAvLyBhd2FpdCB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyhjPy5jb25mZXJlbmNlSWQpO1xyXG4gIH1cclxuICBhc3luYyBvbkVuZENhbGwoYzogYW55LCBpc0FsbENhbGxFbmQ/OiBib29sZWFuLCBpc0NvbnRlY3Q/OiBib29sZWFuKSB7XHJcbiAgICBsZXQgcGFydGljaXBhbnRJZCA9IGlzQWxsQ2FsbEVuZCA/ICdhbGwnIDogYy5wYXJ0aWNpcGFudElkIHx8IGM/LmlkO1xyXG4gICAgY29uc3QgY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbyA9IHRoaXMuZ2V0Q3VycmVudENhbGxJbmZvKCk7XHJcbiAgICBjb25zdCBwYXJ0aWNpcGFudExpc3QgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZpbmQoKGNhbGxJbmZvOmFueSkgPT4gY2FsbEluZm8/LmNvbmZlcmVuY2VJZCA9PSBjPy5jb25mZXJlbmNlSWQpLnBhcnRpY2lwYW50cy5maWx0ZXIoKHJlc0RhdGE6IGFueSkgPT4gIXJlc0RhdGE/LmlzTGVmdCk7XHJcbiAgICBpZihwYXJ0aWNpcGFudExpc3Q/Lmxlbmd0aCA8PSAyICYmICFpc0NvbnRlY3QpIHtcclxuICAgICAgcGFydGljaXBhbnRJZCA9ICdhbGwnO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoID09IDIpIHtcclxuICAgICAgdGhpcy5wZW5kaW5nQXV0b1VuaG9sZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBsZXQgY29uZmVyZW5jZUlkID0gYy5jb25mZXJlbmNlSWQgfHwgY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbz8uY29uZmVyZW5jZUlkO1xyXG4gICAgbGV0IHJlczogYW55ID0gYXdhaXQgdGhpcy5nZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZCwgY29uZmVyZW5jZUlkKTtcclxuICAgIGlmIChyZXM/LnN0YXR1cyA9PSAyMDEgJiYgcmVzPy5tZXNzYWdlID09ICdwYXJ0aWNpcGFudCBhbHJlYWR5IGxlZnQnKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1BhcnRpY2lwYW50IGFscmVhZHkgbGVmdCcsIHJlcyk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0gZWxzZSBpZiAocmVzPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlbW92aW5nIHBhcnRpY2lwYW50JywgcmVzKTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0ID0gY29uZmVyZW5jZUlkO1xyXG4gICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGluaXRpYXRlQ2FsbChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuaW5pdGlhdGVDYWxsKHBheWxvYWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuaG9sZFBhcnRpY2lwYW50KHBheWxvYWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBhZGRQYXJ0aWNpcGFudFRvQ2FsbChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuYWRkUGFydGljaXBhbnQocGF5bG9hZCkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZENsaWVudFBhcnRpY2lwYW50KHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5hZGRDbGllbnRQYXJ0aWNpcGFudChwYXlsb2FkKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb25NdXRlUGFydGljaXBhbnQocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLm9uTXV0ZVBhcnRpY2lwYW50KHBheWxvYWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZDogYW55LCBjb25mZXJlbmNlSWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZCwgY29uZmVyZW5jZUlkKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q2FsbEF1dGhJZChyZXNwb25zZTogYW55KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpZDogcmVzcG9uc2UuY2FsbGF1dGguaWQsXHJcbiAgICAgIHJlY29yZENhbGw6IHJlc3BvbnNlLmNhbGxhdXRoLnJlY29yZENhbGwsXHJcbiAgICAgIHRva2VuRGF0YTogcmVzcG9uc2UuY2FsbGF1dGgudG9rZW5cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldE91dGdvaW5nQ2FsbFRva2VuKGNhbGxBdXRoSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDb25mZXJlbmNlQ2FsbFRva2VuKHsgYXV0aElkOiBjYWxsQXV0aElkIH0pLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjb25uZWN0VG9EZXZpY2UodG9rZW46IGFueSwgY2FsbERhdGE6IGFueSwgdG9rZW5EYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHtcclxuICAgICAgY29kZWNQcmVmZXJlbmNlczogWydvcHVzJywgJ3BjbXUnXSxcclxuICAgICAgY2xvc2VQcm90ZWN0aW9uOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmRldmljZSA9IG5ldyBEZXZpY2UodG9rZW5EYXRhLCBvcHRpb25zKTtcclxuICAgIHRoaXMuY2FsbCA9IGF3YWl0IHRoaXMuZGV2aWNlLmNvbm5lY3Qoe1xyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBGcm9tOiBjYWxsRGF0YS5mcm9tLFxyXG4gICAgICAgIFRvOiBjYWxsRGF0YS5waG9uZSxcclxuICAgICAgICBFbnY6IGVudmlyb25tZW50LmFiYixcclxuICAgICAgICBUb2tlbjogdG9rZW4sXHJcbiAgICAgICAgRXh0OiBjYWxsRGF0YS5leHROdW1cclxuICAgICAgfSxcclxuICAgICAgcnRjQ29uc3RyYWludHM6IHsgYXVkaW86IHRydWUgfSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy50d2lsaW9TZXJ2aWNlLmNhbGwgPSB0aGlzLmNhbGw7XHJcbiAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycygpIHtcclxuICAgIHRoaXMuc3RhcnRUaW1lcigpO1xyXG4gICAgdGhpcy5kZXZpY2U/Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN0b3BUaW1lcigpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYWxsPy5vbignZXJyb3InLCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3RvcFRpbWVyKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbGw/Lm9uKCdkaXNjb25uZWN0JywgKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygndGVzdC1kaXNjb25uZWN0JylcclxuICAgICAgY29uc29sZS5sb2coJzgzMicpXHJcbiAgICAgIC8vIENsZWFuIHVwIHRoaXMgY2FsbCBmcm9tIGFjY2VwdGVkQ2FsbExpc3RzIHNvIGRldmljZSByZS1pbml0IGd1YXJkIHJlc2V0c1xyXG4gICAgICBjb25zdCBkaXNjb25uZWN0ZWRTaWQgPSB0aGlzLmNhbGw/LnBhcmFtZXRlcnM/LkNhbGxTaWQ7XHJcbiAgICAgIGlmIChkaXNjb25uZWN0ZWRTaWQpIHtcclxuICAgICAgICB0aGlzLmFjY2VwdGVkQ2FsbExpc3QgPSB0aGlzLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKGMgPT4gYy5jYWxsU2lkICE9PSBkaXNjb25uZWN0ZWRTaWQpO1xyXG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0ID0gdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBkaXNjb25uZWN0ZWRTaWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMuY2FsbD8uZGlzY29ubmVjdCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYWxsPy5vbigncmluZ2luZycsICgpID0+IHtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FsbD8ub24oJ3JlamVjdCcsICgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ3Rlc3Q1JylcclxuICAgICAgdGhpcy5lbmRDYWxsKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbGw/Lm9uKCdhY2NlcHQnLCAoKSA9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd05ld0NhbGxMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSwgMjAwMCk7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZGlzYmFsZUVuZENhbGxCdG4gPSBmYWxzZTtcclxuICAgICAgLy8gRW5zdXJlIHRoZSBhY3RpdmUgb3V0Z29pbmcgY2FsbCBpcyBtYXJrZWQgYXMgYWNjZXB0ZWQgc28gdGhlIFVJIHN3aXRjaGVzIHRvIHRoZSBjb25uZWN0ZWQgdmlld1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciB1cGRhdGluZyBhY2NlcHQgc3RhdGU6JywgZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jYWxsPy5vbignbWVzc2FnZVJlY2VpdmVkJywgKG1lc3NhZ2U6IGFueSkgPT4ge1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXJ0VGltZXIoam9pbkF0Pzogc3RyaW5nKSB7XHJcbiAgICBpZiAoIWpvaW5BdCkgcmV0dXJuO1xyXG5cclxuICBjb25zdCBqb2luVGltZSA9IG5ldyBEYXRlKGpvaW5BdCkuZ2V0VGltZSgpIHx8IDA7XHJcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICBsZXQgc2Vjb25kcyA9IE1hdGguZmxvb3IoKG5vdyAtIGpvaW5UaW1lKSAvIDEwMDApO1xyXG4gICAgaWYgKHNlY29uZHMgPCAwKSB7XHJcbiAgICAgIHNlY29uZHMgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBzZWNvbmRzKys7XHJcbiAgICAgIC8vIHRoaXMudGltZXIgPSB0aGlzLmZvcm1hdFRpbWUoc2Vjb25kcyk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdG9wVGltZXIoKSB7XHJcbiAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XHJcbiAgICB0aGlzLnRpbWVyID0gJzAwOjAwJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0VGltZSh0b3RhbFNlY29uZHM6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsU2Vjb25kcyAvIDM2MDApO1xyXG4gIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh0b3RhbFNlY29uZHMgJSAzNjAwKSAvIDYwKTtcclxuICBjb25zdCBzZWNvbmRzID0gdG90YWxTZWNvbmRzICUgNjA7XHJcbiAgaWYgKGhvdXJzID4gMCkge1xyXG4gICAgcmV0dXJuIGAke3RoaXMucGFkKGhvdXJzKX06JHt0aGlzLnBhZChtaW51dGVzKX06JHt0aGlzLnBhZChzZWNvbmRzKX1gO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5wYWQobWludXRlcyl9OiR7dGhpcy5wYWQoc2Vjb25kcyl9YDtcclxuICB9XHJcbn1cclxuXHJcbiAgcHJpdmF0ZSBwYWQodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdmFsdWUgPCAxMCA/IGAwJHt2YWx1ZX1gIDogYCR7dmFsdWV9YDtcclxuICB9XHJcbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogYW55KSB7XHJcbiAgICBzd2FsKFwiRXJyb3JcIiwgZXJyb3IsIFwiZXJyb3JcIik7XHJcbiAgfVxyXG5cclxuICBlbmRDb25mZXJlbmVjZUNhbGwoY29uZj86IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbmYgPSBjb25mO1xyXG4gICAgLy8gdGhpcy5pc1VuaG9sZENvbmZlcmVuY2VDYWxsID0gdHJ1ZTtcclxuICAgIGxldCBjb25mZXJlbmNlID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8uZmluZCgocmVzOiBhbnkpID0+IHJlcz8uY29uZmVyZW5jZUlkID09IGNvbmY/LmNvbmZlcmVuY2VJZCk7XHJcbiAgICBsZXQgaG9zdE51bWJlciA9IGNvbmZlcmVuY2U/LnBhcnRpY2lwYW50cz8uZmluZCgocGFydGljaXBhbnQ6IGFueSkgPT4gcGFydGljaXBhbnQ/Lmhvc3QgJiYgIXBhcnRpY2lwYW50Py5idXNpbmVzc051bWJlcik7XHJcbiAgICBpZiAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhob3N0TnVtYmVyPy5mcm9tKSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGhvc3ROdW1iZXI/LnRvKSAmJiBob3N0TnVtYmVyPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmIGhvc3ROdW1iZXI/Lmhvc3QpKSAmJiBjb25mZXJlbmNlPy5wYXJ0aWNpcGFudHMuZmlsdGVyKChwOiBhbnkpID0+ICFwLmlzTGVmdCkubGVuZ3RoID4gMikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29uZiA9IGhvc3ROdW1iZXI7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb25mWydjb25OYW1lJ10gPSB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdC5maW5kKChyZXM6IGFueSkgPT4gcmVzPy5jb25mZXJlbmNlSWQgPT0gY29uZj8uY29uZmVyZW5jZUlkKT8uY2FsbExhYmVsIHx8ICcnO1xyXG4gICAgICB0aGlzLm9uQ2FsbERpc2Nvbm5lY3RlZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGNvbmY/LmNvbmZlcmVuY2VJZCkge1xyXG4gICAgICAgIGxldCBwYXJ0aWNpcGVudEluZm8gPSBjb25mZXJlbmNlPy5wYXJ0aWNpcGFudHM/LmZpbmQoKHBhcnRpY2lwYW50OiBhbnkpID0+ICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py5mcm9tKVxyXG4gICAgICAgICAgJiYgcGFydGljaXBhbnQ/LmNsaWVudCAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJykgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8udG8pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFwYXJ0aWNpcGFudD8uYnVzaW5lc3NOdW1iZXIpICYmICFwYXJ0aWNpcGFudD8uYnVzaW5lc3NOdW1iZXIpICYmICFwYXJ0aWNpcGFudD8uaXNMZWZ0KVxyXG4gICAgICAgIGlmIChwYXJ0aWNpcGVudEluZm8/LmlkKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pc0luTXVsdGlwbGVDb25mZXJlbmNlcygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQgPSBwYXJ0aWNpcGVudEluZm87XHJcbiAgICAgICAgICAgIHRoaXMubGVhdmVDb25mQ29uZmVyZW5jZU5hbWUgPSB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdC5maW5kKFxyXG4gICAgICAgICAgICAgIChjOiBhbnkpID0+IGMuY29uZmVyZW5jZUlkID09PSBjb25mZXJlbmNlPy5jb25mZXJlbmNlSWRcclxuICAgICAgICAgICAgKT8uY2FsbExhYmVsIHx8ICdDb25mZXJlbmNlJztcclxuICAgICAgICAgICAgdGhpcy5zaG93TGVhdmVDb25maXJtYXRpb25Nb2RhbCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub25FbmRDYWxsKHBhcnRpY2lwZW50SW5mbylcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbmRDYWxsKGZhbHNlLCBjb25mKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZW5kQ2FsbChpc0FsbENhbGxFbmQ/OiBib29sZWFuLCBjYWxsRGV0YWlsPzogYW55KSB7XHJcbiAgICAvLyB0aGlzLmlzQ29uZmVyZW5jZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGlzQWxsQ2FsbEVuZCkge1xyXG4gICAgICB0aGlzLnN0b3BUaW1lcigpO1xyXG4gICAgICB0aGlzLm9uRW5kQ2FsbCh7fSwgaXNBbGxDYWxsRW5kKTtcclxuICAgICAgaWYgKCF0aGlzLmN1cnJlbnRDYWxsTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coODk2KVxyXG4gICAgICAgIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgY3VycmVudFBhcnRpY2lwYW50ID0gdGhpcy5nZXRDdXJyZW50Q2FsbEluZm8oKSB8fCB0aGlzLmdldEN1cnJlbnRDYWxsSU93bkluZm8oY2FsbERldGFpbCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0luTXVsdGlwbGVDb25mZXJlbmNlcygpICYmIGN1cnJlbnRQYXJ0aWNpcGFudCkge1xyXG4gICAgICAgIHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQgPSBjdXJyZW50UGFydGljaXBhbnQ7XHJcbiAgICAgICAgdGhpcy5sZWF2ZUNvbmZDb25mZXJlbmNlTmFtZSA9IHRoaXMuY29uZmVyZW5jZUNhbGxMaXN0LmZpbmQoXHJcbiAgICAgICAgICAoYzogYW55KSA9PiBjLmNvbmZlcmVuY2VJZCA9PT0gY3VycmVudFBhcnRpY2lwYW50LmNvbmZlcmVuY2VJZFxyXG4gICAgICAgICk/LmNhbGxMYWJlbCB8fCAnQ3VycmVudCBDYWxsJztcclxuICAgICAgICB0aGlzLnNob3dMZWF2ZUNvbmZpcm1hdGlvbk1vZGFsID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm47IFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub25FbmRDYWxsKGN1cnJlbnRQYXJ0aWNpcGFudCwgaXNBbGxDYWxsRW5kKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGFzeW5jIHRvZ2dsZU11dGUoaXNDb25mZXJlbmNlPzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc011dGUgPSAhdGhpcy5pc011dGU7XHJcbiAgICB0aGlzLnBlbmRpbmdNdXRlVXBkYXRlID0gdHJ1ZTsgXHJcbiAgICB0aGlzLmludGVuZGVkTXV0ZVN0YXRlID0gdGhpcy5pc011dGU7XHJcbiAgICB0aGlzLmNhbGw/Lm11dGUodGhpcy5pc011dGUpO1xyXG4gICAgY29uc3QgY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbyA9IHRoaXMuZ2V0Q3VycmVudENhbGxJbmZvKCk7XHJcbiAgICB0aGlzLm9uTXV0ZVBhcnRpY2lwYW50KHtcclxuICAgICAgcGFydGljaXBhbnRJZDogW2N1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8ucGFydGljaXBhbnRJZCB8fCBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvPy5pZF0sXHJcbiAgICAgIGNvbmZlcmVuY2VJZDogY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICBob2xkOiBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvLmlzSG9sZCxcclxuICAgICAgbXV0ZTogIWN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/LmlzTXV0ZVxyXG4gICAgICAvLyBjb25mZXJlbmNlOiBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvLmlzQ29uZmVyZW5jZSB8fCBmYWxzZVxyXG4gICAgfSlcclxuICAgIHRoaXMuY3VycmVudENhbGwuaXNNdXRlID0gdGhpcy5pc011dGU7XHJcbiAgICAvLyB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyh0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VJZCk7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50Q2FsbEluZm8oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdFxyXG4gICAgICAuZmxhdE1hcCgoY2FsbEluZm86IGFueSkgPT4gY2FsbEluZm8ucGFydGljaXBhbnRzKVxyXG4gICAgICAuZmluZCgocGFydGljaXBhbnQ6IGFueSkgPT4gKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LmZyb20pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnICYmIHBhcnRpY2lwYW50Py5jbGllbnQpXHJcbiAgICAgICAgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8udG8pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmIHBhcnRpY2lwYW50Py5jbGllbnQgJiYgIXBhcnRpY2lwYW50Py5idXNpbmVzc051bWJlcikpICYmICFwYXJ0aWNpcGFudD8uaXNMZWZ0ICYmICFwYXJ0aWNpcGFudD8uaXNIb2xkKTtcclxuICB9XHJcbiAgXHJcbiAgZ2V0Q3VycmVudENhbGxJT3duSW5mbyhjYWxsPzogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdFxyXG4gICAgICAuZmxhdE1hcCgoY2FsbEluZm86IGFueSkgPT4gY2FsbEluZm8ucGFydGljaXBhbnRzKVxyXG4gICAgICAuZmluZCgocGFydGljaXBhbnQ6IGFueSkgPT4gY2FsbD8uY29uZmVyZW5jZUlkID09PSBwYXJ0aWNpcGFudD8uY29uZmVyZW5jZUlkICYmICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py5mcm9tKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyAmJiBwYXJ0aWNpcGFudD8uY2xpZW50KVxyXG4gICAgICAgIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LnRvKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiBwYXJ0aWNpcGFudD8uY2xpZW50ICYmICFwYXJ0aWNpcGFudD8uYnVzaW5lc3NOdW1iZXIpKSAmJiAhcGFydGljaXBhbnQ/LmlzTGVmdCk7XHJcbiAgfVxyXG4gIHRvZ2dsZUtleXBhZCgpIHtcclxuICAgIHRoaXMuc2hvd0tleXBhZCA9ICF0aGlzLnNob3dLZXlwYWQ7XHJcbiAgICBcclxuICAgIHRoaXMuY2FsbElucHV0ID0gJyc7XHJcbiAgICBpZiAodGhpcy5zaG93S2V5cGFkKSB7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAgIFxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbGwtaW5wdXQnKT8uZm9jdXMoKTtcclxuICAgICAgICB9LCAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFN3aXRjaCB0aGF0IHNpbGVuY2VzIChvciByZXN0b3JlcykgdGhlIGluY29taW5nIHJpbmcgd2hpbGUgYSBjYWxsIGlzIGluIHByb2dyZXNzLlxyXG4gIHRvZ2dsZU11dGVJbmNvbWluZ0NhbGwoKSB7XHJcbiAgICBjb25zdCBuZXdNdXRlZCA9ICF0aGlzLnR3aWxpb1NlcnZpY2UuaXNJbmNvbWluZ011dGVkO1xyXG4gICAgdGhpcy50d2lsaW9TZXJ2aWNlLnNldEluY29taW5nTXV0ZWQobmV3TXV0ZWQpO1xyXG4gICAgaWYgKG5ld011dGVkKSB7XHJcbiAgICAgIC8vIE11dGUgT046IHN0b3AgdGhlIGN1c3RvbSByaW5nIGltbWVkaWF0ZWx5IGZvciBhbnkgY3VycmVudGx5LXJpbmdpbmcgY2FsbC5cclxuICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQ29udGFjdHNQYW5lbChjYWxsSW5mbz86IGFueSwgaXNDbG9zZT86IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgaWYgKGlzQ2xvc2UpIHtcclxuICAgICAgdGhpcy5zaG93Q29udGFjdHNQYW5lbCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dDb250YWN0c1BhbmVsID0gIWlzQ2xvc2U7XHJcbiAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSBjYWxsSW5mbz8uY29uZmVyZW5jZUlkO1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbmZOYW1lID0gdGhpcy5jb25mZXJlbmNlQ2FsbExpc3QuZmluZCgocmVzRGF0YTphbnkpPT4gcmVzRGF0YT8uY29uZmVyZW5jZUlkID09PSBjYWxsSW5mbz8uY29uZmVyZW5jZUlkKT8uY2FsbExhYmVsIHx8ICcnO1xyXG4gICAgLy8gdGhpcy5nZXRBbGxQYXJ0aWNpcGFudHMoY2FsbEluZm8/LmNvbmZlcmVuY2VJZCk7XHJcbiAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHRoaXMuY29udGFjdHM7XHJcbiAgICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gdGhpcy5hbGxQYXJ0aWNpcGVudExpc3Q7XHJcbiAgICB0aGlzLmlzU2VhcmNoVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDMkNJbmZvUGFuZWwodXNlckluZm86IGFueSwgaXNDbG9zZT86IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgaWYgKGlzQ2xvc2UpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0ge307XHJcbiAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF1c2VySW5mbz8uYnVzaW5lc3NOdW1iZXIgJiYgIXVzZXJJbmZvPy5pc0J1c2luZXNzTnVtYmVyKSB7XHJcbiAgICAgIC8vIE5vbi1DMkMgaXRlbToganVzdCBtYXJrIGl0IGFzIHNlbGVjdGVkIGZvciBoaWdobGlnaHQsIG5vIEFQSSBjYWxsIG5lZWRlZC5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gU2V0IHNlbGVjdGlvbiBpbW1lZGlhdGVseSBzbyB0aGUgaGlnaGxpZ2h0IGFwcGVhcnMgYmVmb3JlIHRoZSBBUEkgcmVzcG9uZHMuXHJcbiAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSB1c2VySW5mbztcclxuICAgIGxldCBwYXJ0aWNpcGFudElEID0gdXNlckluZm8/LmJ1c2luZXNzUGFydGljaXBhbnRJZCB8fCB1c2VySW5mbz8ucGFydGljaXBhbnRJZCB8fCB1c2VySW5mbz8uaWRcclxuICAgIGlmKCF0aGlzLkMyQ29uZm9MaXN0W3VzZXJJbmZvPy5wYXJ0aWNpcGFudElkXSAmJiAhdGhpcy5DMkNvbmZvTGlzdFt1c2VySW5mbz8uYnVzaW5lc3NQYXJ0aWNpcGFudElkXSkge1xyXG4gICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0VXNlckluZm9ybWF0aW9uKHBhcnRpY2lwYW50SUQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc0luZm86IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiBpdGVtPy5wYXJ0aWNpcGFudElkID09IHVzZXJJbmZvPy5pZClcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF0gPSB0aGlzLm1hcFVzZXJJbmZvKHRoaXMuY3VycmVudENhbGxMaXN0W2luZGV4XSwgcmVzSW5mbz8uYzJjSW5mb3JtYXRpb24pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbyA9IHRoaXMuY3VycmVudENhbGxMaXN0W2luZGV4XTtcclxuICAgICAgICB0aGlzLkMyQ29uZm9MaXN0W3BhcnRpY2lwYW50SURdID0gdGhpcy5jdXJyZW50Q2FsbExpc3RbaW5kZXhdO1xyXG4gICAgICB9LCBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHVzZXIgaW5mbzonLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gdGhpcy5DMkNvbmZvTGlzdFtwYXJ0aWNpcGFudElEXTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hlY2tUZXh0SGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRSZW1vdmVQYXJ0aWNpcGFudCgpIHtcclxuICAgIHRoaXMuaXNBZGRSZW1vdmVQYXJ0aWNpcGFudCA9ICF0aGlzLmlzQWRkUmVtb3ZlUGFydGljaXBhbnQ7XHJcbiAgICAvLyBhd2FpdCB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyh0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VJZCk7XHJcbiAgICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gdGhpcy5hbGxQYXJ0aWNpcGVudExpc3Q7XHJcbiAgfVxyXG5cclxuICBhc3luYyB3YWl0aW5nQ2FsbEFjY2VwdChpbmNvbWluZ0NhbGxJbmZvOmFueSkge1xyXG4gICAgbGV0IG91ck51bWJlckluZm86IGFueSA9IHt9XHJcbiAgICBsZXQgY2FsbEluZm8gPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZpbmQoKGNhbGxJbmZvOiBhbnksIGk6IG51bWJlcikgPT4gdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkID09IGNhbGxJbmZvLmNvbmZlcmVuY2VJZClcclxuICAgIGlmIChjYWxsSW5mbz8ucGFydGljaXBhbnRzPy5sZW5ndGgpIHtcclxuICAgICAgb3VyTnVtYmVySW5mbyA9IGNhbGxJbmZvLnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+XHJcbiAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNEYXRhPy5idXNpbmVzc051bWJlcikpICYmICFyZXNEYXRhPy5pc0xlZnQgJiYgdGhpcy5nZXRTdGF0dXMocmVzRGF0YSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8vIGNvbnN0IGNhcHR1cmVkQ2FsbCA9IHRoaXMudHdpbGlvU2VydmljZS5nZXRJbmNvbWluZ0NhbGxCeUlkKGluY29taW5nQ2FsbEluZm8/LmNsaWVudFNpZCk7XHJcbiAgICB0aGlzLnR3aWxpb1NlcnZpY2UuYWNjZXB0ZWRDYWxsTGlzdC5mb3JFYWNoKChjYWxsOiBhbnkpID0+IHtcclxuICAgICAgY2FsbC5tdXRlKHRydWUpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAob3VyTnVtYmVySW5mbz8uaWQgJiYgb3VyTnVtYmVySW5mbz8uY29uZmVyZW5jZUlkICE9PSBpbmNvbWluZ0NhbGxJbmZvPy5jb25mZXJlbmNlSWQpIHtcclxuICAgICAgdGhpcy5pc1VuaG9sZENvbmZlcmVuY2VDYWxsID0gdHJ1ZTtcclxuICAgICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgcGFydGljaXBhbnRJZDogW291ck51bWJlckluZm8/LmlkXSxcclxuICAgICAgICBjb25mZXJlbmNlSWQ6IG91ck51bWJlckluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICBob2xkOiB0cnVlLFxyXG4gICAgICAgIG11dGU6IG91ck51bWJlckluZm8/Lm11dGUgfHwgZmFsc2VcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuaG9sZFBhcnRpY2lwYW50KHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpPT57XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2hvbGRQYXJ0aWNpcGFudCByZXMnLCByZXMpXHJcbiAgICAgICAgaWYocmVzPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICBzd2FsKFwiRXJyb3JcIiwgcmVzPy5tZXNzYWdlPy5qb2luPy4oXCI8YnIvPlwiKSB8fCAnSW50ZXJuYWwgU2VydmVyIEVycm9yJywgXCJlcnJvclwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hY2NlcHRJbmNvbWluZ0NhbGwoaW5jb21pbmdDYWxsSW5mbywgb3VyTnVtYmVySW5mbyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWNjZXB0SW5jb21pbmdDYWxsKGluY29taW5nQ2FsbEluZm8sIG91ck51bWJlckluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWNjZXB0SW5jb21pbmdDYWxsKGRhdGE/OiBhbnksIG91ck51bWJlckluZm8/OiBhbnksIGNhcHR1cmVkQ2FsbD86IENhbGwpIHtcclxuICAgIGlmICghdGhpcy5jdXJyZW50Q2FsbExpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2Uuc2V0SW5jb21pbmdNdXRlZChmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzQ29ubmVjdGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmlzQ29ubmVjdGluZ0luY29taW5nQ2FsbElkID0gZGF0YT8uaWQ7XHJcbiAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQubmV4dChkYXRhPy5pZCk7XHJcbiAgICB0aGlzLmlzSW5jb21pbmdDYWxsQnRuRGlzYWJsZSA9IHRydWU7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgXHJcbiAgICBsZXQgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgY29uc3QgY2FsbFRvQWNjZXB0ID0gdGhpcy50d2lsaW9TZXJ2aWNlLmdldEluY29taW5nQ2FsbEJ5SWQoZGF0YT8uY2xpZW50U2lkKTtcclxuICAgICAgaWYoY2FsbFRvQWNjZXB0Py5wYXJhbWV0ZXJzPy5DYWxsU2lkKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgICBjb25zdCBhY2NlcHRlZEVudHJ5ID0ge1xyXG4gICAgICAgICAgY2FsbDogY2FsbFRvQWNjZXB0LFxyXG4gICAgICAgICAgY2FsbFNpZDogZGF0YS5jbGllbnRTaWQsXHJcbiAgICAgICAgICBkYXRhXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmFjY2VwdGVkQ2FsbExpc3QucHVzaChhY2NlcHRlZEVudHJ5KTtcclxuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuYWNjZXB0ZWRDYWxsTGlzdC5wdXNoKGNhbGxUb0FjY2VwdCk7XHJcblxyXG4gICAgICAgIC8vIFR3aWxpbydzIGFjY2VwdCgpIG9ubHkgc3RhcnRzIHRoZSBjb25uZWN0aW9uIGhhbmRzaGFrZSDigJQgaXQgZG9lcyBub3RcclxuICAgICAgICAvLyBndWFyYW50ZWUgdGhlIGNhbGwgYWN0dWFsbHkgY29ubmVjdHMuIE9ubHkgY2FsbCB0aGUgQVBJIG9uY2UgVHdpbGlvXHJcbiAgICAgICAgLy8gY29uZmlybXMgdGhlIGNvbm5lY3Rpb24gKCdhY2NlcHQnIGV2ZW50KTsgaWYgVHdpbGlvIGZhaWxzL2JyZWFrc1xyXG4gICAgICAgIC8vIGJlZm9yZSB0aGF0LCBzaG93IGFuIGVycm9yIGluc3RlYWQgb2YgdGVsbGluZyB0aGUgYmFja2VuZCB0aGUgY2FsbFxyXG4gICAgICAgIC8vIHdhcyBhbnN3ZXJlZC5cclxuICAgICAgICBsZXQgaXNUd2lsaW9Db25uZWN0U2V0dGxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCBoYW5kbGVUd2lsaW9Db25uZWN0RmFpbHVyZSA9IChtZXNzYWdlPzogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXNUd2lsaW9Db25uZWN0U2V0dGxlZCkgcmV0dXJuO1xyXG4gICAgICAgICAgaXNUd2lsaW9Db25uZWN0U2V0dGxlZCA9IHRydWU7XHJcbiAgICAgICAgICBjb25zdCBzaWQgPSBjYWxsVG9BY2NlcHQucGFyYW1ldGVycz8uQ2FsbFNpZDtcclxuICAgICAgICAgIHRoaXMuYWNjZXB0ZWRDYWxsTGlzdCA9IHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5maWx0ZXIoYyA9PiBjLmNhbGxTaWQgIT09IHNpZCk7XHJcbiAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuYWNjZXB0ZWRDYWxsTGlzdCA9IHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0LmZpbHRlcihcclxuICAgICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBzaWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQubmV4dCgnJyk7XHJcbiAgICAgICAgICB0aGlzLmlzQ29ubmVjdGluZ0luY29taW5nQ2FsbElkID0gJyc7XHJcbiAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kSW5kZXgoKHJlcykgPT4gcmVzLnBhcnRpY2lwYW50SWQgPT0gZGF0YS5wYXJ0aWNpcGFudElkKVxyXG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3Quc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzU2hvd0luY29taW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc0Nvbm5lY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KGRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgc3dhbChcIkVycm9yXCIsIG1lc3NhZ2UgfHwgJ1VuYWJsZSB0byBjb25uZWN0IHRoZSBjYWxsLiBQbGVhc2UgdHJ5IGFnYWluLicsIFwiZXJyb3JcIik7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpPT57XHJcbiAgICAgICAgICAgIHRoaXMuaXNVbmhvbGRDb25mZXJlbmNlQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgfSw1MDApXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY2FsbFRvQWNjZXB0Lm9uKCdlcnJvcicsIChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignVHdpbGlvIGNhbGwgZXJyb3Igd2hpbGUgY29ubmVjdGluZycsIGVycik7XHJcbiAgICAgICAgICBoYW5kbGVUd2lsaW9Db25uZWN0RmFpbHVyZShlcnI/Lm1lc3NhZ2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNhbGxUb0FjY2VwdC5vbignY2FuY2VsJywgKCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2ZmZmZmZicpXHJcbiAgICAgICAgICBoYW5kbGVUd2lsaW9Db25uZWN0RmFpbHVyZSgnQ2FsbCB3YXMgY2FuY2VsbGVkIGJlZm9yZSBpdCBjb3VsZCBjb25uZWN0LicpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjYWxsVG9BY2NlcHQub24oJ2NhbmNlbCcsICgpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdDYWxsZXIgaHVuZyB1cCBiZWZvcmUgYW5zd2VyJyk7XHJcbiAgICAgICAgICBoYW5kbGVUd2lsaW9Db25uZWN0RmFpbHVyZSgnQ2FsbCB3YXMgY2FuY2VsbGVkIGJlZm9yZSBpdCBjb3VsZCBjb25uZWN0LicpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNhbGxUb0FjY2VwdC5vbigncmVqZWN0JywgKCkgPT4ge1xyXG4gICAgICAgICAgaGFuZGxlVHdpbGlvQ29ubmVjdEZhaWx1cmUoJ0NhbGwgY291bGQgbm90IGJlIGNvbm5lY3RlZC4nKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY2FsbFRvQWNjZXB0Lm9uKCdhY2NlcHQnLCAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnY2FsbCBhY2NlcHRlZCBzdWNlc3NmdWxseSAhISEhISEhJylcclxuICAgICAgICAgIGlmIChpc1R3aWxpb0Nvbm5lY3RTZXR0bGVkKSByZXR1cm47XHJcbiAgICAgICAgICBpc1R3aWxpb0Nvbm5lY3RTZXR0bGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAvLyBTdGFydCBwcmVwYXJpbmcgdGhlIHNwYXJlIGRldmljZSBub3cgdGhhdCBUd2lsaW8gaGFzIGFjdHVhbGx5XHJcbiAgICAgICAgICAvLyBjb25uZWN0ZWQsIHNvIGl0IGlzIHJlZ2lzdGVyZWQgd2VsbCBiZWZvcmUgdGhlIG5leHQgY29uY3VycmVudCBjYWxsIGNhbiBhcnJpdmUuXHJcbiAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UucHJlcGFyZURldmljZTJGb3JJbmNvbWluZ0NhbGwoKTtcclxuICAgICAgICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBjaGFubmVsSWQ6IGVudmlyb25tZW50LmNoYW5uZWxJZCxcclxuICAgICAgICAgICAgcmVjb3JkSWQ6IGRhdGE/LmlkLFxyXG4gICAgICAgICAgICBpcEFkZHJlc3M6ICcnLFxyXG4gICAgICAgICAgICBpcENvdW50cnk6ICcnLFxyXG4gICAgICAgICAgICBjYWxsU3RhdHVzOiAnYW5zd2VyZWQnLFxyXG4gICAgICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICAgICAgdXNlcklkOiAgdGhpcy51c2VySWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICBjb21wYW55SWQ6ICcnLFxyXG4gICAgICAgICAgICBjbGllbnRTaWQ6IGNhbGxUb0FjY2VwdC5wYXJhbWV0ZXJzPy5DYWxsU2lkIHx8IGRhdGEuY2xpZW50U2lkLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IGRhdGE/LmNvbmZlcmVuY2VJZCB8fCAnbm8nXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2Uuc2V0SW5jb21pbmdDYWxsU3RhdHVzKHBheWxvYWQpLnN1YnNjcmliZShhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZCA9ICcnO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IGRhdGE/LmNvbmZlcmVuY2VJZDtcclxuICAgICAgICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLmlzQ3VycmVudEluY29taW5nQ2FsbExpc3QucHVzaChkYXRhPy5pZCk7XHJcbiAgICAgICAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzU2hvd0luY29taW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5pc0FjY2VwdElJbmNvbWluZ0NhbGwubmV4dCh7IGNvbmZlcmVuY2VJZDogZGF0YT8uY29uZmVyZW5jZUlkLCBwYXJ0aWNpcGFudElkOiBkYXRhPy5pZCA/PyBkYXRhPy5wYXJ0aWNpcGFudElkIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc0Nvbm5lY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQubmV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5vbkNvbmN1cnJlbnRDYWxsQWNjZXB0ZWQoY2FsbFRvQWNjZXB0KTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgYWNjZXB0ZWRTaWQgPSBjYWxsVG9BY2NlcHQucGFyYW1ldGVycz8uQ2FsbFNpZDtcclxuICAgICAgICAgICAgICBjYWxsVG9BY2NlcHQub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWNjZXB0ZWRTaWQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hY2NlcHRlZENhbGxMaXN0ID0gdGhpcy5hY2NlcHRlZENhbGxMaXN0LmZpbHRlcihjID0+IGMuY2FsbFNpZCAhPT0gYWNjZXB0ZWRTaWQpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuYWNjZXB0ZWRDYWxsTGlzdCA9IHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAoYzogYW55KSA9PiBjLnBhcmFtZXRlcnM/LkNhbGxTaWQgIT09IGFjY2VwdGVkU2lkXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5yZWxlYXNlQ29uY3VycmVudENhbGxEZXZpY2UoYWNjZXB0ZWRTaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLnRlYXJkb3duU3BhcmVEZXZpY2VzSWZJZGxlKCk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zdCBzaWQgPSBjYWxsVG9BY2NlcHQucGFyYW1ldGVycz8uQ2FsbFNpZDtcclxuICAgICAgICAgICAgICB0aGlzLmFjY2VwdGVkQ2FsbExpc3QgPSB0aGlzLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKGMgPT4gYy5jYWxsU2lkICE9PSBzaWQpO1xyXG4gICAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0ID0gdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBzaWRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZC5uZXh0KCcnKTtcclxuICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kSW5kZXgoKHJlcykgPT4gcmVzLnBhcnRpY2lwYW50SWQgPT0gZGF0YS5wYXJ0aWNpcGFudElkKVxyXG4gICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc1Nob3dJbmNvbWluZ0NhbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmlzQ29ubmVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoZGF0YSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIHN3YWwoXCJFcnJvclwiLCByZXM/Lm1lc3NhZ2U/LmpvaW4/LihcIjxici8+XCIpIHx8ICdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLCBcImVycm9yXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PntcclxuICAgICAgICAgICAgICB0aGlzLmlzVW5ob2xkQ29uZmVyZW5jZUNhbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSw1MDApXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjYWxsVG9BY2NlcHQuYWNjZXB0KCk7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9IGVsc2UgaWYodGhpcy5taXNzQ2FsbEluZm8/LmRhdGE/LmRhdGE/LnJlY29yZElkID09IGRhdGE/LmlkICYmICFjYWxsVG9BY2NlcHQucGFyYW1ldGVycz8uQ2FsbFNpZCl7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgICBjb25zdCBzaWQgPSBjYWxsVG9BY2NlcHQucGFyYW1ldGVycz8uQ2FsbFNpZDtcclxuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQubmV4dCgnJyk7XHJcbiAgICAgICAgdGhpcy5pc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuYWNjZXB0ZWRDYWxsTGlzdCA9IHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5maWx0ZXIoYyA9PiBjLmNhbGxTaWQgIT09IHNpZCk7XHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3QgPSB0aGlzLnR3aWxpb1NlcnZpY2UuYWNjZXB0ZWRDYWxsTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAoYzogYW55KSA9PiBjLnBhcmFtZXRlcnM/LkNhbGxTaWQgIT09IHNpZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbb3VyTnVtYmVySW5mbz8uaWRdLFxyXG4gICAgICAgICAgY29uZmVyZW5jZUlkOiBvdXJOdW1iZXJJbmZvPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICBob2xkOiBmYWxzZSxcclxuICAgICAgICAgIG11dGU6IG91ck51bWJlckluZm8/Lm11dGUgfHwgZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmhvbGRQYXJ0aWNpcGFudChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KT0+e1xyXG4gICAgICAgICAgaWYocmVzPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHN3YWwoXCJFcnJvclwiLCByZXM/Lm1lc3NhZ2U/LmpvaW4/LihcIjxici8+XCIpIHx8ICdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLCBcImVycm9yXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzU2hvd0luY29taW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNDb25uZWN0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0luY29taW5nQ2FsbEJ0bkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmRlc3Ryb3lEZXZpY2UyKCk7XHJcbiAgICAgICAgc3dhbChcIkVycm9yXCIsICdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLCBcImVycm9yXCIpO1xyXG4gICAgICAgIHRoaXMubWlzc0NhbGxJbmZvID0ge307XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuICBhc3luYyBjYWxsQ29udGFjdChjb250YWN0OiBhbnksIGlzVW5zYXZlZE51bWJlcj86IGJvb2xlYW4sIG9wdGlvbnM/OiB7IHNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW4sIGFscmVhZHlOb3JtYWxpemVkPzogYm9vbGVhbiB9LCBwYXJ0aWNpcGFudEluZm8/OiBhbnkpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgbGV0IHBob25lTnVtYmVyID0gaXNVbnNhdmVkTnVtYmVyID8gY29udGFjdCA6IGNvbnRhY3Q/Lm51bWJlcnNMaXN0Py5bMF0/Lm51bWJlciB8fCBjb250YWN0Py5waG9uZTtcclxuICAgIGlmICghb3B0aW9ucz8uYWxyZWFkeU5vcm1hbGl6ZWQpIHtcclxuICAgICAgcGhvbmVOdW1iZXIgPSBhd2FpdCB0aGlzLmdldFRvTnVtYmVyKHBob25lTnVtYmVyKTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHBob25lTnVtYmVyKTtcclxuICAgIGNvbnN0IHRhcmdldENvbmZlcmVuY2VJZCA9IHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCB8fCB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQ7XHJcbiAgICBpZiAoIW9wdGlvbnM/LnNraXBEdXBsaWNhdGVDaGVjaykge1xyXG4gICAgICBpZiAodGFyZ2V0Q29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgY29uc3QgYWxyZWFkeUluQ2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKHJlczogYW55KSA9PlxyXG4gICAgICAgICAgcmVzLmNvbmZlcmVuY2VJZCA9PT0gdGFyZ2V0Q29uZmVyZW5jZUlkICYmXHJcbiAgICAgICAgICAocmVzLnRvID09IHBob25lTnVtYmVyIHx8IHJlcy5mcm9tID09IHBob25lTnVtYmVyKSAmJlxyXG4gICAgICAgICAgIXJlcz8uaXNMZWZ0XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoYWxyZWFkeUluQ2FsbCkge1xyXG4gICAgICAgICAgc3dhbCgnRXJyb3InLCBgQWxyZWFkeSAke3Bob25lTnVtYmVyfSBudW1iZXIgaW4gdGhpcyBjYWxsIDIuYCk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5pc0NvbmZlcmVuY2UpIHtcclxuICAgICAgICBsZXQgcGF5bG9hZDphbnkgPSB7XHJcbiAgICAgICAgICBmcm9tOiB0aGlzLmNhbGxEYXRhPy5mcm9tID8gdGhpcy5jYWxsRGF0YT8uZnJvbSA6IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxyXG4gICAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcclxuICAgICAgICAgIHBhcnRpY2lwYW50TnVtYmVyOiBwaG9uZU51bWJlcixcclxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgICAgICBwcm94eTogJycsXHJcbiAgICAgICAgICBjb3VudHJ5Y29kZTogJycsXHJcbiAgICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYocGFydGljaXBhbnRJbmZvPy5pZCkge1xyXG4gICAgICAgICAgcGF5bG9hZFsncmVjb3JkSWQnXSA9IHBhcnRpY2lwYW50SW5mby5pZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGRhdGE6IGFueSA9IGF3YWl0IHRoaXMuYWRkUGFydGljaXBhbnRUb0NhbGwocGF5bG9hZCk7XHJcbiAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgcGFydGljaXBhbnRJZDogW2RhdGE/LnBhcnRpY2lwYW50SWQgfHwgZGF0YT8uaWRdLFxyXG4gICAgICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICBob2xkOiBudWxsLFxyXG4gICAgICAgICAgbXV0ZTogdGhpcy5jdXJyZW50Q2FsbD8ubXV0ZSB8fCBmYWxzZSxcclxuICAgICAgICAgIGNvbmZlcmVuY2U6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZihob2xkSW5mbz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignaG9sZEluZm8gMTIxOCcsIGhvbGRJbmZvKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbGxEYXRhID0ge1xyXG4gICAgICAgICAgcGhvbmU6IHBob25lTnVtYmVyLFxyXG4gICAgICAgICAgZGlzcGxheU51bTogcGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICBuYW1lOiBjb250YWN0Py5uYW1lIHx8IGAke2NvbnRhY3Q/LmZpcnN0TmFtZX0gJHtjb250YWN0Py5sYXN0TmFtZX1gIHx8IHBob25lTnVtYmVyLFxyXG4gICAgICAgICAgaW1nOiBjb250YWN0Py5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgICAgcGFydGljaXBhbnRJZDogZGF0YT8ucGFydGljaXBhbnRJZCxcclxuICAgICAgICAgIGZyb206IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxyXG4gICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxyXG4gICAgICAgICAgaXNIb2xkOiBmYWxzZSxcclxuICAgICAgICAgIGlzTGVmdDogZmFsc2UsXHJcbiAgICAgICAgICBpc0NvbmZlcmVuY2U6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0ID0gdGhpcy5jdXJyZW50Q2FsbC5jb25mZXJlbmNlSWQ7XHJcbiAgICAgICAgLy8gdGhpcy5nZXRBbGxQYXJ0aWNpcGFudHModGhpcy5jdXJyZW50Q2FsbC5jb25mZXJlbmNlSWQpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIGxldCBwYXJ0aWNpcGFudElEczogYW55ID0gW107XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5mb3JFYWNoKGFzeW5jIChjOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGM/LnBhcnRpY2lwYW50SWQgJiYgIWM/LmlzSG9sZCAmJiB0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VJZCA9PSBjPy5jb25mZXJlbmNlSWQpIHtcclxuICAgICAgICAgICAgICBwYXJ0aWNpcGFudElEcy5wdXNoKGM/LnBhcnRpY2lwYW50SWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBBZGQgcGFydGljaXBhbnQgdG8gdGhlIGNvbmZlcmVuY2VcclxuICAgICAgICAgIGxldCBkYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmFkZFBhcnRpY2lwYW50VG9DYWxsKHtcclxuICAgICAgICAgICAgZnJvbTogdGhpcy5jYWxsRGF0YT8uZnJvbSB8fCB0aGlzLnNlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcixcclxuICAgICAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcclxuICAgICAgICAgICAgcGFydGljaXBhbnROdW1iZXI6IHBob25lTnVtYmVyLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgICAgICAgIHByb3h5OiAnJyxcclxuICAgICAgICAgICAgY291bnRyeWNvZGU6ICcnLFxyXG4gICAgICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLmlzQ2FsbE9uSG9sZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaXNDb25mZXJlbmNlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElEcy5wdXNoKGRhdGE/LnBhcnRpY2lwYW50SWQpXHJcbiAgICAgICAgICBsZXQgaG9sZEluZm86IGFueSA9IGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IHBhcnRpY2lwYW50SURzLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICBob2xkOiBudWxsLFxyXG4gICAgICAgICAgICBtdXRlOiBudWxsLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoaG9sZEluZm8/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignaG9sZEluZm8gMTI3NycsIGhvbGRJbmZvKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZUlkKTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcclxuICAgICAgICAgICAgcGhvbmU6IHBob25lTnVtYmVyLFxyXG4gICAgICAgICAgICBkaXNwbGF5TnVtOiBwaG9uZU51bWJlcixcclxuICAgICAgICAgICAgbmFtZTogY29udGFjdD8ubmFtZSB8fCBgJHtjb250YWN0Py5maXJzdE5hbWV9ICR7Y29udGFjdD8ubGFzdE5hbWV9YCB8fCBwaG9uZU51bWJlcixcclxuICAgICAgICAgICAgaW1nOiBjb250YWN0Py5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBkYXRhPy5wYXJ0aWNpcGFudElkLFxyXG4gICAgICAgICAgICBmcm9tOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcixcclxuICAgICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxyXG4gICAgICAgICAgICBpc0hvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBpc0xlZnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBpc0NvbmZlcmVuY2U6IGZhbHNlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhZGRpbmcgcGFydGljaXBhbnQ6JywgZXJyb3IpO1xyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgQ2FsbFRvVW5zYXZlZE51bWJlcihudW1iZXI6IHN0cmluZywgaXNOZXdDb25mZXJlbmNlPzogYm9vbGVhbiwgb3B0aW9ucz86IHsgc2tpcER1cGxpY2F0ZUNoZWNrPzogYm9vbGVhbiB9LCBwYXJ0aWNpcGFudEluZm8/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnNvbGUubG9nKCdza2lwRHVwbGljYXRlQ2hlY2s6Jywgb3B0aW9ucz8uc2tpcER1cGxpY2F0ZUNoZWNrLCAnaXNOZXdDb25mZXJlbmNlOicsIGlzTmV3Q29uZmVyZW5jZSk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBpc0ludmFsaWQgPSBhd2FpdCB0aGlzLmlzSW52YWxpZE51bWJlcihudW1iZXIpO1xyXG4gICAgICBpZiAoaXNJbnZhbGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAoIWlzTmV3Q29uZmVyZW5jZSAmJiAhb3B0aW9ucz8uc2tpcER1cGxpY2F0ZUNoZWNrKSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0Q29uZmVyZW5jZUlkID0gdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0IHx8IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZDtcclxuICAgICAgICBpZiAodGFyZ2V0Q29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgICBsZXQgYWxyZWFkeUluQ2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKHJlczogYW55KSA9PlxyXG4gICAgICAgICAgICByZXMuY29uZmVyZW5jZUlkID09PSB0YXJnZXRDb25mZXJlbmNlSWQgJiZcclxuICAgICAgICAgICAgKChyZXMudG8gPT0gbnVtYmVyICYmIHJlcz8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJykgfHxcclxuICAgICAgICAgICAgICAocmVzLmZyb20gPT0gbnVtYmVyICYmIHJlcz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyAmJiByZXMuaG9zdCkpICYmXHJcbiAgICAgICAgICAgICFyZXM/LmlzTGVmdFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChhbHJlYWR5SW5DYWxsKSB7XHJcbiAgICAgICAgICAgIHN3YWwoJ0Vycm9yJywgYEFscmVhZHkgJHtudW1iZXJ9IG51bWJlciBpbiB0aGlzIGNhbGwxLmApO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAobnVtYmVyID09PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndHdpbGlvTnVtYmVyJykpIHtcclxuICAgICAgICBzd2FsKCdFcnJvcicsICdZb3UgY2FuIG5vdCBkaWFsIHRoaXMgbnVtYmVyJyk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgY29udGFjdCA9IHRoaXMuY29udGFjdHMuZmluZCgoY29udGFjdDogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRhY3QubnVtYmVyc0xpc3Quc29tZSgobnVtOiBhbnkpID0+IG51bS5udW1iZXIgPT09IG51bWJlcilcclxuICAgICAgfSk7XHJcbiAgICAgIG51bWJlciA9IGF3YWl0IHRoaXMuZ2V0VG9OdW1iZXIobnVtYmVyKTtcclxuXHJcbiAgICAgIC8vIFVwZGF0ZSBjYWxsIGRhdGEgaW4gYSBzaW5nbGUgb3BlcmF0aW9uXHJcbiAgICAgIGNvbnN0IGNhbGxEYXRhID0ge1xyXG4gICAgICAgIG5hbWU6IGNvbnRhY3Q/LmZpcnN0TmFtZSxcclxuICAgICAgICBpbWc6IGNvbnRhY3Q/LmltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgICBwaG9uZTogbnVtYmVyLFxyXG4gICAgICAgIGV4dE51bTogJycsXHJcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxyXG4gICAgICAgIGRpYWw6IHRydWUsXHJcbiAgICAgICAgZnJvbTogdGhpcy5zZWxlY3RlZENhbGxlcklkLm51bWJlcixcclxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKGlzTmV3Q29uZmVyZW5jZSkge1xyXG4gICAgICAgIHRoaXMuaXNOZXdBZGRlZENhbGwgPSB0cnVlO1xyXG4gICAgICAgIGxldCBvdXJOdW1iZXJJbmZvOiBhbnkgPSB7fVxyXG4gICAgICAgIGxldCBjYWxsSW5mbyA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmluZCgoY2FsbEluZm86IGFueSwgaTogbnVtYmVyKSA9PiB0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VJZCA9PSBjYWxsSW5mby5jb25mZXJlbmNlSWQpXHJcbiAgICAgICAgaWYgKGNhbGxJbmZvKSB7XHJcbiAgICAgICAgICBvdXJOdW1iZXJJbmZvID0gY2FsbEluZm8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNEYXRhPy5idXNpbmVzc051bWJlcikpICYmICFyZXNEYXRhPy5pc0xlZnRcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvdXJOdW1iZXJJbmZvPy5pZCkge1xyXG4gICAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbb3VyTnVtYmVySW5mbz8uaWRdLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IG91ck51bWJlckluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgaG9sZDogdHJ1ZSxcclxuICAgICAgICAgICAgbXV0ZTogb3VyTnVtYmVySW5mbz8ubXV0ZSB8fCBmYWxzZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZihob2xkSW5mbz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdob2xkSW5mbyAxMzU1JywgaG9sZEluZm8pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucGVuZGluZ05ld0NhbGxIZWxkUGFydGljaXBhbnQgPSBvdXJOdW1iZXJJbmZvO1xyXG4gICAgICAgICAgdGhpcy5vbkFkZE5ld0NhbGwoY2FsbERhdGEsIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm9uQWRkTmV3Q2FsbChjYWxsRGF0YSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICAgIHRoaXMuY2FsbENvbnRhY3QobnVtYmVyLCB0cnVlLCB7IC4uLm9wdGlvbnMsIGFscmVhZHlOb3JtYWxpemVkOiB0cnVlIH0sIHBhcnRpY2lwYW50SW5mbylcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdGYWlsZWQgdG8gaW5pdGlhdGUgY2FsbC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25BZGROZXdDYWxsKGNhbGxEYXRhOiBhbnksIGlzTmV3Q29uZmVyZW5jZUNhbGwgPSBmYWxzZSkge1xyXG4gICAgLy8gd2FybmluZyBvbmx5IGZvciBORVcgU0VQQVJBVEUgQ0FMTFxyXG4gICAgaWYgKGlzTmV3Q29uZmVyZW5jZUNhbGwgJiYgdGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnBlbmRpbmdDYWxsRGF0YSA9IGNhbGxEYXRhO1xyXG4gICAgICB0aGlzLnNob3dDb25mZXJlbmNlV2FybmluZ01vZGFsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXJ0Q2FsbChjYWxsRGF0YSwgaXNOZXdDb25mZXJlbmNlQ2FsbCk7XHJcbiAgfVxyXG5cclxuICBjb25maXJtTmV3Q2FsbCgpIHtcclxuICAgIHRoaXMuc2hvd0NvbmZlcmVuY2VXYXJuaW5nTW9kYWwgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnBlbmRpbmdDYWxsRGF0YSkge1xyXG4gICAgICB0aGlzLm5ld0NhbGxMb2FkZXJEYXRhID0ge1xyXG4gICAgICAgIG5hbWU6IHRoaXMucGVuZGluZ0NhbGxEYXRhLm5hbWUgfHwgJycsXHJcbiAgICAgICAgcGhvbmU6IHRoaXMucGVuZGluZ0NhbGxEYXRhLnBob25lLFxyXG4gICAgICAgIGltZzogdGhpcy5wZW5kaW5nQ2FsbERhdGEuaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1xyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdCA9IHtcclxuICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgIHR5cGU6ICdhbGVydC1zdWNjZXNzJyxcclxuICAgICAgICBudW1iZXI6IHRoaXMucGVuZGluZ0NhbGxEYXRhLnBob25lLFxyXG4gICAgICAgIGRpc3BsYXlOdW06IHRoaXMucGVuZGluZ0NhbGxEYXRhLnBob25lXHJcbiAgICAgIH07ICBcclxuICAgICAgXHJcbiAgICAgIHRoaXMuc2hvd05ld0NhbGxMb2FkZXIgPSB0cnVlO1xyXG4gICAgICBcclxuICAgICAgXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LnNob3cgPSBmYWxzZTtcclxuICAgICAgfSwgNzAwMCk7XHJcbiAgICAgIHRoaXMuc3RhcnRDYWxsKHRoaXMucGVuZGluZ0NhbGxEYXRhLCB0cnVlKTtcclxuICAgICAgdGhpcy5wZW5kaW5nQ2FsbERhdGEgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsTmV3Q2FsbCgpIHtcclxuICAgIHRoaXMuc2hvd0NvbmZlcmVuY2VXYXJuaW5nTW9kYWwgPSBmYWxzZTtcclxuICAgIHRoaXMucGVuZGluZ0NhbGxEYXRhID0gbnVsbDtcclxuICB9XHJcbiAgY2FuY2VsQ2FsbFRvYXN0KCkge1xyXG4gICAgLy8gSGlkZSB0aGUgdG9hc3QgYW5kIGxvYWRlciBpbW1lZGlhdGVseVxyXG4gICAgdGhpcy5jYWxsTnVtYmVyVG9hc3Quc2hvdyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93TmV3Q2FsbExvYWRlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbGxDYW5jZWxsZWQgPSB0cnVlO1xyXG5cclxuICAgIC8vIElmIGEgZGV2aWNlIHdhcyBhbHJlYWR5IGNyZWF0ZWQsIGRlc3Ryb3kgaXQgdG8gYWJvcnQgYW55IHBlbmRpbmcgY29ubmVjdGlvblxyXG4gICAgaWYgKHRoaXMuZGV2aWNlKSB7XHJcbiAgICAgIHRyeSB7IHRoaXMuZGV2aWNlLmRlc3Ryb3koKTsgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgIHRoaXMuZGV2aWNlID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHdlIGhlbGQgYSBwcmV2aW91cyBjb25mZXJlbmNlIHRvIHN0YXJ0IHRoaXMgbmV3IGNhbGwsIHVuaG9sZCBpdCBub3dcclxuICAgIHRoaXMudW5ob2xkUGVuZGluZ0NvbmZlcmVuY2UoKTtcclxuICB9XHJcbiAgYXN5bmMgZ2V0VG9OdW1iZXIoZGlhbGVkTnVtYmVyOiBzdHJpbmcpIHtcclxuICAgIGlmIChkaWFsZWROdW1iZXJbMF0gIT09ICcrJykge1xyXG4gICAgICAvLyB0aGlzIGlzIGNhc2Ugd2hlbiB1c2VyIGdlb2xvY2F0aW9uIGRpYWwgY29kZSBpcyBvblxyXG4gICAgICBsZXQgaXBBZGRyZXNzOiBhbnkgPSBhd2FpdCB0aGlzLmlwU2VydmljZS5nZXRJcEFkZHJlc3NJbmZvKCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgdGhpcy50d2lsaW9TZXJ2aWNlLmdldFRvTnVtYmVyKGRpYWxlZE51bWJlciwgaXBBZGRyZXNzLmFkZHJlc3MuY291bnRyeUNvZGUpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBpZiAocmVzLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICByZXR1cm4gcmVzPy50b051bWJlclxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBkaWFsZWROdW1iZXJcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGRpYWxlZE51bWJlclxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgaXNJbnZhbGlkTnVtYmVyKG51bWJlcjogc3RyaW5nKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAobnVtYmVyID09ICcnKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdJbnZhbGlkIE51bWJlcicpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHZhbGlkTnVtYmVyUGF0dGVybiA9IC9eWytcXGRcXHMoKS1dKiQvOyAvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdmFsaWQgY2hhcmFjdGVyc1xyXG4gICAgICBjb25zdCBwaG9uZU51bWJlciA9IG51bWJlcjtcclxuICAgICAgaWYgKCF2YWxpZE51bWJlclBhdHRlcm4udGVzdChwaG9uZU51bWJlcikpIHtcclxuICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ludmFsaWQgTnVtYmVyJyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdJbnZhbGlkIE51bWJlcicpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gUmV0dXJuIHRydWUgaWYgYW4gZXJyb3Igb2NjdXJyZWQsIG1lYW5pbmcgdGhlIG51bWJlciBpcyBpbnZhbGlkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93RGlhbEFsZXJ0KG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgdGhpcy5kaWFsQWxlcnQgPSB7XHJcbiAgICAgIG1zZzogbWVzc2FnZSxcclxuICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgfTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmRpYWxBbGVydC5zaG93ID0gZmFsc2U7XHJcbiAgICB9LCAzMDAwKTtcclxuICB9XHJcblxyXG5hc3luYyBnZXRBbGxQYXJ0aWNpcGFudHMoY29uZmVyZW5jZUlkOiBzdHJpbmcpIHtcclxuICBzZXRUaW1lb3V0KCgpPT57XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0QWxsUGFydGljaXBhbnRzKGNvbmZlcmVuY2VJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogYXN5bmMgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcGFydGljaXBhbnRzID0gcmVzPy5wYXJ0aWNpcGFudHMgfHwgcmVzPy5wYXJ0aWNpcGFudCB8fCBbXTtcclxuICAgICAgICAvLyBpZiAoIXBhcnRpY2lwYW50cy5sZW5ndGgpIHtcclxuICAgICAgICAvLyAgIHRoaXMuYWxsUGFydGljaXBlbnRMaXN0ID0gW107XHJcbiAgICAgICAgLy8gICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gW107XHJcbiAgICAgICAgLy8gICByZXR1cm47XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIGNvbnN0IHVwZGF0ZWRQYXJ0aWNpcGFudHMgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAvLyAgIHBhcnRpY2lwYW50cy5tYXAoYXN5bmMgKHA6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vICAgICBjb25zdCBmcm9tTmFtZSA9IGF3YWl0IHRoaXMuZ2V0TmFtZShwLmZyb20pO1xyXG4gICAgICAgIC8vICAgICBjb25zdCB0b05hbWUgPSBhd2FpdCB0aGlzLmdldE5hbWUocC50byk7XHJcbiAgXHJcbiAgICAgICAgLy8gICAgIHJldHVybiB7XHJcbiAgICAgICAgLy8gICAgICAgLi4ucCxcclxuICAgICAgICAvLyAgICAgICBmcm9tTmFtZTogZnJvbU5hbWUgfHwgcC5mcm9tTmFtZSxcclxuICAgICAgICAvLyAgICAgICB0b05hbWU6IHRvTmFtZSB8fCBwLnRvTmFtZSxcclxuICAgICAgICAvLyAgICAgfTtcclxuICAgICAgICAvLyAgIH0pXHJcbiAgICAgICAgLy8gKTtcclxuICBcclxuICAgICAgICAvLyB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdCA9IHVwZGF0ZWRQYXJ0aWNpcGFudHM7XHJcbiAgICAgICAgLy8gdGhpcy5maWx0ZXJlZFBhcnRpY2lwZW50TGlzdCA9IFsuLi51cGRhdGVkUGFydGljaXBhbnRzXTsgIFxyXG4gICAgICAgIC8vIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSBbXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSw3MDApXHJcbn1cclxuXHJcbiAgYXN5bmMgc3dhcENhbGxzKGNhbGxJbmZvOiBhbnksIGlzQ29uZmVyZW5jZUNhbGw/OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHRoaXMuaXNQYXJ0aWNpcGFudFBhbmVsTG9hZGluZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZvckVhY2goYXN5bmMgKGM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoYz8uY29uZmVyZW5jZUlkID09IGNhbGxJbmZvPy5jb25mZXJlbmNlSWQpIHtcclxuICAgICAgICB0aGlzLmlzSG9sZEJ0bkRpc2FibGUgPSB0cnVlO1xyXG4gICAgICAgIGxldCBwYXJ0aWNpcGFudEluZm8gPSBjLnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+XHJcbiAgICAgICAgICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy5mcm9tKSAmJiByZXNEYXRhPy5jbGllbnQpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8udG8pICYmIHJlc0RhdGE/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgIXJlc0RhdGE/LmJ1c2luZXNzTnVtYmVyKSkgJiYgIXJlc0RhdGE/LmlzTGVmdFxyXG4gICAgICAgIClcclxuICAgICAgICBpZiAocGFydGljaXBhbnRJbmZvPy5pZCkge1xyXG4gICAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbcGFydGljaXBhbnRJbmZvPy5pZF0sXHJcbiAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogcGFydGljaXBhbnRJbmZvPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICAgIGhvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBtdXRlOiBwYXJ0aWNpcGFudEluZm8/Lm11dGUgfHwgZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYoaG9sZEluZm8/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignaG9sZEluZm8gMTUwMicsIGhvbGRJbmZvKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmlzSG9sZEJ0bkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IGNhbGxJbmZvPy5jb25mZXJlbmNlSWRcclxuICAgICAgICAgIC8vIHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKGNhbGxJbmZvPy5jb25mZXJlbmNlSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgcGFydGljaXBhbnRJbmZvID0gYy5wYXJ0aWNpcGFudHMuZmluZCgocmVzRGF0YTogYW55KSA9PlxyXG4gICAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNEYXRhPy5idXNpbmVzc051bWJlcikpICYmICFyZXNEYXRhPy5pc0xlZnRcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKHBhcnRpY2lwYW50SW5mbz8uaWQgJiYgIXBhcnRpY2lwYW50SW5mbz8uaXNIb2xkKSB7XHJcbiAgICAgICAgICBsZXQgaG9sZEluZm86IGFueSA9IGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtwYXJ0aWNpcGFudEluZm8/LmlkXSxcclxuICAgICAgICAgICAgY29uZmVyZW5jZUlkOiBwYXJ0aWNpcGFudEluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgaG9sZDogdHJ1ZSxcclxuICAgICAgICAgICAgbXV0ZTogcGFydGljaXBhbnRJbmZvPy5tdXRlIHx8IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmKGhvbGRJbmZvPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hvbGRJbmZvIDE1MjEnLCBob2xkSW5mbylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaXNIb2xkQnRuRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjPy5pc0NvbmZlcmVuY2UgJiYgIWM/LmlzSG9sZCAmJiB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQgPT0gYz8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgcGFydGljaXBhbnRJZDogW2M/LnBhcnRpY2lwYW50SWQgfHwgYz8uaWRdLFxyXG4gICAgICAgICAgY29uZmVyZW5jZUlkOiBjLmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgIGhvbGQ6IHRydWUsXHJcbiAgICAgICAgICBtdXRlOiBjPy5tdXRlIHx8IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYoaG9sZEluZm8/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hvbGRJbmZvIDE1MzUnLCBob2xkSW5mbylcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBoYXNEZXRhaWxlZEluZm8oY2FsbERhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFjYWxsRGF0YSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gQ2hlY2sgaWYgdXNlckluZm8gZXhpc3RzIGFuZCBoYXMgbWVhbmluZ2Z1bCBkYXRhXHJcbiAgICBpZiAoY2FsbERhdGEudXNlckluZm8gJiYgY2FsbERhdGEudXNlckluZm8uYzJjSW5mb3JtYXRpb24pIHtcclxuICAgICAgY29uc3QgaW5mbyA9IGNhbGxEYXRhLnVzZXJJbmZvLmMyY0luZm9ybWF0aW9uO1xyXG4gICAgICByZXR1cm4gISEoXHJcbiAgICAgICAgaW5mby5zdWJqZWN0ICYmIGluZm8uc3ViamVjdCAhPT0gJy0nIHx8XHJcbiAgICAgICAgaW5mby5lbWFpbCAmJiBpbmZvLmVtYWlsICE9PSAnLScgfHxcclxuICAgICAgICBpbmZvLm1lc3NhZ2UgJiYgaW5mby5tZXNzYWdlICE9PSAnLScgfHxcclxuICAgICAgICBpbmZvLnBvaW50TmFtZSAmJiBpbmZvLnBvaW50TmFtZSAhPT0gJy0nIHx8XHJcbiAgICAgICAgaW5mby5zb3VyY2VOYW1lICYmIGluZm8uc291cmNlTmFtZSAhPT0gJy0nIHx8XHJcbiAgICAgICAgaW5mby5leHRlbnNpb24gJiYgaW5mby5leHRlbnNpb24gIT09ICctJyB8fFxyXG4gICAgICAgIGluZm8udXJsIHx8XHJcbiAgICAgICAgaW5mby5sYXRpdHVkZSB8fFxyXG4gICAgICAgIGluZm8ubG9uZ2l0dWRlXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbkNhbGxJbnB1dHMobnVtOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG51bSkgfHwgbnVtID09ICcrJyB8fCBudW0gPT0gJyonIHx8IG51bSA9PSAnIycpIHtcclxuICAgICAgICBpZiAobnVtID09ICcjJykge1xyXG4gICAgICAgICAgbmV3IEF1ZGlvKGAvYXNzZXRzL2RpYWwtdG9uZXMvZHRtZi9kdG1mLWhhc2gtLm1wM2ApLnBsYXkoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG51bSA9PSAnKicpIHtcclxuICAgICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi1zdGFyLS5tcDNgKS5wbGF5KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi0ke251bX0tLm1wM2ApLnBsYXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYWxsSW5wdXQgPSB0aGlzLmNhbGxJbnB1dCArIFN0cmluZyhudW0pO1xyXG4gICAgICAgIHRoaXMuc2hvd0NsZWFyQnRuID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgc3RyID0gU3RyaW5nKG51bSk7XHJcbiAgICAgIGxldCBzZWxmQ2FsbCA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmluZCgocmVzOiBhbnkpID0+IHJlcz8uY29uZmVyZW5jZUlkID09IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCk/LnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+XHJcbiAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmIHJlc0RhdGE/Lmhvc3QpKSAmJiAhcmVzRGF0YT8uaXNMZWZ0XHJcbiAgICAgICk7XHJcbiAgICAgIGxldCBkZXZpY2UgPSB0aGlzLnR3aWxpb1NlcnZpY2UuZ2V0SW5jb21pbmdDYWxsQnlJZChzZWxmQ2FsbD8uY2FsbFNpZCB8fCBzZWxmQ2FsbD8uY2xpZW50U2lkKVxyXG4gICAgICBpZihkZXZpY2UgJiYgZGV2aWNlPy5fc3RhdHVzICA9PSAnb3BlbicpIHtcclxuICAgICAgICBkZXZpY2Uuc2VuZERpZ2l0cyhzdHIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2FsbD8uc2VuZERpZ2l0cyhzdHIpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgIH1cclxuICB9XHJcbiAgb25DYWxsSW5wdXRFbnRlcihldjogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhldik7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgc2VsZkNhbGwgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZpbmQoKHJlczogYW55KSA9PiByZXM/LmNvbmZlcmVuY2VJZCA9PSB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQpPy5wYXJ0aWNpcGFudHMuZmluZCgocmVzRGF0YTogYW55KSA9PlxyXG4gICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pICYmIHJlc0RhdGE/LmNsaWVudCkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiByZXNEYXRhPy5ob3N0KSkgJiYgIXJlc0RhdGE/LmlzTGVmdFxyXG4gICAgICApO1xyXG4gICAgICBsZXQgZGV2aWNlID0gdGhpcy50d2lsaW9TZXJ2aWNlLmdldEluY29taW5nQ2FsbEJ5SWQoc2VsZkNhbGw/LmNhbGxTaWQgfHwgc2VsZkNhbGw/LmNsaWVudFNpZClcclxuICAgICAgaWYoZGV2aWNlICYmIGRldmljZT8uX3N0YXR1cyAgPT0gJ29wZW4nKSB7XHJcbiAgICAgICAgZGV2aWNlLnNlbmREaWdpdHMoU3RyaW5nKGV2LmtleSkpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2FsbD8uc2VuZERpZ2l0cyhTdHJpbmcoZXYua2V5KSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJJbnB1dHMoKSB7XHJcbiAgICB0aGlzLmNhbGxJbnB1dCA9IHRoaXMuY2FsbElucHV0LnNsaWNlKDAsIC0xKTtcclxuICB9XHJcbiAgaXNNaW5pbWlzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtaW5pbWlzZURpYWxwYWQoKSB7XHJcbiAgICB0aGlzLm1pbmltaXNlRXZlbnQuZW1pdCh0cnVlKTtcclxuICAgIHRoaXMuaXNNaW5pbWlzZWQgPSB0cnVlO1xyXG4gIH1cclxuICBtYXhpbWlzZURpYWxwYWQoKSB7XHJcbiAgICB0aGlzLm1pbmltaXNlRXZlbnQuZW1pdChmYWxzZSk7XHJcbiAgICB0aGlzLmlzTWluaW1pc2VkID0gZmFsc2U7XHJcbiAgfVxyXG4gIHRvZ2dsZVJlY29yZGluZygpIHtcclxuICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKSB7XHJcbiAgICAgIHRoaXMuc3RvcFJlY29yZGluZygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdGFydFJlY29yZGluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzdGFydFJlY29yZGluZygpIHtcclxuICAgIGxldCBzaWQ7XHJcbiAgICBjb25zdCBkZXRhaWxzID0gdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxTaWQoKTtcclxuICAgIHRoaXMuaW5jb21pbmdDYWxsU2lkID0gZGV0YWlscy5jYWxsU2lkO1xyXG4gICAgdGhpcy5pbmNvbWluZ1JlY29yZENhbGwgPSBkZXRhaWxzLnJlY29yZENhbGw7XHJcbiAgICBzaWQgPSB0aGlzLmluY29taW5nQ2FsbFNpZCA/IHRoaXMuaW5jb21pbmdDYWxsU2lkIDogdGhpcy5jYWxsU2lkIHx8IHRoaXMuYWRkUmVzPy5jb25mZXJlbmNlU2lkO1xyXG5cclxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDYWxsUmVjb3JkaW5nKHsgXCJjb25mZXJlbmNlSWRcIjogdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkIH0pLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudGltZUVsYXBzZWQgPSAwO1xyXG4gICAgICB0aGlzLnN0YXJ0VGltZXIxKCk7XHJcbiAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN0YXJ0aW5nIHJlY29yZGluZycsIGVycm9yKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBzdG9wUmVjb3JkaW5nKCkge1xyXG4gICAgdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMudGltZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwYXVzZVJlY29yZGluZygpIHtcclxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5wYXVzZU9yUmVzdW1lUmVjb3JkaW5nKHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCwgJ3BhdXNlJykuc3Vic2NyaWJlKFxyXG4gICAgICByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nVGltZXIoKTtcclxuICAgICAgICB0aGlzLmlzUGF1c2VkID0gdHJ1ZTtcclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGF1c2luZyByZWNvcmRpbmc6JywgZXJyb3IpO1xyXG4gICAgICAgIC8vIENvbnNpZGVyIHVwZGF0aW5nIHRoZSBVSSB0byBzaG93IHRoZSBlcnJvciBzdGF0ZVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICByZXN1bWVSZWNvcmRpbmcoKSB7XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UucGF1c2VPclJlc3VtZVJlY29yZGluZyh0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQsICdyZXN1bWUnKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3RhcnRUaW1lcjEoKTtcclxuICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVzdW1pbmcgcmVjb3JkaW5nJywgZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldFRpbWVEaWZmZXJlbmNlKGlucHV0VGltZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHBhc3RUaW1lID0gbmV3IERhdGUoaW5wdXRUaW1lKS5nZXRUaW1lKCk7XHJcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuICAgIGxldCBkaWZmID0gTWF0aC5mbG9vcigoY3VycmVudFRpbWUgLSBwYXN0VGltZSkgLyAxMDAwKTsgLy8gdG90YWwgc2Vjb25kc1xyXG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKGRpZmYgLyAzNjAwKTtcclxuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChkaWZmICUgMzYwMCkgLyA2MCk7XHJcbiAgICBjb25zdCBzZWNvbmRzID0gZGlmZiAlIDYwO1xyXG5cclxuICAgIGNvbnN0IHBhZCA9ICh2YWx1ZTogbnVtYmVyKTogc3RyaW5nID0+IHZhbHVlLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIC8vIElmIGR1cmF0aW9uIGlzIDEgaG91ciBvciBtb3JlLCByZXR1cm4gSEg6bW06c3NcclxuICAgIGlmIChob3VycyA+IDApIHtcclxuICAgICAgcmV0dXJuIGAke3BhZChob3Vycyl9OiR7cGFkKG1pbnV0ZXMpfToke3BhZChzZWNvbmRzKX1gO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE90aGVyd2lzZSByZXR1cm4gbW06c3NcclxuICAgIHJldHVybiBgJHtwYWQobWludXRlcyl9OiR7cGFkKHNlY29uZHMpfWA7XHJcbiAgfVxyXG4gIHN0YXJ0VGltZXIxKCkge1xyXG4gICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbiA9IGludGVydmFsKDEwMDApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMudGltZUVsYXBzZWQrKztcclxuICAgIH0pO1xyXG4gIH1cclxuICBzdG9wUmVjb3JkaW5nVGltZXIoKSB7XHJcbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IC8vIFBhdXNlIHRoZSB0aW1lclxyXG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkOyAgICAgICAgLy8gT3B0aW9uYWxseSByZXNldCB0aGUgc3Vic2NyaXB0aW9uXHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEZvcm1hdHRlZFRpbWUoKSB7XHJcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcih0aGlzLnRpbWVFbGFwc2VkIC8gNjApO1xyXG4gICAgY29uc3Qgc2Vjb25kcyA9IHRoaXMudGltZUVsYXBzZWQgJSA2MDtcclxuICAgIHJldHVybiBgJHttaW51dGVzfToke3NlY29uZHMgPCAxMCA/ICcwJyA6ICcnfSR7c2Vjb25kc31gO1xyXG4gIH1cclxuICBwb2xsQ2FsbFN0YXR1cyhjYWxsQXV0aElkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG1heFRpbWUgPSAzMDAwMDsgLy8gUG9sbCBmb3IgdXAgdG8gMzAgc2Vjb25kc1xyXG4gICAgY29uc3QgcG9sbEludGVydmFsID0gMzAwMDsgLy8gUG9sbCBldmVyeSAzIHNlY29uZHNcclxuICAgIGxldCBlbGFwc2VkVGltZSA9IDA7XHJcbiAgICBjb25zdCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xyXG4gICAgICBlbGFwc2VkVGltZSArPSBwb2xsSW50ZXJ2YWw7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q2FsbFN0YXR1cyhjYWxsQXV0aElkKS50b1Byb21pc2UoKSBhcyBDYWxsU3RhdHVzUmVzcG9uc2U7XHJcbiAgICAgICAgaWYgKHN0YXR1c1Jlc3BvbnNlICYmIHN0YXR1c1Jlc3BvbnNlLmNhbGxEZXRhaWxzKSB7XHJcbiAgICAgICAgICB0aGlzLmNhbGxTdGF0dXMgPSBzdGF0dXNSZXNwb25zZS5jYWxsRGV0YWlscy5jYWxsU3RhdHVzO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2FsbFN0YXR1cyA9PT0gJ2luLXByb2dyZXNzJykge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxTaWQgPSBzdGF0dXNSZXNwb25zZS5jYWxsRGV0YWlscy5jYWxsU2lkO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZWNvcmRDYWxsICYmICF0aGlzLmlzUmVjb3JkaW5nKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdGFydFJlY29yZGluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2FsbFN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHtcclxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgICAgICAgdGhpcy5lbmRDYWxsKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcFJlY29yZGluZygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGFwc2VkVGltZSA+PSBtYXhUaW1lKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ01heCBwb2xsaW5nIHRpbWUgcmVhY2hlZC4gU3RvcHBpbmcgcG9sbC4nKTtcclxuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xyXG4gICAgICB9XHJcbiAgICB9LCBwb2xsSW50ZXJ2YWwpO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0VXNlckluZm9ybWF0aW9uKGlkOiBhbnkpIHtcclxuICAvLyAgIGlmKGlkKSB7XHJcbiAgLy8gICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0VXNlckluZm9ybWF0aW9uKGlkKS5zdWJzY3JpYmUoXHJcbiAgLy8gICAgIChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgLy8gICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UsICd1c2VySW5mb3JtYXRpb24nKTtcclxuICAvLyAgICAgfSwgZXJyb3IgPT4ge1xyXG4gIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN0YXJ0aW5nIHJlY29yZGluZycsIGVycm9yKTtcclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG4gIHNlbGVjdGVkSW5jb21pbmdDYWxsSW5mbyhkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGwgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0SG9sZENhbGxMaXN0KCkge1xyXG4gIC8vICAgbGV0IGhvbGRMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIC8vICAgbGV0IGlzQ29uZmVyZW5jZSA9IGZhbHNlO1xyXG4gIC8vICAgdGhpcy5jdXJyZW50Q2FsbExpc3QuZm9yRWFjaCgoYzogYW55KSA9PiB7XHJcbiAgLy8gICAgIGlmIChjPy5pc0hvbGQgJiYgIWM/LmlzQ29uZmVyZW5jZSkge1xyXG4gIC8vICAgICAgIGhvbGRMaXN0LnB1c2goYyk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgaWYgKGM/LmlzQ29uZmVyZW5jZSAmJiAhaXNDb25mZXJlbmNlKSB7XHJcbiAgLy8gICAgICAgaXNDb25mZXJlbmNlID0gdHJ1ZTtcclxuICAvLyAgICAgICBjWydpc0NvbmZlcmVuY2VDYWxsSG9sZCddID0gdHJ1ZTtcclxuICAvLyAgICAgICBob2xkTGlzdC5wdXNoKGMpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHJldHVybiBob2xkTGlzdDtcclxuICAvLyB9XHJcblxyXG4gIG9uQ2xpY2tFeHBhbmQoZGF0YTogYW55KSB7XHJcbiAgICBpZiAoZGF0YS5pZCAhPSB0aGlzLnNlbGVjdGVkVXNlckluZm8/LnBhcnRpY2lwYW50SWQpIHtcclxuICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gZGF0YTtcclxuICAgICAgdGhpcy5jaGVja1RleHRIZWlnaHQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9ICF0aGlzLmlzQ2xpY2tFeHBhbmQ7XHJcbiAgICAgIGlmICh0aGlzLmlzQ2xpY2tFeHBhbmQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuY2hlY2tUZXh0SGVpZ2h0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHNldEluY29taW5nQ2FsbFN0YXR1cyhkYXRhOiBhbnkpIHtcclxuICAvLyAgIGxldCBwYXlsb2FkID0ge1xyXG4gIC8vICAgICByZWNvcmRJZDogZGF0YT8uaWQsXHJcbiAgLy8gICAgIGlwQWRkcmVzczogJycsXHJcbiAgLy8gICAgIGlwQ291bnRyeTogJycsXHJcbiAgLy8gICAgIGNhbGxTdGF0dXM6ICdhbnN3ZXJlZCcsXHJcbiAgLy8gICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkLFxyXG4gIC8vICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCB8fCBkYXRhLmNvbmZlcmVuY2VJZCB8fCAnbm8nXHJcbiAgLy8gICB9XHJcbiAgLy8gICB0aGlzLmV4dGVuc2lvblNlcnZpY2Uuc2V0SW5jb21pbmdDYWxsU3RhdHVzKHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAvLyAgICAgY29uc29sZS5sb2cocmVzKVxyXG4gIC8vICAgfSlcclxuICAvLyB9XHJcblxyXG4gIHRvZ2dsZVNlYXJjaCgpIHtcclxuICAgIHRoaXMuaXNTZWFyY2hWaXNpYmxlID0gIXRoaXMuaXNTZWFyY2hWaXNpYmxlO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICBpZiAoIXRoaXMuaXNTZWFyY2hWaXNpYmxlKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gdGhpcy5jb250YWN0cztcclxuICAgICAgdGhpcy5maWx0ZXJlZFBhcnRpY2lwZW50TGlzdCA9IHRoaXMuYWxsUGFydGljaXBlbnRMaXN0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXIoKSB7XHJcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5zZWFyY2hUZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgdGhpcy5pc0RpcmVjdENhbGxPcHRpb25TaG93ID0gL15cXCs/XFxkKyQvLnRlc3QodGV4dClcclxuICAgIGlmICghdGV4dC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSB0aGlzLmNvbnRhY3RzO1xyXG4gICAgICAvLyB0aGlzLmZpbHRlcmVkTGlzdC5mb3JFYWNoKChjOiBhbnkpID0+IHtcclxuICAgICAgLy8gICBsZXQgaW5kZXggPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kSW5kZXgoKGNjOiBhbnkpID0+ICFjYz8uSXNDb25uZWN0ZWQgJiYgKGNjPy5waG9uZSA9PSBjPy5udW1iZXJzTGlzdFswXT8ubnVtYmVyIHx8IGNjPy5waG9uZSA9PSBjPy5udW1iZXJzTGlzdFsxXT8ubnVtYmVyKSk7XHJcbiAgICAgIC8vICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgLy8gICAgIGNbJ0lzQ29ubmVjdGVkJ10gPSB0cnVlO1xyXG4gICAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAgIC8vICAgICBjWydJc0Nvbm5lY3RlZCddID0gZmFsc2U7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXNOdW1lcmljU2VhcmNoID0gL15cXCs/XFxkKyQvLnRlc3QodGV4dCk7XHJcbiAgICBjb25zdCBleHBhbmRlZDogYW55W10gPSBbXTtcclxuICAgIHRoaXMuY29udGFjdHMuZm9yRWFjaCgoYzogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpc051bWVyaWNTZWFyY2gpIHtcclxuICAgICAgICAoYz8ubnVtYmVyc0xpc3QgfHwgW10pLmZvckVhY2goKG46IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKChuPy5udW1iZXIgfHwgJycpLmluY2x1ZGVzKHRleHQpKSB7XHJcbiAgICAgICAgICAgIGV4cGFuZGVkLnB1c2goeyAuLi5jLCBudW1iZXJzTGlzdDogW25dIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5hbWVNYXRjaCA9IChjPy5maXJzdE5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGV4dCkgfHxcclxuICAgICAgICAgIChjPy5sYXN0TmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXh0KSB8fFxyXG4gICAgICAgICAgKGM/Lm1pZGRsZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGV4dCkgfHxcclxuICAgICAgICAgIChjPy5uaWNrTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXh0KTtcclxuICAgICAgICBpZiAobmFtZU1hdGNoKSB7XHJcbiAgICAgICAgICBjb25zdCBudW1iZXJzID0gYz8ubnVtYmVyc0xpc3Q7XHJcbiAgICAgICAgICBpZiAobnVtYmVycyAmJiBudW1iZXJzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgbnVtYmVycy5mb3JFYWNoKChudW1PYmo6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGV4cGFuZGVkLnB1c2goeyAuLi5jLCBudW1iZXJzTGlzdDogW251bU9ial0gfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXhwYW5kZWQucHVzaChjKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5maWx0ZXJlZExpc3QgPSBleHBhbmRlZDtcclxuICAgIHRoaXMuZmlsdGVyZWRMaXN0LmZvckVhY2goKGM6IGFueSkgPT4ge1xyXG4gICAgICBjWydmcm9tTmFtZSddID0gdGhpcy5nZXROYW1lKGMuZnJvbSkgfHwgJyc7XHJcbiAgICAgIGNbJ3RvTmFtZSddID0gdGhpcy5nZXROYW1lKGMudG8pIHx8ICcnO1xyXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kSW5kZXgoKGNjOiBhbnkpID0+IGNjPy5waG9uZSA9PSBjPy5udW1iZXJzTGlzdFswXT8ubnVtYmVyKTtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICBjWydJc0Nvbm5lY3RlZCddID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjWydJc0Nvbm5lY3RlZCddID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBjaGVja1RleHRIZWlnaHQoKSB7XHJcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50ZXh0LWNvbnRhaW5lcicpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKGVsPy5zY3JvbGxIZWlnaHQgPiBlbD8uY2xpZW50SGVpZ2h0KSB7XHJcbiAgICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHRvZ2dsZVRleHQoKSB7XHJcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSAhdGhpcy5pc0V4cGFuZGVkO1xyXG4gIH1cclxuICBzaG93RGlzY29ubmVjdE1vZGFsID0gZmFsc2U7XHJcbiAgLy8gQ2FsbCB0aGlzIHdoZW4gY2FsbCBkaXNjb25uZWN0c1xyXG4gIG9uQ2FsbERpc2Nvbm5lY3RlZCgpIHtcclxuICAgIHRoaXMucmVzZXRMZWF2ZVRpbWVyKCk7XHJcbiAgICB0aGlzLnNob3dEaXNjb25uZWN0TW9kYWwgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZW5kQ29uZmVyZW5jZSgpIHtcclxuICAgIHRoaXMuc2hvd0Rpc2Nvbm5lY3RNb2RhbCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25mPy5jb25mZXJlbmNlSWQpIHtcclxuICAgICAgdGhpcy5vbkVuZENhbGwodGhpcy5zZWxlY3RlZENvbmYsIHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lbmRDYWxsKHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIENvbWJpbmVzIHRoZSB0d28gMjQtaG91ciBzZWxlY3RzIGludG8gbGVhdmVSZWFzb24gKEhIOk1NKSAqL1xyXG4gIG9uVGltZUNoYW5nZSgpIHtcclxuICAgIGlmICh0aGlzLmxlYXZlSG91ciAhPT0gJycgJiYgdGhpcy5sZWF2ZU1pbnV0ZSAhPT0gJycpIHtcclxuICAgICAgdGhpcy5sZWF2ZVJlYXNvbiA9IGAke3RoaXMubGVhdmVIb3VyfToke3RoaXMubGVhdmVNaW51dGV9YDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUhvdXJEcm9wZG93bigpIHtcclxuICAgIHRoaXMuc2hvd0hvdXJEcm9wZG93biA9ICF0aGlzLnNob3dIb3VyRHJvcGRvd247XHJcbiAgICB0aGlzLnNob3dNaW51dGVEcm9wZG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlTWludXRlRHJvcGRvd24oKSB7XHJcbiAgICB0aGlzLnNob3dNaW51dGVEcm9wZG93biA9ICF0aGlzLnNob3dNaW51dGVEcm9wZG93bjtcclxuICAgIHRoaXMuc2hvd0hvdXJEcm9wZG93biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0SG91cihoOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubGVhdmVIb3VyID0gaDtcclxuICAgIHRoaXMuc2hvd0hvdXJEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5vblRpbWVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdE1pbnV0ZShtOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubGVhdmVNaW51dGUgPSBtO1xyXG4gICAgdGhpcy5zaG93TWludXRlRHJvcGRvd24gPSBmYWxzZTtcclxuICAgIHRoaXMub25UaW1lQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBsZWF2ZUNvbmZlcmVuY2UoKSB7XHJcbiAgICB0aGlzLnNob3dEaXNjb25uZWN0TW9kYWwgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmlzUmVhc29uQ2hlY2tlZCkge1xyXG4gICAgICBsZXQgcGF5bG9hZCA9IHsgY29uZmVyZW5jZUlkOiB0aGlzLnNlbGVjdGVkQ29uZj8uY29uZmVyZW5jZUlkIHx8IHRoaXMuaG9zdG51bWJlcj8uY29uZmVyZW5jZUlkLCB0aW1lOiB0aGlzLmNvbnZlcnRISE1NVG9NaW51dGVzKHRoaXMubGVhdmVSZWFzb24pLCB0aW1lckRhdGU6IG5ldyBEYXRlKCkudG9TdHJpbmcoKSB9XHJcbiAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5zZXRUaW1lckZvckVuZENvbmZlcmVuY2VDYWxsKHBheWxvYWQpLnN1YnNjcmliZSgocmVzKSA9PiB7IH0pXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbmY/LmNvbmZlcmVuY2VJZCkge1xyXG4gICAgICBsZXQgY29uZmVyZW5jZSA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3Q/LmZpbmQoKHJlczogYW55KSA9PiByZXM/LmNvbmZlcmVuY2VJZCA9PSB0aGlzLnNlbGVjdGVkQ29uZj8uY29uZmVyZW5jZUlkKVxyXG4gICAgICBsZXQgcGFydGljaXBlbnRJbmZvID0gY29uZmVyZW5jZT8ucGFydGljaXBhbnRzPy5maW5kKChwYXJ0aWNpcGFudDogYW55KSA9PiAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8uZnJvbSlcclxuICAgICAgICAmJiBwYXJ0aWNpcGFudD8uY2xpZW50ICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnKSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py50bykgJiYgcGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgIXBhcnRpY2lwYW50Py5idXNpbmVzc051bWJlciAmJiBwYXJ0aWNpcGFudD8uaG9zdCkgJiYgcGFydGljaXBhbnQ/LmNsaWVudCkgJiYgIXBhcnRpY2lwYW50Py5pc0xlZnQpXHJcbiAgICAgIGlmIChwYXJ0aWNpcGVudEluZm8/LmlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbk11bHRpcGxlQ29uZmVyZW5jZXMoKSkge1xyXG4gICAgICAgICAgLy8gU2hvdyBwb3B1cCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGxlYXZpbmdcclxuICAgICAgICAgIHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQgPSBwYXJ0aWNpcGVudEluZm87XHJcbiAgICAgICAgICB0aGlzLmxlYXZlQ29uZkNvbmZlcmVuY2VOYW1lID0gdGhpcy5jb25mZXJlbmNlQ2FsbExpc3QuZmluZCgoYzogYW55KSA9PiBjLmNvbmZlcmVuY2VJZCA9PT0gY29uZmVyZW5jZS5jb25mZXJlbmNlSWQpPy5jYWxsTGFiZWwgfHwgJ0NvbmZlcmVuY2UnO1xyXG4gICAgICAgICAgdGhpcy5zaG93TGVhdmVDb25maXJtYXRpb25Nb2RhbCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMub25FbmRDYWxsKHBhcnRpY2lwZW50SW5mbyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9uRW5kQ2FsbCh0aGlzLmhvc3RudW1iZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjb252ZXJ0SEhNTVRvTWludXRlcyh0aW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgY29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKTtcclxuICAgIHJldHVybiAoaG91cnMgKiA2MCkgKyBtaW51dGVzO1xyXG4gIH1cclxuXHJcbiAgb25SZWplY3RDYWxsKGNhbGxJbmZvOiBhbnkpIHtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBjaGFubmVsSWQ6IGVudmlyb25tZW50LmNoYW5uZWxJZCxcclxuICAgICAgcmVjb3JkSWQ6IGNhbGxJbmZvPy5pZCxcclxuICAgICAgaXBBZGRyZXNzOiAnJyxcclxuICAgICAgaXBDb3VudHJ5OiAnJyxcclxuICAgICAgY2FsbFN0YXR1czogJ25vJyxcclxuICAgICAgZGV2aWNlSWQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgICAgIHVzZXJJZDogIHRoaXMudXNlcklkIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcclxuICAgICAgY29tcGFueUlkOiAnJyxcclxuICAgICAgY2xpZW50U2lkOiBjYWxsSW5mbz8uY2xpZW50U2lkLFxyXG4gICAgICBjb25mZXJlbmNlSWQ6IGNhbGxJbmZvPy5jb25mZXJlbmNlSWQgfHwgJ25vJ1xyXG4gICAgfVxyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnNldEluY29taW5nQ2FsbFN0YXR1cyhwYXlsb2FkKS5zdWJzY3JpYmUoYXN5bmMgKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmlsdGVyKChyZXM6IGFueSkgPT4gcmVzPy5pZCAhPSBjYWxsSW5mbz8uaWQpO1xyXG4gICAgICB0aGlzLm9uQ2xvc2VDMkNJbmZvUGFuZWwoKTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSlcclxuICB9XHJcbiAgXHJcbiAgaXNTZWxmTnVtYmVyKHBhcnRpY2lwYW50OiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmRldmljZU51bWJlckxpc3QuZmluZCgocmVzOiBhbnkpID0+IHJlcyA9PSAocGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBwYXJ0aWNpcGFudD8uZnJvbSA6IHBhcnRpY2lwYW50Py50bykpO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkU2hvd1NlcGFyYXRvcihpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB2aXNpYmxlQ291bnQgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5zbGljZSgwLCBpbmRleCkuZmlsdGVyKChjYWxsOiBhbnkpID0+ICFjYWxsPy5pc0NvbmZlcmVuY2VIb2xkKS5sZW5ndGg7XHJcbiAgICByZXR1cm4gdmlzaWJsZUNvdW50ID4gMDtcclxuICB9XHJcblxyXG4gIG9uQ2xvc2VDMkNJbmZvUGFuZWwoKSB7XHJcbiAgICAvLyB0aGlzLmlzQ2xpY2tFeHBhbmQgPSBmYWxzZTtcclxuICAgIGxldCBidXNpbmVzc0luZm8gPSB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8ucGFydGljaXBhbnRzLmZpbmQoKGl0ZW06IGFueSkgPT4gISFpdGVtPy5idXNpbmVzc051bWJlciAmJiB0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoaXRlbT8udG8pICYmICFpdGVtPy5ob3N0KTtcclxuICAgIGlmKGJ1c2luZXNzSW5mbykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKHJlcyA9PiBidXNpbmVzc0luZm8/LmlkID09IHJlcz8uaWQpO1xyXG4gICAgICB0aGlzLnRvZ2dsZUMyQ0luZm9QYW5lbCh0aGlzLnNlbGVjdGVkVXNlckluZm8pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXROYW1lKG51bWJlcjogYW55KSB7XHJcbiAgICAgIGxldCBjb250YWN0SW5mbyA9IHRoaXMuY29udGFjdHMuZmluZCgoYzogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGM/Lm51bWJlcnNMaXN0WzBdPy5udW1iZXIgID09IG51bWJlciB8fCBjPy5udW1iZXJzTGlzdFsxXT8ubnVtYmVyID09IG51bWJlcjtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBjb250YWN0SW5mbz8uZmlyc3ROYW1lIHx8IGNvbnRhY3RJbmZvPy5taWRkbGVOYW1lIHx8IGNvbnRhY3RJbmZvPy5sYXN0TmFtZSA/IGAke2NvbnRhY3RJbmZvPy5maXJzdE5hbWUgfHwgJyd9ICR7Y29udGFjdEluZm8/Lm1pZGRsZU5hbWUgfHwgJyd9ICR7Y29udGFjdEluZm8/Lmxhc3ROYW1lIHx8ICcnfWAgOiBudWxsXHJcbiAgfVxyXG4gIFxyXG4gIGdldEltZyhudW1iZXI6IGFueSkge1xyXG4gICAgbGV0IGNvbnRhY3RJbmZvID0gdGhpcy5jb250YWN0cy5maW5kKChjOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGM/Lm51bWJlcnNMaXN0WzBdPy5udW1iZXIgID09IG51bWJlciB8fCBjPy5udW1iZXJzTGlzdFsxXT8ubnVtYmVyID09IG51bWJlcjtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNvbnRhY3RJbmZvPy5pbWFnZSB8fCBudWxsXHJcbiAgfVxyXG5cclxuICBnZXQgc2hvd0VuZEFsbEJ1dHRvbigpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGFjdGl2ZVBhcnRpY2lwYW50cyA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbHRlcigoYzogYW55KSA9PiAhYy5pc0xlZnQpO1xyXG4gICAgcmV0dXJuIGFjdGl2ZVBhcnRpY2lwYW50cy5sZW5ndGggPiAyO1xyXG4gIH1cclxuICBjb25maXJtTGVhdmVQYXJ0aWNpcGFudChjOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmlzSW5NdWx0aXBsZUNvbmZlcmVuY2VzKCkpIHtcclxuICAgICAgdGhpcy5sZWF2ZUNvbmZQYXJ0aWNpcGFudCA9IGM7XHJcbiAgICAgIHRoaXMubGVhdmVDb25mQ29uZmVyZW5jZU5hbWUgPSB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdC5maW5kKFxyXG4gICAgICAgIChjb25mOiBhbnkpID0+IGNvbmYuY29uZmVyZW5jZUlkID09PSBjLmNvbmZlcmVuY2VJZFxyXG4gICAgICApPy5jYWxsTGFiZWwgfHwgJ0NvbmZlcmVuY2UnO1xyXG4gICAgICB0aGlzLnNob3dMZWF2ZUNvbmZpcm1hdGlvbk1vZGFsID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub25FbmRDYWxsKGMsIGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcbiAgaXNJbk11bHRpcGxlQ29uZmVyZW5jZXMoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgY291bnQgPSAwO1xyXG4gICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5mb3JFYWNoKChjb25mOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coY29uZik7XHJcbiAgICAgIGNvbnN0IG91clBhcnRpY2lwYW50ID0gY29uZi5wYXJ0aWNpcGFudHM/LmZpbmQoKHA6IGFueSkgPT5cclxuICAgICAgICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwPy5mcm9tKSAmJiBwPy5jbGllbnQpIHx8XHJcbiAgICAgICAgICAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHA/LnRvKSAmJiBwPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFwPy5idXNpbmVzc051bWJlcikpICYmXHJcbiAgICAgICAgIXA/LmlzTGVmdFxyXG4gICAgICApO1xyXG4gICAgICBjb25zb2xlLmxvZyhvdXJQYXJ0aWNpcGFudCk7XHJcbiAgICAgIGlmIChvdXJQYXJ0aWNpcGFudCkgY291bnQrKztcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNvdW50ID4gMTtcclxuICB9XHJcbiAgY29uZmlybUxlYXZlKCkge1xyXG4gICAgaWYgKHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQpIHtcclxuICAgICAgdGhpcy5vbkVuZENhbGwodGhpcy5sZWF2ZUNvbmZQYXJ0aWNpcGFudCwgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93TGVhdmVDb25maXJtYXRpb25Nb2RhbCA9IGZhbHNlO1xyXG4gICAgdGhpcy5sZWF2ZUNvbmZQYXJ0aWNpcGFudCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxMZWF2ZSgpIHtcclxuICAgIHRoaXMuc2hvd0xlYXZlQ29uZmlybWF0aW9uTW9kYWwgPSBmYWxzZTtcclxuICAgIHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQgPSBudWxsO1xyXG4gIH1cclxuICBnZXQgYWN0aXZlUGFydGljaXBhbnRzQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdD8uZmlsdGVyKChwOiBhbnkpID0+ICFwLmlzTGVmdCkubGVuZ3RoIHx8IDA7XHJcbiAgfVxyXG4gIHRydW5jYXRlVGV4dCh0ZXh0OiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmICghdGV4dCkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIHRleHQubGVuZ3RoID4gbWF4TGVuZ3RoID8gdGV4dC5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKSArICcuLi4nIDogdGV4dDtcclxuICB9XHJcblxyXG4gIGdldCB0b3RhbFBhcnRpY2lwYW50c0NvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5hbGxQYXJ0aWNpcGVudExpc3Q/Lmxlbmd0aCB8fCAwO1xyXG4gIH1cclxuICBvblJlYXNvbkNoZWNrQ2hhbmdlZChuZXdWYWx1ZTpib29sZWFuKSB7XHJcbiAgICBpZiAoIW5ld1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2hvd0hvdXJEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNob3dNaW51dGVEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmxlYXZlSG91ciA9ICcnO1xyXG4gICAgICB0aGlzLmxlYXZlTWludXRlID0gJyc7XHJcbiAgICAgIHRoaXMubGVhdmVSZWFzb24gPSAnJzsgXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlc2V0TGVhdmVUaW1lcigpIHtcclxuICAgIHRoaXMuaXNSZWFzb25DaGVja2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLmxlYXZlSG91ciA9ICcnO1xyXG4gICAgdGhpcy5sZWF2ZU1pbnV0ZSA9ICcnO1xyXG4gICAgdGhpcy5sZWF2ZVJlYXNvbiA9ICcnO1xyXG4gICAgdGhpcy5zaG93SG91ckRyb3Bkb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dNaW51dGVEcm9wZG93biA9IGZhbHNlO1xyXG4gIH1cclxuICBwcml2YXRlIHVuaG9sZFBlbmRpbmdDb25mZXJlbmNlKCkge1xyXG4gICAgaWYgKHRoaXMucGVuZGluZ05ld0NhbGxIZWxkUGFydGljaXBhbnQpIHtcclxuICAgICAgY29uc3QgcGFydGljaXBhbnQgPSB0aGlzLnBlbmRpbmdOZXdDYWxsSGVsZFBhcnRpY2lwYW50O1xyXG4gICAgICB0aGlzLnBlbmRpbmdOZXdDYWxsSGVsZFBhcnRpY2lwYW50ID0gbnVsbDtcclxuICAgICAgdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICBwYXJ0aWNpcGFudElkOiBbcGFydGljaXBhbnQuaWRdLFxyXG4gICAgICAgIGNvbmZlcmVuY2VJZDogcGFydGljaXBhbnQuY29uZmVyZW5jZUlkLFxyXG4gICAgICAgIGhvbGQ6IGZhbHNlLFxyXG4gICAgICAgIG11dGU6IHBhcnRpY2lwYW50Lm11dGUgfHwgZmFsc2VcclxuICAgICAgfSkudGhlbigocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gdW5ob2xkIHBlbmRpbmcgY29uZmVyZW5jZScsIHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KS5jYXRjaChlcnIgPT4gY29uc29sZS5lcnJvcignRXJyb3IgdW5ob2xkaW5nIHBlbmRpbmcgY29uZmVyZW5jZScsIGVycikpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuY2FsbERhdGEuZGlhbCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMudGltZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufSIsIjxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYWxsLWNvbnRhaW5lclwiICpuZ0lmPVwiIWlzTWluaW1pc2VkICYmIGN1cnJlbnRDYWxsTGlzdD8ubGVuZ3RoXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7J2NvbGxvcHMnOiBpc0NvbGxvcHMsICdpbmNvbWluZy1jYWxsLWNvbnRhaW5lcic6IGlzQ2xpY2tFeHBhbmQsICdjb250YWN0cy1vcGVuJzogc2hvd0NvbnRhY3RzUGFuZWwgfVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkZXItd3JhcHBlciBvdXRnb2luZy1jYWxsLWxvYWRlclwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd05ld0NhbGxMb2FkZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGl2ZS1jYWxsXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hbmltYXRpb24gY2FsbC1hbmltYXRpb24tcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhdmF0YXItaW1nXCIgW3NyY109XCJuZXdDYWxsTG9hZGVyRGF0YT8uaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsZXJEZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgxIHN0eWxlPVwibWFyZ2luLXRvcDogOHB4O1wiPkNvbm5lY3RpbmcuLi48L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XCI+e3sgbmV3Q2FsbExvYWRlckRhdGE/Lm5hbWUgfHwgbmV3Q2FsbExvYWRlckRhdGE/LnBob25lIHx8ICdVbmtub3duJyB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYWN0aW9uLWJ0bnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuIGVuZC1jYWxsLWJ0blwiIGRpc2FibGVkIChjbGljayk9XCJlbmRDYWxsKClcIiBzdHlsZT1cInZpc2liaWxpdHk6IGhpZGRlbjtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsX2VuZCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkaWFscGFkLWFsZXJ0c1wiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICdjb25mZXJlbmNlLWFsZXJ0JzogaXNDb25mZXJlbmNlICYmIGN1cnJlbnRDYWxsPy5pc0NvbmZlcmVuY2UsXHJcbiAgICAgICAgJ25vcm1hbC1jYWxsLWFsZXJ0JzogIWlzQ29uZmVyZW5jZVxyXG4gICAgICAgIH1cIiAqbmdJZj1cImNhbGxOdW1iZXJUb2FzdC5zaG93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaWFsYm94LXBvcDEgYWxlcnQgZmFkZSBzaG93XCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNhbGxOdW1iZXJUb2FzdC50eXBlXCJcclxuICAgICAgICAgICAgICAgIHJvbGU9XCJhbGVydFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSB0ZXh0LWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICBZb3UnciBjYWxsaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57e2NhbGxOdW1iZXJUb2FzdC5kaXNwbGF5TnVtfX08L3N0cm9uZz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGJ0bi1kaXNjIHAtMCBweC0xXCIgKGNsaWNrKT1cImNhbmNlbENhbGxUb2FzdCgpXCI+IENhbmNlbCBDYWxsIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBBbGwgdHlwZSBDYWxsIEhvbGQgbGlzdCAgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbC1iYW5uZXJcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIihjdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMSAmJiAhIWN1cnJlbnRDYWxsICYmICgoaXNDb25mZXJlbmNlQ2FsbEhvbGQgfHwgaXNDb25mZXJlbmNlKSB8fCAhaXNDb25mZXJlbmNlKSkgfHwgIWlzQWxsQWNjZXB0ZWRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29uZiBvZiBjdXJyZW50Q2FsbExpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGwtY29udGVudFwiICpuZ0lmPVwiIWNvbmY/LmlzQWNjZXB0Q2FsbCAmJiBjdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMSAmJiBkZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGNvbmY/LnRvKSAmJiBjb25mPy5pc05vdGlmaWNhdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydoZWxkLWNhbGwtc2VsZWN0ZWQnOiBzZWxlY3RlZFVzZXJJbmZvPy5wYXJ0aWNpcGFudElkICYmIHNlbGVjdGVkVXNlckluZm8/LnBhcnRpY2lwYW50SWQgPT09IGNvbmY/LnBhcnRpY2lwYW50SWR9XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29uZj8uYnVzaW5lc3NOdW1iZXIgPyB0b2dnbGVDMkNJbmZvUGFuZWwoY29uZikgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2N1cnNvcic6IGNvbmY/LmJ1c2luZXNzTnVtYmVyID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImF2YXRhci1pbWctd3JhcHBlciBib3JkZXItcmFkaXVzLTUwXCIgW3NyY109XCJjb25mPy5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgd2lkdGg9XCIzNVwiIGhlaWdodD1cIjM1XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGxlclwiICpuZ0lmPVwiIWNvbmY/LmJ1c2luZXNzTnVtYmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbGFiZWxcIj57e2NvbmY/LmZyb219fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1uYW1lXCI+e3tjb25mPy5mcm9tTmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbGVyXCIgKm5nSWY9XCJjb25mPy5idXNpbmVzc051bWJlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLW1haW4tbGFiZWxcIj5DYWxsIGZyb20gQzJDOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1sYWJlbFwiID48c3BhbiBbdGl0bGVdPVwiY29uZj8uc291cmNlTmFtZVwiPnt7IHRydW5jYXRlVGV4dChjb25mPy5zb3VyY2VOYW1lLCAxMCkgfX08L3NwYW4+fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFt0aXRsZV09XCJjb25mPy5wb2ludE5hbWVcIj57eyB0cnVuY2F0ZVRleHQoY29uZj8ucG9pbnROYW1lLCAxMCkgfX08L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLWxhYmVsXCI+e3sgdHJ1bmNhdGVUZXh0KGNvbmY/Lm5hbWUsIDI2KSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPT0gY29uZj8uaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25uZWN0aW5nLXdyYXBwZXIgIG1yLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJpbmdpbmctdGV4dFwiPkNvbm5lY3Rpbmc8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmVyZW5jZS1ob2xkLWNvbnRhY3QgcmVjZWl2ZS1idG5cIiAoY2xpY2spPVwid2FpdGluZ0NhbGxBY2NlcHQoY29uZilcIiBbZGlzYWJsZWRdPVwiaXNDb25uZWN0aW5nIHx8IGlzSW5jb21pbmdDYWxsQnRuRGlzYWJsZVwiICpuZ0lmPVwiaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgIT09IGNvbmY/LmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmVyZW5jZS1jb250YWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiB0aXRsZT1cIkNhbGwgRW5kXCIgKGNsaWNrKT1cIm9uUmVqZWN0Q2FsbChjb25mKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiPiBjYWxsX2VuZCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29uZj8uYnVzaW5lc3NOdW1iZXJcIiBjbGFzcz1cInRvZ2dsZWFycm93LWFycm93IG1lLTJcIiBpZD1cInRvZ2dsZWFycm93XCIgKGNsaWNrKT1cInRvZ2dsZUMyQ0luZm9QYW5lbChjb25mKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1pbmZvXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29uZiBvZiBjb25mZXJlbmNlQ2FsbExpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGwtY29udGVudFwiICpuZ0lmPVwiKGNvbmY/LmlzQ29uZmVyZW5jZUhvbGQgfHwgKHNob3dOZXdDYWxsTG9hZGVyICYmIGlzQ29uZmVyZW5jZUNhbGxIb2xkKSkgJiYgKGNvbmZlcmVuY2VDYWxsTGlzdC5sZW5ndGggPiAxIHx8IHNob3dOZXdDYWxsTG9hZGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydoZWxkLWNhbGwtc2VsZWN0ZWQnOiBjb25mPy5pc0J1c2luZXNzTnVtYmVyICYmIHNlbGVjdGVkVXNlckluZm8/LnBhcnRpY2lwYW50SWQgPT09IGNvbmY/LmJ1c2luZXNzUGFydGljaXBhbnRJZCAmJiBpc0NsaWNrRXhwYW5kfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbmY/LmlzQnVzaW5lc3NOdW1iZXIgPyB0b2dnbGVDMkNJbmZvUGFuZWwoY29uZikgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2N1cnNvcic6IGNvbmY/LmlzQnVzaW5lc3NOdW1iZXIgPyAncG9pbnRlcicgOiAnZGVmYXVsdCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaG9sZC1pY29uXCI+cGF1c2VfY2lyY2xlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1jYWxsZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1sYWJlbFwiPkhvbGQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbmFtZVwiPnt7Y29uZj8uY2FsbExhYmVsfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtaG9sZC1jb250YWN0XCIgW25nQ2xhc3NdPVwieyAnb24taG9sZCc6IGNvbmY/LmlzQ29uZmVyZW5jZUhvbGQgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3dhcENhbGxzKGNvbmYsdHJ1ZSlcIiBbZGlzYWJsZWRdPVwiaXNIb2xkQnRuRGlzYWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb25mPy5pc0NvbmZlcmVuY2VIb2xkXCIgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgW3RpdGxlXT1cIidSZXN1bWUnXCI+IHJlc3VtZSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmVyZW5jZS1jb250YWN0XCIgKGNsaWNrKT1cImVuZENvbmZlcmVuZWNlQ2FsbChjb25mKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgdGl0bGU9XCJDYWxsIEVuZFwiPiBjYWxsX2VuZCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9nZ2xlYXJyb3ctYXJyb3cgbWUtMlwiIGlkPVwidG9nZ2xlYXJyb3dcIiAoY2xpY2spPVwidG9nZ2xlQ29udGFjdHNQYW5lbChjb25mKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hbmdsZS1yaWdodFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gRm9yIHNpbmdsZSBpbmNvbWluZyBjYWxsIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLTEwMCBweS01XCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1wiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiY3VycmVudENhbGxMaXN0Lmxlbmd0aCA9PT0gMSAmJiBjdXJyZW50Q2FsbExpc3RbMF0/LmlzSW5jb21pbmdDYWxsICYmICFjdXJyZW50Q2FsbExpc3RbMF0/LmlzQWNjZXB0Q2FsbFwiPlxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjYWxsVG9OdW1cIj5JbmNvbWluZyBjYWxsIG9uIDxiciAvPjxzcGFuPnt7Y3VycmVudENhbGxMaXN0WzBdPy50byB8fCAnVW5rbm93biBOdW1iZXInfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxUb051bVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRDYWxsTGlzdFswXT8uYnVzaW5lc3NOdW1iZXI7IGVsc2Ugbm9ybWFsQ2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEMyQyBDQUxMXHJcbiAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+IEZyb20gOiB7eyBjdXJyZW50Q2FsbExpc3RbMF0/LnNvdXJjZU5hbWUgfX0gfCB7eyBjdXJyZW50Q2FsbExpc3RbMF0/LnBvaW50TmFtZSB9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbENhbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgSW5jb21pbmcgY2FsbCBvblxyXG4gICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGN1cnJlbnRDYWxsTGlzdFswXT8udG8gfHwgJ1Vua25vd24gTnVtYmVyJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hbmltYXRpb25cIiBbbmdDbGFzc109XCJ7J2NhbGwtYW5pbWF0aW9uLXBsYXknOiBzaG93UmluZ0FuaW1hdGlvbn1cIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhdmF0YXItaW1nXCIgW3NyY109XCJpbmNvbWluZ0Zyb21JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiB3aWR0aD1cIjEyMFwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbGVyRGV0YWlsc1wiICpuZ0lmPVwiIWN1cnJlbnRDYWxsTGlzdFswXT8uYnVzaW5lc3NOdW1iZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoMT57eyBjdXJyZW50Q2FsbExpc3RbMF0/Lm5hbWUgPyBjdXJyZW50Q2FsbExpc3RbMF0/Lm5hbWUgOiBjdXJyZW50Q2FsbExpc3RbMF0/LnBob25lIHx8ICdVbmtub3duIE51bWJlcicgfX08L2gxPlxyXG4gICAgICAgICAgICAgICAgPHAgKm5nSWY9XCIhIWN1cnJlbnRDYWxsTGlzdFswXT8ubmFtZVwiPnt7IGN1cnJlbnRDYWxsTGlzdFswXT8ucGhvbmUgfX08L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbGVyRGV0YWlsc1wiICpuZ0lmPVwiY3VycmVudENhbGxMaXN0WzBdPy5idXNpbmVzc051bWJlclwiPlxyXG4gICAgICAgICAgICAgICAgPHAgKm5nSWY9XCIhIWN1cnJlbnRDYWxsTGlzdFswXT8ubmFtZVwiPnt7IHRydW5jYXRlVGV4dChjdXJyZW50Q2FsbExpc3RbMF0/Lm5hbWUsIDQ1KSB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDxwID57eyBjdXJyZW50Q2FsbExpc3RbMF0/Lm51bWJlciB9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gQ29ubmVjdGluZyBvdmVybGF5IChzaG93biBhZnRlciBhY2NlcHQgYnRuIGNsaWNrLCBoaWRkZW4gb24gQVBJIHJlc3BvbnNlKSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbm5lY3Rpbmctb3ZlcmxheSBtdC1hdXRvXCIgKm5nSWY9XCJpc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZCA9PSBjdXJyZW50Q2FsbExpc3RbMF0/LmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29ubmVjdGluZy1kb3RzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPjxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY29ubmVjdGluZy10ZXh0XCI+Q29ubmVjdGluZy4uLjwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hY3Rpb24tYnRucyBtdC1hdXRvXCIgKm5nSWY9XCJpc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZCAhPSBjdXJyZW50Q2FsbExpc3RbMF0/LmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1idG4gcmVjZWl2ZS1idG5cIiAqbmdJZj1cIiFuZXdJbmNvbWluZ0NhbGxzTGlzdFswXT8uaXNDYWxsQ29ubmVjdGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlXCIgKGNsaWNrKT1cImFjY2VwdEluY29taW5nQ2FsbChjdXJyZW50Q2FsbExpc3RbMF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGwgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1idG4gcmVqZWN0LWJ0blwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIChjbGljayk9XCJvblJlamVjdENhbGwoY3VycmVudENhbGxMaXN0WzBdKVwiPiBjYWxsX2VuZCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gRm9yIHNpbmdsZSBhY3RpdmUgY2FsbCAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiKCFpc0NvbmZlcmVuY2UgfHwgaXNDb25mZXJlbmNlQ2FsbEhvbGQpICYmICghIWN1cnJlbnRDYWxsPy5pZCAmJiAhY3VycmVudENhbGw/LmlzQ29uZmVyZW5jZSkgJiYgY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiXHJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnZGlzcGxheSc6ICdmbGV4JywgJ2ZsZXgtZGlyZWN0aW9uJzogJ2NvbHVtbicsICdwb3NpdGlvbic6ICdyZWxhdGl2ZSd9XCIgY2xhc3M9XCJhY3RpdmUtY2FsbFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudENhbGw/LmJ1c2luZXNzTnVtYmVyO1wiIGNsYXNzPVwiY2FsbFRvTnVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQzJDIENBTExcclxuICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj4gRnJvbSA6IHt7IGN1cnJlbnRDYWxsPy51c2VySW5mb0lkPy5zb3VyY2VOYW1lIH19IHwge3sgY3VycmVudENhbGw/LnVzZXJJbmZvSWQ/LnBvaW50TmFtZSB9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hbmltYXRpb25cIiBbbmdDbGFzc109XCJ7J2NhbGwtYW5pbWF0aW9uLXBsYXknOiBzaG93UmluZ0FuaW1hdGlvbn1cIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhdmF0YXItaW1nXCIgKm5nSWY9XCIhY3VycmVudENhbGw/LmNsaWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjdXJyZW50Q2FsbD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGN1cnJlbnRDYWxsPy50b0ltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyA6IGN1cnJlbnRDYWxsPy5mcm9tSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhdmF0YXItaW1nXCIgKm5nSWY9XCJjdXJyZW50Q2FsbD8uY2xpZW50XCJcclxuICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImN1cnJlbnRDYWxsPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gY3VycmVudENhbGw/LmZyb21JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgOiBjdXJyZW50Q2FsbD8udG9JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxlckRldGFpbHNcIj5cclxuICAgICAgICAgICAgPCEtLSBDMkMgQnVzaW5lc3MgQ2FsbCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50Q2FsbD8uYnVzaW5lc3NOdW1iZXI7IGVsc2Ugbm9ybWFsQ2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMT57eyBjdXJyZW50Q2FsbD8udXNlckluZm9JZD8ubmFtZSB8fCAnVW5rbm93bicgfX08L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPnt7IGN1cnJlbnRDYWxsPy51c2VySW5mb0lkPy5udW1iZXIgfHwgY3VycmVudENhbGw/LmZyb20gfHwgJ1Vua25vd24nIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBOb3JtYWwgQ2FsbCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsQ2FsbD5cclxuICAgICAgICAgICAgICAgICAgICA8aDEgKm5nSWY9XCIhY3VycmVudENhbGw/LmNsaWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6JzhweCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRDYWxsPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnRDYWxsPy50b05hbWUgfHwgb3V0Z29pbmdDb250YWN0TmFtZSB8fCAnVW5rbm93bidcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudENhbGw/LmZyb21OYW1lIHx8ICdVbmtub3duJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvaDE+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgxICpuZ0lmPVwiY3VycmVudENhbGw/LmNsaWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6JzhweCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRDYWxsPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnRDYWxsPy5mcm9tTmFtZSB8fCAnVW5rbm93bidcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudENhbGw/LnRvTmFtZSB8fCBvdXRnb2luZ0NvbnRhY3ROYW1lIHx8ICdVbmtub3duJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvaDE+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCIhY3VycmVudENhbGw/LmNsaWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW50Q2FsbD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50Q2FsbD8udG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudENhbGw/LmZyb20gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJjdXJyZW50Q2FsbD8uY2xpZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRDYWxsPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnRDYWxsPy5mcm9tXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRDYWxsPy50byB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxoMSAqbmdJZj1cIiFjdXJyZW50Q2FsbD8uY2xpZW50XCIgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzogc2hvd0tleXBhZCA/ICcwJzogJzhweCd9XCI+e3tjdXJyZW50Q2FsbD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGN1cnJlbnRDYWxsPy50b05hbWUgfHwgb3V0Z29pbmdDb250YWN0TmFtZSB8fCAnVW5rbm93bicgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDYWxsPy5mcm9tTmFtZSB8fCAnVW5rbm93bid9fTwvaDE+XHJcbiAgICAgICAgICAgICAgICA8aDEgKm5nSWY9XCJjdXJyZW50Q2FsbD8uY2xpZW50XCIgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzogc2hvd0tleXBhZCA/ICcwJzogJzhweCd9XCI+e3tjdXJyZW50Q2FsbD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGN1cnJlbnRDYWxsPy5mcm9tTmFtZSB8fCAnVW5rbm93bicgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDYWxsPy50b05hbWUgfHwgJ1Vua25vd24nfX08L2gxPlxyXG4gICAgICAgICAgICAgICAgPHAgKm5nSWY9XCIhY3VycmVudENhbGw/LmNsaWVudFwiPnt7IGN1cnJlbnRDYWxsPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gY3VycmVudENhbGw/LnRvIHx8ICdVbmtub3duJyA6IGN1cnJlbnRDYWxsPy5mcm9tIHx8ICdVbmtub3duJ319PC9wPlxyXG4gICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJjdXJyZW50Q2FsbD8uY2xpZW50XCI+e3sgY3VycmVudENhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjdXJyZW50Q2FsbD8uZnJvbSB8fCAnVW5rbm93bicgOiBjdXJyZW50Q2FsbD8udG8gfHwgJ1Vua25vd24nfX08L3A+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGg0IHN0eWxlPVwibWFyZ2luLXRvcDogNHB4XCI+e3sgdGltZXJ9fTwvaDQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWFjdGlvbi1idG5zXCIgKm5nSWY9XCIhc2hvd0tleXBhZFwiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICcyMHB4J31cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtYnRuLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHN0YXJ0LXN0b3BcIiAqbmdJZj1cIiFpc1JlY29yZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsncmVjb3JkaW5nJzogaXNSZWNvcmRpbmcsICdzdG9wcGVkJzogIWlzUmVjb3JkaW5nLCAnZGlzYWJsZWQnOiB1c2VyU2V0dGluZ0luZm8/LmNhbGxSZWNvcmRpbmcgPT0gJ04nfVwiIChjbGljayk9XCJ0b2dnbGVSZWNvcmRpbmcoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpc1JlY29yZGluZyA/ICdTdG9wIFJlY29yZGluZycgOiAnU3RhcnQgUmVjb3JkaW5nJ1wiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbCB8fCB1c2VyU2V0dGluZ0luZm8/LmNhbGxSZWNvcmRpbmcgPT0gJ04nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVjb3JkaW5nLWljb25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhdXNlLXJlc3VtZS1idG5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHBhdXNlLXJlc3VtZVwiICpuZ0lmPVwiaXNSZWNvcmRpbmcgJiYgIWlzUGF1c2VkXCIgKGNsaWNrKT1cInBhdXNlUmVjb3JkaW5nKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBwYXVzZSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBwYXVzZS1yZXN1bWVcIiAqbmdJZj1cImlzUGF1c2VkXCIgKGNsaWNrKT1cInJlc3VtZVJlY29yZGluZygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gcGxheV9hcnJvdyA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNSZWNvcmRpbmdcIiBjbGFzcz1cInRpbWVyLWRpc3BsYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtYXR0ZWRUaW1lKCkgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBNdXRlL3VubXV0ZSBpbmNvbWluZyBjYWxsICAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11dGUtaW5jb21pbmctcm93XCIgKm5nSWY9XCJjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsICYmICFzaG93S2V5cGFkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm11dGUtaW5jb21pbmctbGFiZWxcIj5NdXRlIGluY29taW5nIGNhbGxzPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3dpdGNoIG1iLTBcIiB0aXRsZT1cIlNpbGVuY2UgdGhlIHJpbmd0b25lIG9mIG5ldyBpbmNvbWluZyBjYWxscyBkdXJpbmcgdGhpcyBjYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cInR3aWxpb1NlcnZpY2UuaXNJbmNvbWluZ011dGVkXCIgKGNoYW5nZSk9XCJ0b2dnbGVNdXRlSW5jb21pbmdDYWxsKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN3aXRjaC1zbGlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dLZXlwYWRcIiBjbGFzcz1cInNlbmREaWdpdFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNhbGwtaW5wdXRzXCIgaWQ9XCJjYWxsLWlucHV0XCIgWyhuZ01vZGVsKV09XCJjYWxsSW5wdXRcIiAoa2V5dXApPVwib25DYWxsSW5wdXRFbnRlcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaW5wdXQtY2xlYXItYnRuXCIgKm5nSWY9XCJjYWxsSW5wdXRcIiAoY2xpY2spPVwiY2xlYXJJbnB1dHMoKVwiPmNsb3NlX3NtYWxsPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwic2hvd0tleXBhZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtleS1idG5cIiAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXBhZFZhbFwiIChjbGljayk9XCJvbkNhbGxJbnB1dHMoa2V5Lm51bSlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2tleS5udW19fVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWFsYmhhYmV0c1wiPnt7a2V5LnRleHQgPyBrZXkudGV4dCA6ICcmbmJzcDsnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hY3Rpb24tYnRuc1wiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICc3MjN4J31cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtZXZlbmx5IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1zZWMtYnRuIG1yLTNcIiBbZGlzYWJsZWRdPVwiIWN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGxcIiAoY2xpY2spPVwidG9nZ2xlTXV0ZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiaXNNdXRlXCI+IG1pY19vZmYgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAqbmdJZj1cIiFpc011dGVcIj4gbWljIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1zZWMtYnRuIG1yLTNcIiBbZGlzYWJsZWRdPVwiIWN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKGNsaWNrKT1cInRvZ2dsZUtleXBhZCgpXCI+IHRyYW5zaXRpb25fZGlzc29sdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLXNlYy1idG5cIiBbZGlzYWJsZWRdPVwiIWN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29udGFjdHNQYW5lbChjdXJyZW50Q2FsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGdyb3Vwc18yIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1idG4gZW5kLWNhbGwtYnRuXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsXCIgKGNsaWNrKT1cImVuZENhbGwoZmFsc2UsIGN1cnJlbnRDYWxsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIGNvbmZlcmVuY2UgY2FsbCB2aWV3IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb25mZXJlbmNlLWNhbGwtdmlld1wiICpuZ0lmPVwiaXNDb25mZXJlbmNlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25mLWhlYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZi1pY29uIG1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gZ3JvdXBzIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZi10aXRsZVwiPnt7Y3VycmVudENvbmZlcmVuY2VDYWxsPy5jYWxsTGFiZWwgfHwgJ0NvbmZlcmVuY2UgQ2FsbCd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGwtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsLXRleHQgY29uZi1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2FsbCBvZiBjdXJyZW50Q2FsbExpc3Q7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjYWxsPy5pc0NvbmZlcmVuY2VIb2xkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNob3VsZFNob3dTZXBhcmF0b3IoaSlcIj4gJiA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNhbGw/LmNsaWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNTZWxmTnVtYmVyKGNhbGwpIGVsc2Ugc2VsZk51bWJlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2NhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjYWxsPy5mcm9tTmFtZSB8fCBjYWxsPy5mcm9tIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbD8udG9OYW1lIHx8IGNhbGw/LnRvfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzZWxmTnVtYmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Zb3U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNhbGw/LmNsaWVudFwiPnt7Y2FsbD8uZGlyZWN0aW9uID09IFwib3V0Z29pbmctY2FsbFwiID8gY2FsbD8udG9OYW1lIHx8IGNhbGw/LnRvIDogY2FsbD8uZnJvbU5hbWUgfHwgY2FsbD8uZnJvbSB8fCAnVW5rbm93biBudW1iZXInfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZi10aW1lclwiPnt7IGN1cnJlbnRDb25mZXJlbmNlQ2FsbD8udGltZXIgfHwgdGltZXIgfX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1hY3Rpb24tYnRucyBtdC1hdXRvXCIgKm5nSWY9XCIhc2hvd0tleXBhZFwiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICcyMHB4J31cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtYnRuLWNvbnRhaW5lclwiID5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBzdGFydC1zdG9wXCIgKm5nSWY9XCIhaXNSZWNvcmRpbmdcIiBbZGlzYWJsZWRdPVwidXNlclNldHRpbmdJbmZvLmNhbGxSZWNvcmRpbmcgPT0gJ04nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydyZWNvcmRpbmcnOiBpc1JlY29yZGluZywgJ3N0b3BwZWQnOiAhaXNSZWNvcmRpbmcsICdkaXNhYmxlZCc6IHVzZXJTZXR0aW5nSW5mbz8uY2FsbFJlY29yZGluZyA9PSAnTid9XCIgKGNsaWNrKT1cInRvZ2dsZVJlY29yZGluZygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImlzUmVjb3JkaW5nID8gJ1N0b3AgUmVjb3JkaW5nJyA6ICdTdGFydCBSZWNvcmRpbmcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVjb3JkaW5nLWljb25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhdXNlLXJlc3VtZS1idG5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHBhdXNlLXJlc3VtZVwiICpuZ0lmPVwiaXNSZWNvcmRpbmcgJiYgIWlzUGF1c2VkXCIgKGNsaWNrKT1cInBhdXNlUmVjb3JkaW5nKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBwYXVzZSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBwYXVzZS1yZXN1bWVcIiAqbmdJZj1cImlzUGF1c2VkXCIgKGNsaWNrKT1cInJlc3VtZVJlY29yZGluZygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gcGxheV9hcnJvdyA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNSZWNvcmRpbmdcIiBjbGFzcz1cInRpbWVyLWRpc3BsYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtYXR0ZWRUaW1lKCkgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBNdXRlL3VubXV0ZSBpbmNvbWluZyBjYWxsICAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11dGUtaW5jb21pbmctcm93XCIgKm5nSWY9XCJjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsICYmICFzaG93S2V5cGFkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm11dGUtaW5jb21pbmctbGFiZWxcIj5NdXRlIGluY29taW5nIGNhbGxzPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3dpdGNoIG1iLTBcIiB0aXRsZT1cIlNpbGVuY2UgdGhlIHJpbmd0b25lIG9mIG5ldyBpbmNvbWluZyBjYWxscyBkdXJpbmcgdGhpcyBjYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cInR3aWxpb1NlcnZpY2UuaXNJbmNvbWluZ011dGVkXCIgKGNoYW5nZSk9XCJ0b2dnbGVNdXRlSW5jb21pbmdDYWxsKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN3aXRjaC1zbGlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dLZXlwYWRcIiBjbGFzcz1cInNlbmREaWdpdCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiY2FsbC1pbnB1dHNcIiBpZD1cImNhbGwtaW5wdXRcIiBbKG5nTW9kZWwpXT1cImNhbGxJbnB1dFwiIChrZXl1cCk9XCJvbkNhbGxJbnB1dEVudGVyKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpbnB1dC1jbGVhci1idG5cIiAqbmdJZj1cImNhbGxJbnB1dFwiIChjbGljayk9XCJjbGVhcklucHV0cygpXCI+Y2xvc2Vfc21hbGw8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWNvbnRhaW5lciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCJzaG93S2V5cGFkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2V5LWJ0blwiICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5cGFkVmFsXCIgKGNsaWNrKT1cIm9uQ2FsbElucHV0cyhrZXkubnVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7a2V5Lm51bX19XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tYWxiaGFiZXRzXCI+e3trZXkudGV4dCA/IGtleS50ZXh0IDogJyZuYnNwOyd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNpcmNsZS1idG5cIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzTXV0ZX1cIiAoY2xpY2spPVwidG9nZ2xlTXV0ZSh0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiB7eyBpc011dGUgPyAnbWljX29mZicgOiAnbWljJyB9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjaXJjbGUtYnRuXCIgKGNsaWNrKT1cInRvZ2dsZUtleXBhZCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHRyYW5zaXRpb25fZGlzc29sdmUgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2lyY2xlLWJ0blwiIChjbGljayk9XCJ0b2dnbGVDb250YWN0c1BhbmVsKGN1cnJlbnRDYWxsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBncm91cHNfMiA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25mLWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNpcmNsZS1idG4gZGFuZ2VyXCIgKGNsaWNrKT1cImVuZENvbmZlcmVuZWNlQ2FsbChjdXJyZW50Q29uZmVyZW5jZUNhbGw/LnBhcnRpY2lwYW50c1swXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid2F2ZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIndhdmVzXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAyNCAxNTAgMjhcIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwibm9uZVwiIHNoYXBlLXJlbmRlcmluZz1cImF1dG9cIj5cclxuICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGlkPVwiZ2VudGxlLXdhdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTS0xNjAgNDRjMzAgMCA1OC0xOCA4OC0xOHMgNTggMTggODggMTggNTgtMTggODgtMTggNTggMTggODggMTggdjQ0aC0zNTJ6XCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwicGFyYWxsYXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIiB4PVwiNDhcIiB5PVwiMFwiIGZpbGw9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiIHg9XCI0OFwiIHk9XCIzXCIgZmlsbD1cInJnYmEoMjU1LDI1NSwyNTUsMC41KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCIgeD1cIjQ4XCIgeT1cIjdcIiBmaWxsPVwiI2ZmZlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBJbmNvbWluZyBjYWxsIHVzZXIgZGV0YWlscyBzaG93biBpbiBtb2RlbCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjYWxsLWNvbnRhaW5lci1tb2RlbCBwLTMgdGV4dC13aGl0ZSBtb2RlbC1jb250ZW50IGNhbGwtY29udGFpbmVyXCIgKm5nSWY9XCJpc0NsaWNrRXhwYW5kXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWluZm8tcGFuZWwtc2VjdGlvblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCIgKm5nSWY9XCJjdXJyZW50Q29uZmVyZW5jZUNhbGw/LmNvbmZlcmVuY2VJZCAhPSBzZWxlY3RlZFVzZXJJbmZvPy5jb25mZXJlbmNlSWQgJiYgbmV3SW5jb21pbmdDYWxsc0xpc3Q/Lmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgICAgIDxwPjwvcD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBkaWFsLWNsb3NlLWJ0biBcIiAoY2xpY2spPVwib25DbG9zZUMyQ0luZm9QYW5lbCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjZmZmZmZmXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwibTI1Ni0yMDAtNTYtNTYgMjI0LTIyNC0yMjQtMjI0IDU2LTU2IDIyNCAyMjQgMjI0LTIyNCA1NiA1Ni0yMjQgMjI0IDIyNCAyMjQtNTYgNTYtMjI0LTIyNC0yMjQgMjI0WlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIHVzZXItaW5mby1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBteS0zXCI+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LXdoaXRlXCI+QzJDIENBTEwgOiB7e3NlbGVjdGVkVXNlckluZm8/LnNvdXJjZU5hbWV9fSB8IHt7c2VsZWN0ZWRVc2VySW5mbz8ucG9pbnROYW1lfX08L2gzPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInRleHQtd2hpdGUgbWItMVwiPk5hbWU6PC9oNT5cclxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cInRleHQtd2hpdGUgdXNlck5hbWVcIj57e3NlbGVjdGVkVXNlckluZm8/Lm5hbWV9fTwvaDQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZi0xM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTFcIj5FeHRlbnNpb246PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC0yXCI+e3tzZWxlY3RlZFVzZXJJbmZvPy5leHRlbnNpb259fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xXCI+TnVtYmVyOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+e3tzZWxlY3RlZFVzZXJJbmZvPy5udW1iZXJ9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0yXCI+RW1haWw6IDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7c2VsZWN0ZWRVc2VySW5mbz8uZW1haWx9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTJcIj5TdWJqZWN0OjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtMiBzdWJqZWN0LXRleHRcIiB0aXRsZT1cInt7c2VsZWN0ZWRVc2VySW5mbz8uc3ViamVjdH19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlbGVjdGVkVXNlckluZm8/LnN1YmplY3R9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTIgbWItMVwiPkltYWdlOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbGxpcHNpc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRVc2VySW5mbz8uaW1hZ2UgJiYgc2VsZWN0ZWRVc2VySW5mbz8uaW1hZ2UgIT09ICctJzsgZWxzZSBub0ltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJ7e3NlbGVjdGVkVXNlckluZm8/LmltYWdlfX1cIiBhbHQ9XCJcIiB3aWR0aD1cIjE1MFwiIGNsYXNzPVwibWwtMlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JbWFnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIj5ObyBJbWFnZSBBdmFpbGFibGU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMVwiPk1lc3NhZ2U6PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb250YWluZXJcIiBbY2xhc3MuZXhwYW5kZWRdPVwiaXNFeHBhbmRlZFwiPnt7c2VsZWN0ZWRVc2VySW5mbz8ubWVzc2FnZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRvZ2dsZS1idG5cIiAqbmdJZj1cInNob3dCdXR0b25cIiAoY2xpY2spPVwidG9nZ2xlVGV4dCgpXCI+e3sgaXNFeHBhbmRlZCA/ICdTZWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXNzJyA6ICdTZWUgbW9yZScgfX08L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gY29udGFjdCBsaXN0IHBhbmVsIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhY3RzLXBhbmVsXCIgKm5nSWY9XCJzaG93Q29udGFjdHNQYW5lbCAmJiAhc2hvd05ld0NhbGxMb2FkZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtbG9hZGVyLW92ZXJsYXkgcC0zIHRleHQtY2VudGVyXCIgKm5nSWY9XCJpc1BhcnRpY2lwYW50UGFuZWxMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXNlY29uZGFyeVwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkxvYWRpbmcuLi48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cIm10LTJcIj48L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RzLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFydGljaXBhbnQtbGlzdC10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAge3sgc2VsZWN0ZWRDb25mTmFtZSB8fCAnQ29uZmVyZW5jZScgfX0gUGFydGljaXBhbnRzXHJcbiAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b3RhbFBhcnRpY2lwYW50c0NvdW50IDwgMzsgZWxzZSBjb25mSGVhZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIENhbGwgUGFydGljaXBhbnRzXHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29uZkhlYWRpbmc+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPiAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgIDxwPjwvcD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBkaWFsLWNsb3NlLWJ0blwiIChjbGljayk9XCJ0b2dnbGVDb250YWN0c1BhbmVsKHt9LCB0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjI0cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzAwMDAwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIm0yNTYtMjAwLTU2LTU2IDIyNC0yMjQtMjI0LTIyNCA1Ni01NiAyMjQgMjI0IDIyNC0yMjQgNTYgNTYtMjI0IDIyNCAyMjQgMjI0LTU2IDU2LTIyNC0yMjQtMjI0IDIyNFpcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBTRUFSQ0ggSU5QVVQgKHZpc2libGUgd2hlbiBpc1NlYXJjaFZpc2libGUgPSB0cnVlKSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWJhciBwLTMgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJBZGQgYSBwYXJ0aWNpcGFudCBieSBOYW1lIG9yIE51bWJlclwiIHRpdGxlPVwiQWRkIGEgcGFydGljaXBhbnQgYnkgTmFtZSBvciBOdW1iZXJcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIiAoaW5wdXQpPVwiYXBwbHlGaWx0ZXIoKVwiIC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFjdHMtbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBmaWx0ZXJlZExpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pdGVtXCIgKm5nSWY9XCJzZWFyY2hUZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjb250YWN0LWF2YXRhclwiIFtzcmNdPVwiYz8uaW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtbmFtZVwiPnt7Yz8uZmlyc3ROYW1lfX0ge3tjPy5taWRkbGVOYW1lfX0ge3tjPy5sYXN0TmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiPnt7IChjPy5udW1iZXJzTGlzdCAmJiBjPy5udW1iZXJzTGlzdFswXT8ubnVtYmVyKSB9fXt7IGM/Lm51bWJlcnNMaXN0WzBdPy5udW1iZXJMYWJlbCA/ICcgKCcgKyBjLm51bWJlcnNMaXN0WzBdLm51bWJlckxhYmVsICsgJyknIDogJycgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250YWN0LWNhbGwtYnRuIGNvbnRhY3QtYWRkLWJ0biBtci0yXCIgKGNsaWNrKT1cImNhbGxDb250YWN0KGMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWM/LklzQ29ubmVjdGVkXCIgdGl0bGU9XCJBZGQgdG8gY2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGFkZCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0blwiIChjbGljayk9XCJDYWxsVG9VbnNhdmVkTnVtYmVyKGM/Lm51bWJlcnNMaXN0WzBdPy5udW1iZXIsIHRydWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWM/LklzQ29ubmVjdGVkXCIgdGl0bGU9XCJOZXcgQ2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGwgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaWx0ZXJlZExpc3QubGVuZ3RoICYmIGlzRGlyZWN0Q2FsbE9wdGlvblNob3cgJiYgc2VhcmNoVGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbnRhY3QtYXZhdGFyXCIgW3NyY109XCInYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiPnt7IHNlYXJjaFRleHQgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250YWN0LWNhbGwtYnRuIGNvbnRhY3QtYWRkLWJ0biBtci0yXCIgKGNsaWNrKT1cIkNhbGxUb1Vuc2F2ZWROdW1iZXIoc2VhcmNoVGV4dClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJBZGQgdG8gY2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGFkZCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0blwiIChjbGljayk9XCJDYWxsVG9VbnNhdmVkTnVtYmVyKHNlYXJjaFRleHQsIHRydWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiTmV3IENhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RzLWxpc3RcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1iLTAgdGl0bGVcIj5BY3RpdmUgcGFydGljaXBhbnRzICh7eyBhY3RpdmVQYXJ0aWNpcGFudHNDb3VudCB9fSk8L2g1PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGhyIGNsYXNzPVwibWItMiBtdC0xXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgZmlsdGVyZWRQYXJ0aWNpcGVudExpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWl0ZW1cIiAqbmdJZj1cIiFjPy5pc0xlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29udGFjdC1hdmF0YXJcIiAqbmdJZj1cIiFjPy5jbGllbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy50b0ltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyA6IGM/LmZyb21JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjb250YWN0LWF2YXRhclwiICpuZ0lmPVwiYz8uY2xpZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8uZnJvbUltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyA6IGM/LnRvSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LW5hbWVcIiAqbmdJZj1cIiFjPy5jbGllbnRcIj57e2M/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy50b05hbWUgfHwgJ1Vua25vd24nIDogYz8uZnJvbU5hbWUgfHwgJ1Vua25vd24nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LXRpdGxlXCIgKm5nSWY9XCIhYz8uY2xpZW50XCI+e3sgYz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LnRvIHx8ICdVbmtub3duJyA6IGM/LmZyb20gfHwgJ1Vua25vd24nfX08L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LW5hbWVcIiAqbmdJZj1cImM/LmNsaWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1NlbGZOdW1iZXIoYykgZWxzZSBzZWxmTnVtYmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8uZnJvbU5hbWUgfHwgJ1Vua25vd24nIDogYz8udG9OYW1lIHx8ICdVbmtub3duJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NlbGZOdW1iZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WW91PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LXRpdGxlXCIgKm5nSWY9XCJjPy5jbGllbnRcIj57eyBjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8uZnJvbSB8fCAnVW5rbm93bicgOiBjPy50byB8fCAnVW5rbm93bid9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgKm5nSWY9XCJjPy5ob3N0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1sYWJlbFwiPk9yZ2FuaXplcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImM/LmpvaW5lZCAmJiAhYz8uaG9zdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29ubmVjdGluZy13cmFwcGVyIG1yLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmluZ2luZy10ZXh0XCI+UmluZ2luZzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG90c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ljwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYz8uaG9zdCAmJiBjPy5pc0hvbGQgJiYgIShkZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGM/LmZyb20pIHx8IChkZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGM/LnRvKSAmJiBjPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbm5lY3Rpbmctd3JhcHBlciBtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9uSG9sZC10ZXh0XCI+T24gSG9sZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjPy5qb2luZWQgfHwgYz8uaG9zdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWljLWJ0biBtci0yXCIgW2Rpc2FibGVkXT1cImM/LmlzSG9sZFwiIChjbGljayk9XCJvbk11dGVVc2VyKGMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAqbmdJZj1cImM/LmlzTXV0ZVwiPiBtaWNfb2ZmIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiIWM/LmlzTXV0ZVwiPiBtaWMgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtaG9sZC1jb250YWN0IG1yLTJcIiBbbmdDbGFzc109XCJ7ICdvbi1ob2xkJzogYz8uaXNIb2xkIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSG9sZENhbGwoYylcIiAqbmdJZj1cIiFjPy5ob3N0IHx8IChjPy5ob3N0ICYmIChkZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGM/LmZyb20pIHx8IChkZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGM/LnRvKSAmJiBjPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnKSkpXCIgW2Rpc2FibGVkXT1cImlzSG9sZEJ0bkRpc2FibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWM/LmlzSG9sZFwiIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIFt0aXRsZV09XCInSG9sZCdcIj4gcGhvbmVfcGF1c2VkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjPy5pc0hvbGRcIiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBbdGl0bGVdPVwiJ1Jlc3VtZSdcIj4gcmVzdW1lIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtY29udGFjdFwiIChjbGljayk9XCJjb25maXJtTGVhdmVQYXJ0aWNpcGFudChjKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWM/Lmhvc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgdGl0bGU9XCJDYWxsIEVuZFwiPiBjYWxsX2VuZCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtY29udGFjdFwiIChjbGljayk9XCJlbmRDb25mZXJlbmVjZUNhbGwoYylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImM/Lmhvc3QgJiYgKGRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoYz8uZnJvbSkgfHwgKGRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoYz8udG8pICYmIGM/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiB0aXRsZT1cIkNhbGwgRW5kXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGhyIGNsYXNzPVwibS0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIHB4LTJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1iLTAgdGl0bGVcIj5QYXJ0aWNpcGFudCBhZGRlZCB0byB0aGUgY2FsbDwvaDU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aHIgY2xhc3M9XCJtYi0yIG10LTFcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBmaWx0ZXJlZFBhcnRpY2lwZW50TGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaXRlbVwiICpuZ0lmPVwiYz8uaXNMZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbnRhY3QtYXZhdGFyXCIgKm5nSWY9XCIhYz8uY2xpZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8udG9JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgOiBjPy5mcm9tSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29udGFjdC1hdmF0YXJcIiAqbmdJZj1cImM/LmNsaWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiYz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb21JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgOiBjPy50b0ltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCIgKm5nSWY9XCIhYz8uY2xpZW50XCI+e3tjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8udG9OYW1lIHx8ICdVbmtub3duJyA6IGM/LmZyb21OYW1lIHx8ICdVbmtub3duJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtdGl0bGVcIiAqbmdJZj1cIiFjPy5jbGllbnRcIj57eyBjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8udG8gfHwgJ1Vua25vd24nIDogYz8uZnJvbSB8fCAnVW5rbm93bid9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCIgKm5nSWY9XCJjPy5jbGllbnRcIj57e2M/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy5mcm9tTmFtZSB8fCAnVW5rbm93bicgOiBjPy50b05hbWUgfHwgJ1Vua25vd24nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LXRpdGxlXCIgKm5nSWY9XCJjPy5jbGllbnRcIj57eyBjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8uZnJvbSB8fCAnVW5rbm93bicgOiBjPy50byB8fCAnVW5rbm93bid9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgKm5nSWY9XCJjPy5ob3N0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1sYWJlbFwiPk9yZ2FuaXplcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbm5lY3Rpbmctd3JhcHBlclwiICpuZ0lmPVwiYz8uam9pbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmluZ2luZy10ZXh0XCI+UmluZ2luZzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ljwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmVyZW5jZS1jb250YWN0XCIgKGNsaWNrKT1cIm9uRW5kQ2FsbChjLCBmYWxzZSwgdHJ1ZSlcIiAqbmdJZj1cIiFjPy5ob3N0ICYmIGM/LmpvaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiB0aXRsZT1cIkNhbGwgRW5kXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0biBjb250YWN0LWFkZC1idG5cIiAqbmdJZj1cIiFjPy5jbGllbnQgJiYgIWM/LmpvaW5lZCAmJiAhYz8uYnVzaW5lc3NOdW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiQ2FsbFRvVW5zYXZlZE51bWJlcihjLmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy50byA6IGM/LmZyb20sIGZhbHNlLCB7IHNraXBEdXBsaWNhdGVDaGVjazogdHJ1ZSB9LCBjKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gYWRkIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlJlam9pbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0biBjb250YWN0LWFkZC1idG5cIiAqbmdJZj1cImM/LmNsaWVudCAmJiAhYz8uam9pbmVkICYmICFjPy5idXNpbmVzc051bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJDYWxsVG9VbnNhdmVkTnVtYmVyKGMuZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb20gOiBjPy50bywgZmFsc2UsIHsgc2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlIH0sIGMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBhZGQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+UmVqb2luPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBDb25mZXJlbmNlIFdhcm5pbmcgTW9kYWwgLS0+XHJcbjxkaXYgY2xhc3M9XCJjdXN0b20tbW9kYWxcIiAqbmdJZj1cInNob3dDb25mZXJlbmNlV2FybmluZ01vZGFsXCI+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgd2FybmluZy1tb2RhbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIndhcm5pbmctaWNvblwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj53YXJuaW5nPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8aDM+Q29uZmVyZW5jZSBDYWxsIFdhcm5pbmc8L2gzPlxyXG4gICAgPHA+XHJcbiAgICAgIFN0YXJ0aW5nIGEgbmV3IGNhbGwgd2lsbCBwdXQgdGhlIGN1cnJlbnQgY29uZmVyZW5jZSBvbiBob2xkXHJcbiAgICAgIGFuZCBjYW5ub3QgYmUgbWVyZ2VkIGxhdGVyLlxyXG4gICAgPC9wPlxyXG4gICAgPGRpdiBjbGFzcz1cIndhcm5pbmctYWN0aW9uc1wiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ0blwiIChjbGljayk9XCJjYW5jZWxOZXdDYWxsKClcIj5cclxuICAgICAgICBDYW5jZWxcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJwcm9jZWVkLWJ0blwiIChjbGljayk9XCJjb25maXJtTmV3Q2FsbCgpXCI+XHJcbiAgICAgICAgUHJvY2VlZFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwibWluLWNhbGwtY29udGFpbmVyXCIgKm5nSWY9XCJpc01pbmltaXNlZFwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGZ1bGxzY3JlZW5cIiAoY2xpY2spPVwibWF4aW1pc2VEaWFscGFkKClcIj4gb3Blbl9pbl9mdWxsIDwvc3Bhbj5cclxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyB3aWR0aDogMTAwJVwiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tY2FsbC1hbmltYXRpb25cIiBpZD1cImNhbGwtYXZhdGFyXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibWluLWF2YXRhci1pbWdcIiBbc3JjXT1cImNhbGxEYXRhLmltZ1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tY2FsbGVyRGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2NhbGxEYXRhLm5hbWV9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbjogMFwiPnt7Y2FsbERhdGEuZGlzcGxheU51bSA/IGNhbGxEYXRhLmRpc3BsYXlOdW0gOiBjYWxsRGF0YS5waG9uZSB9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtaW4tYnRuLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdGltZXJcIj57e3RpbWVyfX08L2Rpdj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWluLWNhbGwtc2VjLWJ0blwiIChjbGljayk9XCJ0b2dnbGVNdXRlKClcIiBbZGlzYWJsZWRdPVwiZGlzYmFsZUVuZENhbGxCdG5cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCJpc011dGVcIj4gbWljX29mZiA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiIWlzTXV0ZVwiPiBtaWMgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtaW4tY2FsbC1idG4gZW5kLWNhbGwtYnRuXCIgW2Rpc2FibGVkXT1cImRpc2JhbGVFbmRDYWxsQnRuXCIgKGNsaWNrKT1cImVuZENhbGwoKVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48IS0tIENhbGwgRGlzY29ubmVjdCBNb2RhbCAtLT5cclxuPGRpdiBjbGFzcz1cImN1c3RvbS1tb2RhbFwiICpuZ0lmPVwic2hvd0Rpc2Nvbm5lY3RNb2RhbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgcC0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RzLWhlYWRlciBwLTAgcGItMlwiPlxyXG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJ0aXRsZSBtYi0wXCI+e3tzZWxlY3RlZENvbmY/LmNvbk5hbWUgfHwgJ0NhbGwnfX0gRGlzY29ubmVjdDwvaDQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBkaWFsLWNsb3NlLWJ0blwiIChjbGljayk9XCJzaG93RGlzY29ubmVjdE1vZGFsID0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgd2lkdGg9XCIyNHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMwMDAwMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJtMjU2LTIwMC01Ni01NiAyMjQtMjI0LTIyNC0yMjQgNTYtNTYgMjI0IDIyNCAyMjQtMjI0IDU2IDU2LTIyNCAyMjQgMjI0IDIyNC01NiA1Ni0yMjQtMjI0LTIyNCAyMjRaXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhbnQtYm9keSBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgRXhpdGluZyB0aGlzIGNhbGwgd2lsbCBub3QgZW5kIHRoZSBjb25mZXJlbmNlLiBUaGUgc2Vzc2lvbiB3aWxsIGNvbnRpbnVlLCBhbmQgY2hhcmdlcyB3aWxsIGluY3VyIHRvXHJcbiAgICAgICAgICAgICAgICB5b3VyXHJcbiAgICAgICAgICAgICAgICBhY2NvdW50LlxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdGFydCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTAgbXItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cImlzUmVhc29uQ2hlY2tlZFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uUmVhc29uQ2hlY2tDaGFuZ2VkKCRldmVudClcIiBjbGFzcz1cIm1lLTJcIi8+XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtcGlja2VyLTI0aHJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIEhvdXIgcGlja2VyIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tdGltZS1zZWxlY3RcIiBbY2xhc3MuZGlzYWJsZWQtcGlja2VyXT1cIiFpc1JlYXNvbkNoZWNrZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS10aW1lLWRpc3BsYXlcIiAoY2xpY2spPVwiaXNSZWFzb25DaGVja2VkICYmIHRvZ2dsZUhvdXJEcm9wZG93bigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBsZWF2ZUhvdXIgfHwgJ0hIJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWNrZXItYXJyb3dcIj4mIzk2NjA7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS10aW1lLW9wdGlvbnNcIiAqbmdJZj1cInNob3dIb3VyRHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tdGltZS1vcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaCBvZiBob3Vyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJsZWF2ZUhvdXIgPT09IGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SG91cihoKVwiPnt7IGggfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lLXNlcFwiPjo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBNaW51dGUgcGlja2VyIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tdGltZS1zZWxlY3RcIiBbY2xhc3MuZGlzYWJsZWQtcGlja2VyXT1cIiFpc1JlYXNvbkNoZWNrZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS10aW1lLWRpc3BsYXlcIiAoY2xpY2spPVwiaXNSZWFzb25DaGVja2VkICYmIHRvZ2dsZU1pbnV0ZURyb3Bkb3duKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxlYXZlTWludXRlIHx8ICdNTScgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGlja2VyLWFycm93XCI+JiM5NjYwOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tdGltZS1vcHRpb25zXCIgKm5nSWY9XCJzaG93TWludXRlRHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tdGltZS1vcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbSBvZiBtaW51dGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImxlYXZlTWludXRlID09PSBtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE1pbnV0ZShtKVwiPnt7IG0gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gZW5kLWJ0blwiIChjbGljayk9XCJsZWF2ZUNvbmZlcmVuY2UoKVwiIFtkaXNhYmxlZF09XCJpc1JlYXNvbkNoZWNrZWQgJiYgKCFsZWF2ZUhvdXIgfHwgIWxlYXZlTWludXRlKVwiPlxyXG4gICAgICAgICAgICAgICAgTGVhdmVcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gZW5kLWJ0blwiIChjbGljayk9XCJlbmRDb25mZXJlbmNlKClcIiAqbmdJZj1cInNob3dFbmRBbGxCdXR0b25cIj5cclxuICAgICAgICAgICAgICAgIEVuZCBBbGxcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJjdXN0b20tbW9kYWxcIiAqbmdJZj1cInNob3dMZWF2ZUNvbmZpcm1hdGlvbk1vZGFsXCI+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgd2FybmluZy1tb2RhbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIndhcm5pbmctaWNvblwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5pbmZvPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8aDM+TGVhdmUgQ29uZmVyZW5jZTwvaDM+XHJcbiAgICA8cD5cclxuICAgICAgWW91IGFyZSBhYm91dCB0byBsZWF2ZSA8c3Ryb25nPnt7IGxlYXZlQ29uZkNvbmZlcmVuY2VOYW1lIH19PC9zdHJvbmc+LiBcclxuICAgICAgQXJlIHlvdSBzdXJlP1xyXG4gICAgPC9wPlxyXG4gICAgPGRpdiBjbGFzcz1cIndhcm5pbmctYWN0aW9uc1wiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ0blwiIChjbGljayk9XCJjYW5jZWxMZWF2ZSgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJwcm9jZWVkLWJ0blwiIChjbGljayk9XCJjb25maXJtTGVhdmUoKVwiPkxlYXZlPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
2394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvY29tcG9uZW50cy9jYWxsLXByb2dyZXNzL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGlhbGJveC9zcmMvbGliL2NvbXBvbmVudHMvY2FsbC1wcm9ncmVzcy9jYWxsLXByb2dyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFRLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQW1COUMsTUFBTSxPQUFPLHFCQUFxQjtJQTZIaEMsWUFBb0IsZ0JBQWtDLEVBQVUsR0FBc0IsRUFDN0UsYUFBNEIsRUFDM0IsU0FBMkIsRUFDM0IsMEJBQXNEO1FBSDVDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUM3RSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQiwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO1FBNUh2RCx5QkFBb0IsR0FBUSxFQUFFLENBQUM7UUFDL0IsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFDdkIsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FB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U0FBUzsrQkFDRSxtQkFBbUI7Mk9BS3BCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBa0JHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFpRkUsbUJBQW1CO3NCQUEzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2FsbCwgRGV2aWNlIH0gZnJvbSAnQHR3aWxpby92b2ljZS1zZGsnO1xyXG5pbXBvcnQgeyBFeHRlbnNpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9leHRlbnNpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFR3aWxpb1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3R3aWxpby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnRzJztcclxuaW1wb3J0IHN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xyXG5pbXBvcnQgeyBrZXlwYWQgfSBmcm9tICcuLi8uLi8uLi9rZXlwYWQnO1xyXG5pbXBvcnQgeyBpbnRlcnZhbCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9pbmNvbWVpbmctY2FsbC1zb2NrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IElwQWRkcmVzc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2lwLWFkZHJlc3Muc2VydmljZSc7XHJcbmludGVyZmFjZSBDYWxsRGV0YWlscyB7XHJcbiAgY2FsbFNpZDogc3RyaW5nO1xyXG4gIGNhbGxTdGF0dXM6IHN0cmluZztcclxufVxyXG5pbnRlcmZhY2UgQ2FsbFN0YXR1c1Jlc3BvbnNlIHtcclxuICBjYWxsRGV0YWlsczogQ2FsbERldGFpbHM7XHJcbiAgcmVzcG9uc2U6IHN0cmluZztcclxuICBlcnJvclR5cGU6IG51bWJlcjtcclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgc3RhdHVzOiBudW1iZXI7XHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItY2FsbC1wcm9ncmVzcycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYWxsUHJvZ3Jlc3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgY2FsbERhdGE6IGFueTtcclxuICBASW5wdXQoKSBzZWxlY3RlZENhbGxlcklkOiBhbnk7XHJcbiAgQElucHV0KCkgbmV3SW5jb21pbmdDYWxsRGF0YT86IENhbGw7IC8vXHJcbiAgQElucHV0KCkgbmV3SW5jb21pbmdDYWxsc0xpc3Q6IGFueSA9IFtdO1xyXG4gIEBJbnB1dCgpIGNhbGxlcklkTGlzdDogYW55ID0gW107XHJcbiAgQElucHV0KCkgbmV3Q2FsbENvbmZlcmVuY2U6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIG1pc3NDYWxsSW5mbzogYW55ID0ge307XHJcbiAgQElucHV0KCkgdXNlclNldHRpbmdJbmZvOiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBkZXZpY2VJZDogYW55O1xyXG4gIEBJbnB1dCgpIGNhbGxBY3Rpb246IGFueTtcclxuICBASW5wdXQoKSBjb25mZXJlbmNlQ2FsbEluZm86IGFueTtcclxuICBASW5wdXQoKSBpbmNvbWluZ0Zyb21JbWFnZTpzdHJpbmcgPSAnJ1xyXG4gIHVzZXJJZDogYW55O1xyXG4gIEBPdXRwdXQoKSBlbmRDYWxsRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgaW5jb21pbmdDYWxsc05ld0luZm86IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7Ly9cclxuICBAT3V0cHV0KCkgbWluaW1pc2VFdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIGRldmljZT86IERldmljZTtcclxuICBjYWxsITogQ2FsbCB8IGFueTtcclxuICBzaG93UmluZ0FuaW1hdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRpbWVyOiBzdHJpbmcgPSAnMDA6MDAnO1xyXG4gIGludGVydmFsSWQ6IGFueTtcclxuICBzaG93S2V5cGFkOiBib29sZWFuID0gZmFsc2U7XHJcbiAga2V5cGFkVmFsID0ga2V5cGFkO1xyXG4gIGNhbGxJbnB1dDogc3RyaW5nID0gJyc7XHJcbiAgaXNNdXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcGVuZGluZ011dGVVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTsgXHJcbiAgaW50ZW5kZWRNdXRlU3RhdGU6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcclxuICBkaXNiYWxlRW5kQ2FsbEJ0bjogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2hvd0NsZWFyQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNDb2xsb3BzID0gZmFsc2U7XHJcbiAgY3VycmVudENhbGw6IGFueTtcclxuICBpc0NvbmZlcmVuY2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc091dGdvaW5nQ2FsbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQE91dHB1dCgpIGluY29taW5nQ2FsbEluaXRpYXRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBpc0xvYWRlcnNob3duOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIGVuZEluY29taW5nQ2FsbEV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8vIFJlY29yZGluZyB2YXJpYWJsZXNcclxuICBjYWxsU2lkOiBhbnk7XHJcbiAgaXNSZWNvcmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1BhdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRpbWVyU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG4gIHRpbWVFbGFwc2VkID0gMDsgLy8gaW4gc2Vjb25kc1xyXG4gIHJlY29yZENhbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbmNvbWluZ0NhbGxTaWQ6IGFueTtcclxuICBjYWxsU3RhdHVzOiBzdHJpbmcgPSAncmluZ2luZyc7ICAgIC8vXHJcbiAgaW5jb21pbmdSZWNvcmRDYWxsPzogYW55O1xyXG4gIHNlbGVjdGVkSW5jb21pbmdDYWxsOiBhbnk7XHJcbiAgc2hvd0NvbnRhY3RzUGFuZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0FkZFJlbW92ZVBhcnRpY2lwYW50OiBib29sZWFuID0gZmFsc2U7ICAgLy9cclxuICBpc0NvbmN1cnJlbnRJbmNvbWluZzogYm9vbGVhbiA9IGZhbHNlOyAgIC8vXHJcbiAgaGVsZENhbGw/OiBDYWxsOyAgLy9cclxuICBpc0NhbGxPbkhvbGQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjb250YWN0czogYW55W10gPSBbXTtcclxuICBjdXJyZW50Q2FsbExpc3Q6IGFueVtdID0gW107XHJcbiAgY29uZmVyZW5jZUlkOiBhbnk7XHJcbiAgYWxsUGFydGljaXBlbnRMaXN0OiBhbnk7XHJcbiAgaXNDbGlja0V4cGFuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzQ2FsbEluUHJvZ3Jlc3MhOiBib29sZWFuO1xyXG4gIGlzQ3VycmVudEluY29taW5nQ2FsbExpc3Q6IGFueSA9IFtdO1xyXG4gIGlzQ29uZmVyZW5jZUNhbGxIb2xkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRVc2VySW5mbzogYW55O1xyXG4gIGlzU2VhcmNoVmlzaWJsZSA9IGZhbHNlO1xyXG4gIGlzRXhwYW5kZWQgPSBmYWxzZTtcclxuICBzZWFyY2hUZXh0ID0gJyc7XHJcbiAgZmlsdGVyZWRMaXN0OiBhbnkgPSBbXTtcclxuICBmaWx0ZXJlZFBhcnRpY2lwZW50TGlzdDogYW55O1xyXG4gIHNob3dCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1Jpbmdpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0RpcmVjdENhbGxPcHRpb25TaG93OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlhbEFsZXJ0ID0ge1xyXG4gICAgbXNnOiAnJyxcclxuICAgIHNob3c6IGZhbHNlXHJcbiAgfVxyXG4gIGxlZnRQYXJ0aWNpcGVudDogYW55ID0ge307XHJcbiAgY29uZmVyZW5jZUNhbGxMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGlzSW5jb21pbmdDYWxsQnRuRGlzYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzQ29ubmVjdGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhvc3RudW1iZXI6IGFueTtcclxuICBpc05ld0FkZGVkQ2FsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRldmljZU51bWJlckxpc3Q6IGFueSA9IFtdO1xyXG4gIG91ck51bWJlckluZm86IGFueSA9IHt9O1xyXG4gIGN1cnJlbnRDb25mZXJlbmNlQ2FsbDogYW55ID0ge307XHJcbiAgaXNSZWFzb25DaGVja2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNBbGxBY2NlcHRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGxlYXZlUmVhc29uOiBzdHJpbmcgPSAnJztcclxuICAvLyAyNC1ob3VyIHRpbWUgcGlja2VyXHJcbiAgbGVhdmVIb3VyOiBzdHJpbmcgPSAnJztcclxuICBsZWF2ZU1pbnV0ZTogc3RyaW5nID0gJyc7XHJcbiAgaG91cnM6IHN0cmluZ1tdID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpKTtcclxuICBtaW51dGVzOiBzdHJpbmdbXSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDYwIH0sIChfLCBpKSA9PiBpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSk7XHJcbiAgc2hvd0hvdXJEcm9wZG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dNaW51dGVEcm9wZG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkQ29uZjogYW55O1xyXG4gIHNob3dDb25mZXJlbmNlV2FybmluZ01vZGFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcGVuZGluZ0NhbGxEYXRhOiBhbnkgPSBudWxsO1xyXG4gIGNhbGxOdW1iZXJUb2FzdCA9IHtcclxuICAgIHNob3c6IGZhbHNlLFxyXG4gICAgdHlwZTogJ2FsZXJ0LXN1Y2Nlc3MnLFxyXG4gICAgbnVtYmVyOiAnJyxcclxuICAgIGRpc3BsYXlOdW06ICcnXHJcbiAgfTtcclxuICBpc1VuaG9sZENvbmZlcmVuY2VDYWxsOiBhbnk7ICAvL1xyXG4gIGNvbmZlcmVuY2VDYWxsTnVsbENvdW50OiBudW1iZXIgPSAwO1xyXG4gIGFsbENvblBhcnRpY2lwZW50TGlzdDogYW55ID0ge307XHJcbiAgY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdDogYW55O1xyXG4gIHByaXZhdGUgYWNjZXB0ZWRDYWxsTGlzdDogYW55W10gPSBbXTtcclxuICBpc0hvbGRCdG5EaXNhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQzJDb25mb0xpc3Q6IGFueSA9IHt9O1xyXG4gIHByaXZhdGUgbGFzdEFjdGl2ZUNvbmZlcmVuY2VJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBwZW5kaW5nQXV0b1VuaG9sZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkQ29uZk5hbWU6IGFueTtcclxuICBwZW5kaW5nTXV0ZVBhcnRpY2lwYW50czogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XHJcbiAgaW50ZW5kZWRNdXRlU3RhdGVzOiBNYXA8c3RyaW5nLCBib29sZWFuPiA9IG5ldyBNYXAoKTtcclxuICBzaG93TmV3Q2FsbExvYWRlcjpib29sZWFuID0gZmFsc2U7XHJcbiAgbmV3Q2FsbExvYWRlckRhdGE6IHsgbmFtZTogc3RyaW5nOyBwaG9uZTogc3RyaW5nLCBpbWc/OiBzdHJpbmcgfSA9IHsgbmFtZTogJycsIHBob25lOiAnJywgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgfTtcclxuICBASW5wdXQoKSBvdXRnb2luZ0NvbnRhY3ROYW1lID0gJyc7XHJcbiAgc2hvd0xlYXZlQ29uZmlybWF0aW9uTW9kYWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsZWF2ZUNvbmZQYXJ0aWNpcGFudDogYW55ID0gbnVsbDtcclxuICBsZWF2ZUNvbmZDb25mZXJlbmNlTmFtZTogc3RyaW5nID0gJyc7XHJcbiAgaXNQYXJ0aWNpcGFudFBhbmVsTG9hZGluZyA9IGZhbHNlO1xyXG4gIGlzQ29ubmVjdGluZ0luY29taW5nQ2FsbElkOiBhbnk7XHJcbiAgcGVuZGluZ05ld0NhbGxIZWxkUGFydGljaXBhbnQ6IGFueSA9IG51bGw7XHJcbiAgaXNDYWxsQ2FuY2VsbGVkID0gZmFsc2U7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBleHRlbnNpb25TZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgdHdpbGlvU2VydmljZTogVHdpbGlvU2VydmljZSxcclxuICAgIHByaXZhdGUgaXBTZXJ2aWNlOiBJcEFkZHJlc3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZTogSW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuY2FsbCA9IHRoaXMudHdpbGlvU2VydmljZS5jYWxsO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBTdWJzY3JpYmUgdG8gaW5jb21pbmcgY2FsbHMgZnJvbSBUd2lsaW9TZXJ2aWNlXHJcbiAgICAgdGhpcy5HZXRDb250YWN0c0xpc3QoKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmV4dGVuc2lvblNlcnZpY2UudXNlcklkKSB7XHJcbiAgICAgICAgdGhpcy51c2VySWQgPSB0aGlzLmV4dGVuc2lvblNlcnZpY2UudXNlcklkO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN1YnNjcmliaW5nIHRvIGluY29taW5nIGNhbGxzOicsIGUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kZXZpY2VOdW1iZXJMaXN0ID0gdGhpcy5jYWxsZXJJZExpc3QubWFwKChyZXM6IGFueSkgPT4gcmVzLm51bWJlcik7XHJcbiAgIFxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKHRoaXMudXNlcklkKSB7XHJcbiAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS51c2VySWQgPSB0aGlzLnVzZXJJZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlc1snY2FsbERhdGEnXSkge1xyXG4gICAgICBpZiAoY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LmlzSW5jb21pbmdDYWxsKSB7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5kaXNwbGF5TnVtIHx8IGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5mcm9tKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHtcclxuICAgICAgICAgIC4uLmNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlLFxyXG4gICAgICAgICAgaWQ6ICcxMjUnLFxyXG4gICAgICAgICAgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXHJcbiAgICAgICAgICBpc0hvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgaXNNdXRlOiBmYWxzZSxcclxuICAgICAgICAgIGlzQ29uZmVyZW5jZTogZmFsc2UsXHJcbiAgICAgICAgICBpc0FjY2VwdENhbGw6IHRydWUsXHJcbiAgICAgICAgICBkaWFsOiB0cnVlLFxyXG4gICAgICAgICAgcGhvbmU6IGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5waG9uZSxcclxuICAgICAgICAgIHBhcnRpY2lwYW50SWQ6ICcxMjEnLFxyXG4gICAgICAgICAgbmFtZTogY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/Lm5hbWUgfHwgY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LmZyb21OYW1lIHx8IGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy50b05hbWUgfHwgJycsXHJcbiAgICAgICAgICB0aW1lOiB0aGlzLnRpbWVyLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vbkFkZE5ld0NhbGwoY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snbmV3SW5jb21pbmdDYWxsc0xpc3QnXT8uY3VycmVudFZhbHVlPy5sZW5ndGggfHwgY2hhbmdlc1snbmV3SW5jb21pbmdDYWxsc0xpc3QnXT8ucHJldmlvdXNWYWx1ZT8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuaXNQYXJ0aWNpcGFudFBhbmVsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRldmljZU51bWJlckxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5kZXZpY2VOdW1iZXJMaXN0ID0gdGhpcy5jYWxsZXJJZExpc3QubWFwKChyZXM6IGFueSkgPT4gcmVzLm51bWJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCduZXdJbmNvbWluZ0NhbGxzTGlzdCcsIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QpO1xyXG4gICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZm9yRWFjaCgoY2FsbEluZm86IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VJZCA9IGkgPT0gMCA/IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3RbaV0uY29uZmVyZW5jZUlkIDogdGhpcy5jb25mZXJlbmNlSWQ7XHJcbiAgICAgICAgICBsZXQgb3VyTnVtYmVySW5mbyA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3RbaV0/LnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+XHJcbiAgICAgICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pICYmIHJlc0RhdGE/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgJiYgcmVzRGF0YT8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICghcmVzRGF0YT8uYnVzaW5lc3NOdW1iZXIgfHwgKHJlc0RhdGE/LmJ1c2luZXNzTnVtYmVyICYmIGNhbGxJbmZvPy5wYXJ0aWNpcGFudHM/Lmxlbmd0aCA9PSAxKSkpKSAmJiAhcmVzRGF0YT8uaXNMZWZ0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBpZiAoIXRoaXMucGVuZGluZ011dGVVcGRhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5pc011dGUgPSAhb3VyTnVtYmVySW5mbz8uaXNIb2xkID8gb3VyTnVtYmVySW5mbz8uaXNNdXRlIDogdGhpcy5pc011dGU7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG91ck51bWJlckluZm8/LmlzTXV0ZSA9PT0gdGhpcy5pbnRlbmRlZE11dGVTdGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzTXV0ZSA9IG91ck51bWJlckluZm8/LmlzTXV0ZTtcclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nTXV0ZVVwZGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmludGVuZGVkTXV0ZVN0YXRlID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vdGhpcy5pc011dGUgPSAhb3VyTnVtYmVySW5mbz8uaXNIb2xkID8gb3VyTnVtYmVySW5mbz8uaXNNdXRlIDogdGhpcy5pc011dGU7XHJcbiAgICAgICAgICBsZXQgY3VycmVudGNhbGxQYXJ0aWNpcGFudExpc3RJRCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbHRlcigocmVzKT0+IHJlcy5jb25mZXJlbmNlSWQgPT0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdFtpXT8uY29uZmVyZW5jZUlkKS5tYXAoKHJlcyk9PiByZXMucGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgICBsZXQgdXBkYXRlZExpc3QgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZpbHRlcigoY29uZjogYW55KSA9PiBjb25mLmNvbmZlcmVuY2VJZCA9PT0gY2FsbEluZm8uY29uZmVyZW5jZUlkKS5mbGF0TWFwKChjb25mOiBhbnkpID0+IGNvbmYucGFydGljaXBhbnRzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmlkKSk7XHJcbiAgICAgICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0W2ldLnBhcnRpY2lwYW50cy5tYXAoKHJlczphbnkpID0+IHJlcy5pZCk7XHJcbiAgICAgICAgICBjdXJyZW50Y2FsbFBhcnRpY2lwYW50TGlzdElELmZvckVhY2goKHBhcnRpY2lwYW50SWQ6YW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmKCF1cGRhdGVkTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudElkKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmlsdGVyKChyZXNJbmZvOmFueSkgPT4gcmVzSW5mbz8ucGFydGljaXBhbnRJZCAhPT0gcGFydGljaXBhbnRJZCB8fCAocmVzSW5mbz8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiAhcmVzSW5mbz8uaXNBY2NlcHRDYWxsKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGlmIChvdXJOdW1iZXJJbmZvPy5pZCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZWRQYXJ0aWNpcGFudExpc3QodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdFtpXT8ucGFydGljaXBhbnRzKTtcclxuICAgICAgICAgICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdFtpXS5wYXJ0aWNpcGFudHMuZm9yRWFjaChhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzPy5ob3N0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3RudW1iZXIgPSByZXM7XHJcbiAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICBpZihvdXJOdW1iZXJJbmZvPy5pc0NvbmZlcmVuY2UgfHwgKHRoaXMuaG9zdG51bWJlcj8uaXNDb25mZXJlbmNlICYmIHRoaXMuaG9zdG51bWJlcj8uY29uZmVyZW5jZUlkID09IHJlcz8uY29uZmVyZW5jZUlkKSB8fCBjYWxsSW5mbz8ucGFydGljaXBhbnRzPy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ29uZmVyZW5jZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhY3Q6IGFueSA9IHt9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250YWN0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRhY3QgPSB0aGlzLmNvbnRhY3RzLmZpbmQoKHJlc0RhdGEpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzRGF0YT8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlciA9PSAocmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyByZXM/LmZyb20gOiByZXM/LnRvKVxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2FsbExpc3Q/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IGl0ZW0/LmlkID09IHJlcz8uaWQpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEgJiYgIXJlcy5pc0xlZnQgJiYgcmVzPy5zdGF0dXMgIT0gJ25vLWFuc3dlcicgJiYgcmVzPy5zdGF0dXMgIT0gJ2NhbmNlbGVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgLi4ucmVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZnJvbU5hbWU6IHRoaXMuZ2V0TmFtZShyZXM/LmZyb20pIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdG9OYW1lOiAgdGhpcy5nZXROYW1lKHJlcz8udG8pIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaW1nOiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IChyZXM/LmZyb21JbWFnZSB8fCByZXM/LmltZykgIDogcmVzPy50b0ltYWdlIHx8IGNvbnRhY3Q/LmltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIixcclxuICAgICAgICAgICAgICAgICAgICAgIGlzSG9sZDogcmVzPy5pc0hvbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0NvbmZlcmVuY2VIb2xkOiB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGggPiAxID8gb3VyTnVtYmVySW5mbz8uaXNIb2xkIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc05vdGlmaWNhdGlvbjogY2FsbEluZm8/Ll9pc05vdGlmaWNhdGlvbiAmJiAhdGhpcy5nZXRTdGF0dXMocmVzKSAmJiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzTXV0ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0NvbmZlcmVuY2U6IHRoaXMuaXNDb25mZXJlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY2NlcHRDYWxsOiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHRoaXMuZ2V0U3RhdHVzKHJlcykgOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZGlhbDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHBob25lOiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHJlcz8uZnJvbSA6IHJlcz8udG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsTGFiZWw6IGNhbGxJbmZvPy5jYWxsTGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkOiByZXM/LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29uZmVyZW5jZVNpZDogY2FsbEluZm8/LmNvbmZlcmVuY2VTaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXM/Lm5hbWUgfHwgcmVzPy5mcm9tTmFtZSB8fCByZXM/LnRvTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IHRoaXMuZ2V0VGltZURpZmZlcmVuY2UocmVzPy5qb2luZWRBdCB8fCBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dDb250YWN0c1BhbmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyh0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseUZpbHRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZighdGhpcy50aW1lciB8fCB0aGlzLnRpbWVyID09ICcwMDowMCcpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFRpbWVyKG91ck51bWJlckluZm8/LmpvaW5lZEF0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggIT0gLTEgJiYgKHJlcz8uaXNMZWZ0IHx8IHJlcz8uc3RhdHVzID09ICduby1hbnN3ZXInIHx8IHJlcz8uc3RhdHVzID09ICdjYW5jZWxlZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudENhbGxMaXN0W2luZGV4XT8uaWQgPT0gdGhpcy5jdXJyZW50Q2FsbD8uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dDb250YWN0c1BhbmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyh0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcih0aGlzLmN1cnJlbnRDYWxsPy5qb2luZWRBdCk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggIT0gLTEgJiYgIXJlcz8uaXNMZWZ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRpY2lwYW50SWQgPSByZXMuaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGEgbXV0ZSB1cGRhdGUgaXMgcGVuZGluZyBmb3IgdGhpcyBwYXJ0aWNpcGFudFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTXV0ZVBlbmRpbmcgPSB0aGlzLnBlbmRpbmdNdXRlUGFydGljaXBhbnRzLmhhcyhwYXJ0aWNpcGFudElkKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlbmRlZE11dGUgPSB0aGlzLmludGVuZGVkTXV0ZVN0YXRlcy5nZXQocGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVwZGF0ZWRNdXRlOiBib29sZWFuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc011dGVQZW5kaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc2VydmVyIGFscmVhZHkgY29uZmlybWVkIG91ciBjaGFuZ2UsIGFjY2VwdCBpdCBhbmQgY2xlYXIgcGVuZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5pc011dGUgPT09IGludGVuZGVkTXV0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkTXV0ZSA9IHJlcy5pc011dGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ011dGVQYXJ0aWNpcGFudHMuZGVsZXRlKHBhcnRpY2lwYW50SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVuZGVkTXV0ZVN0YXRlcy5kZWxldGUocGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGtlZXAgdGhlIGN1cnJlbnQgbG9jYWwgdmFsdWUgKGlnbm9yZSB0aGUgc3RhbGUgc2VydmVyIHN0YXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkTXV0ZSA9IHRoaXMuY3VycmVudENhbGxMaXN0W2luZGV4XS5pc011dGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIHBlbmRpbmcgbXV0ZSDigJMgdHJ1c3QgdGhlIHNlcnZlciB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZE11dGUgPSByZXMuaXNNdXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAuLi5yZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICBmcm9tTmFtZTogdGhpcy5nZXROYW1lKHJlcz8uZnJvbSkgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0b05hbWU6ICB0aGlzLmdldE5hbWUocmVzPy50bykgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpbWc6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gKHJlcz8uZnJvbUltYWdlIHx8IHJlcz8uaW1nKSA6IHJlcz8udG9JbWFnZSB8fCBjb250YWN0Py5pbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0luY29taW5nQ2FsbDogcmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0hvbGQ6IHJlcz8uaXNIb2xkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNDb25mZXJlbmNlSG9sZDogdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoID4gMSA/IG91ck51bWJlckluZm8/LmlzSG9sZCA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNOb3RpZmljYXRpb246IGNhbGxJbmZvPy5faXNOb3RpZmljYXRpb24gJiYgIXRoaXMuZ2V0U3RhdHVzKHJlcykgJiYgcmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc011dGU6IHVwZGF0ZWRNdXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNDb25mZXJlbmNlOiB0aGlzLmlzQ29uZmVyZW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzQWNjZXB0Q2FsbDogcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHRoaXMuZ2V0U3RhdHVzKHJlcykgOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZGlhbDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHBob25lOiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHJlcz8uZnJvbSA6IHJlcz8udG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkOiByZXM/LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29uZmVyZW5jZVNpZDogY2FsbEluZm8/LmNvbmZlcmVuY2VTaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsTGFiZWw6IGNhbGxJbmZvPy5jYWxsTGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXM/Lm5hbWUgfHwgcmVzPy5mcm9tTmFtZSB8fCByZXM/LnRvTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IHRoaXMuZ2V0VGltZURpZmZlcmVuY2UocmVzPy5qb2luZWRBdCB8fCBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXJlcy5pc0xlZnQgJiYgcmVzPy5zdGF0dXMgIT0gJ25vLWFuc3dlcicgJiYgcmVzPy5zdGF0dXMgIT0gJ2NhbmNlbGVkJykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5yZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbU5hbWU6IHRoaXMuZ2V0TmFtZShyZXM/LmZyb20pIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvTmFtZTogIHRoaXMuZ2V0TmFtZShyZXM/LnRvKSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICBpbWc6IHJlcy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyAocmVzPy5mcm9tSW1hZ2UgfHwgcmVzPy5pbWcpIDogcmVzPy50b0ltYWdlIHx8IGNvbnRhY3Q/LmltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgICAgICAgICAgICAgICBpc0luY29taW5nQ2FsbDogcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIixcclxuICAgICAgICAgICAgICAgICAgICBpc0hvbGQ6IHJlcz8uaXNIb2xkLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzQ29uZmVyZW5jZUhvbGQ6IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3Q/Lmxlbmd0aCA+IDEgPyBvdXJOdW1iZXJJbmZvPy5pc0hvbGQgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBpc05vdGlmaWNhdGlvbjogY2FsbEluZm8/Ll9pc05vdGlmaWNhdGlvbiAmJiAhdGhpcy5nZXRTdGF0dXMocmVzKSAmJiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBpc011dGU6IHJlcz8uaXNNdXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzQ29uZmVyZW5jZTogdGhpcy5pc0NvbmZlcmVuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNBY2NlcHRDYWxsOiByZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gdGhpcy5nZXRTdGF0dXMocmVzKSA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlhbDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBwaG9uZTogcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHJlcz8uZnJvbSA6IHJlcz8udG8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogcmVzLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZlcmVuY2VTaWQ6IGNhbGxJbmZvPy5jb25mZXJlbmNlU2lkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxMYWJlbDogY2FsbEluZm8/LmNhbGxMYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXM/Lm5hbWUgfHwgcmVzPy5mcm9tTmFtZSB8fCByZXM/LnRvTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0aW1lOiB0aGlzLmdldFRpbWVEaWZmZXJlbmNlKHJlcz8uam9pbmVkQXQgfHwgbmV3IERhdGUoKS50b1VUQ1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSAnMDA6MDAnO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VGltZXIocmVzPy5qb2luZWRBdCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5pc0xvYWRlcnNob3cubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxOdWxsQ291bnQgPSAwO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYodGhpcy5jb25mZXJlbmNlQ2FsbE51bGxDb3VudCA+IDUgJiYgIXRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ2FsbCBlbmQgaW4gMjk5JylcclxuICAgICAgICAgICAgdGhpcy5pc1JpbmdpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzUmluZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb25mZXJlbmNlQ2FsbEhvbGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q29udGFjdHNQYW5lbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBObyBjYWxsIGluIHByb2dyZXNzOiByZXNldCB0aGUgaW5jb21pbmctbXV0ZSBzd2l0Y2ggYmFjayB0byBkZWZhdWx0IChvZmYpLlxyXG4gICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2Uuc2V0SW5jb21pbmdNdXRlZChmYWxzZSk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuaXNVbmhvbGRDb25mZXJlbmNlQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0ge31cclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1JpbmdpbmcpIHtcclxuICAgICAgICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jYWxsLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9wVGltZXIoKTtcclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsTnVsbENvdW50Kys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAvLyBSZW1vdmUgcGFydGljaXBhbnQgZGF0YSBmb3IgY29uZmVyZW5jZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBhY3RpdmUgbGlzdFxyXG4gICAgICAgIGNvbnN0IGFjdGl2ZUNvbmZlcmVuY2VJZHMgPSBuZXcgU2V0KHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uY29uZmVyZW5jZUlkKSk7XHJcbiAgICAgICAgZm9yIChjb25zdCBjb25mSWQgb2YgT2JqZWN0LmtleXModGhpcy5hbGxDb25QYXJ0aWNpcGVudExpc3QpKSB7XHJcbiAgICAgICAgICBpZiAoIWFjdGl2ZUNvbmZlcmVuY2VJZHMuaGFzKGNvbmZJZCkpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYWxsQ29uUGFydGljaXBlbnRMaXN0W2NvbmZJZF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB2YWxpZFZhbHVlcyA9IG5ldyBTZXQodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5mbGF0TWFwKChpdGVtOiBhbnkpID0+IGl0ZW0/LnBhcnRpY2lwYW50cy5tYXAoKHZhbDogYW55KSA9PiB2YWw/LmlkKSkpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IHZhbGlkVmFsdWVzLmhhcyhpdGVtPy5wYXJ0aWNpcGFudElkKSk7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRDYWxsOmFueSA9IFtdO1xyXG4gICAgICAgIHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5maW5kKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiBpdGVtPy5wYXJ0aWNpcGFudHM/LmZpbmQoKHBhcnRpY2lwYW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYoKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LmZyb20pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnICYmIHBhcnRpY2lwYW50Py5jbGllbnQpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LnRvKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiBwYXJ0aWNpcGFudD8uY2xpZW50KSkgJiYgIXBhcnRpY2lwYW50Py5pc0xlZnQgJiYgIXBhcnRpY2lwYW50Py5pc0hvbGQgJiYgIXBhcnRpY2lwYW50Py5idXNpbmVzc051bWJlcikge1xyXG4gICAgICAgICAgICAgIGN1cnJlbnRDYWxsLnB1c2gocGFydGljaXBhbnQpO1xyXG4gICAgICAgICAgICAgIHRoaXMudGltZXIgPSB0aGlzLmdldFRpbWVEaWZmZXJlbmNlKHBhcnRpY2lwYW50Py5qb2luZWRBdCB8fCBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHBhcnRpY2lwYW50Py5ob3N0KSB7XHJcbiAgICAgICAgICAgICAgaXRlbVsndGltZXInXSA9IHRoaXMuZ2V0VGltZURpZmZlcmVuY2UocGFydGljaXBhbnQ/LmpvaW5lZEF0IHx8IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py5mcm9tKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyAmJiBwYXJ0aWNpcGFudD8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py50bykgJiYgcGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgcGFydGljaXBhbnQ/LmNsaWVudCkpICYmICFwYXJ0aWNpcGFudD8uaXNMZWZ0ICYmICFwYXJ0aWNpcGFudD8uaXNIb2xkICYmICFwYXJ0aWNpcGFudD8uYnVzaW5lc3NOdW1iZXJcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gRGV0ZWN0IGRpc2Nvbm5lY3QgdnMuIGhvbGQgdHJhbnNpdGlvbiBleGFjdGx5IG9uY2UgcGVyIGV2ZW50LlxyXG4gICAgICAgIC8vIFNhbWUgcGFydGljaXBhbnQgZmlsdGVyIGFzIGdldEN1cnJlbnRDYWxsSW5mbygpICh3aXRob3V0ICFpc0hvbGQpIHRvIHN0YXkgY29uc2lzdGVudC5cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsICYmICFjdXJyZW50Q2FsbFswXT8uaXNIb2xkKSB7XHJcbiAgICAgICAgICB0aGlzLmxhc3RBY3RpdmVDb25mZXJlbmNlSWQgPSB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8uY29uZmVyZW5jZUlkO1xyXG4gICAgICAgICAgdGhpcy5wZW5kaW5nQXV0b1VuaG9sZCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXN0QWN0aXZlQ29uZmVyZW5jZUlkICYmICF0aGlzLnBlbmRpbmdBdXRvVW5ob2xkKSB7XHJcbiAgICAgICAgICBjb25zdCBsYXN0Q29uZiA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmluZCgoYzogYW55KSA9PiBjLmNvbmZlcmVuY2VJZCA9PSB0aGlzLmxhc3RBY3RpdmVDb25mZXJlbmNlSWQpO1xyXG4gICAgICAgICAgY29uc3Qgb3VyUGFydGljaXBhbnRJbkxhc3RDb25mID0gbGFzdENvbmY/LnBhcnRpY2lwYW50cz8uZmluZCgocDogYW55KSA9PlxyXG4gICAgICAgICAgICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwPy5mcm9tKSAmJiBwPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnICYmIHA/LmNsaWVudCkgfHxcclxuICAgICAgICAgICAgICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocD8udG8pICYmIHA/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgcD8uY2xpZW50ICYmICFwPy5idXNpbmVzc051bWJlcikpICYmICFwPy5pc0xlZnRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICAvLyBDb25mZXJlbmNlIGdvbmUgT1Igb3VyIHBhcnRpY2lwYW50IG5vdCBoZWxkIOKGkiB0aGUgYWN0aXZlIGNhbGwgZGlzY29ubmVjdGVkIOKGkiBxdWV1ZSBhdXRvLXVuaG9sZFxyXG4gICAgICAgICAgaWYgKCFsYXN0Q29uZiB8fCAhb3VyUGFydGljaXBhbnRJbkxhc3RDb25mPy5pc0hvbGQpIHtcclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQXV0b1VuaG9sZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LnBhcnRpY2lwYW50cy5sZW5ndGggPT0gMiAmJiB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8ucGFydGljaXBhbnRzWzBdPy5pZCkge1xyXG4gICAgICAgICAgY29uc3Qgb3duTnVtYmVycyA9IHRoaXMuZGV2aWNlTnVtYmVyTGlzdCAmJiB0aGlzLmRldmljZU51bWJlckxpc3QubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICA/IHRoaXMuZGV2aWNlTnVtYmVyTGlzdFxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICBjb25zdCBjYWxsZXJOdW1iZXIgPSB0aGlzLmNhbGxEYXRhPy5mcm9tIHx8IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uaXNDb25mZXJlbmNlSG9sZCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKG93bk51bWJlcnMpIHtcclxuICAgICAgICAgICAgICAvLyBPcmlnaW5hbCBsb2dpYyDigJMgd29ya3Mgd2hlbiB0aGUgY2FsbGVy4oCRSUQgbGlzdCBpcyBsb2FkZWRcclxuICAgICAgICAgICAgICByZXR1cm4gKHJlcz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyAmJiByZXM/LmNsaWVudCAmJiAhb3duTnVtYmVycy5pbmNsdWRlcyhyZXM/LmZyb20pKSB8fFxyXG4gICAgICAgICAgICAgICAgKHJlcz8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiByZXM/LmNsaWVudCAmJiAhb3duTnVtYmVycy5pbmNsdWRlcyhyZXM/LnRvKSAmJiAhcmVzPy5idXNpbmVzc051bWJlcikgfHxcclxuICAgICAgICAgICAgICAgICghcmVzPy5jbGllbnQgJiYgcmVzPy5pc0FjY2VwdENhbGwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIFNhZmUgZmFsbGJhY2s6IGV4Y2x1ZGUgdGhlIHBhcnRpY2lwYW50IHdob3NlIG51bWJlciBtYXRjaGVzIHRoZSBjYWxsZXIgSUQgd2UgdXNlZFxyXG4gICAgICAgICAgICAgIGNvbnN0IGlzT3duID0gKHJlcz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyAmJiByZXM/LmZyb20gPT09IGNhbGxlck51bWJlcikgfHxcclxuICAgICAgICAgICAgICAgIChyZXM/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgcmVzPy50byA9PT0gY2FsbGVyTnVtYmVyICYmICFyZXM/LmJ1c2luZXNzTnVtYmVyKTtcclxuICAgICAgICAgICAgICByZXR1cm4gIWlzT3duO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHsgLi4uc2VsZWN0ZWQsIGlzQWNjZXB0Q2FsbDogdHJ1ZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAgZWxzZSBpZiAodGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LnBhcnRpY2lwYW50cz8ubGVuZ3RoID4gMiAmJiB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8ucGFydGljaXBhbnRzWzFdPy5pc0NvbmZlcmVuY2UpIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChyZXM6IGFueSkgPT4gIXJlcz8uaXNDb25mZXJlbmNlSG9sZCk7XHJcbiAgICAgICAgICB0aGlzLmlzQ29uZmVyZW5jZSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmKHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5wYXJ0aWNpcGFudHM/Lmxlbmd0aCA9PSAxICYmIHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5wYXJ0aWNpcGFudHNbMF0/LmlkKXtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChjYWxsSW5mbzphbnkpPT4gY2FsbEluZm8/LmlkID09IHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5wYXJ0aWNpcGFudHNbMF0/LmlkKTtcclxuICAgICAgICAgIGlmKHRoaXMuY3VycmVudENhbGw/LmNsaWVudCAmJiB0aGlzLmN1cnJlbnRDYWxsPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxbJ2NsaWVudCddPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbFsnaXNBY2NlcHRDYWxsJ109IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudENhbGwsICd0aGlzLmN1cnJlbnRDYWxsIDQ2MScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZighdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGwgJiZ0aGlzLmN1cnJlbnRDYWxsICYmIHRoaXMuY3VycmVudENhbGxMaXN0Py5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZCgocmVzOiBhbnkpID0+IHJlcz8uaWQgPT0gdGhpcy5jdXJyZW50Q2FsbD8uaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsICYmICF0aGlzLmlzTmV3QWRkZWRDYWxsKSB7XHJcbiAgICAgICAgICBsZXQgY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbyA9IHRoaXMuZ2V0Q3VycmVudENhbGxJbmZvKCk7XHJcbiAgICAgICAgICBpZiAoIWN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/LmlkICYmIHRoaXMucGVuZGluZ0F1dG9VbmhvbGQpIHtcclxuICAgICAgICAgICAgLy8gU2VhcmNoIEFMTCBjb25mZXJlbmNlcyBleGNlcHQgdGhlIG9uZSB0aGF0IGp1c3QgZGlzY29ubmVjdGVkLlxyXG4gICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIGEgc2luZ2xlLWNvbmZlcmVuY2UgaG9sZCAoaW5jbHVkaW5nIGJyaWVmIGlzTGVmdCByYWNlIGNvbmRpdGlvbnMpXHJcbiAgICAgICAgICAgIC8vIGZyb20gZXZlciB0cmlnZ2VyaW5nIGFuIHVuaG9sZCDigJQgd2Ugb25seSB1bmhvbGQgYSBESUZGRVJFTlQgaGVsZCBjb25mZXJlbmNlLlxyXG4gICAgICAgICAgICBsZXQgaG9sZENhbGxJbmZvOiBhbnkgPSBudWxsO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbmYgb2YgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCkge1xyXG4gICAgICAgICAgICAgIGlmIChjb25mLmNvbmZlcmVuY2VJZCA9PSB0aGlzLmxhc3RBY3RpdmVDb25mZXJlbmNlSWQpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIGhvbGRDYWxsSW5mbyA9IGNvbmYucGFydGljaXBhbnRzLmZpbmQoKGNhbGxJbmZvOiBhbnkpID0+ICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGNhbGxJbmZvPy5mcm9tKSAmJiBjYWxsSW5mbz8uY2xpZW50KVxyXG4gICAgICAgICAgICAgICAgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhjYWxsSW5mbz8udG8pICYmIGNhbGxJbmZvPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnKSkgJiYgIWNhbGxJbmZvPy5pc0xlZnQgJiYgY2FsbEluZm8/LmlzSG9sZCAmJiAhY2FsbEluZm8/LmJ1c2luZXNzTnVtYmVyKTtcclxuICAgICAgICAgICAgICBpZiAoaG9sZENhbGxJbmZvKSBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaG9sZENhbGxJbmZvPy5pZCAmJiAhdGhpcy5pc1VuaG9sZENvbmZlcmVuY2VDYWxsKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW2hvbGRDYWxsSW5mbz8uaWRdLFxyXG4gICAgICAgICAgICAgICAgY29uZmVyZW5jZUlkOiBob2xkQ2FsbEluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgICAgIGhvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbXV0ZTogaG9sZENhbGxJbmZvPy5tdXRlIHx8IGZhbHNlXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYoaG9sZEluZm8/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hvbGRJbmZvIDM4NycsIGhvbGRJbmZvKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSBob2xkQ2FsbEluZm8/LmNvbmZlcmVuY2VJZDtcclxuICAgICAgICAgICAgICB0aGlzLmlzVW5ob2xkQ29uZmVyZW5jZUNhbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdBdXRvVW5ob2xkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5sYXN0QWN0aXZlQ29uZmVyZW5jZUlkID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LmNvbmZlcmVuY2VJZCAmJiB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQpIHtcclxuICAgICAgICAgIHRoaXMudGltZXIgPSB0aGlzLmdldFRpbWVEaWZmZXJlbmNlKHRoaXMuY3VycmVudENhbGw/LmpvaW5lZEF0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRVc2VySW5mbz8ucGFydGljaXBhbnRJZCkge1xyXG4gICAgICAgICAgbGV0IHNlbGVjdGVkVXNlciA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbT8uaWQgPT0gdGhpcy5zZWxlY3RlZFVzZXJJbmZvPy5wYXJ0aWNpcGFudElkKTtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZFVzZXIgJiYgKHNlbGVjdGVkVXNlcj8uY29uZmVyZW5jZUlkID09IHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5jb25mZXJlbmNlSWQgfHwgdGhpcy5pc0NsaWNrRXhwYW5kKSkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZFVzZXIuSXNVc2VySW5mb1Nob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZihzZWxlY3RlZFVzZXIuYnVzaW5lc3NOdW1iZXIgPT0gdHJ1ZSAmJiAhc2VsZWN0ZWRVc2VyLnVzZXJJbmZvSWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUMyQ0luZm9QYW5lbChzZWxlY3RlZFVzZXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbyA9IHNlbGVjdGVkVXNlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrVGV4dEhlaWdodCgpO1xyXG4gICAgICAgICAgfSBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHJlc0luZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChpdGVtOiBhbnkpID0+ICEhaXRlbT8uYnVzaW5lc3NOdW1iZXIgJiYgdGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGl0ZW0/LnRvKSk7XHJcbiAgICAgICAgICBpZiAocmVzSW5kZXggPiAtMSAmJiAodGhpcy5jdXJyZW50Q2FsbExpc3RbcmVzSW5kZXhdPy5jb25mZXJlbmNlSWQgPT0gdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkIHx8IHRoaXMuaXNDbGlja0V4cGFuZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3RbcmVzSW5kZXhdWydJc1VzZXJJbmZvU2hvdyddID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gdGhpcy5jdXJyZW50Q2FsbExpc3RbcmVzSW5kZXhdO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrVGV4dEhlaWdodCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmN1cnJlbnRDYWxsPy5idXNpbmVzc051bWJlciAmJiB0aGlzLkMyQ29uZm9MaXN0W3RoaXMuY3VycmVudENhbGw/LnBhcnRpY2lwYW50SWRdKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsWyd1c2VySW5mb0lkJ10gPSB0aGlzLkMyQ29uZm9MaXN0W3RoaXMuY3VycmVudENhbGw/LnBhcnRpY2lwYW50SWRdO1xyXG4gICAgICAgICAgaWYoIXRoaXMuaXNDbGlja0V4cGFuZCAmJiAhdGhpcy5zZWxlY3RlZFVzZXJJbmZvICkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSB0aGlzLkMyQ29uZm9MaXN0W3RoaXMuY3VycmVudENhbGw/LnBhcnRpY2lwYW50SWRdO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZih0aGlzLmN1cnJlbnRDYWxsTGlzdFswXT8uYnVzaW5lc3NOdW1iZXIgJiYgIXRoaXMuQzJDb25mb0xpc3RbdGhpcy5jdXJyZW50Q2FsbExpc3RbMF0/LnBhcnRpY2lwYW50SWRdICYmICF0aGlzLmN1cnJlbnRDYWxsTGlzdFswXT8uaXNBY2NlcHRDYWxsKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSB0aGlzLmN1cnJlbnRDYWxsTGlzdFswXTtcclxuICAgICAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy5pc0FsbEFjY2VwdGVkID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZXZlcnkoKGNhbGw6IGFueSkgPT4gY2FsbD8uaXNBY2NlcHRDYWxsKVxyXG4gICAgICAgIGNvbnN0IHVuaXF1ZUxpc3QgPSBbXHJcbiAgICAgICAgICAuLi5uZXcgTWFwKHRoaXMuY3VycmVudENhbGxMaXN0Lm1hcChpdGVtID0+IFtpdGVtLmNvbmZlcmVuY2VJZCwgaXRlbV0pKS52YWx1ZXMoKVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxMaXN0ID0gdW5pcXVlTGlzdC5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoe1xyXG4gICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5jb25mZXJlbmNlQ2FsbExpc3QuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICBsZXQgcGFydGljaXBhbnRMaXN0ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZCgocmVzOiBhbnkpID0+IHJlcz8uY29uZmVyZW5jZUlkID09IGl0ZW0/LmNvbmZlcmVuY2VJZCAmJiByZXM/LmJ1c2luZXNzTnVtYmVyICYmICFyZXM/Lmhvc3QpO1xyXG4gICAgICAgICAgaWYocGFydGljaXBhbnRMaXN0Py5pZCkge1xyXG4gICAgICAgICAgICBpdGVtWydpc0J1c2luZXNzTnVtYmVyJ10gPSBwYXJ0aWNpcGFudExpc3Q/LmJ1c2luZXNzTnVtYmVyO1xyXG4gICAgICAgICAgICBpdGVtWydidXNpbmVzc1BhcnRpY2lwYW50SWQnXSA9IHBhcnRpY2lwYW50TGlzdD8ucGFydGljaXBhbnRJZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTsgXHJcbiAgICAgICAgdGhpcy5jb25mZXJlbmNlQ2FsbE51bGxDb3VudCA9IDA7XHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICBpZih0aGlzLmNvbmZlcmVuY2VDYWxsTnVsbENvdW50ID4gNSAmJiAhdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3Q/Lmxlbmd0aCl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJzQxMScpXHJcbiAgICAgICAgdGhpcy5pc1JpbmdpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQ29uY3VycmVudEluY29taW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYodGhpcy5jYWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmNhbGwuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB7fVxyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBpZiAodGhpcy5pc1JpbmdpbmcpIHtcclxuICAgICAgICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UucGF1c2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1JpbmdpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gZmFsc2U7XHJcbiAgICAgICAgLy8gTm8gY2FsbCBpbiBwcm9ncmVzczogcmVzZXQgdGhlIGluY29taW5nLW11dGUgc3dpdGNoIGJhY2sgdG8gZGVmYXVsdCAob2ZmKS5cclxuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2Uuc2V0SW5jb21pbmdNdXRlZChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5zdG9wVGltZXIoKTtcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb25mZXJlbmNlQ2FsbE51bGxDb3VudCArPTE7XHJcbiAgICAgICAgLy8gdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2NhbGxBY3Rpb24nXT8uY3VycmVudFZhbHVlICYmIHRoaXMuY2FsbEFjdGlvbj8udHlwZSA9PSAncmVKb2luJykge1xyXG4gICAgICB0aGlzLmRldmljZU51bWJlckxpc3QgPSB0aGlzLmNhbGxlcklkTGlzdC5tYXAoKHJlczogYW55KSA9PiByZXMubnVtYmVyKTtcclxuICAgICAgbGV0IGRhdGEgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbT8uY29uZmVyZW5jZUlkID09IHRoaXMuY2FsbEFjdGlvbj8uY29uZmVyZW5jZUlkKT8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT4gcmVzRGF0YT8uaG9zdCk7XHJcbiAgICAgIGlmKGRhdGE/LmlzTGVmdCB8fCAhZGF0YSkge1xyXG4gICAgICAgIHRoaXMucmVqb2luSG9zdCh0aGlzLmNhbGxBY3Rpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snbmV3Q2FsbENvbmZlcmVuY2UnXT8uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuQ2FsbFRvVW5zYXZlZE51bWJlcih0aGlzLm5ld0NhbGxDb25mZXJlbmNlPy5udW1iZXIsIHRydWUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyByZWpvaW5Ib3N0KGNhbGxJbmZvOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmKHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIGxldCBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvID0gdGhpcy5nZXRDdXJyZW50Q2FsbEluZm8oKTtcclxuICAgICAgICBpZiAoY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbz8uaWQpIHtcclxuICAgICAgICAgIGxldCBob2xkSW5mbzogYW55ID0gdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW2N1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/LmlkXSxcclxuICAgICAgICAgICAgY29uZmVyZW5jZUlkOiBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICAgIGhvbGQ6IHRydWUsXHJcbiAgICAgICAgICAgIG11dGU6IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/Lm11dGUgfHwgZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYoaG9sZEluZm8/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignaG9sZEluZm8gMzg3JywgaG9sZEluZm8pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHJlam9pblBhcnRpY2lwZW50SW5mbyA9IGNhbGxJbmZvPy5wYXJ0aWNpcGFudHMuZmluZCgocmVzRGF0YTogYW55KSA9PlxyXG4gICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSlcclxuICAgICAgICAgICYmIHJlc0RhdGE/LmNsaWVudCAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnKSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNEYXRhPy5idXNpbmVzc051bWJlciAmJiByZXNEYXRhPy5ob3N0KSAmJiByZXNEYXRhPy5pc0xlZnQpXHJcbiAgICAgIClcclxuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IHRydWU7XHJcbiAgICAgIC8vIDHvuI/ig6MgR2V0IG5ldyB0b2tlbiBmb3Igc2FtZSBjb25mZXJlbmNlXHJcbiAgICAgIGNvbnN0IHRva2VuRGF0YTogYW55ID0gYXdhaXQgdGhpcy5nZXRPdXRnb2luZ0NhbGxUb2tlbihjYWxsSW5mbz8uY29uZmVyZW5jZUlkKTtcclxuICAgICAgLy8gMu+4j+KDoyBSZWNvbm5lY3QgZGV2aWNlXHJcbiAgICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHtcclxuICAgICAgICBjb2RlY1ByZWZlcmVuY2VzOiBbJ29wdXMnLCAncGNtdSddLFxyXG4gICAgICAgIGNsb3NlUHJvdGVjdGlvbjogdHJ1ZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5kZXZpY2UgPSBuZXcgRGV2aWNlKHRva2VuRGF0YS50b2tlbi52YWx1ZSwgb3B0aW9ucyk7XHJcblxyXG4gICAgICB0aGlzLmNhbGwgPSBhd2FpdCB0aGlzLmRldmljZS5jb25uZWN0KHtcclxuICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgIEZyb206IHJlam9pblBhcnRpY2lwZW50SW5mby5mcm9tLFxyXG4gICAgICAgICAgVG86IHJlam9pblBhcnRpY2lwZW50SW5mby50byxcclxuICAgICAgICAgIEVudjogZW52aXJvbm1lbnQuYWJiLFxyXG4gICAgICAgICAgVG9rZW46IHRva2VuRGF0YS50b2tlbi5pZCxcclxuICAgICAgICAgIEV4dDogcmVqb2luUGFydGljaXBlbnRJbmZvLmV4dE51bSxcclxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogcmVqb2luUGFydGljaXBlbnRJbmZvPy5jb25mZXJlbmNlSWRcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJ0Y0NvbnN0cmFpbnRzOiB7IGF1ZGlvOiB7IGRldmljZUlkOiAnZGVmYXVsdCcgfSB9LFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMudHdpbGlvU2VydmljZS5jYWxsID0gdGhpcy5jYWxsO1xyXG4gICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgYWRkQ2xpZW50UGFydGljaXBhbnRSZXMgPSB0aGlzLmFkZENsaWVudFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgICAgICBmcm9tOiByZWpvaW5QYXJ0aWNpcGVudEluZm8uZnJvbSxcclxuICAgICAgICAgICAgICByb3V0ZTogXCJPVVRHT0lOR1wiLFxyXG4gICAgICAgICAgICAgIHBhcnRpY2lwYW50TnVtYmVyOiByZWpvaW5QYXJ0aWNpcGVudEluZm8/LnRvLFxyXG4gICAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogcmVqb2luUGFydGljaXBlbnRJbmZvPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgcHJveHk6ICcnLFxyXG4gICAgICAgICAgICAgIGNvdW50cnljb2RlOiAnJyxcclxuICAgICAgICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICAgICAgICBjbGllbnRTaWQ6IHRoaXMuY2FsbD8ucGFyYW1ldGVyc1snQ2FsbFNpZCddLFxyXG4gICAgICAgICAgICAgIHJlY29yZElkOiByZWpvaW5QYXJ0aWNpcGVudEluZm8/LmlkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSByZWpvaW5QYXJ0aWNpcGVudEluZm8/LmNvbmZlcmVuY2VJZDtcclxuICAgICAgICAgICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKCk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBhZGRDbGllbnRQYXJ0aWNpcGFudDonLCBlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdSZWpvaW4gZmFpbGVkJywgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWFwVXNlckluZm8ocGFydGljaXBhbnRJbmZvOiBhbnksIGNhbGxlckluZm86IGFueSkge1xyXG4gICAgcGFydGljaXBhbnRJbmZvWydlbWFpbCddID0gY2FsbGVySW5mby5lbWFpbDtcclxuICAgICAgcGFydGljaXBhbnRJbmZvWyduYW1lJ10gPSBjYWxsZXJJbmZvLm5hbWU7XHJcbiAgICAgIHBhcnRpY2lwYW50SW5mb1snaW1hZ2UnXSA9IGNhbGxlckluZm8uaW1hZ2U7XHJcbiAgICAgIHBhcnRpY2lwYW50SW5mb1snZXh0ZW5zaW9uJ10gPSBjYWxsZXJJbmZvLmV4dGVuc2lvbjtcclxuICAgICAgcGFydGljaXBhbnRJbmZvWyd1c2VySW5mb0lkJ10gPSBjYWxsZXJJbmZvLmlkO1xyXG4gICAgICBwYXJ0aWNpcGFudEluZm9bJ21lc3NhZ2UnXSA9IGNhbGxlckluZm8ubWVzc2FnZTtcclxuICAgICAgcGFydGljaXBhbnRJbmZvIFsnbm90ZSddID0gY2FsbGVySW5mby5ub3RlO1xyXG4gICAgICBwYXJ0aWNpcGFudEluZm9bJ251bWJlciddID0gY2FsbGVySW5mby5udW1iZXI7XHJcbiAgICAgIHBhcnRpY2lwYW50SW5mb1sncG9pbnROYW1lJ10gPSBjYWxsZXJJbmZvLnBvaW50TmFtZTtcclxuICAgICAgcGFydGljaXBhbnRJbmZvWydzb2Z0cGhvbmVUd2lsaW9BdXRoSWQnXSA9IGNhbGxlckluZm8uc29mdHBob25lVHdpbGlvQXV0aElkO1xyXG4gICAgICBwYXJ0aWNpcGFudEluZm9bJ3NvdXJjZU5hbWUnXSA9IGNhbGxlckluZm8uc291cmNlTmFtZTtcclxuICAgICAgcGFydGljaXBhbnRJbmZvWydzdWJqZWN0J10gPSBjYWxsZXJJbmZvLnN1YmplY3Q7XHJcbiAgICAgIHJldHVybiB7Li4ucGFydGljaXBhbnRJbmZvfTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZWRQYXJ0aWNpcGFudExpc3QocGFydGljaXBhbnQ6YW55KSB7XHJcbiAgICBpZihwYXJ0aWNpcGFudD8ubGVuZ3RoKXtcclxuICAgICAgdGhpcy5hbGxDb25QYXJ0aWNpcGVudExpc3RbcGFydGljaXBhbnRbMF0/LmNvbmZlcmVuY2VJZF0gPSBwYXJ0aWNpcGFudDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmFsbENvblBhcnRpY2lwZW50TGlzdFtwYXJ0aWNpcGFudFswXT8uY29uZmVyZW5jZUlkXTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCAmJiAhIXRoaXMuYWxsQ29uUGFydGljaXBlbnRMaXN0Py5bdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0XT8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucGFydGljaXBhbnRMaXN0SW5kbyh0aGlzLmFsbENvblBhcnRpY2lwZW50TGlzdFt0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3RdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5jb25mZXJlbmNlSWQ7XHJcbiAgICAgIHRoaXMucGFydGljaXBhbnRMaXN0SW5kbygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcGFydGljaXBhbnRMaXN0SW5kbyhwYXJ0aWNpcGFudHM/OiBhbnkpIHtcclxuICAgIGlmICghcGFydGljaXBhbnRzPy5sZW5ndGgpIHtcclxuICAgICAgaWYgKHRoaXMuYWxsUGFydGljaXBlbnRMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgcGFydGljaXBhbnRzLm1hcChhc3luYyAocDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZnJvbU5hbWUgPSBhd2FpdCB0aGlzLmdldE5hbWUocC5mcm9tKTtcclxuICAgICAgICBjb25zdCB0b05hbWUgPSBhd2FpdCB0aGlzLmdldE5hbWUocC50byk7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ucCwgZnJvbU5hbWU6IGZyb21OYW1lIHx8IHAuZnJvbU5hbWUsIHRvTmFtZTogdG9OYW1lIHx8IHAudG9OYW1lIH07XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEJ1aWxkIGEgbG9va3VwIG1hcCBmcm9tIHRoZSBjdXJyZW50IHJlbmRlcmVkIGxpc3Qgc28gd2UgY2FuIHJldXNlIHRoZSBzYW1lXHJcbiAgICAvLyBvYmplY3QgcmVmZXJlbmNlIGZvciBwYXJ0aWNpcGFudHMgd2hvc2UgZGF0YSBoYXNuJ3QgY2hhbmdlZC5cclxuICAgIC8vIEFuZ3VsYXIncyAqbmdGb3IgdXNlcyBvYmplY3QgaWRlbnRpdHkgKD09PSkgdG8gZGVjaWRlIHdoZXRoZXIgdG8gcmUtcmVuZGVyIGEgcm93O1xyXG4gICAgLy8ga2VlcGluZyB0aGUgc2FtZSByZWZlcmVuY2UgcHJldmVudHMgRE9NIGRlc3RydWN0aW9uL3JlY3JlYXRpb24gYW5kIGVsaW1pbmF0ZXMgZmxpY2tlcmluZy5cclxuICAgIGNvbnN0IGV4aXN0aW5nTWFwID0gbmV3IE1hcDxhbnksIGFueT4oXHJcbiAgICAgICh0aGlzLmFsbFBhcnRpY2lwZW50TGlzdCB8fCBbXSkubWFwKChwOiBhbnkpID0+IFtwLmlkLCBwXSlcclxuICAgICk7XHJcblxyXG4gICAgbGV0IGFueUNoYW5nZSA9IHJlc29sdmVkLmxlbmd0aCAhPT0gKHRoaXMuYWxsUGFydGljaXBlbnRMaXN0Py5sZW5ndGggfHwgMCk7XHJcblxyXG4gICAgY29uc3QgbWVyZ2VkOiBhbnlbXSA9IHJlc29sdmVkLm1hcCgobmV3UDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gZXhpc3RpbmdNYXAuZ2V0KG5ld1AuaWQpO1xyXG4gICAgICBpZiAoIWV4aXN0aW5nKSB7XHJcbiAgICAgICAgYW55Q2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gbmV3UDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaXNNdXRlUGVuZGluZyA9IHRoaXMucGVuZGluZ011dGVQYXJ0aWNpcGFudHMuaGFzKG5ld1AuaWQpO1xyXG4gICAgICBjb25zdCBpbnRlbmRlZE11dGUgPSB0aGlzLmludGVuZGVkTXV0ZVN0YXRlcy5nZXQobmV3UC5pZCk7XHJcbiAgICAgIGlmIChpc011dGVQZW5kaW5nICYmIGludGVuZGVkTXV0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKG5ld1AuaXNNdXRlID09PSBpbnRlbmRlZE11dGUpIHtcclxuICAgICAgICAgIHRoaXMucGVuZGluZ011dGVQYXJ0aWNpcGFudHMuZGVsZXRlKG5ld1AuaWQpO1xyXG4gICAgICAgICAgdGhpcy5pbnRlbmRlZE11dGVTdGF0ZXMuZGVsZXRlKG5ld1AuaWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuZXdQID0geyAuLi5uZXdQLCBpc011dGU6IGV4aXN0aW5nLmlzTXV0ZSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY2hhbmdlZCA9IE9iamVjdC5rZXlzKG5ld1ApLnNvbWUoayA9PiBleGlzdGluZ1trXSAhPT0gbmV3UFtrXSk7XHJcbiAgICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgICAgYW55Q2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4geyAuLi5leGlzdGluZywgLi4ubmV3UCB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBleGlzdGluZztcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChhbnlDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbmZOYW1lID0gdGhpcy5jb25mZXJlbmNlQ2FsbExpc3QuZmluZCgocmVzOiBhbnkpID0+IHJlcz8uY29uZmVyZW5jZUlkID09IHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCk/LmNhbGxMYWJlbCB8fCAnJztcclxuICAgICAgdGhpcy5hbGxQYXJ0aWNpcGVudExpc3QgPSBtZXJnZWQ7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSBbLi4ubWVyZ2VkXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dDYWxsaW5nVG9hc3QobnVtYmVyOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY2FsbE51bWJlclRvYXN0ID0ge1xyXG4gICAgICBzaG93OiB0cnVlLFxyXG4gICAgICB0eXBlOiAnYWxlcnQtc3VjY2VzcycsXHJcbiAgICAgIG51bWJlcjogbnVtYmVyLFxyXG4gICAgICBkaXNwbGF5TnVtOiBudW1iZXJcclxuICAgIH07XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LnNob3cgPSBmYWxzZTtcclxuICAgIH0sIDcwMDApO1xyXG4gIH1cclxuICBnZXRTdGF0dXMocmVzOiBhbnkpIHtcclxuICAgIGlmIChyZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIikge1xyXG4gICAgICByZXR1cm4gcmVzPy5jYWxsU3RhdHVzID09ICdyaW5naW5nJyA/IGZhbHNlIDogIXJlcz8uaXNMZWZ0XHJcbiAgICB9IGVsc2UgaWYocmVzPy5kaXJlY3Rpb24gPT0gXCJvdXRnb2luZy1jYWxsXCIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBHZXRDb250YWN0c0xpc3QoKSB7XHJcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB8fCAnJztcclxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5yZWFkQ29udGFjdHModG9rZW4pLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMucGhvbmVCb29rKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbnRhY3RzID0gcmVzLnBob25lQm9vaztcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gcmVzLnBob25lQm9vaztcclxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzKSkge1xyXG4gICAgICAgICAgdGhpcy5jb250YWN0cyA9IHJlcztcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gcmVzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNvbnRhY3RzID0gW107XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjb250YWN0czonLCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5jb250YWN0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gW107XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIGFkZFJlczogYW55O1xyXG4gIGFzeW5jIHN0YXJ0Q2FsbChjYWxsRGF0YTogYW55LCBpc05ld0NvbmZlcmVuY2U/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jdXJyZW50Q2FsbExpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5zZXRJbmNvbWluZ011dGVkKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICBjaGFubmVsSWQ6IGVudmlyb25tZW50LmNoYW5uZWxJZCxcclxuICAgICAgICB1c2VySWQ6IHRoaXMudXNlcklkIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcclxuICAgICAgICB0bzogY2FsbERhdGEucGhvbmUsXHJcbiAgICAgICAgZnJvbU51bWJlcjogY2FsbERhdGEuZnJvbSxcclxuICAgICAgICBzY29wZTogJ2xvY2FsJyxcclxuICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICBmaXJzdG5hbWU6IG51bGwsXHJcbiAgICAgICAgbGFzdG5hbWU6IG51bGwsXHJcbiAgICAgICAgY291bnRyeWNvZGU6IG51bGwsXHJcbiAgICAgICAgbnVtYmVyOiBudWxsLFxyXG4gICAgICAgIG51bW90cDogbnVsbCxcclxuICAgICAgICBleHRlbnNpb246IG51bGwsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuY3VycmVudENhbGwgPSB7XHJcbiAgICAgICAgYnVzaW5lc3NOdW1iZXI6IGZhbHNlLFxyXG4gICAgICAgIGNhbGxTaWQ6ICcnLFxyXG4gICAgICAgIGNhbGxTdGF0dXM6ICcnLFxyXG4gICAgICAgIGNvbmZlcmVuY2VJZDogJycsXHJcbiAgICAgICAgZGlhbDogdHJ1ZSxcclxuICAgICAgICBkaXJlY3Rpb246ICdvdXRnb2luZy1jYWxsJyxcclxuICAgICAgICBmb3J3YXJkZWRUbzogJycsXHJcbiAgICAgICAgZnJvbTogY2FsbERhdGEuZnJvbSxcclxuICAgICAgICBpZDogJ3l5dWdnaGpiJyxcclxuICAgICAgICBpbWc6IGNhbGxEYXRhLmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgaXNBY2NlcHRDYWxsOiB0cnVlLFxyXG4gICAgICAgIGlzQ29uZmVyZW5jZTogZmFsc2UsXHJcbiAgICAgICAgaXNIb2xkOiBmYWxzZSxcclxuICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXHJcbiAgICAgICAgaXNMZWZ0OiBmYWxzZSxcclxuICAgICAgICBpc011dGU6IGZhbHNlLFxyXG4gICAgICAgIGpvaW5lZEF0OiAnJyxcclxuICAgICAgICBuYW1lOiBjYWxsRGF0YT8ubmFtZSB8fCAnJyxcclxuICAgICAgICBwYXJ0aWNpcGFudElkOiAnJyxcclxuICAgICAgICBwaG9uZTogY2FsbERhdGE/LnBob25lIHx8ICcnLFxyXG4gICAgICAgIHJvbGU6ICdjYWxsZWUnLFxyXG4gICAgICAgIHN0YXR1czogJycsXHJcbiAgICAgICAgdGltZTogJycsXHJcbiAgICAgICAgdG86IGNhbGxEYXRhPy5waG9uZSB8fCAnJyxcclxuICAgICAgICB0b05hbWU6IGNhbGxEYXRhPy5uYW1lIHx8ICcnLFxyXG4gICAgICAgIHVzZXJJZDogdGhpcy51c2VySWQgfHwgY2FsbERhdGE/LnVzZXJJZFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmluaXRpYXRlQ2FsbChwYXlsb2FkKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzQ2FsbENhbmNlbGxlZCkge1xyXG4gICAgICAgIHRoaXMudW5ob2xkUGVuZGluZ0NvbmZlcmVuY2UoKTtcclxuICAgICAgICB0aGlzLmlzQ2FsbENhbmNlbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb25mZXJlbmNlSWQgPSByZXNwb25zZT8uY2FsbGF1dGg/LmlkO1xyXG4gICAgICB0aGlzLmlzQ2FsbENhbmNlbGxlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgIHRoaXMucGVuZGluZ05ld0NhbGxIZWxkUGFydGljaXBhbnQgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IHsgaWQ6IGNhbGxBdXRoSWQsIHJlY29yZENhbGwsICB0b2tlbkRhdGF9ID0gYXdhaXQgdGhpcy5nZXRDYWxsQXV0aElkKHJlc3BvbnNlKTtcclxuICAgICAgICB0aGlzLnJlY29yZENhbGwgPSByZWNvcmRDYWxsOyAvLyBTdG9yZSB0aGUgcmVjb3JkQ2FsbCB2YWx1ZVxyXG4gICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdFRvRGV2aWNlKGNhbGxBdXRoSWQsIGNhbGxEYXRhLCB0b2tlbkRhdGEpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucG9sbENhbGxTdGF0dXMoY2FsbEF1dGhJZCk7XHJcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgYWRkQ2xpZW50UGFydGljaXBhbnRSZXM6YW55ID0gdGhpcy5hZGRDbGllbnRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgICAgZnJvbTogY2FsbERhdGE/LmZyb20sXHJcbiAgICAgICAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcclxuICAgICAgICAgICAgICBwYXJ0aWNpcGFudE51bWJlcjogY2FsbERhdGE/LnBob25lLFxyXG4gICAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogcmVzcG9uc2U/LmNhbGxhdXRoPy5pZCxcclxuICAgICAgICAgICAgICB1c2VySWQ6IHRoaXMudXNlcklkIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgICBwcm94eTogJycsXHJcbiAgICAgICAgICAgICAgY291bnRyeWNvZGU6ICcnLFxyXG4gICAgICAgICAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICAgICAgICAgIGNsaWVudFNpZDogdGhpcy5jYWxsPy5wYXJhbWV0ZXJzWydDYWxsU2lkJ11cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIGlmKGFkZENsaWVudFBhcnRpY2lwYW50UmVzPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICAgIC8vICAgc3dhbChcIkVycm9yXCIsIGFkZENsaWVudFBhcnRpY2lwYW50UmVzPy5tZXNzYWdlLmpvaW4oXCI8YnIvPlwiKSwgXCJlcnJvclwiKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICB0aGlzLmFkZFJlcyA9IGF3YWl0IHRoaXMuYWRkUGFydGljaXBhbnRUb0NhbGwoe1xyXG4gICAgICAgICAgICAgIGZyb206IGNhbGxEYXRhPy5mcm9tLFxyXG4gICAgICAgICAgICAgIHJvdXRlOiBcIk9VVEdPSU5HXCIsXHJcbiAgICAgICAgICAgICAgcGFydGljaXBhbnROdW1iZXI6IGNhbGxEYXRhPy5waG9uZSxcclxuICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHJlc3BvbnNlPy5jYWxsYXV0aD8uaWQsXHJcbiAgICAgICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgcHJveHk6ICcnLFxyXG4gICAgICAgICAgICAgIGNvdW50cnljb2RlOiAnJyxcclxuICAgICAgICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmKGlzTmV3Q29uZmVyZW5jZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IHJlc3BvbnNlPy5jYWxsYXV0aD8uaWQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNOZXdBZGRlZENhbGwgPSBmYWxzZVxyXG4gICAgICAgICAgICBpZih0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmlzTG9hZGVyc2hvdy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVyc2hvd24uZW1pdChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0ID0gcmVzcG9uc2U/LmNhbGxhdXRoPy5pZDtcclxuICAgICAgICAgICAgLy8gYXdhaXQgdGhpcy5nZXRBbGxQYXJ0aWNpcGFudHMocmVzcG9uc2U/LmNhbGxhdXRoPy5pZCk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFkZGluZyBpbml0aWFsIHBhcnRpY2lwYW50OicsIGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDE1MDApXHJcbiAgICAgICAgLy8gUG9sbCB0aGUgc3RhdHVzIGZvciAzMC00NSBzZWNvbmRzXHJcbiAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2Uuc3RhdHVzID09IDIwMSkge1xyXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5pc0xvYWRlcnNob3cubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRlcnNob3duLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuaXNOZXdBZGRlZENhbGwgPSBmYWxzZTtcclxuICAgICAgICBzd2FsKFwiRXJyb3JcIiwgcmVzcG9uc2UubWVzc2FnZS5qb2luKFwiPGJyLz5cIiksIFwiZXJyb3JcIik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zaG93TmV3Q2FsbExvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChpc05ld0NvbmZlcmVuY2UpIHtcclxuICAgICAgICAgIHRoaXMudW5ob2xkUGVuZGluZ0NvbmZlcmVuY2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5lbmRDYWxsKCk7IC8vIHJlZ3VsYXIgY2FsbCBmYWlsdXJlIOKAkyBkaXNjb25uZWN0IGV2ZXJ5dGhpbmdcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgICB0aGlzLmVuZENhbGwoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25NdXRlVXNlcihjOiBhbnkpIHtcclxuICAgIGNvbnN0IHBhcnRpY2lwYW50SWQgPSBjLmlkO1xyXG4gICAgY29uc3QgbmV3TXV0ZVN0YXRlID0gIWMuaXNNdXRlO1xyXG5cclxuICAgIFxyXG4gICAgdGhpcy5wZW5kaW5nTXV0ZVBhcnRpY2lwYW50cy5hZGQocGFydGljaXBhbnRJZCk7XHJcbiAgICB0aGlzLmludGVuZGVkTXV0ZVN0YXRlcy5zZXQocGFydGljaXBhbnRJZCwgbmV3TXV0ZVN0YXRlKTtcclxuXHJcbiAgICBjLmlzTXV0ZSA9IG5ld011dGVTdGF0ZTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGxldCBtdXRlSW5mbzogYW55ID0gYXdhaXQgdGhpcy5vbk11dGVQYXJ0aWNpcGFudCh7XHJcbiAgICAgIHBhcnRpY2lwYW50SWQ6IFtwYXJ0aWNpcGFudElkXSxcclxuICAgICAgY29uZmVyZW5jZUlkOiBjPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgIGhvbGQ6IGMuaXNIb2xkLFxyXG4gICAgICBtdXRlOiBuZXdNdXRlU3RhdGVcclxuICAgIH0pO1xyXG4gICAgaWYobXV0ZUluZm8/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgc3dhbChcIkVycm9yXCIsIG11dGVJbmZvPy5tZXNzYWdlPy5qb2luPy4oXCI8YnIvPlwiKSB8fCAnSW50ZXJuYWwgU2VydmVyIEVycm9yJywgXCJlcnJvclwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvL3JlbW92ZSBwZW5kaW5nIGd1YXJkIGFmdGVyIDUgc2Vjb25kcyBpZiBubyBjb25maXJtYXRpb25cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5wZW5kaW5nTXV0ZVBhcnRpY2lwYW50cy5oYXMocGFydGljaXBhbnRJZCkpIHtcclxuICAgICAgICB0aGlzLnBlbmRpbmdNdXRlUGFydGljaXBhbnRzLmRlbGV0ZShwYXJ0aWNpcGFudElkKTtcclxuICAgICAgICB0aGlzLmludGVuZGVkTXV0ZVN0YXRlcy5kZWxldGUocGFydGljaXBhbnRJZCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDUwMDApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Ib2xkQ2FsbChjOiBhbnkpIHtcclxuICAgIHRoaXMuaXNIb2xkQnRuRGlzYWJsZSA9IHRydWU7XHJcbiAgICBpZigoKGM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgJiYgdGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGM/LmZyb20pKSB8fCAoYz8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiB0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoYz8udG8pKSkgJiYgYz8uY2xpZW50ICYmICFjPy5idXNpbmVzc051bWJlcikge1xyXG4gICAgICBsZXQgdW5Ib2xkSW5mbzogYW55ID0ge307XHJcbiAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZm9yRWFjaChhc3luYyAoY2FsbDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgaWYgKGNhbGw/LmNvbmZlcmVuY2VJZCA9PSBjPy5jb25mZXJlbmNlSWQpIHtcclxuICAgICAgICAgIGxldCBwYXJ0aWNpcGFudEluZm8gPSBjYWxsLnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+XHJcbiAgICAgICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pKSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNEYXRhPy5idXNpbmVzc051bWJlcikpICYmICFyZXNEYXRhPy5pc0xlZnQgJiYgcmVzRGF0YT8uY2xpZW50XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBpZiAocGFydGljaXBhbnRJbmZvPy5pZCApIHtcclxuICAgICAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtwYXJ0aWNpcGFudEluZm8/LmlkXSxcclxuICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHBhcnRpY2lwYW50SW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICAgIGhvbGQ6ICFwYXJ0aWNpcGFudEluZm8/LmlzSG9sZCxcclxuICAgICAgICAgICAgICBtdXRlOiBwYXJ0aWNpcGFudEluZm8/Lm11dGUgfHwgZmFsc2VcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmKGhvbGRJbmZvPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgc3dhbChcIkVycm9yXCIsIGhvbGRJbmZvPy5tZXNzYWdlPy5qb2luPy4oXCI8YnIvPlwiKSB8fCAnSW50ZXJuYWwgU2VydmVyIEVycm9yJywgXCJlcnJvclwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZihjPy5pc0hvbGQpIHtcclxuICAgICAgICAgICAgdW5Ib2xkSW5mbyA9IGNhbGwucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICAgICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy5mcm9tKSkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiAhcmVzRGF0YT8uYnVzaW5lc3NOdW1iZXIpKSAmJiAhcmVzRGF0YT8uaXNMZWZ0ICYmICFyZXNEYXRhPy5pc0hvbGQgJiYgcmVzRGF0YT8uY2xpZW50XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB1bkhvbGRJbmZvID0gY2FsbC5wYXJ0aWNpcGFudHMuZmluZCgocmVzRGF0YTogYW55KSA9PlxyXG4gICAgICAgICAgICAvLyAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pKSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNEYXRhPy5idXNpbmVzc051bWJlcikpICYmICFyZXNEYXRhPy5pc0xlZnQgJiYgcmVzRGF0YT8uaXNIb2xkICYmIHJlc0RhdGE/LmNsaWVudFxyXG4gICAgICAgICAgICAvLyApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGluZGV4ID09IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3Q/Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCd1bkhvbGRJbmZvJywgdW5Ib2xkSW5mbylcclxuICAgICAgICAgIGlmICh1bkhvbGRJbmZvPy5pZCkge1xyXG4gICAgICAgICAgICBsZXQgaG9sZEluZm86IGFueSA9IGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW3VuSG9sZEluZm8/LmlkXSxcclxuICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHVuSG9sZEluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgICBob2xkOiAhdW5Ib2xkSW5mbz8uaXNIb2xkLFxyXG4gICAgICAgICAgICAgIG11dGU6IHVuSG9sZEluZm8/Lm11dGUgfHwgZmFsc2VcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmKGhvbGRJbmZvPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignaG9sZEluZm8gODA1JywgaG9sZEluZm8pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pc0hvbGRCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSG9sZEJ0bkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgIHBhcnRpY2lwYW50SWQ6IFtjLmlkXSxcclxuICAgICAgICBjb25mZXJlbmNlSWQ6IGM/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICBob2xkOiAhYy5pc0hvbGQsXHJcbiAgICAgICAgbXV0ZTogYz8ubXV0ZSB8fCBmYWxzZVxyXG4gICAgICB9KTtcclxuICAgICAgaWYoaG9sZEluZm8/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdob2xkSW5mbyA4MTknLCBob2xkSW5mbylcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzSG9sZEJ0bkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgYy5pc0hvbGQgPSAhYy5pc0hvbGQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSBjPy5jb25mZXJlbmNlSWQ7XHJcbiAgICAvLyBhd2FpdCB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyhjPy5jb25mZXJlbmNlSWQpO1xyXG4gIH1cclxuICBhc3luYyBvbkVuZENhbGwoYzogYW55LCBpc0FsbENhbGxFbmQ/OiBib29sZWFuLCBpc0NvbnRlY3Q/OiBib29sZWFuKSB7XHJcbiAgICBsZXQgcGFydGljaXBhbnRJZCA9IGlzQWxsQ2FsbEVuZCA/ICdhbGwnIDogYy5wYXJ0aWNpcGFudElkIHx8IGM/LmlkO1xyXG4gICAgY29uc3QgY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbyA9IHRoaXMuZ2V0Q3VycmVudENhbGxJbmZvKCk7XHJcbiAgICBjb25zdCBwYXJ0aWNpcGFudExpc3QgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZpbmQoKGNhbGxJbmZvOmFueSkgPT4gY2FsbEluZm8/LmNvbmZlcmVuY2VJZCA9PSBjPy5jb25mZXJlbmNlSWQpLnBhcnRpY2lwYW50cy5maWx0ZXIoKHJlc0RhdGE6IGFueSkgPT4gIXJlc0RhdGE/LmlzTGVmdCk7XHJcbiAgICBpZihwYXJ0aWNpcGFudExpc3Q/Lmxlbmd0aCA8PSAyICYmICFpc0NvbnRlY3QpIHtcclxuICAgICAgcGFydGljaXBhbnRJZCA9ICdhbGwnO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoID09IDIpIHtcclxuICAgICAgdGhpcy5wZW5kaW5nQXV0b1VuaG9sZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBsZXQgY29uZmVyZW5jZUlkID0gYy5jb25mZXJlbmNlSWQgfHwgY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbz8uY29uZmVyZW5jZUlkO1xyXG4gICAgbGV0IHJlczogYW55ID0gYXdhaXQgdGhpcy5nZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZCwgY29uZmVyZW5jZUlkKTtcclxuICAgIGlmIChyZXM/LnN0YXR1cyA9PSAyMDEgJiYgcmVzPy5tZXNzYWdlID09ICdwYXJ0aWNpcGFudCBhbHJlYWR5IGxlZnQnKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1BhcnRpY2lwYW50IGFscmVhZHkgbGVmdCcsIHJlcyk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0gZWxzZSBpZiAocmVzPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlbW92aW5nIHBhcnRpY2lwYW50JywgcmVzKTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0ID0gY29uZmVyZW5jZUlkO1xyXG4gICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGluaXRpYXRlQ2FsbChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuaW5pdGlhdGVDYWxsKHBheWxvYWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuaG9sZFBhcnRpY2lwYW50KHBheWxvYWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBhZGRQYXJ0aWNpcGFudFRvQ2FsbChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuYWRkUGFydGljaXBhbnQocGF5bG9hZCkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZENsaWVudFBhcnRpY2lwYW50KHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5hZGRDbGllbnRQYXJ0aWNpcGFudChwYXlsb2FkKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb25NdXRlUGFydGljaXBhbnQocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLm9uTXV0ZVBhcnRpY2lwYW50KHBheWxvYWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZDogYW55LCBjb25mZXJlbmNlSWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZCwgY29uZmVyZW5jZUlkKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q2FsbEF1dGhJZChyZXNwb25zZTogYW55KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpZDogcmVzcG9uc2UuY2FsbGF1dGguaWQsXHJcbiAgICAgIHJlY29yZENhbGw6IHJlc3BvbnNlLmNhbGxhdXRoLnJlY29yZENhbGwsXHJcbiAgICAgIHRva2VuRGF0YTogcmVzcG9uc2UuY2FsbGF1dGgudG9rZW5cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldE91dGdvaW5nQ2FsbFRva2VuKGNhbGxBdXRoSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDb25mZXJlbmNlQ2FsbFRva2VuKHsgYXV0aElkOiBjYWxsQXV0aElkIH0pLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjb25uZWN0VG9EZXZpY2UodG9rZW46IGFueSwgY2FsbERhdGE6IGFueSwgdG9rZW5EYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHtcclxuICAgICAgY29kZWNQcmVmZXJlbmNlczogWydvcHVzJywgJ3BjbXUnXSxcclxuICAgICAgY2xvc2VQcm90ZWN0aW9uOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmRldmljZSA9IG5ldyBEZXZpY2UodG9rZW5EYXRhLCBvcHRpb25zKTtcclxuICAgIHRoaXMuY2FsbCA9IGF3YWl0IHRoaXMuZGV2aWNlLmNvbm5lY3Qoe1xyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBGcm9tOiBjYWxsRGF0YS5mcm9tLFxyXG4gICAgICAgIFRvOiBjYWxsRGF0YS5waG9uZSxcclxuICAgICAgICBFbnY6IGVudmlyb25tZW50LmFiYixcclxuICAgICAgICBUb2tlbjogdG9rZW4sXHJcbiAgICAgICAgRXh0OiBjYWxsRGF0YS5leHROdW1cclxuICAgICAgfSxcclxuICAgICAgcnRjQ29uc3RyYWludHM6IHsgYXVkaW86IHRydWUgfSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy50d2lsaW9TZXJ2aWNlLmNhbGwgPSB0aGlzLmNhbGw7XHJcbiAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycygpIHtcclxuICAgIHRoaXMuc3RhcnRUaW1lcigpO1xyXG4gICAgdGhpcy5kZXZpY2U/Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN0b3BUaW1lcigpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYWxsPy5vbignZXJyb3InLCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3RvcFRpbWVyKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbGw/Lm9uKCdkaXNjb25uZWN0JywgKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygndGVzdC1kaXNjb25uZWN0JylcclxuICAgICAgY29uc29sZS5sb2coJzgzMicpXHJcbiAgICAgIC8vIENsZWFuIHVwIHRoaXMgY2FsbCBmcm9tIGFjY2VwdGVkQ2FsbExpc3RzIHNvIGRldmljZSByZS1pbml0IGd1YXJkIHJlc2V0c1xyXG4gICAgICBjb25zdCBkaXNjb25uZWN0ZWRTaWQgPSB0aGlzLmNhbGw/LnBhcmFtZXRlcnM/LkNhbGxTaWQ7XHJcbiAgICAgIGlmIChkaXNjb25uZWN0ZWRTaWQpIHtcclxuICAgICAgICB0aGlzLmFjY2VwdGVkQ2FsbExpc3QgPSB0aGlzLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKGMgPT4gYy5jYWxsU2lkICE9PSBkaXNjb25uZWN0ZWRTaWQpO1xyXG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0ID0gdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBkaXNjb25uZWN0ZWRTaWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMuY2FsbD8uZGlzY29ubmVjdCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYWxsPy5vbigncmluZ2luZycsICgpID0+IHtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FsbD8ub24oJ3JlamVjdCcsICgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ3Rlc3Q1JylcclxuICAgICAgdGhpcy5lbmRDYWxsKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbGw/Lm9uKCdhY2NlcHQnLCAoKSA9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd05ld0NhbGxMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSwgMjAwMCk7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZGlzYmFsZUVuZENhbGxCdG4gPSBmYWxzZTtcclxuICAgICAgLy8gRW5zdXJlIHRoZSBhY3RpdmUgb3V0Z29pbmcgY2FsbCBpcyBtYXJrZWQgYXMgYWNjZXB0ZWQgc28gdGhlIFVJIHN3aXRjaGVzIHRvIHRoZSBjb25uZWN0ZWQgdmlld1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciB1cGRhdGluZyBhY2NlcHQgc3RhdGU6JywgZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jYWxsPy5vbignbWVzc2FnZVJlY2VpdmVkJywgKG1lc3NhZ2U6IGFueSkgPT4ge1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXJ0VGltZXIoam9pbkF0Pzogc3RyaW5nKSB7XHJcbiAgICBpZiAoIWpvaW5BdCkgcmV0dXJuO1xyXG5cclxuICBjb25zdCBqb2luVGltZSA9IG5ldyBEYXRlKGpvaW5BdCkuZ2V0VGltZSgpIHx8IDA7XHJcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICBsZXQgc2Vjb25kcyA9IE1hdGguZmxvb3IoKG5vdyAtIGpvaW5UaW1lKSAvIDEwMDApO1xyXG4gICAgaWYgKHNlY29uZHMgPCAwKSB7XHJcbiAgICAgIHNlY29uZHMgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBzZWNvbmRzKys7XHJcbiAgICAgIC8vIHRoaXMudGltZXIgPSB0aGlzLmZvcm1hdFRpbWUoc2Vjb25kcyk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdG9wVGltZXIoKSB7XHJcbiAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XHJcbiAgICB0aGlzLnRpbWVyID0gJzAwOjAwJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0VGltZSh0b3RhbFNlY29uZHM6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsU2Vjb25kcyAvIDM2MDApO1xyXG4gIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh0b3RhbFNlY29uZHMgJSAzNjAwKSAvIDYwKTtcclxuICBjb25zdCBzZWNvbmRzID0gdG90YWxTZWNvbmRzICUgNjA7XHJcbiAgaWYgKGhvdXJzID4gMCkge1xyXG4gICAgcmV0dXJuIGAke3RoaXMucGFkKGhvdXJzKX06JHt0aGlzLnBhZChtaW51dGVzKX06JHt0aGlzLnBhZChzZWNvbmRzKX1gO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5wYWQobWludXRlcyl9OiR7dGhpcy5wYWQoc2Vjb25kcyl9YDtcclxuICB9XHJcbn1cclxuXHJcbiAgcHJpdmF0ZSBwYWQodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdmFsdWUgPCAxMCA/IGAwJHt2YWx1ZX1gIDogYCR7dmFsdWV9YDtcclxuICB9XHJcbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogYW55KSB7XHJcbiAgICBzd2FsKFwiRXJyb3JcIiwgZXJyb3IsIFwiZXJyb3JcIik7XHJcbiAgfVxyXG5cclxuICBlbmRDb25mZXJlbmVjZUNhbGwoY29uZj86IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbmYgPSBjb25mO1xyXG4gICAgLy8gdGhpcy5pc1VuaG9sZENvbmZlcmVuY2VDYWxsID0gdHJ1ZTtcclxuICAgIGxldCBjb25mZXJlbmNlID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8uZmluZCgocmVzOiBhbnkpID0+IHJlcz8uY29uZmVyZW5jZUlkID09IGNvbmY/LmNvbmZlcmVuY2VJZCk7XHJcbiAgICBsZXQgaG9zdE51bWJlciA9IGNvbmZlcmVuY2U/LnBhcnRpY2lwYW50cz8uZmluZCgocGFydGljaXBhbnQ6IGFueSkgPT4gcGFydGljaXBhbnQ/Lmhvc3QgJiYgIXBhcnRpY2lwYW50Py5idXNpbmVzc051bWJlcik7XHJcbiAgICBpZiAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhob3N0TnVtYmVyPy5mcm9tKSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGhvc3ROdW1iZXI/LnRvKSAmJiBob3N0TnVtYmVyPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmIGhvc3ROdW1iZXI/Lmhvc3QpKSAmJiBjb25mZXJlbmNlPy5wYXJ0aWNpcGFudHMuZmlsdGVyKChwOiBhbnkpID0+ICFwLmlzTGVmdCkubGVuZ3RoID4gMikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29uZiA9IGhvc3ROdW1iZXI7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb25mWydjb25OYW1lJ10gPSB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdC5maW5kKChyZXM6IGFueSkgPT4gcmVzPy5jb25mZXJlbmNlSWQgPT0gY29uZj8uY29uZmVyZW5jZUlkKT8uY2FsbExhYmVsIHx8ICcnO1xyXG4gICAgICB0aGlzLm9uQ2FsbERpc2Nvbm5lY3RlZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGNvbmY/LmNvbmZlcmVuY2VJZCkge1xyXG4gICAgICAgIGxldCBwYXJ0aWNpcGVudEluZm8gPSBjb25mZXJlbmNlPy5wYXJ0aWNpcGFudHM/LmZpbmQoKHBhcnRpY2lwYW50OiBhbnkpID0+ICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py5mcm9tKVxyXG4gICAgICAgICAgJiYgcGFydGljaXBhbnQ/LmNsaWVudCAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJykgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8udG8pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFwYXJ0aWNpcGFudD8uYnVzaW5lc3NOdW1iZXIpICYmICFwYXJ0aWNpcGFudD8uYnVzaW5lc3NOdW1iZXIpICYmICFwYXJ0aWNpcGFudD8uaXNMZWZ0KVxyXG4gICAgICAgIGlmIChwYXJ0aWNpcGVudEluZm8/LmlkKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pc0luTXVsdGlwbGVDb25mZXJlbmNlcygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQgPSBwYXJ0aWNpcGVudEluZm87XHJcbiAgICAgICAgICAgIHRoaXMubGVhdmVDb25mQ29uZmVyZW5jZU5hbWUgPSB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdC5maW5kKFxyXG4gICAgICAgICAgICAgIChjOiBhbnkpID0+IGMuY29uZmVyZW5jZUlkID09PSBjb25mZXJlbmNlPy5jb25mZXJlbmNlSWRcclxuICAgICAgICAgICAgKT8uY2FsbExhYmVsIHx8ICdDb25mZXJlbmNlJztcclxuICAgICAgICAgICAgdGhpcy5zaG93TGVhdmVDb25maXJtYXRpb25Nb2RhbCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub25FbmRDYWxsKHBhcnRpY2lwZW50SW5mbylcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbmRDYWxsKGZhbHNlLCBjb25mKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZW5kQ2FsbChpc0FsbENhbGxFbmQ/OiBib29sZWFuLCBjYWxsRGV0YWlsPzogYW55KSB7XHJcbiAgICAvLyB0aGlzLmlzQ29uZmVyZW5jZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGlzQWxsQ2FsbEVuZCkge1xyXG4gICAgICB0aGlzLnN0b3BUaW1lcigpO1xyXG4gICAgICB0aGlzLm9uRW5kQ2FsbCh7fSwgaXNBbGxDYWxsRW5kKTtcclxuICAgICAgaWYgKCF0aGlzLmN1cnJlbnRDYWxsTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coODk2KVxyXG4gICAgICAgIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgY3VycmVudFBhcnRpY2lwYW50ID0gdGhpcy5nZXRDdXJyZW50Q2FsbEluZm8oKSB8fCB0aGlzLmdldEN1cnJlbnRDYWxsSU93bkluZm8oY2FsbERldGFpbCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0luTXVsdGlwbGVDb25mZXJlbmNlcygpICYmIGN1cnJlbnRQYXJ0aWNpcGFudCkge1xyXG4gICAgICAgIHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQgPSBjdXJyZW50UGFydGljaXBhbnQ7XHJcbiAgICAgICAgdGhpcy5sZWF2ZUNvbmZDb25mZXJlbmNlTmFtZSA9IHRoaXMuY29uZmVyZW5jZUNhbGxMaXN0LmZpbmQoXHJcbiAgICAgICAgICAoYzogYW55KSA9PiBjLmNvbmZlcmVuY2VJZCA9PT0gY3VycmVudFBhcnRpY2lwYW50LmNvbmZlcmVuY2VJZFxyXG4gICAgICAgICk/LmNhbGxMYWJlbCB8fCAnQ3VycmVudCBDYWxsJztcclxuICAgICAgICB0aGlzLnNob3dMZWF2ZUNvbmZpcm1hdGlvbk1vZGFsID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm47IFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub25FbmRDYWxsKGN1cnJlbnRQYXJ0aWNpcGFudCwgaXNBbGxDYWxsRW5kKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGFzeW5jIHRvZ2dsZU11dGUoaXNDb25mZXJlbmNlPzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc011dGUgPSAhdGhpcy5pc011dGU7XHJcbiAgICB0aGlzLnBlbmRpbmdNdXRlVXBkYXRlID0gdHJ1ZTsgXHJcbiAgICB0aGlzLmludGVuZGVkTXV0ZVN0YXRlID0gdGhpcy5pc011dGU7XHJcbiAgICB0aGlzLmNhbGw/Lm11dGUodGhpcy5pc011dGUpO1xyXG4gICAgY29uc3QgY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbyA9IHRoaXMuZ2V0Q3VycmVudENhbGxJbmZvKCk7XHJcbiAgICB0aGlzLm9uTXV0ZVBhcnRpY2lwYW50KHtcclxuICAgICAgcGFydGljaXBhbnRJZDogW2N1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8ucGFydGljaXBhbnRJZCB8fCBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvPy5pZF0sXHJcbiAgICAgIGNvbmZlcmVuY2VJZDogY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICBob2xkOiBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvLmlzSG9sZCxcclxuICAgICAgbXV0ZTogIWN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/LmlzTXV0ZVxyXG4gICAgICAvLyBjb25mZXJlbmNlOiBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvLmlzQ29uZmVyZW5jZSB8fCBmYWxzZVxyXG4gICAgfSlcclxuICAgIHRoaXMuY3VycmVudENhbGwuaXNNdXRlID0gdGhpcy5pc011dGU7XHJcbiAgICAvLyB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyh0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VJZCk7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50Q2FsbEluZm8oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdFxyXG4gICAgICAuZmxhdE1hcCgoY2FsbEluZm86IGFueSkgPT4gY2FsbEluZm8ucGFydGljaXBhbnRzKVxyXG4gICAgICAuZmluZCgocGFydGljaXBhbnQ6IGFueSkgPT4gKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LmZyb20pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnICYmIHBhcnRpY2lwYW50Py5jbGllbnQpXHJcbiAgICAgICAgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8udG8pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmIHBhcnRpY2lwYW50Py5jbGllbnQgJiYgIXBhcnRpY2lwYW50Py5idXNpbmVzc051bWJlcikpICYmICFwYXJ0aWNpcGFudD8uaXNMZWZ0ICYmICFwYXJ0aWNpcGFudD8uaXNIb2xkKTtcclxuICB9XHJcbiAgXHJcbiAgZ2V0Q3VycmVudENhbGxJT3duSW5mbyhjYWxsPzogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdFxyXG4gICAgICAuZmxhdE1hcCgoY2FsbEluZm86IGFueSkgPT4gY2FsbEluZm8ucGFydGljaXBhbnRzKVxyXG4gICAgICAuZmluZCgocGFydGljaXBhbnQ6IGFueSkgPT4gY2FsbD8uY29uZmVyZW5jZUlkID09PSBwYXJ0aWNpcGFudD8uY29uZmVyZW5jZUlkICYmICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py5mcm9tKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyAmJiBwYXJ0aWNpcGFudD8uY2xpZW50KVxyXG4gICAgICAgIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LnRvKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiBwYXJ0aWNpcGFudD8uY2xpZW50ICYmICFwYXJ0aWNpcGFudD8uYnVzaW5lc3NOdW1iZXIpKSAmJiAhcGFydGljaXBhbnQ/LmlzTGVmdCk7XHJcbiAgfVxyXG4gIHRvZ2dsZUtleXBhZCgpIHtcclxuICAgIHRoaXMuc2hvd0tleXBhZCA9ICF0aGlzLnNob3dLZXlwYWQ7XHJcbiAgICBcclxuICAgIHRoaXMuY2FsbElucHV0ID0gJyc7XHJcbiAgICBpZiAodGhpcy5zaG93S2V5cGFkKSB7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAgIFxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbGwtaW5wdXQnKT8uZm9jdXMoKTtcclxuICAgICAgICB9LCAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFN3aXRjaCB0aGF0IHNpbGVuY2VzIChvciByZXN0b3JlcykgdGhlIGluY29taW5nIHJpbmcgd2hpbGUgYSBjYWxsIGlzIGluIHByb2dyZXNzLlxyXG4gIHRvZ2dsZU11dGVJbmNvbWluZ0NhbGwoKSB7XHJcbiAgICBjb25zdCBuZXdNdXRlZCA9ICF0aGlzLnR3aWxpb1NlcnZpY2UuaXNJbmNvbWluZ011dGVkO1xyXG4gICAgdGhpcy50d2lsaW9TZXJ2aWNlLnNldEluY29taW5nTXV0ZWQobmV3TXV0ZWQpO1xyXG4gICAgaWYgKG5ld011dGVkKSB7XHJcbiAgICAgIC8vIE11dGUgT046IHN0b3AgdGhlIGN1c3RvbSByaW5nIGltbWVkaWF0ZWx5IGZvciBhbnkgY3VycmVudGx5LXJpbmdpbmcgY2FsbC5cclxuICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQ29udGFjdHNQYW5lbChjYWxsSW5mbz86IGFueSwgaXNDbG9zZT86IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgaWYgKGlzQ2xvc2UpIHtcclxuICAgICAgdGhpcy5zaG93Q29udGFjdHNQYW5lbCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dDb250YWN0c1BhbmVsID0gIWlzQ2xvc2U7XHJcbiAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSBjYWxsSW5mbz8uY29uZmVyZW5jZUlkO1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbmZOYW1lID0gdGhpcy5jb25mZXJlbmNlQ2FsbExpc3QuZmluZCgocmVzRGF0YTphbnkpPT4gcmVzRGF0YT8uY29uZmVyZW5jZUlkID09PSBjYWxsSW5mbz8uY29uZmVyZW5jZUlkKT8uY2FsbExhYmVsIHx8ICcnO1xyXG4gICAgLy8gdGhpcy5nZXRBbGxQYXJ0aWNpcGFudHMoY2FsbEluZm8/LmNvbmZlcmVuY2VJZCk7XHJcbiAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHRoaXMuY29udGFjdHM7XHJcbiAgICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gdGhpcy5hbGxQYXJ0aWNpcGVudExpc3Q7XHJcbiAgICB0aGlzLmlzU2VhcmNoVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDMkNJbmZvUGFuZWwodXNlckluZm86IGFueSwgaXNDbG9zZT86IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgaWYgKGlzQ2xvc2UpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0ge307XHJcbiAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF1c2VySW5mbz8uYnVzaW5lc3NOdW1iZXIgJiYgIXVzZXJJbmZvPy5pc0J1c2luZXNzTnVtYmVyKSB7XHJcbiAgICAgIC8vIE5vbi1DMkMgaXRlbToganVzdCBtYXJrIGl0IGFzIHNlbGVjdGVkIGZvciBoaWdobGlnaHQsIG5vIEFQSSBjYWxsIG5lZWRlZC5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gU2V0IHNlbGVjdGlvbiBpbW1lZGlhdGVseSBzbyB0aGUgaGlnaGxpZ2h0IGFwcGVhcnMgYmVmb3JlIHRoZSBBUEkgcmVzcG9uZHMuXHJcbiAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSB1c2VySW5mbztcclxuICAgIGxldCBwYXJ0aWNpcGFudElEID0gdXNlckluZm8/LmJ1c2luZXNzUGFydGljaXBhbnRJZCB8fCB1c2VySW5mbz8ucGFydGljaXBhbnRJZCB8fCB1c2VySW5mbz8uaWRcclxuICAgIGlmKCF0aGlzLkMyQ29uZm9MaXN0W3VzZXJJbmZvPy5wYXJ0aWNpcGFudElkXSAmJiAhdGhpcy5DMkNvbmZvTGlzdFt1c2VySW5mbz8uYnVzaW5lc3NQYXJ0aWNpcGFudElkXSkge1xyXG4gICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0VXNlckluZm9ybWF0aW9uKHBhcnRpY2lwYW50SUQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc0luZm86IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiBpdGVtPy5wYXJ0aWNpcGFudElkID09IHVzZXJJbmZvPy5pZClcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF0gPSB0aGlzLm1hcFVzZXJJbmZvKHRoaXMuY3VycmVudENhbGxMaXN0W2luZGV4XSwgcmVzSW5mbz8uYzJjSW5mb3JtYXRpb24pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbyA9IHRoaXMuY3VycmVudENhbGxMaXN0W2luZGV4XTtcclxuICAgICAgICB0aGlzLkMyQ29uZm9MaXN0W3BhcnRpY2lwYW50SURdID0gdGhpcy5jdXJyZW50Q2FsbExpc3RbaW5kZXhdO1xyXG4gICAgICB9LCBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHVzZXIgaW5mbzonLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gdGhpcy5DMkNvbmZvTGlzdFtwYXJ0aWNpcGFudElEXTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hlY2tUZXh0SGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRSZW1vdmVQYXJ0aWNpcGFudCgpIHtcclxuICAgIHRoaXMuaXNBZGRSZW1vdmVQYXJ0aWNpcGFudCA9ICF0aGlzLmlzQWRkUmVtb3ZlUGFydGljaXBhbnQ7XHJcbiAgICAvLyBhd2FpdCB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyh0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VJZCk7XHJcbiAgICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gdGhpcy5hbGxQYXJ0aWNpcGVudExpc3Q7XHJcbiAgfVxyXG5cclxuICBhc3luYyB3YWl0aW5nQ2FsbEFjY2VwdChpbmNvbWluZ0NhbGxJbmZvOmFueSkge1xyXG4gICAgbGV0IG91ck51bWJlckluZm86IGFueSA9IHt9XHJcbiAgICBsZXQgY2FsbEluZm8gPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZpbmQoKGNhbGxJbmZvOiBhbnksIGk6IG51bWJlcikgPT4gdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkID09IGNhbGxJbmZvLmNvbmZlcmVuY2VJZClcclxuICAgIGlmIChjYWxsSW5mbz8ucGFydGljaXBhbnRzPy5sZW5ndGgpIHtcclxuICAgICAgb3VyTnVtYmVySW5mbyA9IGNhbGxJbmZvLnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+XHJcbiAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNEYXRhPy5idXNpbmVzc051bWJlcikpICYmICFyZXNEYXRhPy5pc0xlZnQgJiYgdGhpcy5nZXRTdGF0dXMocmVzRGF0YSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8vIGNvbnN0IGNhcHR1cmVkQ2FsbCA9IHRoaXMudHdpbGlvU2VydmljZS5nZXRJbmNvbWluZ0NhbGxCeUlkKGluY29taW5nQ2FsbEluZm8/LmNsaWVudFNpZCk7XHJcbiAgICB0aGlzLnR3aWxpb1NlcnZpY2UuYWNjZXB0ZWRDYWxsTGlzdC5mb3JFYWNoKChjYWxsOiBhbnkpID0+IHtcclxuICAgICAgY2FsbC5tdXRlKHRydWUpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAob3VyTnVtYmVySW5mbz8uaWQgJiYgb3VyTnVtYmVySW5mbz8uY29uZmVyZW5jZUlkICE9PSBpbmNvbWluZ0NhbGxJbmZvPy5jb25mZXJlbmNlSWQpIHtcclxuICAgICAgdGhpcy5pc1VuaG9sZENvbmZlcmVuY2VDYWxsID0gdHJ1ZTtcclxuICAgICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgcGFydGljaXBhbnRJZDogW291ck51bWJlckluZm8/LmlkXSxcclxuICAgICAgICBjb25mZXJlbmNlSWQ6IG91ck51bWJlckluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICBob2xkOiB0cnVlLFxyXG4gICAgICAgIG11dGU6IG91ck51bWJlckluZm8/Lm11dGUgfHwgZmFsc2VcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuaG9sZFBhcnRpY2lwYW50KHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpPT57XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2hvbGRQYXJ0aWNpcGFudCByZXMnLCByZXMpXHJcbiAgICAgICAgaWYocmVzPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICBzd2FsKFwiRXJyb3JcIiwgcmVzPy5tZXNzYWdlPy5qb2luPy4oXCI8YnIvPlwiKSB8fCAnSW50ZXJuYWwgU2VydmVyIEVycm9yJywgXCJlcnJvclwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hY2NlcHRJbmNvbWluZ0NhbGwoaW5jb21pbmdDYWxsSW5mbywgb3VyTnVtYmVySW5mbyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWNjZXB0SW5jb21pbmdDYWxsKGluY29taW5nQ2FsbEluZm8sIG91ck51bWJlckluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWNjZXB0SW5jb21pbmdDYWxsKGRhdGE/OiBhbnksIG91ck51bWJlckluZm8/OiBhbnksIGNhcHR1cmVkQ2FsbD86IENhbGwpIHtcclxuICAgIGlmICghdGhpcy5jdXJyZW50Q2FsbExpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2Uuc2V0SW5jb21pbmdNdXRlZChmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzQ29ubmVjdGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmlzQ29ubmVjdGluZ0luY29taW5nQ2FsbElkID0gZGF0YT8uaWQ7XHJcbiAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQubmV4dChkYXRhPy5pZCk7XHJcbiAgICB0aGlzLmlzSW5jb21pbmdDYWxsQnRuRGlzYWJsZSA9IHRydWU7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgXHJcbiAgICBsZXQgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgY29uc3QgY2FsbFRvQWNjZXB0ID0gdGhpcy50d2lsaW9TZXJ2aWNlLmdldEluY29taW5nQ2FsbEJ5SWQoZGF0YT8uY2xpZW50U2lkKTtcclxuICAgICAgaWYoY2FsbFRvQWNjZXB0Py5wYXJhbWV0ZXJzPy5DYWxsU2lkKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgICBjb25zdCBhY2NlcHRlZEVudHJ5ID0ge1xyXG4gICAgICAgICAgY2FsbDogY2FsbFRvQWNjZXB0LFxyXG4gICAgICAgICAgY2FsbFNpZDogZGF0YS5jbGllbnRTaWQsXHJcbiAgICAgICAgICBkYXRhXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmFjY2VwdGVkQ2FsbExpc3QucHVzaChhY2NlcHRlZEVudHJ5KTtcclxuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuYWNjZXB0ZWRDYWxsTGlzdC5wdXNoKGNhbGxUb0FjY2VwdCk7XHJcblxyXG4gICAgICAgIC8vIFR3aWxpbydzIGFjY2VwdCgpIG9ubHkgc3RhcnRzIHRoZSBjb25uZWN0aW9uIGhhbmRzaGFrZSDigJQgaXQgZG9lcyBub3RcclxuICAgICAgICAvLyBndWFyYW50ZWUgdGhlIGNhbGwgYWN0dWFsbHkgY29ubmVjdHMuIE9ubHkgY2FsbCB0aGUgQVBJIG9uY2UgVHdpbGlvXHJcbiAgICAgICAgLy8gY29uZmlybXMgdGhlIGNvbm5lY3Rpb24gKCdhY2NlcHQnIGV2ZW50KTsgaWYgVHdpbGlvIGZhaWxzL2JyZWFrc1xyXG4gICAgICAgIC8vIGJlZm9yZSB0aGF0LCBzaG93IGFuIGVycm9yIGluc3RlYWQgb2YgdGVsbGluZyB0aGUgYmFja2VuZCB0aGUgY2FsbFxyXG4gICAgICAgIC8vIHdhcyBhbnN3ZXJlZC5cclxuICAgICAgICBsZXQgaXNUd2lsaW9Db25uZWN0U2V0dGxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCBoYW5kbGVUd2lsaW9Db25uZWN0RmFpbHVyZSA9IChtZXNzYWdlPzogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXNUd2lsaW9Db25uZWN0U2V0dGxlZCkgcmV0dXJuO1xyXG4gICAgICAgICAgaXNUd2lsaW9Db25uZWN0U2V0dGxlZCA9IHRydWU7XHJcbiAgICAgICAgICBjb25zdCBzaWQgPSBjYWxsVG9BY2NlcHQucGFyYW1ldGVycz8uQ2FsbFNpZDtcclxuICAgICAgICAgIHRoaXMuYWNjZXB0ZWRDYWxsTGlzdCA9IHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5maWx0ZXIoYyA9PiBjLmNhbGxTaWQgIT09IHNpZCk7XHJcbiAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuYWNjZXB0ZWRDYWxsTGlzdCA9IHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0LmZpbHRlcihcclxuICAgICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBzaWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQubmV4dCgnJyk7XHJcbiAgICAgICAgICB0aGlzLmlzQ29ubmVjdGluZ0luY29taW5nQ2FsbElkID0gJyc7XHJcbiAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kSW5kZXgoKHJlcykgPT4gcmVzLnBhcnRpY2lwYW50SWQgPT0gZGF0YS5wYXJ0aWNpcGFudElkKVxyXG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3Quc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzU2hvd0luY29taW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc0Nvbm5lY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KGRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgc3dhbChcIkVycm9yXCIsIG1lc3NhZ2UgfHwgJ1VuYWJsZSB0byBjb25uZWN0IHRoZSBjYWxsLiBQbGVhc2UgdHJ5IGFnYWluLicsIFwiZXJyb3JcIik7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpPT57XHJcbiAgICAgICAgICAgIHRoaXMuaXNVbmhvbGRDb25mZXJlbmNlQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgfSw1MDApXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY2FsbFRvQWNjZXB0Lm9uKCdlcnJvcicsIChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignVHdpbGlvIGNhbGwgZXJyb3Igd2hpbGUgY29ubmVjdGluZycsIGVycik7XHJcbiAgICAgICAgICBoYW5kbGVUd2lsaW9Db25uZWN0RmFpbHVyZShlcnI/Lm1lc3NhZ2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNhbGxUb0FjY2VwdC5vbignY2FuY2VsJywgKCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2ZmZmZmZicpXHJcbiAgICAgICAgICBoYW5kbGVUd2lsaW9Db25uZWN0RmFpbHVyZSgnQ2FsbCB3YXMgY2FuY2VsbGVkIGJlZm9yZSBpdCBjb3VsZCBjb25uZWN0LicpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjYWxsVG9BY2NlcHQub24oJ2NhbmNlbCcsICgpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdDYWxsZXIgaHVuZyB1cCBiZWZvcmUgYW5zd2VyJyk7XHJcbiAgICAgICAgICBoYW5kbGVUd2lsaW9Db25uZWN0RmFpbHVyZSgnQ2FsbCB3YXMgY2FuY2VsbGVkIGJlZm9yZSBpdCBjb3VsZCBjb25uZWN0LicpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNhbGxUb0FjY2VwdC5vbigncmVqZWN0JywgKCkgPT4ge1xyXG4gICAgICAgICAgaGFuZGxlVHdpbGlvQ29ubmVjdEZhaWx1cmUoJ0NhbGwgY291bGQgbm90IGJlIGNvbm5lY3RlZC4nKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY2FsbFRvQWNjZXB0Lm9uKCdhY2NlcHQnLCAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnY2FsbCBhY2NlcHRlZCBzdWNlc3NmdWxseSAhISEhISEhJylcclxuICAgICAgICAgIGlmIChpc1R3aWxpb0Nvbm5lY3RTZXR0bGVkKSByZXR1cm47XHJcbiAgICAgICAgICBpc1R3aWxpb0Nvbm5lY3RTZXR0bGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAvLyBTdGFydCBwcmVwYXJpbmcgdGhlIHNwYXJlIGRldmljZSBub3cgdGhhdCBUd2lsaW8gaGFzIGFjdHVhbGx5XHJcbiAgICAgICAgICAvLyBjb25uZWN0ZWQsIHNvIGl0IGlzIHJlZ2lzdGVyZWQgd2VsbCBiZWZvcmUgdGhlIG5leHQgY29uY3VycmVudCBjYWxsIGNhbiBhcnJpdmUuXHJcbiAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UucHJlcGFyZURldmljZTJGb3JJbmNvbWluZ0NhbGwoKTtcclxuICAgICAgICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBjaGFubmVsSWQ6IGVudmlyb25tZW50LmNoYW5uZWxJZCxcclxuICAgICAgICAgICAgcmVjb3JkSWQ6IGRhdGE/LmlkLFxyXG4gICAgICAgICAgICBpcEFkZHJlc3M6ICcnLFxyXG4gICAgICAgICAgICBpcENvdW50cnk6ICcnLFxyXG4gICAgICAgICAgICBjYWxsU3RhdHVzOiAnYW5zd2VyZWQnLFxyXG4gICAgICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICAgICAgdXNlcklkOiAgdGhpcy51c2VySWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICBjb21wYW55SWQ6ICcnLFxyXG4gICAgICAgICAgICBjbGllbnRTaWQ6IGNhbGxUb0FjY2VwdC5wYXJhbWV0ZXJzPy5DYWxsU2lkIHx8IGRhdGEuY2xpZW50U2lkLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IGRhdGE/LmNvbmZlcmVuY2VJZCB8fCAnbm8nXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2Uuc2V0SW5jb21pbmdDYWxsU3RhdHVzKHBheWxvYWQpLnN1YnNjcmliZShhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZCA9ICcnO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IGRhdGE/LmNvbmZlcmVuY2VJZDtcclxuICAgICAgICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLmlzQ3VycmVudEluY29taW5nQ2FsbExpc3QucHVzaChkYXRhPy5pZCk7XHJcbiAgICAgICAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzU2hvd0luY29taW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5pc0FjY2VwdElJbmNvbWluZ0NhbGwubmV4dCh7IGNvbmZlcmVuY2VJZDogZGF0YT8uY29uZmVyZW5jZUlkLCBwYXJ0aWNpcGFudElkOiBkYXRhPy5pZCA/PyBkYXRhPy5wYXJ0aWNpcGFudElkIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc0Nvbm5lY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQubmV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5vbkNvbmN1cnJlbnRDYWxsQWNjZXB0ZWQoY2FsbFRvQWNjZXB0KTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgYWNjZXB0ZWRTaWQgPSBjYWxsVG9BY2NlcHQucGFyYW1ldGVycz8uQ2FsbFNpZDtcclxuICAgICAgICAgICAgICBjYWxsVG9BY2NlcHQub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWNjZXB0ZWRTaWQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hY2NlcHRlZENhbGxMaXN0ID0gdGhpcy5hY2NlcHRlZENhbGxMaXN0LmZpbHRlcihjID0+IGMuY2FsbFNpZCAhPT0gYWNjZXB0ZWRTaWQpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuYWNjZXB0ZWRDYWxsTGlzdCA9IHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAoYzogYW55KSA9PiBjLnBhcmFtZXRlcnM/LkNhbGxTaWQgIT09IGFjY2VwdGVkU2lkXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5yZWxlYXNlQ29uY3VycmVudENhbGxEZXZpY2UoYWNjZXB0ZWRTaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLnRlYXJkb3duU3BhcmVEZXZpY2VzSWZJZGxlKCk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zdCBzaWQgPSBjYWxsVG9BY2NlcHQucGFyYW1ldGVycz8uQ2FsbFNpZDtcclxuICAgICAgICAgICAgICB0aGlzLmFjY2VwdGVkQ2FsbExpc3QgPSB0aGlzLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKGMgPT4gYy5jYWxsU2lkICE9PSBzaWQpO1xyXG4gICAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0ID0gdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBzaWRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZC5uZXh0KCcnKTtcclxuICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kSW5kZXgoKHJlcykgPT4gcmVzLnBhcnRpY2lwYW50SWQgPT0gZGF0YS5wYXJ0aWNpcGFudElkKVxyXG4gICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc1Nob3dJbmNvbWluZ0NhbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmlzQ29ubmVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoZGF0YSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIHN3YWwoXCJFcnJvclwiLCByZXM/Lm1lc3NhZ2U/LmpvaW4/LihcIjxici8+XCIpIHx8ICdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLCBcImVycm9yXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PntcclxuICAgICAgICAgICAgICB0aGlzLmlzVW5ob2xkQ29uZmVyZW5jZUNhbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSw1MDApXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjYWxsVG9BY2NlcHQuYWNjZXB0KCk7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9IGVsc2UgaWYodGhpcy5taXNzQ2FsbEluZm8/LmRhdGE/LmRhdGE/LnJlY29yZElkID09IGRhdGE/LmlkICYmICFjYWxsVG9BY2NlcHQucGFyYW1ldGVycz8uQ2FsbFNpZCl7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgICBjb25zdCBzaWQgPSBjYWxsVG9BY2NlcHQucGFyYW1ldGVycz8uQ2FsbFNpZDtcclxuICAgICAgICB0aGlzLmlzQ29ubmVjdGluZ0luY29taW5nQ2FsbElkID0gJyc7XHJcbiAgICAgICAgdGhpcy5pc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuYWNjZXB0ZWRDYWxsTGlzdCA9IHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5maWx0ZXIoYyA9PiBjLmNhbGxTaWQgIT09IHNpZCk7XHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3QgPSB0aGlzLnR3aWxpb1NlcnZpY2UuYWNjZXB0ZWRDYWxsTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAoYzogYW55KSA9PiBjLnBhcmFtZXRlcnM/LkNhbGxTaWQgIT09IHNpZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbb3VyTnVtYmVySW5mbz8uaWRdLFxyXG4gICAgICAgICAgY29uZmVyZW5jZUlkOiBvdXJOdW1iZXJJbmZvPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICBob2xkOiBmYWxzZSxcclxuICAgICAgICAgIG11dGU6IG91ck51bWJlckluZm8/Lm11dGUgfHwgZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmhvbGRQYXJ0aWNpcGFudChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KT0+e1xyXG4gICAgICAgICAgaWYocmVzPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHN3YWwoXCJFcnJvclwiLCByZXM/Lm1lc3NhZ2U/LmpvaW4/LihcIjxici8+XCIpIHx8ICdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLCBcImVycm9yXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzU2hvd0luY29taW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNDb25uZWN0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0luY29taW5nQ2FsbEJ0bkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmRlc3Ryb3lEZXZpY2UyKCk7XHJcbiAgICAgICAgc3dhbChcIkVycm9yXCIsICdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLCBcImVycm9yXCIpO1xyXG4gICAgICAgIHRoaXMubWlzc0NhbGxJbmZvID0ge307XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuICBhc3luYyBjYWxsQ29udGFjdChjb250YWN0OiBhbnksIGlzVW5zYXZlZE51bWJlcj86IGJvb2xlYW4sIG9wdGlvbnM/OiB7IHNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW4sIGFscmVhZHlOb3JtYWxpemVkPzogYm9vbGVhbiB9LCBwYXJ0aWNpcGFudEluZm8/OiBhbnkpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgbGV0IHBob25lTnVtYmVyID0gaXNVbnNhdmVkTnVtYmVyID8gY29udGFjdCA6IGNvbnRhY3Q/Lm51bWJlcnNMaXN0Py5bMF0/Lm51bWJlciB8fCBjb250YWN0Py5waG9uZTtcclxuICAgIGlmICghb3B0aW9ucz8uYWxyZWFkeU5vcm1hbGl6ZWQpIHtcclxuICAgICAgcGhvbmVOdW1iZXIgPSBhd2FpdCB0aGlzLmdldFRvTnVtYmVyKHBob25lTnVtYmVyKTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHBob25lTnVtYmVyKTtcclxuICAgIGNvbnN0IHRhcmdldENvbmZlcmVuY2VJZCA9IHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCB8fCB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQ7XHJcbiAgICBpZiAoIW9wdGlvbnM/LnNraXBEdXBsaWNhdGVDaGVjaykge1xyXG4gICAgICBpZiAodGFyZ2V0Q29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgY29uc3QgYWxyZWFkeUluQ2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKHJlczogYW55KSA9PlxyXG4gICAgICAgICAgcmVzLmNvbmZlcmVuY2VJZCA9PT0gdGFyZ2V0Q29uZmVyZW5jZUlkICYmXHJcbiAgICAgICAgICAocmVzLnRvID09IHBob25lTnVtYmVyIHx8IHJlcy5mcm9tID09IHBob25lTnVtYmVyKSAmJlxyXG4gICAgICAgICAgIXJlcz8uaXNMZWZ0XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoYWxyZWFkeUluQ2FsbCkge1xyXG4gICAgICAgICAgc3dhbCgnRXJyb3InLCBgQWxyZWFkeSAke3Bob25lTnVtYmVyfSBudW1iZXIgaW4gdGhpcyBjYWxsIDIuYCk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5pc0NvbmZlcmVuY2UpIHtcclxuICAgICAgICBsZXQgcGF5bG9hZDphbnkgPSB7XHJcbiAgICAgICAgICBmcm9tOiB0aGlzLmNhbGxEYXRhPy5mcm9tID8gdGhpcy5jYWxsRGF0YT8uZnJvbSA6IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxyXG4gICAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcclxuICAgICAgICAgIHBhcnRpY2lwYW50TnVtYmVyOiBwaG9uZU51bWJlcixcclxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgICAgICBwcm94eTogJycsXHJcbiAgICAgICAgICBjb3VudHJ5Y29kZTogJycsXHJcbiAgICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYocGFydGljaXBhbnRJbmZvPy5pZCkge1xyXG4gICAgICAgICAgcGF5bG9hZFsncmVjb3JkSWQnXSA9IHBhcnRpY2lwYW50SW5mby5pZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGRhdGE6IGFueSA9IGF3YWl0IHRoaXMuYWRkUGFydGljaXBhbnRUb0NhbGwocGF5bG9hZCk7XHJcbiAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgcGFydGljaXBhbnRJZDogW2RhdGE/LnBhcnRpY2lwYW50SWQgfHwgZGF0YT8uaWRdLFxyXG4gICAgICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICBob2xkOiBudWxsLFxyXG4gICAgICAgICAgbXV0ZTogdGhpcy5jdXJyZW50Q2FsbD8ubXV0ZSB8fCBmYWxzZSxcclxuICAgICAgICAgIGNvbmZlcmVuY2U6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZihob2xkSW5mbz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignaG9sZEluZm8gMTIxOCcsIGhvbGRJbmZvKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbGxEYXRhID0ge1xyXG4gICAgICAgICAgcGhvbmU6IHBob25lTnVtYmVyLFxyXG4gICAgICAgICAgZGlzcGxheU51bTogcGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICBuYW1lOiBjb250YWN0Py5uYW1lIHx8IGAke2NvbnRhY3Q/LmZpcnN0TmFtZX0gJHtjb250YWN0Py5sYXN0TmFtZX1gIHx8IHBob25lTnVtYmVyLFxyXG4gICAgICAgICAgaW1nOiBjb250YWN0Py5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgICAgcGFydGljaXBhbnRJZDogZGF0YT8ucGFydGljaXBhbnRJZCxcclxuICAgICAgICAgIGZyb206IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxyXG4gICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxyXG4gICAgICAgICAgaXNIb2xkOiBmYWxzZSxcclxuICAgICAgICAgIGlzTGVmdDogZmFsc2UsXHJcbiAgICAgICAgICBpc0NvbmZlcmVuY2U6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0ID0gdGhpcy5jdXJyZW50Q2FsbC5jb25mZXJlbmNlSWQ7XHJcbiAgICAgICAgLy8gdGhpcy5nZXRBbGxQYXJ0aWNpcGFudHModGhpcy5jdXJyZW50Q2FsbC5jb25mZXJlbmNlSWQpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIGxldCBwYXJ0aWNpcGFudElEczogYW55ID0gW107XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5mb3JFYWNoKGFzeW5jIChjOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGM/LnBhcnRpY2lwYW50SWQgJiYgIWM/LmlzSG9sZCAmJiB0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VJZCA9PSBjPy5jb25mZXJlbmNlSWQpIHtcclxuICAgICAgICAgICAgICBwYXJ0aWNpcGFudElEcy5wdXNoKGM/LnBhcnRpY2lwYW50SWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBBZGQgcGFydGljaXBhbnQgdG8gdGhlIGNvbmZlcmVuY2VcclxuICAgICAgICAgIGxldCBkYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmFkZFBhcnRpY2lwYW50VG9DYWxsKHtcclxuICAgICAgICAgICAgZnJvbTogdGhpcy5jYWxsRGF0YT8uZnJvbSB8fCB0aGlzLnNlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcixcclxuICAgICAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcclxuICAgICAgICAgICAgcGFydGljaXBhbnROdW1iZXI6IHBob25lTnVtYmVyLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgICAgICAgIHByb3h5OiAnJyxcclxuICAgICAgICAgICAgY291bnRyeWNvZGU6ICcnLFxyXG4gICAgICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLmlzQ2FsbE9uSG9sZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaXNDb25mZXJlbmNlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElEcy5wdXNoKGRhdGE/LnBhcnRpY2lwYW50SWQpXHJcbiAgICAgICAgICBsZXQgaG9sZEluZm86IGFueSA9IGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IHBhcnRpY2lwYW50SURzLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICBob2xkOiBudWxsLFxyXG4gICAgICAgICAgICBtdXRlOiBudWxsLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoaG9sZEluZm8/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignaG9sZEluZm8gMTI3NycsIGhvbGRJbmZvKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZUlkKTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcclxuICAgICAgICAgICAgcGhvbmU6IHBob25lTnVtYmVyLFxyXG4gICAgICAgICAgICBkaXNwbGF5TnVtOiBwaG9uZU51bWJlcixcclxuICAgICAgICAgICAgbmFtZTogY29udGFjdD8ubmFtZSB8fCBgJHtjb250YWN0Py5maXJzdE5hbWV9ICR7Y29udGFjdD8ubGFzdE5hbWV9YCB8fCBwaG9uZU51bWJlcixcclxuICAgICAgICAgICAgaW1nOiBjb250YWN0Py5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBkYXRhPy5wYXJ0aWNpcGFudElkLFxyXG4gICAgICAgICAgICBmcm9tOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcixcclxuICAgICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxyXG4gICAgICAgICAgICBpc0hvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBpc0xlZnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBpc0NvbmZlcmVuY2U6IGZhbHNlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhZGRpbmcgcGFydGljaXBhbnQ6JywgZXJyb3IpO1xyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgQ2FsbFRvVW5zYXZlZE51bWJlcihudW1iZXI6IHN0cmluZywgaXNOZXdDb25mZXJlbmNlPzogYm9vbGVhbiwgb3B0aW9ucz86IHsgc2tpcER1cGxpY2F0ZUNoZWNrPzogYm9vbGVhbiB9LCBwYXJ0aWNpcGFudEluZm8/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnNvbGUubG9nKCdza2lwRHVwbGljYXRlQ2hlY2s6Jywgb3B0aW9ucz8uc2tpcER1cGxpY2F0ZUNoZWNrLCAnaXNOZXdDb25mZXJlbmNlOicsIGlzTmV3Q29uZmVyZW5jZSk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBpc0ludmFsaWQgPSBhd2FpdCB0aGlzLmlzSW52YWxpZE51bWJlcihudW1iZXIpO1xyXG4gICAgICBpZiAoaXNJbnZhbGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAoIWlzTmV3Q29uZmVyZW5jZSAmJiAhb3B0aW9ucz8uc2tpcER1cGxpY2F0ZUNoZWNrKSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0Q29uZmVyZW5jZUlkID0gdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0IHx8IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZDtcclxuICAgICAgICBpZiAodGFyZ2V0Q29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgICBsZXQgYWxyZWFkeUluQ2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKHJlczogYW55KSA9PlxyXG4gICAgICAgICAgICByZXMuY29uZmVyZW5jZUlkID09PSB0YXJnZXRDb25mZXJlbmNlSWQgJiZcclxuICAgICAgICAgICAgKChyZXMudG8gPT0gbnVtYmVyICYmIHJlcz8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJykgfHxcclxuICAgICAgICAgICAgICAocmVzLmZyb20gPT0gbnVtYmVyICYmIHJlcz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyAmJiByZXMuaG9zdCkpICYmXHJcbiAgICAgICAgICAgICFyZXM/LmlzTGVmdFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChhbHJlYWR5SW5DYWxsKSB7XHJcbiAgICAgICAgICAgIHN3YWwoJ0Vycm9yJywgYEFscmVhZHkgJHtudW1iZXJ9IG51bWJlciBpbiB0aGlzIGNhbGwxLmApO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAobnVtYmVyID09PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndHdpbGlvTnVtYmVyJykpIHtcclxuICAgICAgICBzd2FsKCdFcnJvcicsICdZb3UgY2FuIG5vdCBkaWFsIHRoaXMgbnVtYmVyJyk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgY29udGFjdCA9IHRoaXMuY29udGFjdHMuZmluZCgoY29udGFjdDogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRhY3QubnVtYmVyc0xpc3Quc29tZSgobnVtOiBhbnkpID0+IG51bS5udW1iZXIgPT09IG51bWJlcilcclxuICAgICAgfSk7XHJcbiAgICAgIG51bWJlciA9IGF3YWl0IHRoaXMuZ2V0VG9OdW1iZXIobnVtYmVyKTtcclxuXHJcbiAgICAgIC8vIFVwZGF0ZSBjYWxsIGRhdGEgaW4gYSBzaW5nbGUgb3BlcmF0aW9uXHJcbiAgICAgIGNvbnN0IGNhbGxEYXRhID0ge1xyXG4gICAgICAgIG5hbWU6IGNvbnRhY3Q/LmZpcnN0TmFtZSxcclxuICAgICAgICBpbWc6IGNvbnRhY3Q/LmltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgICBwaG9uZTogbnVtYmVyLFxyXG4gICAgICAgIGV4dE51bTogJycsXHJcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxyXG4gICAgICAgIGRpYWw6IHRydWUsXHJcbiAgICAgICAgZnJvbTogdGhpcy5zZWxlY3RlZENhbGxlcklkLm51bWJlcixcclxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKGlzTmV3Q29uZmVyZW5jZSkge1xyXG4gICAgICAgIHRoaXMuaXNOZXdBZGRlZENhbGwgPSB0cnVlO1xyXG4gICAgICAgIGxldCBvdXJOdW1iZXJJbmZvOiBhbnkgPSB7fVxyXG4gICAgICAgIGxldCBjYWxsSW5mbyA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmluZCgoY2FsbEluZm86IGFueSwgaTogbnVtYmVyKSA9PiB0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VJZCA9PSBjYWxsSW5mby5jb25mZXJlbmNlSWQpXHJcbiAgICAgICAgaWYgKGNhbGxJbmZvKSB7XHJcbiAgICAgICAgICBvdXJOdW1iZXJJbmZvID0gY2FsbEluZm8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNEYXRhPy5idXNpbmVzc051bWJlcikpICYmICFyZXNEYXRhPy5pc0xlZnRcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvdXJOdW1iZXJJbmZvPy5pZCkge1xyXG4gICAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbb3VyTnVtYmVySW5mbz8uaWRdLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IG91ck51bWJlckluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgaG9sZDogdHJ1ZSxcclxuICAgICAgICAgICAgbXV0ZTogb3VyTnVtYmVySW5mbz8ubXV0ZSB8fCBmYWxzZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZihob2xkSW5mbz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdob2xkSW5mbyAxMzU1JywgaG9sZEluZm8pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucGVuZGluZ05ld0NhbGxIZWxkUGFydGljaXBhbnQgPSBvdXJOdW1iZXJJbmZvO1xyXG4gICAgICAgICAgdGhpcy5vbkFkZE5ld0NhbGwoY2FsbERhdGEsIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm9uQWRkTmV3Q2FsbChjYWxsRGF0YSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICAgIHRoaXMuY2FsbENvbnRhY3QobnVtYmVyLCB0cnVlLCB7IC4uLm9wdGlvbnMsIGFscmVhZHlOb3JtYWxpemVkOiB0cnVlIH0sIHBhcnRpY2lwYW50SW5mbylcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdGYWlsZWQgdG8gaW5pdGlhdGUgY2FsbC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25BZGROZXdDYWxsKGNhbGxEYXRhOiBhbnksIGlzTmV3Q29uZmVyZW5jZUNhbGwgPSBmYWxzZSkge1xyXG4gICAgLy8gd2FybmluZyBvbmx5IGZvciBORVcgU0VQQVJBVEUgQ0FMTFxyXG4gICAgaWYgKGlzTmV3Q29uZmVyZW5jZUNhbGwgJiYgdGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnBlbmRpbmdDYWxsRGF0YSA9IGNhbGxEYXRhO1xyXG4gICAgICB0aGlzLnNob3dDb25mZXJlbmNlV2FybmluZ01vZGFsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXJ0Q2FsbChjYWxsRGF0YSwgaXNOZXdDb25mZXJlbmNlQ2FsbCk7XHJcbiAgfVxyXG5cclxuICBjb25maXJtTmV3Q2FsbCgpIHtcclxuICAgIHRoaXMuc2hvd0NvbmZlcmVuY2VXYXJuaW5nTW9kYWwgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnBlbmRpbmdDYWxsRGF0YSkge1xyXG4gICAgICB0aGlzLm5ld0NhbGxMb2FkZXJEYXRhID0ge1xyXG4gICAgICAgIG5hbWU6IHRoaXMucGVuZGluZ0NhbGxEYXRhLm5hbWUgfHwgJycsXHJcbiAgICAgICAgcGhvbmU6IHRoaXMucGVuZGluZ0NhbGxEYXRhLnBob25lLFxyXG4gICAgICAgIGltZzogdGhpcy5wZW5kaW5nQ2FsbERhdGEuaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1xyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdCA9IHtcclxuICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgIHR5cGU6ICdhbGVydC1zdWNjZXNzJyxcclxuICAgICAgICBudW1iZXI6IHRoaXMucGVuZGluZ0NhbGxEYXRhLnBob25lLFxyXG4gICAgICAgIGRpc3BsYXlOdW06IHRoaXMucGVuZGluZ0NhbGxEYXRhLnBob25lXHJcbiAgICAgIH07ICBcclxuICAgICAgXHJcbiAgICAgIHRoaXMuc2hvd05ld0NhbGxMb2FkZXIgPSB0cnVlO1xyXG4gICAgICBcclxuICAgICAgXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LnNob3cgPSBmYWxzZTtcclxuICAgICAgfSwgNzAwMCk7XHJcbiAgICAgIHRoaXMuc3RhcnRDYWxsKHRoaXMucGVuZGluZ0NhbGxEYXRhLCB0cnVlKTtcclxuICAgICAgdGhpcy5wZW5kaW5nQ2FsbERhdGEgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsTmV3Q2FsbCgpIHtcclxuICAgIHRoaXMuc2hvd0NvbmZlcmVuY2VXYXJuaW5nTW9kYWwgPSBmYWxzZTtcclxuICAgIHRoaXMucGVuZGluZ0NhbGxEYXRhID0gbnVsbDtcclxuICB9XHJcbiAgY2FuY2VsQ2FsbFRvYXN0KCkge1xyXG4gICAgLy8gSGlkZSB0aGUgdG9hc3QgYW5kIGxvYWRlciBpbW1lZGlhdGVseVxyXG4gICAgdGhpcy5jYWxsTnVtYmVyVG9hc3Quc2hvdyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93TmV3Q2FsbExvYWRlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NhbGxDYW5jZWxsZWQgPSB0cnVlO1xyXG5cclxuICAgIC8vIElmIGEgZGV2aWNlIHdhcyBhbHJlYWR5IGNyZWF0ZWQsIGRlc3Ryb3kgaXQgdG8gYWJvcnQgYW55IHBlbmRpbmcgY29ubmVjdGlvblxyXG4gICAgaWYgKHRoaXMuZGV2aWNlKSB7XHJcbiAgICAgIHRyeSB7IHRoaXMuZGV2aWNlLmRlc3Ryb3koKTsgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgIHRoaXMuZGV2aWNlID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHdlIGhlbGQgYSBwcmV2aW91cyBjb25mZXJlbmNlIHRvIHN0YXJ0IHRoaXMgbmV3IGNhbGwsIHVuaG9sZCBpdCBub3dcclxuICAgIHRoaXMudW5ob2xkUGVuZGluZ0NvbmZlcmVuY2UoKTtcclxuICB9XHJcbiAgYXN5bmMgZ2V0VG9OdW1iZXIoZGlhbGVkTnVtYmVyOiBzdHJpbmcpIHtcclxuICAgIGlmIChkaWFsZWROdW1iZXJbMF0gIT09ICcrJykge1xyXG4gICAgICAvLyB0aGlzIGlzIGNhc2Ugd2hlbiB1c2VyIGdlb2xvY2F0aW9uIGRpYWwgY29kZSBpcyBvblxyXG4gICAgICBsZXQgaXBBZGRyZXNzOiBhbnkgPSBhd2FpdCB0aGlzLmlwU2VydmljZS5nZXRJcEFkZHJlc3NJbmZvKCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgdGhpcy50d2lsaW9TZXJ2aWNlLmdldFRvTnVtYmVyKGRpYWxlZE51bWJlciwgaXBBZGRyZXNzLmFkZHJlc3MuY291bnRyeUNvZGUpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBpZiAocmVzLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICByZXR1cm4gcmVzPy50b051bWJlclxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBkaWFsZWROdW1iZXJcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGRpYWxlZE51bWJlclxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgaXNJbnZhbGlkTnVtYmVyKG51bWJlcjogc3RyaW5nKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAobnVtYmVyID09ICcnKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdJbnZhbGlkIE51bWJlcicpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHZhbGlkTnVtYmVyUGF0dGVybiA9IC9eWytcXGRcXHMoKS1dKiQvOyAvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdmFsaWQgY2hhcmFjdGVyc1xyXG4gICAgICBjb25zdCBwaG9uZU51bWJlciA9IG51bWJlcjtcclxuICAgICAgaWYgKCF2YWxpZE51bWJlclBhdHRlcm4udGVzdChwaG9uZU51bWJlcikpIHtcclxuICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ludmFsaWQgTnVtYmVyJyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdJbnZhbGlkIE51bWJlcicpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gUmV0dXJuIHRydWUgaWYgYW4gZXJyb3Igb2NjdXJyZWQsIG1lYW5pbmcgdGhlIG51bWJlciBpcyBpbnZhbGlkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93RGlhbEFsZXJ0KG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgdGhpcy5kaWFsQWxlcnQgPSB7XHJcbiAgICAgIG1zZzogbWVzc2FnZSxcclxuICAgICAgc2hvdzogdHJ1ZVxyXG4gICAgfTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmRpYWxBbGVydC5zaG93ID0gZmFsc2U7XHJcbiAgICB9LCAzMDAwKTtcclxuICB9XHJcblxyXG5hc3luYyBnZXRBbGxQYXJ0aWNpcGFudHMoY29uZmVyZW5jZUlkOiBzdHJpbmcpIHtcclxuICBzZXRUaW1lb3V0KCgpPT57XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0QWxsUGFydGljaXBhbnRzKGNvbmZlcmVuY2VJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogYXN5bmMgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcGFydGljaXBhbnRzID0gcmVzPy5wYXJ0aWNpcGFudHMgfHwgcmVzPy5wYXJ0aWNpcGFudCB8fCBbXTtcclxuICAgICAgICAvLyBpZiAoIXBhcnRpY2lwYW50cy5sZW5ndGgpIHtcclxuICAgICAgICAvLyAgIHRoaXMuYWxsUGFydGljaXBlbnRMaXN0ID0gW107XHJcbiAgICAgICAgLy8gICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gW107XHJcbiAgICAgICAgLy8gICByZXR1cm47XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIGNvbnN0IHVwZGF0ZWRQYXJ0aWNpcGFudHMgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAvLyAgIHBhcnRpY2lwYW50cy5tYXAoYXN5bmMgKHA6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vICAgICBjb25zdCBmcm9tTmFtZSA9IGF3YWl0IHRoaXMuZ2V0TmFtZShwLmZyb20pO1xyXG4gICAgICAgIC8vICAgICBjb25zdCB0b05hbWUgPSBhd2FpdCB0aGlzLmdldE5hbWUocC50byk7XHJcbiAgXHJcbiAgICAgICAgLy8gICAgIHJldHVybiB7XHJcbiAgICAgICAgLy8gICAgICAgLi4ucCxcclxuICAgICAgICAvLyAgICAgICBmcm9tTmFtZTogZnJvbU5hbWUgfHwgcC5mcm9tTmFtZSxcclxuICAgICAgICAvLyAgICAgICB0b05hbWU6IHRvTmFtZSB8fCBwLnRvTmFtZSxcclxuICAgICAgICAvLyAgICAgfTtcclxuICAgICAgICAvLyAgIH0pXHJcbiAgICAgICAgLy8gKTtcclxuICBcclxuICAgICAgICAvLyB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdCA9IHVwZGF0ZWRQYXJ0aWNpcGFudHM7XHJcbiAgICAgICAgLy8gdGhpcy5maWx0ZXJlZFBhcnRpY2lwZW50TGlzdCA9IFsuLi51cGRhdGVkUGFydGljaXBhbnRzXTsgIFxyXG4gICAgICAgIC8vIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSBbXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSw3MDApXHJcbn1cclxuXHJcbiAgYXN5bmMgc3dhcENhbGxzKGNhbGxJbmZvOiBhbnksIGlzQ29uZmVyZW5jZUNhbGw/OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHRoaXMuaXNQYXJ0aWNpcGFudFBhbmVsTG9hZGluZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZvckVhY2goYXN5bmMgKGM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoYz8uY29uZmVyZW5jZUlkID09IGNhbGxJbmZvPy5jb25mZXJlbmNlSWQpIHtcclxuICAgICAgICB0aGlzLmlzSG9sZEJ0bkRpc2FibGUgPSB0cnVlO1xyXG4gICAgICAgIGxldCBwYXJ0aWNpcGFudEluZm8gPSBjLnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+XHJcbiAgICAgICAgICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy5mcm9tKSAmJiByZXNEYXRhPy5jbGllbnQpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8udG8pICYmIHJlc0RhdGE/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgIXJlc0RhdGE/LmJ1c2luZXNzTnVtYmVyKSkgJiYgIXJlc0RhdGE/LmlzTGVmdFxyXG4gICAgICAgIClcclxuICAgICAgICBpZiAocGFydGljaXBhbnRJbmZvPy5pZCkge1xyXG4gICAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbcGFydGljaXBhbnRJbmZvPy5pZF0sXHJcbiAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogcGFydGljaXBhbnRJbmZvPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICAgIGhvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBtdXRlOiBwYXJ0aWNpcGFudEluZm8/Lm11dGUgfHwgZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYoaG9sZEluZm8/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignaG9sZEluZm8gMTUwMicsIGhvbGRJbmZvKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmlzSG9sZEJ0bkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IGNhbGxJbmZvPy5jb25mZXJlbmNlSWRcclxuICAgICAgICAgIC8vIHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKGNhbGxJbmZvPy5jb25mZXJlbmNlSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgcGFydGljaXBhbnRJbmZvID0gYy5wYXJ0aWNpcGFudHMuZmluZCgocmVzRGF0YTogYW55KSA9PlxyXG4gICAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNEYXRhPy5idXNpbmVzc051bWJlcikpICYmICFyZXNEYXRhPy5pc0xlZnRcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKHBhcnRpY2lwYW50SW5mbz8uaWQgJiYgIXBhcnRpY2lwYW50SW5mbz8uaXNIb2xkKSB7XHJcbiAgICAgICAgICBsZXQgaG9sZEluZm86IGFueSA9IGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtwYXJ0aWNpcGFudEluZm8/LmlkXSxcclxuICAgICAgICAgICAgY29uZmVyZW5jZUlkOiBwYXJ0aWNpcGFudEluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgaG9sZDogdHJ1ZSxcclxuICAgICAgICAgICAgbXV0ZTogcGFydGljaXBhbnRJbmZvPy5tdXRlIHx8IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmKGhvbGRJbmZvPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hvbGRJbmZvIDE1MjEnLCBob2xkSW5mbylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaXNIb2xkQnRuRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjPy5pc0NvbmZlcmVuY2UgJiYgIWM/LmlzSG9sZCAmJiB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQgPT0gYz8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgcGFydGljaXBhbnRJZDogW2M/LnBhcnRpY2lwYW50SWQgfHwgYz8uaWRdLFxyXG4gICAgICAgICAgY29uZmVyZW5jZUlkOiBjLmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgIGhvbGQ6IHRydWUsXHJcbiAgICAgICAgICBtdXRlOiBjPy5tdXRlIHx8IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYoaG9sZEluZm8/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hvbGRJbmZvIDE1MzUnLCBob2xkSW5mbylcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBoYXNEZXRhaWxlZEluZm8oY2FsbERhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFjYWxsRGF0YSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gQ2hlY2sgaWYgdXNlckluZm8gZXhpc3RzIGFuZCBoYXMgbWVhbmluZ2Z1bCBkYXRhXHJcbiAgICBpZiAoY2FsbERhdGEudXNlckluZm8gJiYgY2FsbERhdGEudXNlckluZm8uYzJjSW5mb3JtYXRpb24pIHtcclxuICAgICAgY29uc3QgaW5mbyA9IGNhbGxEYXRhLnVzZXJJbmZvLmMyY0luZm9ybWF0aW9uO1xyXG4gICAgICByZXR1cm4gISEoXHJcbiAgICAgICAgaW5mby5zdWJqZWN0ICYmIGluZm8uc3ViamVjdCAhPT0gJy0nIHx8XHJcbiAgICAgICAgaW5mby5lbWFpbCAmJiBpbmZvLmVtYWlsICE9PSAnLScgfHxcclxuICAgICAgICBpbmZvLm1lc3NhZ2UgJiYgaW5mby5tZXNzYWdlICE9PSAnLScgfHxcclxuICAgICAgICBpbmZvLnBvaW50TmFtZSAmJiBpbmZvLnBvaW50TmFtZSAhPT0gJy0nIHx8XHJcbiAgICAgICAgaW5mby5zb3VyY2VOYW1lICYmIGluZm8uc291cmNlTmFtZSAhPT0gJy0nIHx8XHJcbiAgICAgICAgaW5mby5leHRlbnNpb24gJiYgaW5mby5leHRlbnNpb24gIT09ICctJyB8fFxyXG4gICAgICAgIGluZm8udXJsIHx8XHJcbiAgICAgICAgaW5mby5sYXRpdHVkZSB8fFxyXG4gICAgICAgIGluZm8ubG9uZ2l0dWRlXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbkNhbGxJbnB1dHMobnVtOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG51bSkgfHwgbnVtID09ICcrJyB8fCBudW0gPT0gJyonIHx8IG51bSA9PSAnIycpIHtcclxuICAgICAgICBpZiAobnVtID09ICcjJykge1xyXG4gICAgICAgICAgbmV3IEF1ZGlvKGAvYXNzZXRzL2RpYWwtdG9uZXMvZHRtZi9kdG1mLWhhc2gtLm1wM2ApLnBsYXkoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG51bSA9PSAnKicpIHtcclxuICAgICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi1zdGFyLS5tcDNgKS5wbGF5KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi0ke251bX0tLm1wM2ApLnBsYXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYWxsSW5wdXQgPSB0aGlzLmNhbGxJbnB1dCArIFN0cmluZyhudW0pO1xyXG4gICAgICAgIHRoaXMuc2hvd0NsZWFyQnRuID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgc3RyID0gU3RyaW5nKG51bSk7XHJcbiAgICAgIGxldCBzZWxmQ2FsbCA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmluZCgocmVzOiBhbnkpID0+IHJlcz8uY29uZmVyZW5jZUlkID09IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCk/LnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+XHJcbiAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmIHJlc0RhdGE/Lmhvc3QpKSAmJiAhcmVzRGF0YT8uaXNMZWZ0XHJcbiAgICAgICk7XHJcbiAgICAgIGxldCBkZXZpY2UgPSB0aGlzLnR3aWxpb1NlcnZpY2UuZ2V0SW5jb21pbmdDYWxsQnlJZChzZWxmQ2FsbD8uY2FsbFNpZCB8fCBzZWxmQ2FsbD8uY2xpZW50U2lkKVxyXG4gICAgICBpZihkZXZpY2UgJiYgZGV2aWNlPy5fc3RhdHVzICA9PSAnb3BlbicpIHtcclxuICAgICAgICBkZXZpY2Uuc2VuZERpZ2l0cyhzdHIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2FsbD8uc2VuZERpZ2l0cyhzdHIpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgIH1cclxuICB9XHJcbiAgb25DYWxsSW5wdXRFbnRlcihldjogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhldik7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgc2VsZkNhbGwgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZpbmQoKHJlczogYW55KSA9PiByZXM/LmNvbmZlcmVuY2VJZCA9PSB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQpPy5wYXJ0aWNpcGFudHMuZmluZCgocmVzRGF0YTogYW55KSA9PlxyXG4gICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pICYmIHJlc0RhdGE/LmNsaWVudCkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiByZXNEYXRhPy5ob3N0KSkgJiYgIXJlc0RhdGE/LmlzTGVmdFxyXG4gICAgICApO1xyXG4gICAgICBjb25zb2xlLmxvZyhzZWxmQ2FsbCk7XHJcbiAgICAgIGxldCBkZXZpY2UgPSB0aGlzLnR3aWxpb1NlcnZpY2UuZ2V0SW5jb21pbmdDYWxsQnlJZChzZWxmQ2FsbD8uY2FsbFNpZCB8fCBzZWxmQ2FsbD8uY2xpZW50U2lkKVxyXG4gICAgICBjb25zb2xlLmxvZyhkZXZpY2UpO1xyXG4gICAgICBpZihkZXZpY2UgJiYgZGV2aWNlPy5fc3RhdHVzICA9PSAnb3BlbicpIHtcclxuICAgICAgICBkZXZpY2Uuc2VuZERpZ2l0cyhTdHJpbmcoZXYua2V5KSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jYWxsPy5zZW5kRGlnaXRzKFN0cmluZyhldi5rZXkpKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhcklucHV0cygpIHtcclxuICAgIHRoaXMuY2FsbElucHV0ID0gdGhpcy5jYWxsSW5wdXQuc2xpY2UoMCwgLTEpO1xyXG4gIH1cclxuICBpc01pbmltaXNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG1pbmltaXNlRGlhbHBhZCgpIHtcclxuICAgIHRoaXMubWluaW1pc2VFdmVudC5lbWl0KHRydWUpO1xyXG4gICAgdGhpcy5pc01pbmltaXNlZCA9IHRydWU7XHJcbiAgfVxyXG4gIG1heGltaXNlRGlhbHBhZCgpIHtcclxuICAgIHRoaXMubWluaW1pc2VFdmVudC5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMuaXNNaW5pbWlzZWQgPSBmYWxzZTtcclxuICB9XHJcbiAgdG9nZ2xlUmVjb3JkaW5nKCkge1xyXG4gICAgaWYgKHRoaXMuaXNSZWNvcmRpbmcpIHtcclxuICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXJ0UmVjb3JkaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN0YXJ0UmVjb3JkaW5nKCkge1xyXG4gICAgbGV0IHNpZDtcclxuICAgIGNvbnN0IGRldGFpbHMgPSB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q2FsbFNpZCgpO1xyXG4gICAgdGhpcy5pbmNvbWluZ0NhbGxTaWQgPSBkZXRhaWxzLmNhbGxTaWQ7XHJcbiAgICB0aGlzLmluY29taW5nUmVjb3JkQ2FsbCA9IGRldGFpbHMucmVjb3JkQ2FsbDtcclxuICAgIHNpZCA9IHRoaXMuaW5jb21pbmdDYWxsU2lkID8gdGhpcy5pbmNvbWluZ0NhbGxTaWQgOiB0aGlzLmNhbGxTaWQgfHwgdGhpcy5hZGRSZXM/LmNvbmZlcmVuY2VTaWQ7XHJcblxyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxSZWNvcmRpbmcoeyBcImNvbmZlcmVuY2VJZFwiOiB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQgfSkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgdGhpcy5pc1JlY29yZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy50aW1lRWxhcHNlZCA9IDA7XHJcbiAgICAgIHRoaXMuc3RhcnRUaW1lcjEoKTtcclxuICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgcmVjb3JkaW5nJywgZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHN0b3BSZWNvcmRpbmcoKSB7XHJcbiAgICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHBhdXNlUmVjb3JkaW5nKCkge1xyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnBhdXNlT3JSZXN1bWVSZWNvcmRpbmcodGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLCAncGF1c2UnKS5zdWJzY3JpYmUoXHJcbiAgICAgIHJlc3BvbnNlID0+IHtcclxuICAgICAgICB0aGlzLnN0b3BSZWNvcmRpbmdUaW1lcigpO1xyXG4gICAgICAgIHRoaXMuaXNQYXVzZWQgPSB0cnVlO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXVzaW5nIHJlY29yZGluZzonLCBlcnJvcik7XHJcbiAgICAgICAgLy8gQ29uc2lkZXIgdXBkYXRpbmcgdGhlIFVJIHRvIHNob3cgdGhlIGVycm9yIHN0YXRlXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIHJlc3VtZVJlY29yZGluZygpIHtcclxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5wYXVzZU9yUmVzdW1lUmVjb3JkaW5nKHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCwgJ3Jlc3VtZScpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdGFydFRpbWVyMSgpO1xyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZXN1bWluZyByZWNvcmRpbmcnLCBlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0VGltZURpZmZlcmVuY2UoaW5wdXRUaW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcGFzdFRpbWUgPSBuZXcgRGF0ZShpbnB1dFRpbWUpLmdldFRpbWUoKTtcclxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcblxyXG4gICAgbGV0IGRpZmYgPSBNYXRoLmZsb29yKChjdXJyZW50VGltZSAtIHBhc3RUaW1lKSAvIDEwMDApOyAvLyB0b3RhbCBzZWNvbmRzXHJcbiAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IoZGlmZiAvIDM2MDApO1xyXG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKGRpZmYgJSAzNjAwKSAvIDYwKTtcclxuICAgIGNvbnN0IHNlY29uZHMgPSBkaWZmICUgNjA7XHJcblxyXG4gICAgY29uc3QgcGFkID0gKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcgPT4gdmFsdWUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgLy8gSWYgZHVyYXRpb24gaXMgMSBob3VyIG9yIG1vcmUsIHJldHVybiBISDptbTpzc1xyXG4gICAgaWYgKGhvdXJzID4gMCkge1xyXG4gICAgICByZXR1cm4gYCR7cGFkKGhvdXJzKX06JHtwYWQobWludXRlcyl9OiR7cGFkKHNlY29uZHMpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gT3RoZXJ3aXNlIHJldHVybiBtbTpzc1xyXG4gICAgcmV0dXJuIGAke3BhZChtaW51dGVzKX06JHtwYWQoc2Vjb25kcyl9YDtcclxuICB9XHJcbiAgc3RhcnRUaW1lcjEoKSB7XHJcbiAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uID0gaW50ZXJ2YWwoMTAwMCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy50aW1lRWxhcHNlZCsrO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHN0b3BSZWNvcmRpbmdUaW1lcigpIHtcclxuICAgIGlmICh0aGlzLnRpbWVyU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgLy8gUGF1c2UgdGhlIHRpbWVyXHJcbiAgICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7ICAgICAgICAvLyBPcHRpb25hbGx5IHJlc2V0IHRoZSBzdWJzY3JpcHRpb25cclxuICAgIH1cclxuICB9XHJcbiAgZ2V0Rm9ybWF0dGVkVGltZSgpIHtcclxuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHRoaXMudGltZUVsYXBzZWQgLyA2MCk7XHJcbiAgICBjb25zdCBzZWNvbmRzID0gdGhpcy50aW1lRWxhcHNlZCAlIDYwO1xyXG4gICAgcmV0dXJuIGAke21pbnV0ZXN9OiR7c2Vjb25kcyA8IDEwID8gJzAnIDogJyd9JHtzZWNvbmRzfWA7XHJcbiAgfVxyXG4gIHBvbGxDYWxsU3RhdHVzKGNhbGxBdXRoSWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgbWF4VGltZSA9IDMwMDAwOyAvLyBQb2xsIGZvciB1cCB0byAzMCBzZWNvbmRzXHJcbiAgICBjb25zdCBwb2xsSW50ZXJ2YWwgPSAzMDAwOyAvLyBQb2xsIGV2ZXJ5IDMgc2Vjb25kc1xyXG4gICAgbGV0IGVsYXBzZWRUaW1lID0gMDtcclxuICAgIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XHJcbiAgICAgIGVsYXBzZWRUaW1lICs9IHBvbGxJbnRlcnZhbDtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBzdGF0dXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDYWxsU3RhdHVzKGNhbGxBdXRoSWQpLnRvUHJvbWlzZSgpIGFzIENhbGxTdGF0dXNSZXNwb25zZTtcclxuICAgICAgICBpZiAoc3RhdHVzUmVzcG9uc2UgJiYgc3RhdHVzUmVzcG9uc2UuY2FsbERldGFpbHMpIHtcclxuICAgICAgICAgIHRoaXMuY2FsbFN0YXR1cyA9IHN0YXR1c1Jlc3BvbnNlLmNhbGxEZXRhaWxzLmNhbGxTdGF0dXM7XHJcbiAgICAgICAgICBpZiAodGhpcy5jYWxsU3RhdHVzID09PSAnaW4tcHJvZ3Jlc3MnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbFNpZCA9IHN0YXR1c1Jlc3BvbnNlLmNhbGxEZXRhaWxzLmNhbGxTaWQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlY29yZENhbGwgJiYgIXRoaXMuaXNSZWNvcmRpbmcpIHtcclxuICAgICAgICAgICAgICB0aGlzLnN0YXJ0UmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYWxsU3RhdHVzID09PSAnY29tcGxldGVkJykge1xyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xyXG4gICAgICAgICAgICB0aGlzLmVuZENhbGwoKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVsYXBzZWRUaW1lID49IG1heFRpbWUpIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnTWF4IHBvbGxpbmcgdGltZSByZWFjaGVkLiBTdG9wcGluZyBwb2xsLicpO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XHJcbiAgICAgIH1cclxuICAgIH0sIHBvbGxJbnRlcnZhbCk7XHJcbiAgfVxyXG5cclxuICAvLyBnZXRVc2VySW5mb3JtYXRpb24oaWQ6IGFueSkge1xyXG4gIC8vICAgaWYoaWQpIHtcclxuICAvLyAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRVc2VySW5mb3JtYXRpb24oaWQpLnN1YnNjcmliZShcclxuICAvLyAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAvLyAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSwgJ3VzZXJJbmZvcm1hdGlvbicpO1xyXG4gIC8vICAgICB9LCBlcnJvciA9PiB7XHJcbiAgLy8gICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgcmVjb3JkaW5nJywgZXJyb3IpO1xyXG4gIC8vICAgICB9KTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcbiAgc2VsZWN0ZWRJbmNvbWluZ0NhbGxJbmZvKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbCA9IGRhdGE7XHJcbiAgfVxyXG5cclxuICAvLyBnZXRIb2xkQ2FsbExpc3QoKSB7XHJcbiAgLy8gICBsZXQgaG9sZExpc3Q6IGFueVtdID0gW107XHJcbiAgLy8gICBsZXQgaXNDb25mZXJlbmNlID0gZmFsc2U7XHJcbiAgLy8gICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5mb3JFYWNoKChjOiBhbnkpID0+IHtcclxuICAvLyAgICAgaWYgKGM/LmlzSG9sZCAmJiAhYz8uaXNDb25mZXJlbmNlKSB7XHJcbiAgLy8gICAgICAgaG9sZExpc3QucHVzaChjKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBpZiAoYz8uaXNDb25mZXJlbmNlICYmICFpc0NvbmZlcmVuY2UpIHtcclxuICAvLyAgICAgICBpc0NvbmZlcmVuY2UgPSB0cnVlO1xyXG4gIC8vICAgICAgIGNbJ2lzQ29uZmVyZW5jZUNhbGxIb2xkJ10gPSB0cnVlO1xyXG4gIC8vICAgICAgIGhvbGRMaXN0LnB1c2goYyk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pO1xyXG4gIC8vICAgcmV0dXJuIGhvbGRMaXN0O1xyXG4gIC8vIH1cclxuXHJcbiAgb25DbGlja0V4cGFuZChkYXRhOiBhbnkpIHtcclxuICAgIGlmIChkYXRhLmlkICE9IHRoaXMuc2VsZWN0ZWRVc2VySW5mbz8ucGFydGljaXBhbnRJZCkge1xyXG4gICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSBkYXRhO1xyXG4gICAgICB0aGlzLmNoZWNrVGV4dEhlaWdodCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gIXRoaXMuaXNDbGlja0V4cGFuZDtcclxuICAgICAgaWYgKHRoaXMuaXNDbGlja0V4cGFuZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbyA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5jaGVja1RleHRIZWlnaHQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gc2V0SW5jb21pbmdDYWxsU3RhdHVzKGRhdGE6IGFueSkge1xyXG4gIC8vICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgLy8gICAgIHJlY29yZElkOiBkYXRhPy5pZCxcclxuICAvLyAgICAgaXBBZGRyZXNzOiAnJyxcclxuICAvLyAgICAgaXBDb3VudHJ5OiAnJyxcclxuICAvLyAgICAgY2FsbFN0YXR1czogJ2Fuc3dlcmVkJyxcclxuICAvLyAgICAgZGV2aWNlSWQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgLy8gICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkIHx8IGRhdGEuY29uZmVyZW5jZUlkIHx8ICdubydcclxuICAvLyAgIH1cclxuICAvLyAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5zZXRJbmNvbWluZ0NhbGxTdGF0dXMocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gIC8vICAgICBjb25zb2xlLmxvZyhyZXMpXHJcbiAgLy8gICB9KVxyXG4gIC8vIH1cclxuXHJcbiAgdG9nZ2xlU2VhcmNoKCkge1xyXG4gICAgdGhpcy5pc1NlYXJjaFZpc2libGUgPSAhdGhpcy5pc1NlYXJjaFZpc2libGU7XHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgIGlmICghdGhpcy5pc1NlYXJjaFZpc2libGUpIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSB0aGlzLmNvbnRhY3RzO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gdGhpcy5hbGxQYXJ0aWNpcGVudExpc3Q7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcHBseUZpbHRlcigpIHtcclxuICAgIGNvbnN0IHRleHQgPSB0aGlzLnNlYXJjaFRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLmlzRGlyZWN0Q2FsbE9wdGlvblNob3cgPSAvXlxcKz9cXGQrJC8udGVzdCh0ZXh0KVxyXG4gICAgaWYgKCF0ZXh0Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHRoaXMuY29udGFjdHM7XHJcbiAgICAgIC8vIHRoaXMuZmlsdGVyZWRMaXN0LmZvckVhY2goKGM6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgIGxldCBpbmRleCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmRJbmRleCgoY2M6IGFueSkgPT4gIWNjPy5Jc0Nvbm5lY3RlZCAmJiAoY2M/LnBob25lID09IGM/Lm51bWJlcnNMaXN0WzBdPy5udW1iZXIgfHwgY2M/LnBob25lID09IGM/Lm51bWJlcnNMaXN0WzFdPy5udW1iZXIpKTtcclxuICAgICAgLy8gICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAvLyAgICAgY1snSXNDb25uZWN0ZWQnXSA9IHRydWU7XHJcbiAgICAgIC8vICAgfSBlbHNlIHtcclxuICAgICAgLy8gICAgIGNbJ0lzQ29ubmVjdGVkJ10gPSBmYWxzZTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBpc051bWVyaWNTZWFyY2ggPSAvXlxcKz9cXGQrJC8udGVzdCh0ZXh0KTtcclxuICAgIGNvbnN0IGV4cGFuZGVkOiBhbnlbXSA9IFtdO1xyXG4gICAgdGhpcy5jb250YWN0cy5mb3JFYWNoKChjOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGlzTnVtZXJpY1NlYXJjaCkge1xyXG4gICAgICAgIChjPy5udW1iZXJzTGlzdCB8fCBbXSkuZm9yRWFjaCgobjogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoKG4/Lm51bWJlciB8fCAnJykuaW5jbHVkZXModGV4dCkpIHtcclxuICAgICAgICAgICAgZXhwYW5kZWQucHVzaCh7IC4uLmMsIG51bWJlcnNMaXN0OiBbbl0gfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgbmFtZU1hdGNoID0gKGM/LmZpcnN0TmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXh0KSB8fFxyXG4gICAgICAgICAgKGM/Lmxhc3ROYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRleHQpIHx8XHJcbiAgICAgICAgICAoYz8ubWlkZGxlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXh0KSB8fFxyXG4gICAgICAgICAgKGM/Lm5pY2tOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRleHQpO1xyXG4gICAgICAgIGlmIChuYW1lTWF0Y2gpIHtcclxuICAgICAgICAgIGNvbnN0IG51bWJlcnMgPSBjPy5udW1iZXJzTGlzdDtcclxuICAgICAgICAgIGlmIChudW1iZXJzICYmIG51bWJlcnMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBudW1iZXJzLmZvckVhY2goKG51bU9iajogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgZXhwYW5kZWQucHVzaCh7IC4uLmMsIG51bWJlcnNMaXN0OiBbbnVtT2JqXSB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBleHBhbmRlZC5wdXNoKGMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IGV4cGFuZGVkO1xyXG4gICAgdGhpcy5maWx0ZXJlZExpc3QuZm9yRWFjaCgoYzogYW55KSA9PiB7XHJcbiAgICAgIGNbJ2Zyb21OYW1lJ10gPSB0aGlzLmdldE5hbWUoYy5mcm9tKSB8fCAnJztcclxuICAgICAgY1sndG9OYW1lJ10gPSB0aGlzLmdldE5hbWUoYy50bykgfHwgJyc7XHJcbiAgICAgIGxldCBpbmRleCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmRJbmRleCgoY2M6IGFueSkgPT4gY2M/LnBob25lID09IGM/Lm51bWJlcnNMaXN0WzBdPy5udW1iZXIpO1xyXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIGNbJ0lzQ29ubmVjdGVkJ10gPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNbJ0lzQ29ubmVjdGVkJ10gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGNoZWNrVGV4dEhlaWdodCgpIHtcclxuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRleHQtY29udGFpbmVyJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoZWw/LnNjcm9sbEhlaWdodCA+IGVsPy5jbGllbnRIZWlnaHQpIHtcclxuICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgdG9nZ2xlVGV4dCgpIHtcclxuICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XHJcbiAgfVxyXG4gIHNob3dEaXNjb25uZWN0TW9kYWwgPSBmYWxzZTtcclxuICAvLyBDYWxsIHRoaXMgd2hlbiBjYWxsIGRpc2Nvbm5lY3RzXHJcbiAgb25DYWxsRGlzY29ubmVjdGVkKCkge1xyXG4gICAgdGhpcy5yZXNldExlYXZlVGltZXIoKTtcclxuICAgIHRoaXMuc2hvd0Rpc2Nvbm5lY3RNb2RhbCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBlbmRDb25mZXJlbmNlKCkge1xyXG4gICAgdGhpcy5zaG93RGlzY29ubmVjdE1vZGFsID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbmY/LmNvbmZlcmVuY2VJZCkge1xyXG4gICAgICB0aGlzLm9uRW5kQ2FsbCh0aGlzLnNlbGVjdGVkQ29uZiwgdHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVuZENhbGwodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQ29tYmluZXMgdGhlIHR3byAyNC1ob3VyIHNlbGVjdHMgaW50byBsZWF2ZVJlYXNvbiAoSEg6TU0pICovXHJcbiAgb25UaW1lQ2hhbmdlKCkge1xyXG4gICAgaWYgKHRoaXMubGVhdmVIb3VyICE9PSAnJyAmJiB0aGlzLmxlYXZlTWludXRlICE9PSAnJykge1xyXG4gICAgICB0aGlzLmxlYXZlUmVhc29uID0gYCR7dGhpcy5sZWF2ZUhvdXJ9OiR7dGhpcy5sZWF2ZU1pbnV0ZX1gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlSG91ckRyb3Bkb3duKCkge1xyXG4gICAgdGhpcy5zaG93SG91ckRyb3Bkb3duID0gIXRoaXMuc2hvd0hvdXJEcm9wZG93bjtcclxuICAgIHRoaXMuc2hvd01pbnV0ZURyb3Bkb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVNaW51dGVEcm9wZG93bigpIHtcclxuICAgIHRoaXMuc2hvd01pbnV0ZURyb3Bkb3duID0gIXRoaXMuc2hvd01pbnV0ZURyb3Bkb3duO1xyXG4gICAgdGhpcy5zaG93SG91ckRyb3Bkb3duID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RIb3VyKGg6IHN0cmluZykge1xyXG4gICAgdGhpcy5sZWF2ZUhvdXIgPSBoO1xyXG4gICAgdGhpcy5zaG93SG91ckRyb3Bkb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm9uVGltZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0TWludXRlKG06IHN0cmluZykge1xyXG4gICAgdGhpcy5sZWF2ZU1pbnV0ZSA9IG07XHJcbiAgICB0aGlzLnNob3dNaW51dGVEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5vblRpbWVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIGxlYXZlQ29uZmVyZW5jZSgpIHtcclxuICAgIHRoaXMuc2hvd0Rpc2Nvbm5lY3RNb2RhbCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuaXNSZWFzb25DaGVja2VkKSB7XHJcbiAgICAgIGxldCBwYXlsb2FkID0geyBjb25mZXJlbmNlSWQ6IHRoaXMuc2VsZWN0ZWRDb25mPy5jb25mZXJlbmNlSWQgfHwgdGhpcy5ob3N0bnVtYmVyPy5jb25mZXJlbmNlSWQsIHRpbWU6IHRoaXMuY29udmVydEhITU1Ub01pbnV0ZXModGhpcy5sZWF2ZVJlYXNvbiksIHRpbWVyRGF0ZTogbmV3IERhdGUoKS50b1N0cmluZygpIH1cclxuICAgICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnNldFRpbWVyRm9yRW5kQ29uZmVyZW5jZUNhbGwocGF5bG9hZCkuc3Vic2NyaWJlKChyZXMpID0+IHsgfSlcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZj8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgIGxldCBjb25mZXJlbmNlID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8uZmluZCgocmVzOiBhbnkpID0+IHJlcz8uY29uZmVyZW5jZUlkID09IHRoaXMuc2VsZWN0ZWRDb25mPy5jb25mZXJlbmNlSWQpXHJcbiAgICAgIGxldCBwYXJ0aWNpcGVudEluZm8gPSBjb25mZXJlbmNlPy5wYXJ0aWNpcGFudHM/LmZpbmQoKHBhcnRpY2lwYW50OiBhbnkpID0+ICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py5mcm9tKVxyXG4gICAgICAgICYmIHBhcnRpY2lwYW50Py5jbGllbnQgJiYgcGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LnRvKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiAhcGFydGljaXBhbnQ/LmJ1c2luZXNzTnVtYmVyICYmIHBhcnRpY2lwYW50Py5ob3N0KSAmJiBwYXJ0aWNpcGFudD8uY2xpZW50KSAmJiAhcGFydGljaXBhbnQ/LmlzTGVmdClcclxuICAgICAgaWYgKHBhcnRpY2lwZW50SW5mbz8uaWQpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0luTXVsdGlwbGVDb25mZXJlbmNlcygpKSB7XHJcbiAgICAgICAgICAvLyBTaG93IHBvcHVwIGluc3RlYWQgb2YgZGlyZWN0bHkgbGVhdmluZ1xyXG4gICAgICAgICAgdGhpcy5sZWF2ZUNvbmZQYXJ0aWNpcGFudCA9IHBhcnRpY2lwZW50SW5mbztcclxuICAgICAgICAgIHRoaXMubGVhdmVDb25mQ29uZmVyZW5jZU5hbWUgPSB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdC5maW5kKChjOiBhbnkpID0+IGMuY29uZmVyZW5jZUlkID09PSBjb25mZXJlbmNlLmNvbmZlcmVuY2VJZCk/LmNhbGxMYWJlbCB8fCAnQ29uZmVyZW5jZSc7XHJcbiAgICAgICAgICB0aGlzLnNob3dMZWF2ZUNvbmZpcm1hdGlvbk1vZGFsID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5vbkVuZENhbGwocGFydGljaXBlbnRJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub25FbmRDYWxsKHRoaXMuaG9zdG51bWJlcik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvbnZlcnRISE1NVG9NaW51dGVzKHRpbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpO1xyXG4gICAgcmV0dXJuIChob3VycyAqIDYwKSArIG1pbnV0ZXM7XHJcbiAgfVxyXG5cclxuICBvblJlamVjdENhbGwoY2FsbEluZm86IGFueSkge1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIGNoYW5uZWxJZDogZW52aXJvbm1lbnQuY2hhbm5lbElkLFxyXG4gICAgICByZWNvcmRJZDogY2FsbEluZm8/LmlkLFxyXG4gICAgICBpcEFkZHJlc3M6ICcnLFxyXG4gICAgICBpcENvdW50cnk6ICcnLFxyXG4gICAgICBjYWxsU3RhdHVzOiAnbm8nLFxyXG4gICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgdXNlcklkOiAgdGhpcy51c2VySWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxyXG4gICAgICBjb21wYW55SWQ6ICcnLFxyXG4gICAgICBjbGllbnRTaWQ6IGNhbGxJbmZvPy5jbGllbnRTaWQsXHJcbiAgICAgIGNvbmZlcmVuY2VJZDogY2FsbEluZm8/LmNvbmZlcmVuY2VJZCB8fCAnbm8nXHJcbiAgICB9XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2Uuc2V0SW5jb21pbmdDYWxsU3RhdHVzKHBheWxvYWQpLnN1YnNjcmliZShhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maWx0ZXIoKHJlczogYW55KSA9PiByZXM/LmlkICE9IGNhbGxJbmZvPy5pZCk7XHJcbiAgICAgIHRoaXMub25DbG9zZUMyQ0luZm9QYW5lbCgpO1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuICBcclxuICBpc1NlbGZOdW1iZXIocGFydGljaXBhbnQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5maW5kKChyZXM6IGFueSkgPT4gcmVzID09IChwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IHBhcnRpY2lwYW50Py5mcm9tIDogcGFydGljaXBhbnQ/LnRvKSk7XHJcbiAgfVxyXG5cclxuICBzaG91bGRTaG93U2VwYXJhdG9yKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHZpc2libGVDb3VudCA9IHRoaXMuY3VycmVudENhbGxMaXN0LnNsaWNlKDAsIGluZGV4KS5maWx0ZXIoKGNhbGw6IGFueSkgPT4gIWNhbGw/LmlzQ29uZmVyZW5jZUhvbGQpLmxlbmd0aDtcclxuICAgIHJldHVybiB2aXNpYmxlQ291bnQgPiAwO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZUMyQ0luZm9QYW5lbCgpIHtcclxuICAgIC8vIHRoaXMuaXNDbGlja0V4cGFuZCA9IGZhbHNlO1xyXG4gICAgbGV0IGJ1c2luZXNzSW5mbyA9IHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5wYXJ0aWNpcGFudHMuZmluZCgoaXRlbTogYW55KSA9PiAhIWl0ZW0/LmJ1c2luZXNzTnVtYmVyICYmIHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhpdGVtPy50bykgJiYgIWl0ZW0/Lmhvc3QpO1xyXG4gICAgaWYoYnVzaW5lc3NJbmZvKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbyA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQocmVzID0+IGJ1c2luZXNzSW5mbz8uaWQgPT0gcmVzPy5pZCk7XHJcbiAgICAgIHRoaXMudG9nZ2xlQzJDSW5mb1BhbmVsKHRoaXMuc2VsZWN0ZWRVc2VySW5mbyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5hbWUobnVtYmVyOiBhbnkpIHtcclxuICAgICAgbGV0IGNvbnRhY3RJbmZvID0gdGhpcy5jb250YWN0cy5maW5kKChjOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gYz8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlciAgPT0gbnVtYmVyIHx8IGM/Lm51bWJlcnNMaXN0WzFdPy5udW1iZXIgPT0gbnVtYmVyO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGNvbnRhY3RJbmZvPy5maXJzdE5hbWUgfHwgY29udGFjdEluZm8/Lm1pZGRsZU5hbWUgfHwgY29udGFjdEluZm8/Lmxhc3ROYW1lID8gYCR7Y29udGFjdEluZm8/LmZpcnN0TmFtZSB8fCAnJ30gJHtjb250YWN0SW5mbz8ubWlkZGxlTmFtZSB8fCAnJ30gJHtjb250YWN0SW5mbz8ubGFzdE5hbWUgfHwgJyd9YCA6IG51bGxcclxuICB9XHJcbiAgXHJcbiAgZ2V0SW1nKG51bWJlcjogYW55KSB7XHJcbiAgICBsZXQgY29udGFjdEluZm8gPSB0aGlzLmNvbnRhY3RzLmZpbmQoKGM6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gYz8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlciAgPT0gbnVtYmVyIHx8IGM/Lm51bWJlcnNMaXN0WzFdPy5udW1iZXIgPT0gbnVtYmVyO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY29udGFjdEluZm8/LmltYWdlIHx8IG51bGxcclxuICB9XHJcblxyXG4gIGdldCBzaG93RW5kQWxsQnV0dG9uKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYWN0aXZlUGFydGljaXBhbnRzID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmlsdGVyKChjOiBhbnkpID0+ICFjLmlzTGVmdCk7XHJcbiAgICByZXR1cm4gYWN0aXZlUGFydGljaXBhbnRzLmxlbmd0aCA+IDI7XHJcbiAgfVxyXG4gIGNvbmZpcm1MZWF2ZVBhcnRpY2lwYW50KGM6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaXNJbk11bHRpcGxlQ29uZmVyZW5jZXMoKSkge1xyXG4gICAgICB0aGlzLmxlYXZlQ29uZlBhcnRpY2lwYW50ID0gYztcclxuICAgICAgdGhpcy5sZWF2ZUNvbmZDb25mZXJlbmNlTmFtZSA9IHRoaXMuY29uZmVyZW5jZUNhbGxMaXN0LmZpbmQoXHJcbiAgICAgICAgKGNvbmY6IGFueSkgPT4gY29uZi5jb25mZXJlbmNlSWQgPT09IGMuY29uZmVyZW5jZUlkXHJcbiAgICAgICk/LmNhbGxMYWJlbCB8fCAnQ29uZmVyZW5jZSc7XHJcbiAgICAgIHRoaXMuc2hvd0xlYXZlQ29uZmlybWF0aW9uTW9kYWwgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vbkVuZENhbGwoYywgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuICBpc0luTXVsdGlwbGVDb25mZXJlbmNlcygpOiBib29sZWFuIHtcclxuICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZvckVhY2goKGNvbmY6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhjb25mKTtcclxuICAgICAgY29uc3Qgb3VyUGFydGljaXBhbnQgPSBjb25mLnBhcnRpY2lwYW50cz8uZmluZCgocDogYW55KSA9PlxyXG4gICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHA/LmZyb20pICYmIHA/LmNsaWVudCkgfHxcclxuICAgICAgICAgICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocD8udG8pICYmIHA/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgIXA/LmJ1c2luZXNzTnVtYmVyKSkgJiZcclxuICAgICAgICAhcD8uaXNMZWZ0XHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnNvbGUubG9nKG91clBhcnRpY2lwYW50KTtcclxuICAgICAgaWYgKG91clBhcnRpY2lwYW50KSBjb3VudCsrO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY291bnQgPiAxO1xyXG4gIH1cclxuICBjb25maXJtTGVhdmUoKSB7XHJcbiAgICBpZiAodGhpcy5sZWF2ZUNvbmZQYXJ0aWNpcGFudCkge1xyXG4gICAgICB0aGlzLm9uRW5kQ2FsbCh0aGlzLmxlYXZlQ29uZlBhcnRpY2lwYW50LCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dMZWF2ZUNvbmZpcm1hdGlvbk1vZGFsID0gZmFsc2U7XHJcbiAgICB0aGlzLmxlYXZlQ29uZlBhcnRpY2lwYW50ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGNhbmNlbExlYXZlKCkge1xyXG4gICAgdGhpcy5zaG93TGVhdmVDb25maXJtYXRpb25Nb2RhbCA9IGZhbHNlO1xyXG4gICAgdGhpcy5sZWF2ZUNvbmZQYXJ0aWNpcGFudCA9IG51bGw7XHJcbiAgfVxyXG4gIGdldCBhY3RpdmVQYXJ0aWNpcGFudHNDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuYWxsUGFydGljaXBlbnRMaXN0Py5maWx0ZXIoKHA6IGFueSkgPT4gIXAuaXNMZWZ0KS5sZW5ndGggfHwgMDtcclxuICB9XHJcbiAgdHJ1bmNhdGVUZXh0KHRleHQ6IHN0cmluZywgbWF4TGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gdGV4dC5sZW5ndGggPiBtYXhMZW5ndGggPyB0ZXh0LnN1YnN0cmluZygwLCBtYXhMZW5ndGgpICsgJy4uLicgOiB0ZXh0O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRvdGFsUGFydGljaXBhbnRzQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdD8ubGVuZ3RoIHx8IDA7XHJcbiAgfVxyXG4gIG9uUmVhc29uQ2hlY2tDaGFuZ2VkKG5ld1ZhbHVlOmJvb2xlYW4pIHtcclxuICAgIGlmICghbmV3VmFsdWUpIHtcclxuICAgICAgdGhpcy5zaG93SG91ckRyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2hvd01pbnV0ZURyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubGVhdmVIb3VyID0gJyc7XHJcbiAgICAgIHRoaXMubGVhdmVNaW51dGUgPSAnJztcclxuICAgICAgdGhpcy5sZWF2ZVJlYXNvbiA9ICcnOyBcclxuICAgIH1cclxuICB9XHJcbiAgcmVzZXRMZWF2ZVRpbWVyKCkge1xyXG4gICAgdGhpcy5pc1JlYXNvbkNoZWNrZWQgPSBmYWxzZTtcclxuICAgIHRoaXMubGVhdmVIb3VyID0gJyc7XHJcbiAgICB0aGlzLmxlYXZlTWludXRlID0gJyc7XHJcbiAgICB0aGlzLmxlYXZlUmVhc29uID0gJyc7XHJcbiAgICB0aGlzLnNob3dIb3VyRHJvcGRvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd01pbnV0ZURyb3Bkb3duID0gZmFsc2U7XHJcbiAgfVxyXG4gIHByaXZhdGUgdW5ob2xkUGVuZGluZ0NvbmZlcmVuY2UoKSB7XHJcbiAgICBpZiAodGhpcy5wZW5kaW5nTmV3Q2FsbEhlbGRQYXJ0aWNpcGFudCkge1xyXG4gICAgICBjb25zdCBwYXJ0aWNpcGFudCA9IHRoaXMucGVuZGluZ05ld0NhbGxIZWxkUGFydGljaXBhbnQ7XHJcbiAgICAgIHRoaXMucGVuZGluZ05ld0NhbGxIZWxkUGFydGljaXBhbnQgPSBudWxsO1xyXG4gICAgICB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgIHBhcnRpY2lwYW50SWQ6IFtwYXJ0aWNpcGFudC5pZF0sXHJcbiAgICAgICAgY29uZmVyZW5jZUlkOiBwYXJ0aWNpcGFudC5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAgICAgbXV0ZTogcGFydGljaXBhbnQubXV0ZSB8fCBmYWxzZVxyXG4gICAgICB9KS50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXM/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byB1bmhvbGQgcGVuZGluZyBjb25mZXJlbmNlJywgcmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKCdFcnJvciB1bmhvbGRpbmcgcGVuZGluZyBjb25mZXJlbmNlJywgZXJyKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5jYWxsRGF0YS5kaWFsID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59IiwiPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhbGwtY29udGFpbmVyXCIgKm5nSWY9XCIhaXNNaW5pbWlzZWQgJiYgY3VycmVudENhbGxMaXN0Py5sZW5ndGhcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnY29sbG9wcyc6IGlzQ29sbG9wcywgJ2luY29taW5nLWNhbGwtY29udGFpbmVyJzogaXNDbGlja0V4cGFuZCwgJ2NvbnRhY3RzLW9wZW4nOiBzaG93Q29udGFjdHNQYW5lbCB9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRlci13cmFwcGVyIG91dGdvaW5nLWNhbGwtbG9hZGVyXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJzaG93TmV3Q2FsbExvYWRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aXZlLWNhbGxcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IHBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWFuaW1hdGlvbiBjYWxsLWFuaW1hdGlvbi1wbGF5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImF2YXRhci1pbWdcIiBbc3JjXT1cIm5ld0NhbGxMb2FkZXJEYXRhPy5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxlckRldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDEgc3R5bGU9XCJtYXJnaW4tdG9wOiA4cHg7XCI+Q29ubmVjdGluZy4uLjwvaDE+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJ0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcIj57eyBuZXdDYWxsTG9hZGVyRGF0YT8ubmFtZSB8fCBuZXdDYWxsTG9hZGVyRGF0YT8ucGhvbmUgfHwgJ1Vua25vd24nIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hY3Rpb24tYnRuc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1idG4gZW5kLWNhbGwtYnRuXCIgZGlzYWJsZWQgKGNsaWNrKT1cImVuZENhbGwoKVwiIHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRpYWxwYWQtYWxlcnRzXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgJ2NvbmZlcmVuY2UtYWxlcnQnOiBpc0NvbmZlcmVuY2UgJiYgY3VycmVudENhbGw/LmlzQ29uZmVyZW5jZSxcclxuICAgICAgICAnbm9ybWFsLWNhbGwtYWxlcnQnOiAhaXNDb25mZXJlbmNlXHJcbiAgICAgICAgfVwiICpuZ0lmPVwiY2FsbE51bWJlclRvYXN0LnNob3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpYWxib3gtcG9wMSBhbGVydCBmYWRlIHNob3dcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY2FsbE51bWJlclRvYXN0LnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIHRleHQtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFlvdSdyIGNhbGxpbmdcclxuICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7Y2FsbE51bWJlclRvYXN0LmRpc3BsYXlOdW19fTwvc3Ryb25nPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLWRpc2MgcC0wIHB4LTFcIiAoY2xpY2spPVwiY2FuY2VsQ2FsbFRvYXN0KClcIj4gQ2FuY2VsIENhbGwgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIEFsbCB0eXBlIENhbGwgSG9sZCBsaXN0ICAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1jYWxsLWJhbm5lclwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiKGN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAxICYmICEhY3VycmVudENhbGwgJiYgKChpc0NvbmZlcmVuY2VDYWxsSG9sZCB8fCBpc0NvbmZlcmVuY2UpIHx8ICFpc0NvbmZlcmVuY2UpKSB8fCAhaXNBbGxBY2NlcHRlZFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb25mIG9mIGN1cnJlbnRDYWxsTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbC1jb250ZW50XCIgKm5nSWY9XCIhY29uZj8uaXNBY2NlcHRDYWxsICYmIGN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAxICYmIGRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoY29uZj8udG8pICYmIGNvbmY/LmlzTm90aWZpY2F0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2hlbGQtY2FsbC1zZWxlY3RlZCc6IHNlbGVjdGVkVXNlckluZm8/LnBhcnRpY2lwYW50SWQgJiYgc2VsZWN0ZWRVc2VySW5mbz8ucGFydGljaXBhbnRJZCA9PT0gY29uZj8ucGFydGljaXBhbnRJZH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb25mPy5idXNpbmVzc051bWJlciA/IHRvZ2dsZUMyQ0luZm9QYW5lbChjb25mKSA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnY3Vyc29yJzogY29uZj8uYnVzaW5lc3NOdW1iZXIgPyAncG9pbnRlcicgOiAnZGVmYXVsdCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYXZhdGFyLWltZy13cmFwcGVyIGJvcmRlci1yYWRpdXMtNTBcIiBbc3JjXT1cImNvbmY/LmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiB3aWR0aD1cIjM1XCIgaGVpZ2h0PVwiMzVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbGVyXCIgKm5nSWY9XCIhY29uZj8uYnVzaW5lc3NOdW1iZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1sYWJlbFwiPnt7Y29uZj8uZnJvbX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLW5hbWVcIj57e2NvbmY/LmZyb21OYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1jYWxsZXJcIiAqbmdJZj1cImNvbmY/LmJ1c2luZXNzTnVtYmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbWFpbi1sYWJlbFwiPkNhbGwgZnJvbSBDMkM6PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLWxhYmVsXCIgPjxzcGFuIFt0aXRsZV09XCJjb25mPy5zb3VyY2VOYW1lXCI+e3sgdHJ1bmNhdGVUZXh0KGNvbmY/LnNvdXJjZU5hbWUsIDEwKSB9fTwvc3Bhbj58XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3RpdGxlXT1cImNvbmY/LnBvaW50TmFtZVwiPnt7IHRydW5jYXRlVGV4dChjb25mPy5wb2ludE5hbWUsIDEwKSB9fTwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbGFiZWxcIj57eyB0cnVuY2F0ZVRleHQoY29uZj8ubmFtZSwgMjYpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZCA9PSBjb25mPy5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbm5lY3Rpbmctd3JhcHBlciAgbXItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmluZ2luZy10ZXh0XCI+Q29ubmVjdGluZzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ljwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ljwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ljwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25mZXJlbmNlLWhvbGQtY29udGFjdCByZWNlaXZlLWJ0blwiIChjbGljayk9XCJ3YWl0aW5nQ2FsbEFjY2VwdChjb25mKVwiIFtkaXNhYmxlZF09XCJpc0Nvbm5lY3RpbmcgfHwgaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlXCIgKm5nSWY9XCJpc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZCAhPT0gY29uZj8uaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25mZXJlbmNlLWNvbnRhY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHRpdGxlPVwiQ2FsbCBFbmRcIiAoY2xpY2spPVwib25SZWplY3RDYWxsKGNvbmYpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb25mPy5idXNpbmVzc051bWJlclwiIGNsYXNzPVwidG9nZ2xlYXJyb3ctYXJyb3cgbWUtMlwiIGlkPVwidG9nZ2xlYXJyb3dcIiAoY2xpY2spPVwidG9nZ2xlQzJDSW5mb1BhbmVsKGNvbmYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWluZm9cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb25mIG9mIGNvbmZlcmVuY2VDYWxsTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbC1jb250ZW50XCIgKm5nSWY9XCIoY29uZj8uaXNDb25mZXJlbmNlSG9sZCB8fCAoc2hvd05ld0NhbGxMb2FkZXIgJiYgaXNDb25mZXJlbmNlQ2FsbEhvbGQpKSAmJiAoY29uZmVyZW5jZUNhbGxMaXN0Lmxlbmd0aCA+IDEgfHwgc2hvd05ld0NhbGxMb2FkZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2hlbGQtY2FsbC1zZWxlY3RlZCc6IGNvbmY/LmlzQnVzaW5lc3NOdW1iZXIgJiYgc2VsZWN0ZWRVc2VySW5mbz8ucGFydGljaXBhbnRJZCA9PT0gY29uZj8uYnVzaW5lc3NQYXJ0aWNpcGFudElkICYmIGlzQ2xpY2tFeHBhbmR9XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29uZj8uaXNCdXNpbmVzc051bWJlciA/IHRvZ2dsZUMyQ0luZm9QYW5lbChjb25mKSA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnY3Vyc29yJzogY29uZj8uaXNCdXNpbmVzc051bWJlciA/ICdwb2ludGVyJyA6ICdkZWZhdWx0J31cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBob2xkLWljb25cIj5wYXVzZV9jaXJjbGU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGxlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLWxhYmVsXCI+SG9sZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1uYW1lXCI+e3tjb25mPy5jYWxsTGFiZWx9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmVyZW5jZS1ob2xkLWNvbnRhY3RcIiBbbmdDbGFzc109XCJ7ICdvbi1ob2xkJzogY29uZj8uaXNDb25mZXJlbmNlSG9sZCB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzd2FwQ2FsbHMoY29uZix0cnVlKVwiIFtkaXNhYmxlZF09XCJpc0hvbGRCdG5EaXNhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbmY/LmlzQ29uZmVyZW5jZUhvbGRcIiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBbdGl0bGVdPVwiJ1Jlc3VtZSdcIj4gcmVzdW1lIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25mZXJlbmNlLWNvbnRhY3RcIiAoY2xpY2spPVwiZW5kQ29uZmVyZW5lY2VDYWxsKGNvbmYpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiB0aXRsZT1cIkNhbGwgRW5kXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGVhcnJvdy1hcnJvdyBtZS0yXCIgaWQ9XCJ0b2dnbGVhcnJvd1wiIChjbGljayk9XCJ0b2dnbGVDb250YWN0c1BhbmVsKGNvbmYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFuZ2xlLXJpZ2h0XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBGb3Igc2luZ2xlIGluY29taW5nIGNhbGwgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAwIHB5LTVcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XCJcclxuICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50Q2FsbExpc3QubGVuZ3RoID09PSAxICYmIGN1cnJlbnRDYWxsTGlzdFswXT8uaXNJbmNvbWluZ0NhbGwgJiYgIWN1cnJlbnRDYWxsTGlzdFswXT8uaXNBY2NlcHRDYWxsXCI+XHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNhbGxUb051bVwiPkluY29taW5nIGNhbGwgb24gPGJyIC8+PHNwYW4+e3tjdXJyZW50Q2FsbExpc3RbMF0/LnRvIHx8ICdVbmtub3duIE51bWJlcid9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbFRvTnVtXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudENhbGxMaXN0WzBdPy5idXNpbmVzc051bWJlcjsgZWxzZSBub3JtYWxDYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQzJDIENBTExcclxuICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj4gRnJvbSA6IHt7IGN1cnJlbnRDYWxsTGlzdFswXT8uc291cmNlTmFtZSB9fSB8IHt7IGN1cnJlbnRDYWxsTGlzdFswXT8ucG9pbnROYW1lIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsQ2FsbD5cclxuICAgICAgICAgICAgICAgICAgICBJbmNvbWluZyBjYWxsIG9uXHJcbiAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY3VycmVudENhbGxMaXN0WzBdPy50byB8fCAnVW5rbm93biBOdW1iZXInIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWFuaW1hdGlvblwiIFtuZ0NsYXNzXT1cInsnY2FsbC1hbmltYXRpb24tcGxheSc6IHNob3dSaW5nQW5pbWF0aW9ufVwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImF2YXRhci1pbWdcIiBbc3JjXT1cImluY29taW5nRnJvbUltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIHdpZHRoPVwiMTIwXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsZXJEZXRhaWxzXCIgKm5nSWY9XCIhY3VycmVudENhbGxMaXN0WzBdPy5idXNpbmVzc051bWJlclwiPlxyXG4gICAgICAgICAgICAgICAgPGgxPnt7IGN1cnJlbnRDYWxsTGlzdFswXT8ubmFtZSA/IGN1cnJlbnRDYWxsTGlzdFswXT8ubmFtZSA6IGN1cnJlbnRDYWxsTGlzdFswXT8ucGhvbmUgfHwgJ1Vua25vd24gTnVtYmVyJyB9fTwvaDE+XHJcbiAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIiEhY3VycmVudENhbGxMaXN0WzBdPy5uYW1lXCI+e3sgY3VycmVudENhbGxMaXN0WzBdPy5waG9uZSB9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsZXJEZXRhaWxzXCIgKm5nSWY9XCJjdXJyZW50Q2FsbExpc3RbMF0/LmJ1c2luZXNzTnVtYmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIiEhY3VycmVudENhbGxMaXN0WzBdPy5uYW1lXCI+e3sgdHJ1bmNhdGVUZXh0KGN1cnJlbnRDYWxsTGlzdFswXT8ubmFtZSwgNDUpIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgPHAgPnt7IGN1cnJlbnRDYWxsTGlzdFswXT8ubnVtYmVyIH19PC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBDb25uZWN0aW5nIG92ZXJsYXkgKHNob3duIGFmdGVyIGFjY2VwdCBidG4gY2xpY2ssIGhpZGRlbiBvbiBBUEkgcmVzcG9uc2UpIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29ubmVjdGluZy1vdmVybGF5IG10LWF1dG9cIiAqbmdJZj1cImlzQ29ubmVjdGluZ0luY29taW5nQ2FsbElkID09IGN1cnJlbnRDYWxsTGlzdFswXT8uaWRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25uZWN0aW5nLWRvdHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPjxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjb25uZWN0aW5nLXRleHRcIj5Db25uZWN0aW5nLi4uPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWFjdGlvbi1idG5zIG10LWF1dG9cIiAqbmdJZj1cImlzQ29ubmVjdGluZ0luY29taW5nQ2FsbElkICE9IGN1cnJlbnRDYWxsTGlzdFswXT8uaWRcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0biByZWNlaXZlLWJ0blwiICpuZ0lmPVwiIW5ld0luY29taW5nQ2FsbHNMaXN0WzBdPy5pc0NhbGxDb25uZWN0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0luY29taW5nQ2FsbEJ0bkRpc2FibGVcIiAoY2xpY2spPVwiYWNjZXB0SW5jb21pbmdDYWxsKGN1cnJlbnRDYWxsTGlzdFswXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0biByZWplY3QtYnRuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKGNsaWNrKT1cIm9uUmVqZWN0Q2FsbChjdXJyZW50Q2FsbExpc3RbMF0pXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBGb3Igc2luZ2xlIGFjdGl2ZSBjYWxsIC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIoIWlzQ29uZmVyZW5jZSB8fCBpc0NvbmZlcmVuY2VDYWxsSG9sZCkgJiYgKCEhY3VycmVudENhbGw/LmlkICYmICFjdXJyZW50Q2FsbD8uaXNDb25mZXJlbmNlKSAmJiBjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsXCJcclxuICAgICAgICAgICAgW25nU3R5bGVdPVwieydkaXNwbGF5JzogJ2ZsZXgnLCAnZmxleC1kaXJlY3Rpb24nOiAnY29sdW1uJywgJ3Bvc2l0aW9uJzogJ3JlbGF0aXZlJ31cIiBjbGFzcz1cImFjdGl2ZS1jYWxsXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50Q2FsbD8uYnVzaW5lc3NOdW1iZXI7XCIgY2xhc3M9XCJjYWxsVG9OdW1cIj5cclxuICAgICAgICAgICAgICAgICAgICBDMkMgQ0FMTFxyXG4gICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPiBGcm9tIDoge3sgY3VycmVudENhbGw/LnVzZXJJbmZvSWQ/LnNvdXJjZU5hbWUgfX0gfCB7eyBjdXJyZW50Q2FsbD8udXNlckluZm9JZD8ucG9pbnROYW1lIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWFuaW1hdGlvblwiIFtuZ0NsYXNzXT1cInsnY2FsbC1hbmltYXRpb24tcGxheSc6IHNob3dSaW5nQW5pbWF0aW9ufVwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImF2YXRhci1pbWdcIiAqbmdJZj1cIiFjdXJyZW50Q2FsbD8uY2xpZW50XCJcclxuICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImN1cnJlbnRDYWxsPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gY3VycmVudENhbGw/LnRvSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnIDogY3VycmVudENhbGw/LmZyb21JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImF2YXRhci1pbWdcIiAqbmdJZj1cImN1cnJlbnRDYWxsPy5jbGllbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiY3VycmVudENhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjdXJyZW50Q2FsbD8uZnJvbUltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyA6IGN1cnJlbnRDYWxsPy50b0ltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbGVyRGV0YWlsc1wiPlxyXG4gICAgICAgICAgICA8IS0tIEMyQyBCdXNpbmVzcyBDYWxsIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRDYWxsPy5idXNpbmVzc051bWJlcjsgZWxzZSBub3JtYWxDYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgxPnt7IGN1cnJlbnRDYWxsPy51c2VySW5mb0lkPy5uYW1lIHx8ICdVbmtub3duJyB9fTwvaDE+XHJcbiAgICAgICAgICAgICAgICAgICAgPHA+e3sgY3VycmVudENhbGw/LnVzZXJJbmZvSWQ/Lm51bWJlciB8fCBjdXJyZW50Q2FsbD8uZnJvbSB8fCAnVW5rbm93bicgfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIE5vcm1hbCBDYWxsIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxDYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMSAqbmdJZj1cIiFjdXJyZW50Q2FsbD8uY2xpZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzogc2hvd0tleXBhZCA/ICcwJzonOHB4J31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY3VycmVudENhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY3VycmVudENhbGw/LnRvTmFtZSB8fCBvdXRnb2luZ0NvbnRhY3ROYW1lIHx8ICdVbmtub3duJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50Q2FsbD8uZnJvbU5hbWUgfHwgJ1Vua25vd24nIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9oMT5cclxuICAgICAgICAgICAgICAgICAgICA8aDEgKm5nSWY9XCJjdXJyZW50Q2FsbD8uY2xpZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzogc2hvd0tleXBhZCA/ICcwJzonOHB4J31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY3VycmVudENhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY3VycmVudENhbGw/LmZyb21OYW1lIHx8ICdVbmtub3duJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50Q2FsbD8udG9OYW1lIHx8IG91dGdvaW5nQ29udGFjdE5hbWUgfHwgJ1Vua25vd24nIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9oMT5cclxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIiFjdXJyZW50Q2FsbD8uY2xpZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRDYWxsPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnRDYWxsPy50b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50Q2FsbD8uZnJvbSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImN1cnJlbnRDYWxsPy5jbGllbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY3VycmVudENhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY3VycmVudENhbGw/LmZyb21cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudENhbGw/LnRvIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGgxICpuZ0lmPVwiIWN1cnJlbnRDYWxsPy5jbGllbnRcIiBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOiAnOHB4J31cIj57e2N1cnJlbnRDYWxsPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gY3VycmVudENhbGw/LnRvTmFtZSB8fCBvdXRnb2luZ0NvbnRhY3ROYW1lIHx8ICdVbmtub3duJyA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENhbGw/LmZyb21OYW1lIHx8ICdVbmtub3duJ319PC9oMT5cclxuICAgICAgICAgICAgICAgIDxoMSAqbmdJZj1cImN1cnJlbnRDYWxsPy5jbGllbnRcIiBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOiAnOHB4J31cIj57e2N1cnJlbnRDYWxsPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gY3VycmVudENhbGw/LmZyb21OYW1lIHx8ICdVbmtub3duJyA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENhbGw/LnRvTmFtZSB8fCAnVW5rbm93bid9fTwvaDE+XHJcbiAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIiFjdXJyZW50Q2FsbD8uY2xpZW50XCI+e3sgY3VycmVudENhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjdXJyZW50Q2FsbD8udG8gfHwgJ1Vua25vd24nIDogY3VycmVudENhbGw/LmZyb20gfHwgJ1Vua25vd24nfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImN1cnJlbnRDYWxsPy5jbGllbnRcIj57eyBjdXJyZW50Q2FsbD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGN1cnJlbnRDYWxsPy5mcm9tIHx8ICdVbmtub3duJyA6IGN1cnJlbnRDYWxsPy50byB8fCAnVW5rbm93bid9fTwvcD4gLS0+XHJcbiAgICAgICAgICAgICAgICA8aDQgc3R5bGU9XCJtYXJnaW4tdG9wOiA0cHhcIj57eyB0aW1lcn19PC9oND5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtYWN0aW9uLWJ0bnNcIiAqbmdJZj1cIiFzaG93S2V5cGFkXCIgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzogc2hvd0tleXBhZCA/ICcwJzogJzIwcHgnfVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1idG4tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gc3RhcnQtc3RvcFwiICpuZ0lmPVwiIWlzUmVjb3JkaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydyZWNvcmRpbmcnOiBpc1JlY29yZGluZywgJ3N0b3BwZWQnOiAhaXNSZWNvcmRpbmcsICdkaXNhYmxlZCc6IHVzZXJTZXR0aW5nSW5mbz8uY2FsbFJlY29yZGluZyA9PSAnTid9XCIgKGNsaWNrKT1cInRvZ2dsZVJlY29yZGluZygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImlzUmVjb3JkaW5nID8gJ1N0b3AgUmVjb3JkaW5nJyA6ICdTdGFydCBSZWNvcmRpbmcnXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsIHx8IHVzZXJTZXR0aW5nSW5mbz8uY2FsbFJlY29yZGluZyA9PSAnTidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWNvcmRpbmctaWNvblwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGF1c2UtcmVzdW1lLWJ0bnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gcGF1c2UtcmVzdW1lXCIgKm5nSWY9XCJpc1JlY29yZGluZyAmJiAhaXNQYXVzZWRcIiAoY2xpY2spPVwicGF1c2VSZWNvcmRpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBhdXNlIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHBhdXNlLXJlc3VtZVwiICpuZ0lmPVwiaXNQYXVzZWRcIiAoY2xpY2spPVwicmVzdW1lUmVjb3JkaW5nKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBwbGF5X2Fycm93IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1JlY29yZGluZ1wiIGNsYXNzPVwidGltZXItZGlzcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGdldEZvcm1hdHRlZFRpbWUoKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIE11dGUvdW5tdXRlIGluY29taW5nIGNhbGwgIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXV0ZS1pbmNvbWluZy1yb3dcIiAqbmdJZj1cImN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGwgJiYgIXNob3dLZXlwYWRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXV0ZS1pbmNvbWluZy1sYWJlbFwiPk11dGUgaW5jb21pbmcgY2FsbHM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzd2l0Y2ggbWItMFwiIHRpdGxlPVwiU2lsZW5jZSB0aGUgcmluZ3RvbmUgb2YgbmV3IGluY29taW5nIGNhbGxzIGR1cmluZyB0aGlzIGNhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwidHdpbGlvU2VydmljZS5pc0luY29taW5nTXV0ZWRcIiAoY2hhbmdlKT1cInRvZ2dsZU11dGVJbmNvbWluZ0NhbGwoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3dpdGNoLXNsaWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0tleXBhZFwiIGNsYXNzPVwic2VuZERpZ2l0XCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiY2FsbC1pbnB1dHNcIiBpZD1cImNhbGwtaW5wdXRcIiBbKG5nTW9kZWwpXT1cImNhbGxJbnB1dFwiIChrZXl1cCk9XCJvbkNhbGxJbnB1dEVudGVyKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpbnB1dC1jbGVhci1idG5cIiAqbmdJZj1cImNhbGxJbnB1dFwiIChjbGljayk9XCJjbGVhcklucHV0cygpXCI+Y2xvc2Vfc21hbGw8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWNvbnRhaW5lciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCJzaG93S2V5cGFkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2V5LWJ0blwiICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5cGFkVmFsXCIgKGNsaWNrKT1cIm9uQ2FsbElucHV0cyhrZXkubnVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7a2V5Lm51bX19XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tYWxiaGFiZXRzXCI+e3trZXkudGV4dCA/IGtleS50ZXh0IDogJyZuYnNwOyd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWFjdGlvbi1idG5zXCIgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzogc2hvd0tleXBhZCA/ICcwJzogJzcyM3gnfVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1ldmVubHkgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLXNlYy1idG4gbXItM1wiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiIChjbGljayk9XCJ0b2dnbGVNdXRlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCJpc011dGVcIj4gbWljX29mZiA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiIWlzTXV0ZVwiPiBtaWMgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLXNlYy1idG4gbXItM1wiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAoY2xpY2spPVwidG9nZ2xlS2V5cGFkKClcIj4gdHJhbnNpdGlvbl9kaXNzb2x2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtc2VjLWJ0blwiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb250YWN0c1BhbmVsKGN1cnJlbnRDYWxsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gZ3JvdXBzXzIgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0biBlbmQtY2FsbC1idG5cIiBbZGlzYWJsZWRdPVwiIWN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGxcIiAoY2xpY2spPVwiZW5kQ2FsbChmYWxzZSwgY3VycmVudENhbGwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsX2VuZCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gY29uZmVyZW5jZSBjYWxsIHZpZXcgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZlcmVuY2UtY2FsbC12aWV3XCIgKm5nSWY9XCJpc0NvbmZlcmVuY2VcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtaGVhZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25mLWljb24gbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBncm91cHMgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25mLXRpdGxlXCI+e3tjdXJyZW50Q29uZmVyZW5jZUNhbGw/LmNhbGxMYWJlbCB8fCAnQ29uZmVyZW5jZSBDYWxsJ319PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGwtdGV4dCBjb25mLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjYWxsIG9mIGN1cnJlbnRDYWxsTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNhbGw/LmlzQ29uZmVyZW5jZUhvbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvdWxkU2hvd1NlcGFyYXRvcihpKVwiPiAmIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY2FsbD8uY2xpZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1NlbGZOdW1iZXIoY2FsbCkgZWxzZSBzZWxmTnVtYmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7Y2FsbD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGNhbGw/LmZyb21OYW1lIHx8IGNhbGw/LmZyb20gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsPy50b05hbWUgfHwgY2FsbD8udG99fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NlbGZOdW1iZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPllvdTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY2FsbD8uY2xpZW50XCI+e3tjYWxsPy5kaXJlY3Rpb24gPT0gXCJvdXRnb2luZy1jYWxsXCIgPyBjYWxsPy50b05hbWUgfHwgY2FsbD8udG8gOiBjYWxsPy5mcm9tTmFtZSB8fCBjYWxsPy5mcm9tIHx8ICdVbmtub3duIG51bWJlcid9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25mLXRpbWVyXCI+e3sgY3VycmVudENvbmZlcmVuY2VDYWxsPy50aW1lciB8fCB0aW1lciB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWFjdGlvbi1idG5zIG10LWF1dG9cIiAqbmdJZj1cIiFzaG93S2V5cGFkXCIgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzogc2hvd0tleXBhZCA/ICcwJzogJzIwcHgnfVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1idG4tY29udGFpbmVyXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHN0YXJ0LXN0b3BcIiAqbmdJZj1cIiFpc1JlY29yZGluZ1wiIFtkaXNhYmxlZF09XCJ1c2VyU2V0dGluZ0luZm8uY2FsbFJlY29yZGluZyA9PSAnTidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3JlY29yZGluZyc6IGlzUmVjb3JkaW5nLCAnc3RvcHBlZCc6ICFpc1JlY29yZGluZywgJ2Rpc2FibGVkJzogdXNlclNldHRpbmdJbmZvPy5jYWxsUmVjb3JkaW5nID09ICdOJ31cIiAoY2xpY2spPVwidG9nZ2xlUmVjb3JkaW5nKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXNSZWNvcmRpbmcgPyAnU3RvcCBSZWNvcmRpbmcnIDogJ1N0YXJ0IFJlY29yZGluZydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWNvcmRpbmctaWNvblwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGF1c2UtcmVzdW1lLWJ0bnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gcGF1c2UtcmVzdW1lXCIgKm5nSWY9XCJpc1JlY29yZGluZyAmJiAhaXNQYXVzZWRcIiAoY2xpY2spPVwicGF1c2VSZWNvcmRpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBhdXNlIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHBhdXNlLXJlc3VtZVwiICpuZ0lmPVwiaXNQYXVzZWRcIiAoY2xpY2spPVwicmVzdW1lUmVjb3JkaW5nKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBwbGF5X2Fycm93IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1JlY29yZGluZ1wiIGNsYXNzPVwidGltZXItZGlzcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGdldEZvcm1hdHRlZFRpbWUoKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIE11dGUvdW5tdXRlIGluY29taW5nIGNhbGwgIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXV0ZS1pbmNvbWluZy1yb3dcIiAqbmdJZj1cImN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGwgJiYgIXNob3dLZXlwYWRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXV0ZS1pbmNvbWluZy1sYWJlbFwiPk11dGUgaW5jb21pbmcgY2FsbHM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzd2l0Y2ggbWItMFwiIHRpdGxlPVwiU2lsZW5jZSB0aGUgcmluZ3RvbmUgb2YgbmV3IGluY29taW5nIGNhbGxzIGR1cmluZyB0aGlzIGNhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwidHdpbGlvU2VydmljZS5pc0luY29taW5nTXV0ZWRcIiAoY2hhbmdlKT1cInRvZ2dsZU11dGVJbmNvbWluZ0NhbGwoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3dpdGNoLXNsaWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0tleXBhZFwiIGNsYXNzPVwic2VuZERpZ2l0IG10LTJcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJjYWxsLWlucHV0c1wiIGlkPVwiY2FsbC1pbnB1dFwiIFsobmdNb2RlbCldPVwiY2FsbElucHV0XCIgKGtleXVwKT1cIm9uQ2FsbElucHV0RW50ZXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGlucHV0LWNsZWFyLWJ0blwiICpuZ0lmPVwiY2FsbElucHV0XCIgKGNsaWNrKT1cImNsZWFySW5wdXRzKClcIj5jbG9zZV9zbWFsbDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tY29udGFpbmVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiAqbmdJZj1cInNob3dLZXlwYWRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrZXktYnRuXCIgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlwYWRWYWxcIiAoY2xpY2spPVwib25DYWxsSW5wdXRzKGtleS5udW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3trZXkubnVtfX1cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1hbGJoYWJldHNcIj57e2tleS50ZXh0ID8ga2V5LnRleHQgOiAnJm5ic3A7J319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZi1hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2lyY2xlLWJ0blwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNNdXRlfVwiIChjbGljayk9XCJ0b2dnbGVNdXRlKHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHt7IGlzTXV0ZSA/ICdtaWNfb2ZmJyA6ICdtaWMnIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNpcmNsZS1idG5cIiAoY2xpY2spPVwidG9nZ2xlS2V5cGFkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gdHJhbnNpdGlvbl9kaXNzb2x2ZSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjaXJjbGUtYnRuXCIgKGNsaWNrKT1cInRvZ2dsZUNvbnRhY3RzUGFuZWwoY3VycmVudENhbGwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGdyb3Vwc18yIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2lyY2xlLWJ0biBkYW5nZXJcIiAoY2xpY2spPVwiZW5kQ29uZmVyZW5lY2VDYWxsKGN1cnJlbnRDb25mZXJlbmNlQ2FsbD8ucGFydGljaXBhbnRzWzBdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsX2VuZCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3YXZlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwid2F2ZXNcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcclxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDI0IDE1MCAyOFwiIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCIgc2hhcGUtcmVuZGVyaW5nPVwiYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9XCJnZW50bGUtd2F2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNLTE2MCA0NGMzMCAwIDU4LTE4IDg4LTE4cyA1OCAxOCA4OCAxOCA1OC0xOCA4OC0xOCA1OCAxOCA4OCAxOCB2NDRoLTM1MnpcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgPGcgY2xhc3M9XCJwYXJhbGxheFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiIHg9XCI0OFwiIHk9XCIwXCIgZmlsbD1cInJnYmEoMjU1LDI1NSwyNTUsMC43KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCIgeD1cIjQ4XCIgeT1cIjNcIiBmaWxsPVwicmdiYSgyNTUsMjU1LDI1NSwwLjUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIiB4PVwiNDhcIiB5PVwiN1wiIGZpbGw9XCIjZmZmXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEluY29taW5nIGNhbGwgdXNlciBkZXRhaWxzIHNob3duIGluIG1vZGVsIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhbGwtY29udGFpbmVyLW1vZGVsIHAtMyB0ZXh0LXdoaXRlIG1vZGVsLWNvbnRlbnQgY2FsbC1jb250YWluZXJcIiAqbmdJZj1cImlzQ2xpY2tFeHBhbmRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtaW5mby1wYW5lbC1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIiAqbmdJZj1cImN1cnJlbnRDb25mZXJlbmNlQ2FsbD8uY29uZmVyZW5jZUlkICE9IHNlbGVjdGVkVXNlckluZm8/LmNvbmZlcmVuY2VJZCAmJiBuZXdJbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgPHA+PC9wPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGRpYWwtY2xvc2UtYnRuIFwiIChjbGljayk9XCJvbkNsb3NlQzJDSW5mb1BhbmVsKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgd2lkdGg9XCIyNHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNmZmZmZmZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJtMjU2LTIwMC01Ni01NiAyMjQtMjI0LTIyNC0yMjQgNTYtNTYgMjI0IDIyNCAyMjQtMjI0IDU2IDU2LTIyNCAyMjQgMjI0IDIyNC01NiA1Ni0yMjQtMjI0LTIyNCAyMjRaXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgdXNlci1pbmZvLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG15LTNcIj5cclxuICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInRleHQtd2hpdGVcIj5DMkMgQ0FMTCA6IHt7c2VsZWN0ZWRVc2VySW5mbz8uc291cmNlTmFtZX19IHwge3tzZWxlY3RlZFVzZXJJbmZvPy5wb2ludE5hbWV9fTwvaDM+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwidGV4dC13aGl0ZSBtYi0xXCI+TmFtZTo8L2g1PlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwidGV4dC13aGl0ZSB1c2VyTmFtZVwiPnt7c2VsZWN0ZWRVc2VySW5mbz8ubmFtZX19PC9oND5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmLTEzXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMVwiPkV4dGVuc2lvbjo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTJcIj57e3NlbGVjdGVkVXNlckluZm8/LmV4dGVuc2lvbn19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTFcIj5OdW1iZXI6PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj57e3NlbGVjdGVkVXNlckluZm8/Lm51bWJlcn19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTJcIj5FbWFpbDogPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3tzZWxlY3RlZFVzZXJJbmZvPy5lbWFpbH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtMlwiPlN1YmplY3Q6PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC0yIHN1YmplY3QtdGV4dFwiIHRpdGxlPVwie3tzZWxlY3RlZFVzZXJJbmZvPy5zdWJqZWN0fX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VsZWN0ZWRVc2VySW5mbz8uc3ViamVjdH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtMiBtYi0xXCI+SW1hZ2U6PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFVzZXJJbmZvPy5pbWFnZSAmJiBzZWxlY3RlZFVzZXJJbmZvPy5pbWFnZSAhPT0gJy0nOyBlbHNlIG5vSW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cInt7c2VsZWN0ZWRVc2VySW5mbz8uaW1hZ2V9fVwiIGFsdD1cIlwiIHdpZHRoPVwiMTUwXCIgY2xhc3M9XCJtbC0yXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ltYWdlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMlwiPk5vIEltYWdlIEF2YWlsYWJsZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xXCI+TWVzc2FnZTo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNvbnRhaW5lclwiIFtjbGFzcy5leHBhbmRlZF09XCJpc0V4cGFuZGVkXCI+e3tzZWxlY3RlZFVzZXJJbmZvPy5tZXNzYWdlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidG9nZ2xlLWJ0blwiICpuZ0lmPVwic2hvd0J1dHRvblwiIChjbGljayk9XCJ0b2dnbGVUZXh0KClcIj57eyBpc0V4cGFuZGVkID8gJ1NlZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlc3MnIDogJ1NlZSBtb3JlJyB9fTwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBjb250YWN0IGxpc3QgcGFuZWwgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtcGFuZWxcIiAqbmdJZj1cInNob3dDb250YWN0c1BhbmVsICYmICFzaG93TmV3Q2FsbExvYWRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1sb2FkZXItb3ZlcmxheSBwLTMgdGV4dC1jZW50ZXJcIiAqbmdJZj1cImlzUGFydGljaXBhbnRQYW5lbExvYWRpbmdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtc2Vjb25kYXJ5XCIgcm9sZT1cInN0YXR1c1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+TG9hZGluZy4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMlwiPjwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXJ0aWNpcGFudC1saXN0LXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZENvbmZOYW1lIHx8ICdDb25mZXJlbmNlJyB9fSBQYXJ0aWNpcGFudHNcclxuICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvdGFsUGFydGljaXBhbnRzQ291bnQgPCAzOyBlbHNlIGNvbmZIZWFkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQ2FsbCBQYXJ0aWNpcGFudHNcclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjb25mSGVhZGluZz5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+IC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgPHA+PC9wPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGRpYWwtY2xvc2UtYnRuXCIgKGNsaWNrKT1cInRvZ2dsZUNvbnRhY3RzUGFuZWwoe30sIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDAwMDAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwibTI1Ni0yMDAtNTYtNTYgMjI0LTIyNC0yMjQtMjI0IDU2LTU2IDIyNCAyMjQgMjI0LTIyNCA1NiA1Ni0yMjQgMjI0IDIyNCAyMjQtNTYgNTYtMjI0LTIyNC0yMjQgMjI0WlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFNFQVJDSCBJTlBVVCAodmlzaWJsZSB3aGVuIGlzU2VhcmNoVmlzaWJsZSA9IHRydWUpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYmFyIHAtMyBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkFkZCBhIHBhcnRpY2lwYW50IGJ5IE5hbWUgb3IgTnVtYmVyXCIgdGl0bGU9XCJBZGQgYSBwYXJ0aWNpcGFudCBieSBOYW1lIG9yIE51bWJlclwiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIChpbnB1dCk9XCJhcHBseUZpbHRlcigpXCIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWN0cy1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGZpbHRlcmVkTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWl0ZW1cIiAqbmdJZj1cInNlYXJjaFRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbnRhY3QtYXZhdGFyXCIgW3NyY109XCJjPy5pbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCI+e3tjPy5maXJzdE5hbWV9fSB7e2M/Lm1pZGRsZU5hbWV9fSB7e2M/Lmxhc3ROYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LXRpdGxlXCI+e3sgKGM/Lm51bWJlcnNMaXN0ICYmIGM/Lm51bWJlcnNMaXN0WzBdPy5udW1iZXIpIH19e3sgYz8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlckxhYmVsID8gJyAoJyArIGMubnVtYmVyc0xpc3RbMF0ubnVtYmVyTGFiZWwgKyAnKScgOiAnJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRhY3QtY2FsbC1idG4gY29udGFjdC1hZGQtYnRuIG1yLTJcIiAoY2xpY2spPVwiY2FsbENvbnRhY3QoYylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhYz8uSXNDb25uZWN0ZWRcIiB0aXRsZT1cIkFkZCB0byBjYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gYWRkIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250YWN0LWNhbGwtYnRuXCIgKGNsaWNrKT1cIkNhbGxUb1Vuc2F2ZWROdW1iZXIoYz8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlciwgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhYz8uSXNDb25uZWN0ZWRcIiB0aXRsZT1cIk5ldyBDYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpbHRlcmVkTGlzdC5sZW5ndGggJiYgaXNEaXJlY3RDYWxsT3B0aW9uU2hvdyAmJiBzZWFyY2hUZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29udGFjdC1hdmF0YXJcIiBbc3JjXT1cIidhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LXRpdGxlXCI+e3sgc2VhcmNoVGV4dCB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRhY3QtY2FsbC1idG4gY29udGFjdC1hZGQtYnRuIG1yLTJcIiAoY2xpY2spPVwiQ2FsbFRvVW5zYXZlZE51bWJlcihzZWFyY2hUZXh0KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkFkZCB0byBjYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gYWRkIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250YWN0LWNhbGwtYnRuXCIgKGNsaWNrKT1cIkNhbGxUb1Vuc2F2ZWROdW1iZXIoc2VhcmNoVGV4dCwgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJOZXcgQ2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGwgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtbGlzdFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMCB0aXRsZVwiPkFjdGl2ZSBwYXJ0aWNpcGFudHMgKHt7IGFjdGl2ZVBhcnRpY2lwYW50c0NvdW50IH19KTwvaDU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aHIgY2xhc3M9XCJtYi0yIG10LTFcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBmaWx0ZXJlZFBhcnRpY2lwZW50TGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaXRlbVwiICpuZ0lmPVwiIWM/LmlzTGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjb250YWN0LWF2YXRhclwiICpuZ0lmPVwiIWM/LmNsaWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiYz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LnRvSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnIDogYz8uZnJvbUltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbnRhY3QtYXZhdGFyXCIgKm5nSWY9XCJjPy5jbGllbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy5mcm9tSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnIDogYz8udG9JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtbmFtZVwiICpuZ0lmPVwiIWM/LmNsaWVudFwiPnt7Yz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LnRvTmFtZSB8fCAnVW5rbm93bicgOiBjPy5mcm9tTmFtZSB8fCAnVW5rbm93bid9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtdGl0bGVcIiAqbmdJZj1cIiFjPy5jbGllbnRcIj57eyBjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8udG8gfHwgJ1Vua25vd24nIDogYz8uZnJvbSB8fCAnVW5rbm93bid9fTwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtbmFtZVwiICpuZ0lmPVwiYz8uY2xpZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzU2VsZk51bWJlcihjKSBlbHNlIHNlbGZOdW1iZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2M/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy5mcm9tTmFtZSB8fCAnVW5rbm93bicgOiBjPy50b05hbWUgfHwgJ1Vua25vd24nfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VsZk51bWJlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Zb3U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtdGl0bGVcIiAqbmdJZj1cImM/LmNsaWVudFwiPnt7IGM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy5mcm9tIHx8ICdVbmtub3duJyA6IGM/LnRvIHx8ICdVbmtub3duJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiAqbmdJZj1cImM/Lmhvc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLWxhYmVsXCI+T3JnYW5pemVyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYz8uam9pbmVkICYmICFjPy5ob3N0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25uZWN0aW5nLXdyYXBwZXIgbXItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyaW5naW5nLXRleHRcIj5SaW5naW5nPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3RzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ljwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjPy5ob3N0ICYmIGM/LmlzSG9sZCAmJiAhKGRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoYz8uZnJvbSkgfHwgKGRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoYz8udG8pICYmIGM/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29ubmVjdGluZy13cmFwcGVyIG1yLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib25Ib2xkLXRleHRcIj5PbiBIb2xkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWM/LmpvaW5lZCB8fCBjPy5ob3N0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtaWMtYnRuIG1yLTJcIiBbZGlzYWJsZWRdPVwiYz8uaXNIb2xkXCIgKGNsaWNrKT1cIm9uTXV0ZVVzZXIoYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiYz8uaXNNdXRlXCI+IG1pY19vZmYgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCIhYz8uaXNNdXRlXCI+IG1pYyA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmVyZW5jZS1ob2xkLWNvbnRhY3QgbXItMlwiIFtuZ0NsYXNzXT1cInsgJ29uLWhvbGQnOiBjPy5pc0hvbGQgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ib2xkQ2FsbChjKVwiICpuZ0lmPVwiIWM/Lmhvc3QgfHwgKGM/Lmhvc3QgJiYgKGRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoYz8uZnJvbSkgfHwgKGRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoYz8udG8pICYmIGM/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcpKSlcIiBbZGlzYWJsZWRdPVwiaXNIb2xkQnRuRGlzYWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhYz8uaXNIb2xkXCIgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgW3RpdGxlXT1cIidIb2xkJ1wiPiBwaG9uZV9wYXVzZWQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImM/LmlzSG9sZFwiIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIFt0aXRsZV09XCInUmVzdW1lJ1wiPiByZXN1bWUgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmVyZW5jZS1jb250YWN0XCIgKGNsaWNrKT1cImNvbmZpcm1MZWF2ZVBhcnRpY2lwYW50KGMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhYz8uaG9zdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiB0aXRsZT1cIkNhbGwgRW5kXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmVyZW5jZS1jb250YWN0XCIgKGNsaWNrKT1cImVuZENvbmZlcmVuZWNlQ2FsbChjKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYz8uaG9zdCAmJiAoZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhjPy5mcm9tKSB8fCAoZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhjPy50bykgJiYgYz8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJykpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHRpdGxlPVwiQ2FsbCBFbmRcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8aHIgY2xhc3M9XCJtLTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgcHgtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMCB0aXRsZVwiPlBhcnRpY2lwYW50IGFkZGVkIHRvIHRoZSBjYWxsPC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxociBjbGFzcz1cIm1iLTIgbXQtMVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGZpbHRlcmVkUGFydGljaXBlbnRMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pdGVtXCIgKm5nSWY9XCJjPy5pc0xlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29udGFjdC1hdmF0YXJcIiAqbmdJZj1cIiFjPy5jbGllbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy50b0ltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyA6IGM/LmZyb21JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjb250YWN0LWF2YXRhclwiICpuZ0lmPVwiYz8uY2xpZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8uZnJvbUltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyA6IGM/LnRvSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LW5hbWVcIiAqbmdJZj1cIiFjPy5jbGllbnRcIj57e2M/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy50b05hbWUgfHwgJ1Vua25vd24nIDogYz8uZnJvbU5hbWUgfHwgJ1Vua25vd24nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiICpuZ0lmPVwiIWM/LmNsaWVudFwiPnt7IGM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy50byB8fCAnVW5rbm93bicgOiBjPy5mcm9tIHx8ICdVbmtub3duJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LW5hbWVcIiAqbmdJZj1cImM/LmNsaWVudFwiPnt7Yz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb21OYW1lIHx8ICdVbmtub3duJyA6IGM/LnRvTmFtZSB8fCAnVW5rbm93bid9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtdGl0bGVcIiAqbmdJZj1cImM/LmNsaWVudFwiPnt7IGM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy5mcm9tIHx8ICdVbmtub3duJyA6IGM/LnRvIHx8ICdVbmtub3duJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiAqbmdJZj1cImM/Lmhvc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLWxhYmVsXCI+T3JnYW5pemVyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29ubmVjdGluZy13cmFwcGVyXCIgKm5nSWY9XCJjPy5qb2luZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyaW5naW5nLXRleHRcIj5SaW5naW5nPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ljwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25mZXJlbmNlLWNvbnRhY3RcIiAoY2xpY2spPVwib25FbmRDYWxsKGMsIGZhbHNlLCB0cnVlKVwiICpuZ0lmPVwiIWM/Lmhvc3QgJiYgYz8uam9pbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHRpdGxlPVwiQ2FsbCBFbmRcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250YWN0LWNhbGwtYnRuIGNvbnRhY3QtYWRkLWJ0blwiICpuZ0lmPVwiIWM/LmNsaWVudCAmJiAhYz8uam9pbmVkICYmICFjPy5idXNpbmVzc051bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJDYWxsVG9VbnNhdmVkTnVtYmVyKGMuZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LnRvIDogYz8uZnJvbSwgZmFsc2UsIHsgc2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlIH0sIGMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBhZGQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+UmVqb2luPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250YWN0LWNhbGwtYnRuIGNvbnRhY3QtYWRkLWJ0blwiICpuZ0lmPVwiYz8uY2xpZW50ICYmICFjPy5qb2luZWQgJiYgIWM/LmJ1c2luZXNzTnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIkNhbGxUb1Vuc2F2ZWROdW1iZXIoYy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8uZnJvbSA6IGM/LnRvLCBmYWxzZSwgeyBza2lwRHVwbGljYXRlQ2hlY2s6IHRydWUgfSwgYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGFkZCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5SZWpvaW48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIENvbmZlcmVuY2UgV2FybmluZyBNb2RhbCAtLT5cclxuPGRpdiBjbGFzcz1cImN1c3RvbS1tb2RhbFwiICpuZ0lmPVwic2hvd0NvbmZlcmVuY2VXYXJuaW5nTW9kYWxcIj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudCB3YXJuaW5nLW1vZGFsXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwid2FybmluZy1pY29uXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPndhcm5pbmc8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxoMz5Db25mZXJlbmNlIENhbGwgV2FybmluZzwvaDM+XHJcbiAgICA8cD5cclxuICAgICAgU3RhcnRpbmcgYSBuZXcgY2FsbCB3aWxsIHB1dCB0aGUgY3VycmVudCBjb25mZXJlbmNlIG9uIGhvbGRcclxuICAgICAgYW5kIGNhbm5vdCBiZSBtZXJnZWQgbGF0ZXIuXHJcbiAgICA8L3A+XHJcbiAgICA8ZGl2IGNsYXNzPVwid2FybmluZy1hY3Rpb25zXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnRuXCIgKGNsaWNrKT1cImNhbmNlbE5ld0NhbGwoKVwiPlxyXG4gICAgICAgIENhbmNlbFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInByb2NlZWQtYnRuXCIgKGNsaWNrKT1cImNvbmZpcm1OZXdDYWxsKClcIj5cclxuICAgICAgICBQcm9jZWVkXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJtaW4tY2FsbC1jb250YWluZXJcIiAqbmdJZj1cImlzTWluaW1pc2VkXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZnVsbHNjcmVlblwiIChjbGljayk9XCJtYXhpbWlzZURpYWxwYWQoKVwiPiBvcGVuX2luX2Z1bGwgPC9zcGFuPlxyXG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IHdpZHRoOiAxMDAlXCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi1jYWxsLWFuaW1hdGlvblwiIGlkPVwiY2FsbC1hdmF0YXJcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJtaW4tYXZhdGFyLWltZ1wiIFtzcmNdPVwiY2FsbERhdGEuaW1nXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi1jYWxsZXJEZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7Y2FsbERhdGEubmFtZX19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luOiAwXCI+e3tjYWxsRGF0YS5kaXNwbGF5TnVtID8gY2FsbERhdGEuZGlzcGxheU51bSA6IGNhbGxEYXRhLnBob25lIH19PC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1pbi1idG4tY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi10aW1lclwiPnt7dGltZXJ9fTwvZGl2PlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtaW4tY2FsbC1zZWMtYnRuXCIgKGNsaWNrKT1cInRvZ2dsZU11dGUoKVwiIFtkaXNhYmxlZF09XCJkaXNiYWxlRW5kQ2FsbEJ0blwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAqbmdJZj1cImlzTXV0ZVwiPiBtaWNfb2ZmIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCIhaXNNdXRlXCI+IG1pYyA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1pbi1jYWxsLWJ0biBlbmQtY2FsbC1idG5cIiBbZGlzYWJsZWRdPVwiZGlzYmFsZUVuZENhbGxCdG5cIiAoY2xpY2spPVwiZW5kQ2FsbCgpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsX2VuZCA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbjwhLS0gQ2FsbCBEaXNjb25uZWN0IE1vZGFsIC0tPlxyXG48ZGl2IGNsYXNzPVwiY3VzdG9tLW1vZGFsXCIgKm5nSWY9XCJzaG93RGlzY29ubmVjdE1vZGFsXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudCBwLTNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtaGVhZGVyIHAtMCBwYi0yXCI+XHJcbiAgICAgICAgICAgIDxoNCBjbGFzcz1cInRpdGxlIG1iLTBcIj57e3NlbGVjdGVkQ29uZj8uY29uTmFtZSB8fCAnQ2FsbCd9fSBEaXNjb25uZWN0PC9oND5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGRpYWwtY2xvc2UtYnRuXCIgKGNsaWNrKT1cInNob3dEaXNjb25uZWN0TW9kYWwgPSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjI0cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzAwMDAwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIm0yNTYtMjAwLTU2LTU2IDIyNC0yMjQtMjI0LTIyNCA1Ni01NiAyMjQgMjI0IDIyNC0yMjQgNTYgNTYtMjI0IDIyNCAyMjQgMjI0LTU2IDU2LTIyNC0yMjQtMjI0IDIyNFpcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFudC1ib2R5IG1iLTJcIj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICBFeGl0aW5nIHRoaXMgY2FsbCB3aWxsIG5vdCBlbmQgdGhlIGNvbmZlcmVuY2UuIFRoZSBzZXNzaW9uIHdpbGwgY29udGludWUsIGFuZCBjaGFyZ2VzIHdpbGwgaW5jdXIgdG9cclxuICAgICAgICAgICAgICAgIHlvdXJcclxuICAgICAgICAgICAgICAgIGFjY291bnQuXHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN0YXJ0IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMCBtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwiaXNSZWFzb25DaGVja2VkXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25SZWFzb25DaGVja0NoYW5nZWQoJGV2ZW50KVwiIGNsYXNzPVwibWUtMlwiLz5cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItMjRoclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gSG91ciBwaWNrZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS10aW1lLXNlbGVjdFwiIFtjbGFzcy5kaXNhYmxlZC1waWNrZXJdPVwiIWlzUmVhc29uQ2hlY2tlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXRpbWUtZGlzcGxheVwiIChjbGljayk9XCJpc1JlYXNvbkNoZWNrZWQgJiYgdG9nZ2xlSG91ckRyb3Bkb3duKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxlYXZlSG91ciB8fCAnSEgnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpY2tlci1hcnJvd1wiPiYjOTY2MDs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXRpbWUtb3B0aW9uc1wiICpuZ0lmPVwic2hvd0hvdXJEcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS10aW1lLW9wdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBoIG9mIGhvdXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImxlYXZlSG91ciA9PT0gaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RIb3VyKGgpXCI+e3sgaCB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWUtc2VwXCI+Ojwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIE1pbnV0ZSBwaWNrZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS10aW1lLXNlbGVjdFwiIFtjbGFzcy5kaXNhYmxlZC1waWNrZXJdPVwiIWlzUmVhc29uQ2hlY2tlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXRpbWUtZGlzcGxheVwiIChjbGljayk9XCJpc1JlYXNvbkNoZWNrZWQgJiYgdG9nZ2xlTWludXRlRHJvcGRvd24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbGVhdmVNaW51dGUgfHwgJ01NJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWNrZXItYXJyb3dcIj4mIzk2NjA7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS10aW1lLW9wdGlvbnNcIiAqbmdJZj1cInNob3dNaW51dGVEcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS10aW1lLW9wdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtIG9mIG1pbnV0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwibGVhdmVNaW51dGUgPT09IG1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TWludXRlKG0pXCI+e3sgbSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBlbmQtYnRuXCIgKGNsaWNrKT1cImxlYXZlQ29uZmVyZW5jZSgpXCIgW2Rpc2FibGVkXT1cImlzUmVhc29uQ2hlY2tlZCAmJiAoIWxlYXZlSG91ciB8fCAhbGVhdmVNaW51dGUpXCI+XHJcbiAgICAgICAgICAgICAgICBMZWF2ZVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBlbmQtYnRuXCIgKGNsaWNrKT1cImVuZENvbmZlcmVuY2UoKVwiICpuZ0lmPVwic2hvd0VuZEFsbEJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgRW5kIEFsbFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cImN1c3RvbS1tb2RhbFwiICpuZ0lmPVwic2hvd0xlYXZlQ29uZmlybWF0aW9uTW9kYWxcIj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudCB3YXJuaW5nLW1vZGFsXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwid2FybmluZy1pY29uXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPmluZm88L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxoMz5MZWF2ZSBDb25mZXJlbmNlPC9oMz5cclxuICAgIDxwPlxyXG4gICAgICBZb3UgYXJlIGFib3V0IHRvIGxlYXZlIDxzdHJvbmc+e3sgbGVhdmVDb25mQ29uZmVyZW5jZU5hbWUgfX08L3N0cm9uZz4uIFxyXG4gICAgICBBcmUgeW91IHN1cmU/XHJcbiAgICA8L3A+XHJcbiAgICA8ZGl2IGNsYXNzPVwid2FybmluZy1hY3Rpb25zXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnRuXCIgKGNsaWNrKT1cImNhbmNlbExlYXZlKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInByb2NlZWQtYnRuXCIgKGNsaWNrKT1cImNvbmZpcm1MZWF2ZSgpXCI+TGVhdmU8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=