@vgroup/dialbox 0.7.67 → 0.7.69

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.
@@ -1340,7 +1340,7 @@ export class CallProgressComponent {
1340
1340
  console.log('1096');
1341
1341
  this.endCallEvent.emit(data);
1342
1342
  this.cdr.detectChanges();
1343
- // swal("Error", res?.message?.join?.("<br/>") || 'Internal Server Error', "error");
1343
+ swal("Error", res?.message?.join?.("<br/>") || 'Internal Server Error', "error");
1344
1344
  }
1345
1345
  setTimeout(() => {
1346
1346
  this.isUnholdConferenceCall = false;
@@ -2271,4 +2271,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
2271
2271
  }], outgoingContactName: [{
2272
2272
  type: Input
2273
2273
  }] } });
2274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvY29tcG9uZW50cy9jYWxsLXByb2dyZXNzL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGlhbGJveC9zcmMvbGliL2NvbXBvbmVudHMvY2FsbC1wcm9ncmVzcy9jYWxsLXByb2dyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFRLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQW1COUMsTUFBTSxPQUFPLHFCQUFxQjtJQTJIaEMsWUFBb0IsZ0JBQWtDLEVBQVUsR0FBc0IsRUFDN0UsYUFBNEIsRUFDM0IsU0FBMkIsRUFDM0IsMEJBQXNEO1FBSDVDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUM3RSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQiwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO1FBMUh2RCx5QkFBb0IsR0FBUSxFQUFFLENBQUM7UUFDL0IsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFDdkIsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FB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Q0csYUFBYTtzQkFBdEIsTUFBTTtnQkFrQkcscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQWlGRSxtQkFBbUI7c0JBQTNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDYWxsLCBEZXZpY2UgfSBmcm9tICdAdHdpbGlvL3ZvaWNlLXNkayc7XHJcbmltcG9ydCB7IEV4dGVuc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2V4dGVuc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHdpbGlvU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvdHdpbGlvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudHMnO1xyXG5pbXBvcnQgc3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XHJcbmltcG9ydCB7IGtleXBhZCB9IGZyb20gJy4uLy4uLy4uL2tleXBhZCc7XHJcbmltcG9ydCB7IGludGVydmFsLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2luY29tZWluZy1jYWxsLXNvY2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSXBBZGRyZXNzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvaXAtYWRkcmVzcy5zZXJ2aWNlJztcclxuaW50ZXJmYWNlIENhbGxEZXRhaWxzIHtcclxuICBjYWxsU2lkOiBzdHJpbmc7XHJcbiAgY2FsbFN0YXR1czogc3RyaW5nO1xyXG59XHJcbmludGVyZmFjZSBDYWxsU3RhdHVzUmVzcG9uc2Uge1xyXG4gIGNhbGxEZXRhaWxzOiBDYWxsRGV0YWlscztcclxuICByZXNwb25zZTogc3RyaW5nO1xyXG4gIGVycm9yVHlwZTogbnVtYmVyO1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxuICBzdGF0dXM6IG51bWJlcjtcclxufVxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jYWxsLXByb2dyZXNzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENhbGxQcm9ncmVzc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSBjYWxsRGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkQ2FsbGVySWQ6IGFueTtcclxuICBASW5wdXQoKSBuZXdJbmNvbWluZ0NhbGxEYXRhPzogQ2FsbDsgLy9cclxuICBASW5wdXQoKSBuZXdJbmNvbWluZ0NhbGxzTGlzdDogYW55ID0gW107XHJcbiAgQElucHV0KCkgY2FsbGVySWRMaXN0OiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSBuZXdDYWxsQ29uZmVyZW5jZTogYW55ID0ge307XHJcbiAgQElucHV0KCkgbWlzc0NhbGxJbmZvOiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSB1c2VyU2V0dGluZ0luZm86IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGRldmljZUlkOiBhbnk7XHJcbiAgQElucHV0KCkgY2FsbEFjdGlvbjogYW55O1xyXG4gIEBJbnB1dCgpIGNvbmZlcmVuY2VDYWxsSW5mbzogYW55O1xyXG4gIEBJbnB1dCgpIGluY29taW5nRnJvbUltYWdlOnN0cmluZyA9ICcnXHJcbiAgdXNlcklkOiBhbnk7XHJcbiAgQE91dHB1dCgpIGVuZENhbGxFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBpbmNvbWluZ0NhbGxzTmV3SW5mbzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsvL1xyXG4gIEBPdXRwdXQoKSBtaW5pbWlzZUV2ZW50OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgZGV2aWNlPzogRGV2aWNlO1xyXG4gIGNhbGwhOiBDYWxsIHwgYW55O1xyXG4gIHNob3dSaW5nQW5pbWF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdGltZXI6IHN0cmluZyA9ICcwMDowMCc7XHJcbiAgaW50ZXJ2YWxJZDogYW55O1xyXG4gIHNob3dLZXlwYWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBrZXlwYWRWYWwgPSBrZXlwYWQ7XHJcbiAgY2FsbElucHV0OiBzdHJpbmcgPSAnJztcclxuICBpc011dGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwZW5kaW5nTXV0ZVVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlOyBcclxuICBpbnRlbmRlZE11dGVTdGF0ZTogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xyXG4gIGRpc2JhbGVFbmRDYWxsQnRuOiBib29sZWFuID0gdHJ1ZTtcclxuICBzaG93Q2xlYXJCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0NvbGxvcHMgPSBmYWxzZTtcclxuICBjdXJyZW50Q2FsbDogYW55O1xyXG4gIGlzQ29uZmVyZW5jZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzT3V0Z29pbmdDYWxsOiBib29sZWFuID0gdHJ1ZTtcclxuICBAT3V0cHV0KCkgaW5jb21pbmdDYWxsSW5pdGlhdGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIGlzTG9hZGVyc2hvd246IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgZW5kSW5jb21pbmdDYWxsRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLy8gUmVjb3JkaW5nIHZhcmlhYmxlc1xyXG4gIGNhbGxTaWQ6IGFueTtcclxuICBpc1JlY29yZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzUGF1c2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdGltZXJTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcbiAgdGltZUVsYXBzZWQgPSAwOyAvLyBpbiBzZWNvbmRzXHJcbiAgcmVjb3JkQ2FsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGluY29taW5nQ2FsbFNpZDogYW55O1xyXG4gIGNhbGxTdGF0dXM6IHN0cmluZyA9ICdyaW5naW5nJzsgICAgLy9cclxuICBpbmNvbWluZ1JlY29yZENhbGw/OiBhbnk7XHJcbiAgc2VsZWN0ZWRJbmNvbWluZ0NhbGw6IGFueTtcclxuICBzaG93Q29udGFjdHNQYW5lbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzQWRkUmVtb3ZlUGFydGljaXBhbnQ6IGJvb2xlYW4gPSBmYWxzZTsgICAvL1xyXG4gIGlzQ29uY3VycmVudEluY29taW5nOiBib29sZWFuID0gZmFsc2U7ICAgLy9cclxuICBoZWxkQ2FsbD86IENhbGw7ICAvL1xyXG4gIGlzQ2FsbE9uSG9sZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNvbnRhY3RzOiBhbnlbXSA9IFtdO1xyXG4gIGN1cnJlbnRDYWxsTGlzdDogYW55W10gPSBbXTtcclxuICBjb25mZXJlbmNlSWQ6IGFueTtcclxuICBhbGxQYXJ0aWNpcGVudExpc3Q6IGFueTtcclxuICBpc0NsaWNrRXhwYW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNDYWxsSW5Qcm9ncmVzcyE6IGJvb2xlYW47XHJcbiAgaXNDdXJyZW50SW5jb21pbmdDYWxsTGlzdDogYW55ID0gW107XHJcbiAgaXNDb25mZXJlbmNlQ2FsbEhvbGQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWxlY3RlZFVzZXJJbmZvOiBhbnk7XHJcbiAgaXNTZWFyY2hWaXNpYmxlID0gZmFsc2U7XHJcbiAgaXNFeHBhbmRlZCA9IGZhbHNlO1xyXG4gIHNlYXJjaFRleHQgPSAnJztcclxuICBmaWx0ZXJlZExpc3Q6IGFueSA9IFtdO1xyXG4gIGZpbHRlcmVkUGFydGljaXBlbnRMaXN0OiBhbnk7XHJcbiAgc2hvd0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzUmluZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzRGlyZWN0Q2FsbE9wdGlvblNob3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkaWFsQWxlcnQgPSB7XHJcbiAgICBtc2c6ICcnLFxyXG4gICAgc2hvdzogZmFsc2VcclxuICB9XHJcbiAgbGVmdFBhcnRpY2lwZW50OiBhbnkgPSB7fTtcclxuICBjb25mZXJlbmNlQ2FsbExpc3Q6IGFueVtdID0gW107XHJcbiAgaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNDb25uZWN0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaG9zdG51bWJlcjogYW55O1xyXG4gIGlzTmV3QWRkZWRDYWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGV2aWNlTnVtYmVyTGlzdDogYW55ID0gW107XHJcbiAgb3VyTnVtYmVySW5mbzogYW55ID0ge307XHJcbiAgY3VycmVudENvbmZlcmVuY2VDYWxsOiBhbnkgPSB7fTtcclxuICBpc1JlYXNvbkNoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0FsbEFjY2VwdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbGVhdmVSZWFzb246IHN0cmluZyA9ICcnO1xyXG4gIC8vIDI0LWhvdXIgdGltZSBwaWNrZXJcclxuICBsZWF2ZUhvdXI6IHN0cmluZyA9ICcnO1xyXG4gIGxlYXZlTWludXRlOiBzdHJpbmcgPSAnJztcclxuICBob3Vyczogc3RyaW5nW10gPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNCB9LCAoXywgaSkgPT4gaS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykpO1xyXG4gIG1pbnV0ZXM6IHN0cmluZ1tdID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogNjAgfSwgKF8sIGkpID0+IGkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpKTtcclxuICBzaG93SG91ckRyb3Bkb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd01pbnV0ZURyb3Bkb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRDb25mOiBhbnk7XHJcbiAgc2hvd0NvbmZlcmVuY2VXYXJuaW5nTW9kYWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwZW5kaW5nQ2FsbERhdGE6IGFueSA9IG51bGw7XHJcbiAgY2FsbE51bWJlclRvYXN0ID0ge1xyXG4gICAgc2hvdzogZmFsc2UsXHJcbiAgICB0eXBlOiAnYWxlcnQtc3VjY2VzcycsXHJcbiAgICBudW1iZXI6ICcnLFxyXG4gICAgZGlzcGxheU51bTogJydcclxuICB9O1xyXG4gIGlzVW5ob2xkQ29uZmVyZW5jZUNhbGw6IGFueTsgIC8vXHJcbiAgY29uZmVyZW5jZUNhbGxOdWxsQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgYWxsQ29uUGFydGljaXBlbnRMaXN0OiBhbnkgPSB7fTtcclxuICBjb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0OiBhbnk7XHJcbiAgcHJpdmF0ZSBhY2NlcHRlZENhbGxMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGlzSG9sZEJ0bkRpc2FibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBDMkNvbmZvTGlzdDogYW55ID0ge307XHJcbiAgcHJpdmF0ZSBsYXN0QWN0aXZlQ29uZmVyZW5jZUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHBlbmRpbmdBdXRvVW5ob2xkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRDb25mTmFtZTogYW55O1xyXG4gIHBlbmRpbmdNdXRlUGFydGljaXBhbnRzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuICBpbnRlbmRlZE11dGVTdGF0ZXM6IE1hcDxzdHJpbmcsIGJvb2xlYW4+ID0gbmV3IE1hcCgpO1xyXG4gIHNob3dOZXdDYWxsTG9hZGVyOmJvb2xlYW4gPSBmYWxzZTtcclxuICBuZXdDYWxsTG9hZGVyRGF0YTogeyBuYW1lOiBzdHJpbmc7IHBob25lOiBzdHJpbmcsIGltZz86IHN0cmluZyB9ID0geyBuYW1lOiAnJywgcGhvbmU6ICcnLCBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyB9O1xyXG4gIEBJbnB1dCgpIG91dGdvaW5nQ29udGFjdE5hbWUgPSAnJztcclxuICBzaG93TGVhdmVDb25maXJtYXRpb25Nb2RhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGxlYXZlQ29uZlBhcnRpY2lwYW50OiBhbnkgPSBudWxsO1xyXG4gIGxlYXZlQ29uZkNvbmZlcmVuY2VOYW1lOiBzdHJpbmcgPSAnJztcclxuICBpc1BhcnRpY2lwYW50UGFuZWxMb2FkaW5nID0gZmFsc2U7XHJcbiAgaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQ6IGFueTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGV4dGVuc2lvblNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyB0d2lsaW9TZXJ2aWNlOiBUd2lsaW9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpcFNlcnZpY2U6IElwQWRkcmVzc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlOiBJbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5jYWxsID0gdGhpcy50d2lsaW9TZXJ2aWNlLmNhbGw7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIFN1YnNjcmliZSB0byBpbmNvbWluZyBjYWxscyBmcm9tIFR3aWxpb1NlcnZpY2VcclxuICAgICB0aGlzLkdldENvbnRhY3RzTGlzdCgpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuZXh0ZW5zaW9uU2VydmljZS51c2VySWQpIHtcclxuICAgICAgICB0aGlzLnVzZXJJZCA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS51c2VySWQ7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3Vic2NyaWJpbmcgdG8gaW5jb21pbmcgY2FsbHM6JywgZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRldmljZU51bWJlckxpc3QgPSB0aGlzLmNhbGxlcklkTGlzdC5tYXAoKHJlczogYW55KSA9PiByZXMubnVtYmVyKTtcclxuICAgXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAodGhpcy51c2VySWQpIHtcclxuICAgICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnVzZXJJZCA9IHRoaXMudXNlcklkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWydjYWxsRGF0YSddKSB7XHJcbiAgICAgIGlmIChjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZT8uaXNJbmNvbWluZ0NhbGwpIHtcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LmRpc3BsYXlOdW0gfHwgY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LmZyb20pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0ge1xyXG4gICAgICAgICAgLi4uY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWUsXHJcbiAgICAgICAgICBpZDogJzEyNScsXHJcbiAgICAgICAgICBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcclxuICAgICAgICAgIGlzSG9sZDogZmFsc2UsXHJcbiAgICAgICAgICBpc011dGU6IGZhbHNlLFxyXG4gICAgICAgICAgaXNDb25mZXJlbmNlOiBmYWxzZSxcclxuICAgICAgICAgIGlzQWNjZXB0Q2FsbDogdHJ1ZSxcclxuICAgICAgICAgIGRpYWw6IHRydWUsXHJcbiAgICAgICAgICBwaG9uZTogY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LnBob25lLFxyXG4gICAgICAgICAgcGFydGljaXBhbnRJZDogJzEyMScsXHJcbiAgICAgICAgICBuYW1lOiBjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZT8ubmFtZSB8fCBjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZT8uZnJvbU5hbWUgfHwgY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LnRvTmFtZSB8fCAnJyxcclxuICAgICAgICAgIHRpbWU6IHRoaXMudGltZXIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9uQWRkTmV3Q2FsbChjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWyduZXdJbmNvbWluZ0NhbGxzTGlzdCddPy5jdXJyZW50VmFsdWU/Lmxlbmd0aCB8fCBjaGFuZ2VzWyduZXdJbmNvbWluZ0NhbGxzTGlzdCddPy5wcmV2aW91c1ZhbHVlPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5pc1BhcnRpY2lwYW50UGFuZWxMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGV2aWNlTnVtYmVyTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmRldmljZU51bWJlckxpc3QgPSB0aGlzLmNhbGxlcklkTGlzdC5tYXAoKHJlczogYW55KSA9PiByZXMubnVtYmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coJ25ld0luY29taW5nQ2FsbHNMaXN0JywgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCk7XHJcbiAgICAgICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5mb3JFYWNoKChjYWxsSW5mbzogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUlkID0gaSA9PSAwID8gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdFtpXS5jb25mZXJlbmNlSWQgOiB0aGlzLmNvbmZlcmVuY2VJZDtcclxuICAgICAgICAgIGxldCBvdXJOdW1iZXJJbmZvID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdFtpXT8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyAmJiByZXNEYXRhPy5jbGllbnQpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8udG8pICYmIHJlc0RhdGE/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgKCFyZXNEYXRhPy5idXNpbmVzc051bWJlciB8fCAocmVzRGF0YT8uYnVzaW5lc3NOdW1iZXIgJiYgY2FsbEluZm8/LnBhcnRpY2lwYW50cz8ubGVuZ3RoID09IDEpKSkpICYmICFyZXNEYXRhPy5pc0xlZnRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGlmICghdGhpcy5wZW5kaW5nTXV0ZVVwZGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzTXV0ZSA9ICFvdXJOdW1iZXJJbmZvPy5pc0hvbGQgPyBvdXJOdW1iZXJJbmZvPy5pc011dGUgOiB0aGlzLmlzTXV0ZTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAob3VyTnVtYmVySW5mbz8uaXNNdXRlID09PSB0aGlzLmludGVuZGVkTXV0ZVN0YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNNdXRlID0gb3VyTnVtYmVySW5mbz8uaXNNdXRlO1xyXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdNdXRlVXBkYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaW50ZW5kZWRNdXRlU3RhdGUgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy90aGlzLmlzTXV0ZSA9ICFvdXJOdW1iZXJJbmZvPy5pc0hvbGQgPyBvdXJOdW1iZXJJbmZvPy5pc011dGUgOiB0aGlzLmlzTXV0ZTtcclxuICAgICAgICAgIGxldCBjdXJyZW50Y2FsbFBhcnRpY2lwYW50TGlzdElEID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmlsdGVyKChyZXMpPT4gcmVzLmNvbmZlcmVuY2VJZCA9PSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0W2ldPy5jb25mZXJlbmNlSWQpLm1hcCgocmVzKT0+IHJlcy5wYXJ0aWNpcGFudElkKTtcclxuICAgICAgICAgIGxldCB1cGRhdGVkTGlzdCA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChjb25mOiBhbnkpID0+IGNvbmYuY29uZmVyZW5jZUlkID09PSBjYWxsSW5mby5jb25mZXJlbmNlSWQpLmZsYXRNYXAoKGNvbmY6IGFueSkgPT4gY29uZi5wYXJ0aWNpcGFudHMubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uaWQpKTtcclxuICAgICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3RbaV0ucGFydGljaXBhbnRzLm1hcCgocmVzOmFueSkgPT4gcmVzLmlkKTtcclxuICAgICAgICAgIGN1cnJlbnRjYWxsUGFydGljaXBhbnRMaXN0SUQuZm9yRWFjaCgocGFydGljaXBhbnRJZDphbnkpID0+IHtcclxuICAgICAgICAgICAgaWYoIXVwZGF0ZWRMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50SWQpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maWx0ZXIoKHJlc0luZm86YW55KSA9PiByZXNJbmZvPy5wYXJ0aWNpcGFudElkICE9PSBwYXJ0aWNpcGFudElkIHx8IChyZXNJbmZvPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNJbmZvPy5pc0FjY2VwdENhbGwpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgaWYgKG91ck51bWJlckluZm8/LmlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlZFBhcnRpY2lwYW50TGlzdCh0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0W2ldPy5wYXJ0aWNpcGFudHMpO1xyXG4gICAgICAgICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0W2ldLnBhcnRpY2lwYW50cy5mb3JFYWNoKGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXM/Lmhvc3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaG9zdG51bWJlciA9IHJlcztcclxuICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgIGlmKG91ck51bWJlckluZm8/LmlzQ29uZmVyZW5jZSB8fCAodGhpcy5ob3N0bnVtYmVyPy5pc0NvbmZlcmVuY2UgJiYgdGhpcy5ob3N0bnVtYmVyPy5jb25mZXJlbmNlSWQgPT0gcmVzPy5jb25mZXJlbmNlSWQpIHx8IGNhbGxJbmZvPy5wYXJ0aWNpcGFudHM/Lmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNDb25mZXJlbmNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGFjdDogYW55ID0ge31cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhY3RzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgY29udGFjdCA9IHRoaXMuY29udGFjdHMuZmluZCgocmVzRGF0YSkgPT5cclxuICAgICAgICAgICAgICAgICAgICByZXNEYXRhPy5udW1iZXJzTGlzdFswXT8ubnVtYmVyID09IChyZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHJlcz8uZnJvbSA6IHJlcz8udG8pXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDYWxsTGlzdD8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kSW5kZXgoKGl0ZW06IGFueSkgPT4gaXRlbT8uaWQgPT0gcmVzPy5pZCk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSAmJiAhcmVzLmlzTGVmdCAmJiByZXM/LnN0YXR1cyAhPSAnbm8tYW5zd2VyJyAmJiByZXM/LnN0YXR1cyAhPSAnY2FuY2VsZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAuLi5yZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICBmcm9tTmFtZTogdGhpcy5nZXROYW1lKHJlcz8uZnJvbSkgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0b05hbWU6ICB0aGlzLmdldE5hbWUocmVzPy50bykgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpbWc6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gKHJlcz8uZnJvbUltYWdlIHx8IHJlcz8uaW1nKSAgOiByZXM/LnRvSW1hZ2UgfHwgY29udGFjdD8uaW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNIb2xkOiByZXM/LmlzSG9sZCxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzQ29uZmVyZW5jZUhvbGQ6IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3Q/Lmxlbmd0aCA+IDEgPyBvdXJOdW1iZXJJbmZvPy5pc0hvbGQgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzTm90aWZpY2F0aW9uOiBjYWxsSW5mbz8uX2lzTm90aWZpY2F0aW9uICYmICF0aGlzLmdldFN0YXR1cyhyZXMpICYmIHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNNdXRlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzQ29uZmVyZW5jZTogdGhpcy5pc0NvbmZlcmVuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0FjY2VwdENhbGw6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gdGhpcy5nZXRTdGF0dXMocmVzKSA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBkaWFsOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcGhvbmU6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gcmVzPy5mcm9tIDogcmVzPy50byxcclxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxMYWJlbDogY2FsbEluZm8/LmNhbGxMYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IHJlcz8uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25mZXJlbmNlU2lkOiBjYWxsSW5mbz8uY29uZmVyZW5jZVNpZCxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHJlcz8ubmFtZSB8fCByZXM/LmZyb21OYW1lIHx8IHJlcz8udG9OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogdGhpcy5nZXRUaW1lRGlmZmVyZW5jZShyZXM/LmpvaW5lZEF0IHx8IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbnRhY3RzUGFuZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZDtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF0aGlzLnRpbWVyIHx8IHRoaXMudGltZXIgPT0gJzAwOjAwJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VGltZXIob3VyTnVtYmVySW5mbz8uam9pbmVkQXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCAhPSAtMSAmJiAocmVzPy5pc0xlZnQgfHwgcmVzPy5zdGF0dXMgPT0gJ25vLWFuc3dlcicgfHwgcmVzPy5zdGF0dXMgPT0gJ2NhbmNlbGVkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2FsbExpc3RbaW5kZXhdPy5pZCA9PSB0aGlzLmN1cnJlbnRDYWxsPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbnRhY3RzUGFuZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZDtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZClcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFRpbWVyKHRoaXMuY3VycmVudENhbGw/LmpvaW5lZEF0KTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCAhPSAtMSAmJiAhcmVzPy5pc0xlZnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydGljaXBhbnRJZCA9IHJlcy5pZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgYSBtdXRlIHVwZGF0ZSBpcyBwZW5kaW5nIGZvciB0aGlzIHBhcnRpY2lwYW50XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNNdXRlUGVuZGluZyA9IHRoaXMucGVuZGluZ011dGVQYXJ0aWNpcGFudHMuaGFzKHBhcnRpY2lwYW50SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVuZGVkTXV0ZSA9IHRoaXMuaW50ZW5kZWRNdXRlU3RhdGVzLmdldChwYXJ0aWNpcGFudElkKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdXBkYXRlZE11dGU6IGJvb2xlYW47XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTXV0ZVBlbmRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBzZXJ2ZXIgYWxyZWFkeSBjb25maXJtZWQgb3VyIGNoYW5nZSwgYWNjZXB0IGl0IGFuZCBjbGVhciBwZW5kaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmlzTXV0ZSA9PT0gaW50ZW5kZWRNdXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRNdXRlID0gcmVzLmlzTXV0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nTXV0ZVBhcnRpY2lwYW50cy5kZWxldGUocGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW50ZW5kZWRNdXRlU3RhdGVzLmRlbGV0ZShwYXJ0aWNpcGFudElkKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwga2VlcCB0aGUgY3VycmVudCBsb2NhbCB2YWx1ZSAoaWdub3JlIHRoZSBzdGFsZSBzZXJ2ZXIgc3RhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRNdXRlID0gdGhpcy5jdXJyZW50Q2FsbExpc3RbaW5kZXhdLmlzTXV0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gTm8gcGVuZGluZyBtdXRlIOKAkyB0cnVzdCB0aGUgc2VydmVyIHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkTXV0ZSA9IHJlcy5pc011dGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0W2luZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgIC4uLnJlcyxcclxuICAgICAgICAgICAgICAgICAgICAgIGZyb21OYW1lOiB0aGlzLmdldE5hbWUocmVzPy5mcm9tKSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgIHRvTmFtZTogIHRoaXMuZ2V0TmFtZShyZXM/LnRvKSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGltZzogcmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyAocmVzPy5mcm9tSW1hZ2UgfHwgcmVzPy5pbWcpIDogcmVzPy50b0ltYWdlIHx8IGNvbnRhY3Q/LmltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIixcclxuICAgICAgICAgICAgICAgICAgICAgIGlzSG9sZDogcmVzPy5pc0hvbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0NvbmZlcmVuY2VIb2xkOiB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGggPiAxID8gb3VyTnVtYmVySW5mbz8uaXNIb2xkIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc05vdGlmaWNhdGlvbjogY2FsbEluZm8/Ll9pc05vdGlmaWNhdGlvbiAmJiAhdGhpcy5nZXRTdGF0dXMocmVzKSAmJiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzTXV0ZTogdXBkYXRlZE11dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0NvbmZlcmVuY2U6IHRoaXMuaXNDb25mZXJlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY2NlcHRDYWxsOiByZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gdGhpcy5nZXRTdGF0dXMocmVzKSA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBkaWFsOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcGhvbmU6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gcmVzPy5mcm9tIDogcmVzPy50byxcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IHJlcz8uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25mZXJlbmNlU2lkOiBjYWxsSW5mbz8uY29uZmVyZW5jZVNpZCxcclxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxMYWJlbDogY2FsbEluZm8/LmNhbGxMYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHJlcz8ubmFtZSB8fCByZXM/LmZyb21OYW1lIHx8IHJlcz8udG9OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogdGhpcy5nZXRUaW1lRGlmZmVyZW5jZShyZXM/LmpvaW5lZEF0IHx8IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghcmVzLmlzTGVmdCAmJiByZXM/LnN0YXR1cyAhPSAnbm8tYW5zd2VyJyAmJiByZXM/LnN0YXR1cyAhPSAnY2FuY2VsZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlcyxcclxuICAgICAgICAgICAgICAgICAgICBmcm9tTmFtZTogdGhpcy5nZXROYW1lKHJlcz8uZnJvbSkgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9OYW1lOiAgdGhpcy5nZXROYW1lKHJlcz8udG8pIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGltZzogcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IChyZXM/LmZyb21JbWFnZSB8fCByZXM/LmltZykgOiByZXM/LnRvSW1hZ2UgfHwgY29udGFjdD8uaW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiByZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzSG9sZDogcmVzPy5pc0hvbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNDb25mZXJlbmNlSG9sZDogdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoID4gMSA/IG91ck51bWJlckluZm8/LmlzSG9sZCA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTm90aWZpY2F0aW9uOiBjYWxsSW5mbz8uX2lzTm90aWZpY2F0aW9uICYmICF0aGlzLmdldFN0YXR1cyhyZXMpICYmIHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTXV0ZTogcmVzPy5pc011dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNDb25mZXJlbmNlOiB0aGlzLmlzQ29uZmVyZW5jZSxcclxuICAgICAgICAgICAgICAgICAgICBpc0FjY2VwdENhbGw6IHJlcy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyB0aGlzLmdldFN0YXR1cyhyZXMpIDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBkaWFsOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHBob25lOiByZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gcmVzPy5mcm9tIDogcmVzPy50byxcclxuICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkOiByZXMuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmVyZW5jZVNpZDogY2FsbEluZm8/LmNvbmZlcmVuY2VTaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbExhYmVsOiBjYWxsSW5mbz8uY2FsbExhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHJlcz8ubmFtZSB8fCByZXM/LmZyb21OYW1lIHx8IHJlcz8udG9OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpbWU6IHRoaXMuZ2V0VGltZURpZmZlcmVuY2UocmVzPy5qb2luZWRBdCB8fCBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy50aW1lciA9ICcwMDowMCc7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcihyZXM/LmpvaW5lZEF0KTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmlzTG9hZGVyc2hvdy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5jb25mZXJlbmNlQ2FsbE51bGxDb3VudCA9IDA7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZih0aGlzLmNvbmZlcmVuY2VDYWxsTnVsbENvdW50ID4gNSkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDYWxsIGVuZCBpbiAyOTknKVxyXG4gICAgICAgICAgICB0aGlzLmlzUmluZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ29uY3VycmVudEluY29taW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNSaW5naW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDb250YWN0c1BhbmVsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIE5vIGNhbGwgaW4gcHJvZ3Jlc3M6IHJlc2V0IHRoZSBpbmNvbWluZy1tdXRlIHN3aXRjaCBiYWNrIHRvIGRlZmF1bHQgKG9mZikuXHJcbiAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5zZXRJbmNvbWluZ011dGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5pc1VuaG9sZENvbmZlcmVuY2VDYWxsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB7fVxyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmluZ2luZykge1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UucGF1c2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNhbGwuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3BUaW1lcigpO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxOdWxsQ291bnQrKztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIFJlbW92ZSBwYXJ0aWNpcGFudCBkYXRhIGZvciBjb25mZXJlbmNlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGFjdGl2ZSBsaXN0XHJcbiAgICAgICAgY29uc3QgYWN0aXZlQ29uZmVyZW5jZUlkcyA9IG5ldyBTZXQodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS5jb25mZXJlbmNlSWQpKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbmZJZCBvZiBPYmplY3Qua2V5cyh0aGlzLmFsbENvblBhcnRpY2lwZW50TGlzdCkpIHtcclxuICAgICAgICAgIGlmICghYWN0aXZlQ29uZmVyZW5jZUlkcy5oYXMoY29uZklkKSkge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5hbGxDb25QYXJ0aWNpcGVudExpc3RbY29uZklkXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHZhbGlkVmFsdWVzID0gbmV3IFNldCh0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZsYXRNYXAoKGl0ZW06IGFueSkgPT4gaXRlbT8ucGFydGljaXBhbnRzLm1hcCgodmFsOiBhbnkpID0+IHZhbD8uaWQpKSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gdmFsaWRWYWx1ZXMuaGFzKGl0ZW0/LnBhcnRpY2lwYW50SWQpKTtcclxuICAgICAgICBsZXQgY3VycmVudENhbGw6YW55ID0gW107XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGwgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZpbmQoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGl0ZW0/LnBhcnRpY2lwYW50cz8uZmluZCgocGFydGljaXBhbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZigoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8uZnJvbSkgJiYgcGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgJiYgcGFydGljaXBhbnQ/LmNsaWVudCkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8udG8pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmIHBhcnRpY2lwYW50Py5jbGllbnQpKSAmJiAhcGFydGljaXBhbnQ/LmlzTGVmdCAmJiAhcGFydGljaXBhbnQ/LmlzSG9sZCAmJiAhcGFydGljaXBhbnQ/LmJ1c2luZXNzTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgY3VycmVudENhbGwucHVzaChwYXJ0aWNpcGFudCk7XHJcbiAgICAgICAgICAgICAgdGhpcy50aW1lciA9IHRoaXMuZ2V0VGltZURpZmZlcmVuY2UocGFydGljaXBhbnQ/LmpvaW5lZEF0IHx8IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocGFydGljaXBhbnQ/Lmhvc3QpIHtcclxuICAgICAgICAgICAgICBpdGVtWyd0aW1lciddID0gdGhpcy5nZXRUaW1lRGlmZmVyZW5jZShwYXJ0aWNpcGFudD8uam9pbmVkQXQgfHwgbmV3IERhdGUoKS50b1VUQ1N0cmluZygpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LmZyb20pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnICYmIHBhcnRpY2lwYW50Py5jbGllbnQpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LnRvKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiBwYXJ0aWNpcGFudD8uY2xpZW50KSkgJiYgIXBhcnRpY2lwYW50Py5pc0xlZnQgJiYgIXBhcnRpY2lwYW50Py5pc0hvbGQgJiYgIXBhcnRpY2lwYW50Py5idXNpbmVzc051bWJlclxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBEZXRlY3QgZGlzY29ubmVjdCB2cy4gaG9sZCB0cmFuc2l0aW9uIGV4YWN0bHkgb25jZSBwZXIgZXZlbnQuXHJcbiAgICAgICAgLy8gU2FtZSBwYXJ0aWNpcGFudCBmaWx0ZXIgYXMgZ2V0Q3VycmVudENhbGxJbmZvKCkgKHdpdGhvdXQgIWlzSG9sZCkgdG8gc3RheSBjb25zaXN0ZW50LlxyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGwgJiYgIWN1cnJlbnRDYWxsWzBdPy5pc0hvbGQpIHtcclxuICAgICAgICAgIHRoaXMubGFzdEFjdGl2ZUNvbmZlcmVuY2VJZCA9IHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5jb25mZXJlbmNlSWQ7XHJcbiAgICAgICAgICB0aGlzLnBlbmRpbmdBdXRvVW5ob2xkID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxhc3RBY3RpdmVDb25mZXJlbmNlSWQgJiYgIXRoaXMucGVuZGluZ0F1dG9VbmhvbGQpIHtcclxuICAgICAgICAgIGNvbnN0IGxhc3RDb25mID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5maW5kKChjOiBhbnkpID0+IGMuY29uZmVyZW5jZUlkID09IHRoaXMubGFzdEFjdGl2ZUNvbmZlcmVuY2VJZCk7XHJcbiAgICAgICAgICBjb25zdCBvdXJQYXJ0aWNpcGFudEluTGFzdENvbmYgPSBsYXN0Q29uZj8ucGFydGljaXBhbnRzPy5maW5kKChwOiBhbnkpID0+XHJcbiAgICAgICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHA/LmZyb20pICYmIHA/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgJiYgcD8uY2xpZW50KSB8fFxyXG4gICAgICAgICAgICAgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwPy50bykgJiYgcD8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiBwPy5jbGllbnQgJiYgIXA/LmJ1c2luZXNzTnVtYmVyKSkgJiYgIXA/LmlzTGVmdFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIC8vIENvbmZlcmVuY2UgZ29uZSBPUiBvdXIgcGFydGljaXBhbnQgbm90IGhlbGQg4oaSIHRoZSBhY3RpdmUgY2FsbCBkaXNjb25uZWN0ZWQg4oaSIHF1ZXVlIGF1dG8tdW5ob2xkXHJcbiAgICAgICAgICBpZiAoIWxhc3RDb25mIHx8ICFvdXJQYXJ0aWNpcGFudEluTGFzdENvbmY/LmlzSG9sZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdBdXRvVW5ob2xkID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8ucGFydGljaXBhbnRzLmxlbmd0aCA9PSAyICYmIHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5wYXJ0aWNpcGFudHNbMF0/LmlkKSB7XHJcbiAgICAgICAgICBjb25zdCBvd25OdW1iZXJzID0gdGhpcy5kZXZpY2VOdW1iZXJMaXN0ICYmIHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgID8gdGhpcy5kZXZpY2VOdW1iZXJMaXN0XHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgIGNvbnN0IGNhbGxlck51bWJlciA9IHRoaXMuY2FsbERhdGE/LmZyb20gfHwgdGhpcy5zZWxlY3RlZENhbGxlcklkPy5udW1iZXI7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzPy5pc0NvbmZlcmVuY2VIb2xkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBpZiAob3duTnVtYmVycykge1xyXG4gICAgICAgICAgICAgIC8vIE9yaWdpbmFsIGxvZ2ljIOKAkyB3b3JrcyB3aGVuIHRoZSBjYWxsZXLigJFJRCBsaXN0IGlzIGxvYWRlZFxyXG4gICAgICAgICAgICAgIHJldHVybiAocmVzPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnICYmIHJlcz8uY2xpZW50ICYmICFvd25OdW1iZXJzLmluY2x1ZGVzKHJlcz8uZnJvbSkpIHx8XHJcbiAgICAgICAgICAgICAgICAocmVzPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmIHJlcz8uY2xpZW50ICYmICFvd25OdW1iZXJzLmluY2x1ZGVzKHJlcz8udG8pICYmICFyZXM/LmJ1c2luZXNzTnVtYmVyKSB8fFxyXG4gICAgICAgICAgICAgICAgKCFyZXM/LmNsaWVudCAmJiByZXM/LmlzQWNjZXB0Q2FsbCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gU2FmZSBmYWxsYmFjazogZXhjbHVkZSB0aGUgcGFydGljaXBhbnQgd2hvc2UgbnVtYmVyIG1hdGNoZXMgdGhlIGNhbGxlciBJRCB3ZSB1c2VkXHJcbiAgICAgICAgICAgICAgY29uc3QgaXNPd24gPSAocmVzPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnICYmIHJlcz8uZnJvbSA9PT0gY2FsbGVyTnVtYmVyKSB8fFxyXG4gICAgICAgICAgICAgICAgKHJlcz8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiByZXM/LnRvID09PSBjYWxsZXJOdW1iZXIgJiYgIXJlcz8uYnVzaW5lc3NOdW1iZXIpO1xyXG4gICAgICAgICAgICAgIHJldHVybiAhaXNPd247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0geyAuLi5zZWxlY3RlZCwgaXNBY2NlcHRDYWxsOiB0cnVlIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICBlbHNlIGlmICh0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8ucGFydGljaXBhbnRzPy5sZW5ndGggPiAyICYmIHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5wYXJ0aWNpcGFudHNbMV0/LmlzQ29uZmVyZW5jZSkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKHJlczogYW55KSA9PiAhcmVzPy5pc0NvbmZlcmVuY2VIb2xkKTtcclxuICAgICAgICAgIHRoaXMuaXNDb25mZXJlbmNlID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYodGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LnBhcnRpY2lwYW50cz8ubGVuZ3RoID09IDEgJiYgdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LnBhcnRpY2lwYW50c1swXT8uaWQpe1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKGNhbGxJbmZvOmFueSk9PiBjYWxsSW5mbz8uaWQgPT0gdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LnBhcnRpY2lwYW50c1swXT8uaWQpO1xyXG4gICAgICAgICAgaWYodGhpcy5jdXJyZW50Q2FsbD8uY2xpZW50ICYmIHRoaXMuY3VycmVudENhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbFsnY2xpZW50J109IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsWydpc0FjY2VwdENhbGwnXT0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jdXJyZW50Q2FsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmKCF0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbCAmJnRoaXMuY3VycmVudENhbGwgJiYgdGhpcy5jdXJyZW50Q2FsbExpc3Q/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChyZXM6IGFueSkgPT4gcmVzPy5pZCA9PSB0aGlzLmN1cnJlbnRDYWxsPy5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGwgJiYgIXRoaXMuaXNOZXdBZGRlZENhbGwpIHtcclxuICAgICAgICAgIGxldCBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvID0gdGhpcy5nZXRDdXJyZW50Q2FsbEluZm8oKTtcclxuICAgICAgICAgIGlmICghY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbz8uaWQgJiYgdGhpcy5wZW5kaW5nQXV0b1VuaG9sZCkge1xyXG4gICAgICAgICAgICAvLyBTZWFyY2ggQUxMIGNvbmZlcmVuY2VzIGV4Y2VwdCB0aGUgb25lIHRoYXQganVzdCBkaXNjb25uZWN0ZWQuXHJcbiAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgYSBzaW5nbGUtY29uZmVyZW5jZSBob2xkIChpbmNsdWRpbmcgYnJpZWYgaXNMZWZ0IHJhY2UgY29uZGl0aW9ucylcclxuICAgICAgICAgICAgLy8gZnJvbSBldmVyIHRyaWdnZXJpbmcgYW4gdW5ob2xkIOKAlCB3ZSBvbmx5IHVuaG9sZCBhIERJRkZFUkVOVCBoZWxkIGNvbmZlcmVuY2UuXHJcbiAgICAgICAgICAgIGxldCBob2xkQ2FsbEluZm86IGFueSA9IG51bGw7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29uZiBvZiB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0KSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbmYuY29uZmVyZW5jZUlkID09IHRoaXMubGFzdEFjdGl2ZUNvbmZlcmVuY2VJZCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgaG9sZENhbGxJbmZvID0gY29uZi5wYXJ0aWNpcGFudHMuZmluZCgoY2FsbEluZm86IGFueSkgPT4gKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoY2FsbEluZm8/LmZyb20pICYmIGNhbGxJbmZvPy5jbGllbnQpXHJcbiAgICAgICAgICAgICAgICB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGNhbGxJbmZvPy50bykgJiYgY2FsbEluZm8/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcpKSAmJiAhY2FsbEluZm8/LmlzTGVmdCAmJiBjYWxsSW5mbz8uaXNIb2xkICYmICFjYWxsSW5mbz8uYnVzaW5lc3NOdW1iZXIpO1xyXG4gICAgICAgICAgICAgIGlmIChob2xkQ2FsbEluZm8pIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChob2xkQ2FsbEluZm8/LmlkICYmICF0aGlzLmlzVW5ob2xkQ29uZmVyZW5jZUNhbGwpIHtcclxuICAgICAgICAgICAgICBsZXQgaG9sZEluZm86IGFueSA9IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbaG9sZENhbGxJbmZvPy5pZF0sXHJcbiAgICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IGhvbGRDYWxsSW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBtdXRlOiBob2xkQ2FsbEluZm8/Lm11dGUgfHwgZmFsc2VcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBpZihob2xkSW5mbz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignaG9sZEluZm8gMzg3JywgaG9sZEluZm8pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IGhvbGRDYWxsSW5mbz8uY29uZmVyZW5jZUlkO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNVbmhvbGRDb25mZXJlbmNlQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMucGVuZGluZ0F1dG9VbmhvbGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmxhc3RBY3RpdmVDb25mZXJlbmNlSWQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVXNlckluZm8/LnBhcnRpY2lwYW50SWQpIHtcclxuICAgICAgICAgIGxldCBzZWxlY3RlZFVzZXIgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0/LmlkID09IHRoaXMuc2VsZWN0ZWRVc2VySW5mbz8ucGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRVc2VyICYmIChzZWxlY3RlZFVzZXI/LmNvbmZlcmVuY2VJZCA9PSB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8uY29uZmVyZW5jZUlkIHx8IHRoaXMuaXNDbGlja0V4cGFuZCkpIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRVc2VyLklzVXNlckluZm9TaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoc2VsZWN0ZWRVc2VyLmJ1c2luZXNzTnVtYmVyID09IHRydWUgJiYgIXNlbGVjdGVkVXNlci51c2VySW5mb0lkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2dnbGVDMkNJbmZvUGFuZWwoc2VsZWN0ZWRVc2VyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSBzZWxlY3RlZFVzZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jaGVja1RleHRIZWlnaHQoKTtcclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCByZXNJbmRleCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiAhIWl0ZW0/LmJ1c2luZXNzTnVtYmVyICYmIHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhpdGVtPy50bykpO1xyXG4gICAgICAgICAgaWYgKHJlc0luZGV4ID4gLTEgJiYgKHRoaXMuY3VycmVudENhbGxMaXN0W3Jlc0luZGV4XT8uY29uZmVyZW5jZUlkID09IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCB8fCB0aGlzLmlzQ2xpY2tFeHBhbmQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0W3Jlc0luZGV4XVsnSXNVc2VySW5mb1Nob3cnXSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbyA9IHRoaXMuY3VycmVudENhbGxMaXN0W3Jlc0luZGV4XTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja1RleHRIZWlnaHQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5jdXJyZW50Q2FsbD8uYnVzaW5lc3NOdW1iZXIgJiYgdGhpcy5DMkNvbmZvTGlzdFt0aGlzLmN1cnJlbnRDYWxsPy5wYXJ0aWNpcGFudElkXSkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbFsndXNlckluZm9JZCddID0gdGhpcy5DMkNvbmZvTGlzdFt0aGlzLmN1cnJlbnRDYWxsPy5wYXJ0aWNpcGFudElkXTtcclxuICAgICAgICAgIGlmKCF0aGlzLmlzQ2xpY2tFeHBhbmQgJiYgIXRoaXMuc2VsZWN0ZWRVc2VySW5mbyApIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gdGhpcy5DMkNvbmZvTGlzdFt0aGlzLmN1cnJlbnRDYWxsPy5wYXJ0aWNpcGFudElkXTtcclxuICAgICAgICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYodGhpcy5jdXJyZW50Q2FsbExpc3RbMF0/LmJ1c2luZXNzTnVtYmVyICYmICF0aGlzLkMyQ29uZm9MaXN0W3RoaXMuY3VycmVudENhbGxMaXN0WzBdPy5wYXJ0aWNpcGFudElkXSAmJiAhdGhpcy5jdXJyZW50Q2FsbExpc3RbMF0/LmlzQWNjZXB0Q2FsbCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gdGhpcy5jdXJyZW50Q2FsbExpc3RbMF07XHJcbiAgICAgICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuaXNBbGxBY2NlcHRlZCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmV2ZXJ5KChjYWxsOiBhbnkpID0+IGNhbGw/LmlzQWNjZXB0Q2FsbClcclxuICAgICAgICBjb25zdCB1bmlxdWVMaXN0ID0gW1xyXG4gICAgICAgICAgLi4ubmV3IE1hcCh0aGlzLmN1cnJlbnRDYWxsTGlzdC5tYXAoaXRlbSA9PiBbaXRlbS5jb25mZXJlbmNlSWQsIGl0ZW1dKSkudmFsdWVzKClcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdCA9IHVuaXF1ZUxpc3QubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcclxuICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxMaXN0LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgbGV0IHBhcnRpY2lwYW50TGlzdCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKHJlczogYW55KSA9PiByZXM/LmNvbmZlcmVuY2VJZCA9PSBpdGVtPy5jb25mZXJlbmNlSWQgJiYgcmVzPy5idXNpbmVzc051bWJlciAmJiAhcmVzPy5ob3N0KTtcclxuICAgICAgICAgIGlmKHBhcnRpY2lwYW50TGlzdD8uaWQpIHtcclxuICAgICAgICAgICAgaXRlbVsnaXNCdXNpbmVzc051bWJlciddID0gcGFydGljaXBhbnRMaXN0Py5idXNpbmVzc051bWJlcjtcclxuICAgICAgICAgICAgaXRlbVsnYnVzaW5lc3NQYXJ0aWNpcGFudElkJ10gPSBwYXJ0aWNpcGFudExpc3Q/LnBhcnRpY2lwYW50SWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7IFxyXG4gICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxOdWxsQ291bnQgPSAwO1xyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgaWYodGhpcy5jb25mZXJlbmNlQ2FsbE51bGxDb3VudCA+IDUpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCc0MTEnKVxyXG4gICAgICAgIHRoaXMuaXNSaW5naW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmKHRoaXMuY2FsbCkge1xyXG4gICAgICAgICAgdGhpcy5jYWxsLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0ge31cclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNSaW5naW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNSaW5naW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgIC8vIE5vIGNhbGwgaW4gcHJvZ3Jlc3M6IHJlc2V0IHRoZSBpbmNvbWluZy1tdXRlIHN3aXRjaCBiYWNrIHRvIGRlZmF1bHQgKG9mZikuXHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLnNldEluY29taW5nTXV0ZWQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuc3RvcFRpbWVyKCk7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxOdWxsQ291bnQgKz0xO1xyXG4gICAgICAgIC8vIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoKTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydjYWxsQWN0aW9uJ10/LmN1cnJlbnRWYWx1ZSAmJiB0aGlzLmNhbGxBY3Rpb24/LnR5cGUgPT0gJ3JlSm9pbicpIHtcclxuICAgICAgdGhpcy5kZXZpY2VOdW1iZXJMaXN0ID0gdGhpcy5jYWxsZXJJZExpc3QubWFwKChyZXM6IGFueSkgPT4gcmVzLm51bWJlcik7XHJcbiAgICAgIGxldCBkYXRhID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0/LmNvbmZlcmVuY2VJZCA9PSB0aGlzLmNhbGxBY3Rpb24/LmNvbmZlcmVuY2VJZCk/LnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+IHJlc0RhdGE/Lmhvc3QpO1xyXG4gICAgICBpZihkYXRhPy5pc0xlZnQgfHwgIWRhdGEpIHtcclxuICAgICAgICB0aGlzLnJlam9pbkhvc3QodGhpcy5jYWxsQWN0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ25ld0NhbGxDb25mZXJlbmNlJ10/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLkNhbGxUb1Vuc2F2ZWROdW1iZXIodGhpcy5uZXdDYWxsQ29uZmVyZW5jZT8ubnVtYmVyLCB0cnVlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVqb2luSG9zdChjYWxsSW5mbzogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZih0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbyA9IHRoaXMuZ2V0Q3VycmVudENhbGxJbmZvKCk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/LmlkKSB7XHJcbiAgICAgICAgICBsZXQgaG9sZEluZm86IGFueSA9IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvPy5pZF0sXHJcbiAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICBob2xkOiB0cnVlLFxyXG4gICAgICAgICAgICBtdXRlOiBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvPy5tdXRlIHx8IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmKGhvbGRJbmZvPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hvbGRJbmZvIDM4NycsIGhvbGRJbmZvKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zdCByZWpvaW5QYXJ0aWNpcGVudEluZm8gPSBjYWxsSW5mbz8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pXHJcbiAgICAgICAgICAmJiByZXNEYXRhPy5jbGllbnQgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJykgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiAhcmVzRGF0YT8uYnVzaW5lc3NOdW1iZXIgJiYgcmVzRGF0YT8uaG9zdCkgJiYgcmVzRGF0YT8uaXNMZWZ0KVxyXG4gICAgICApXHJcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSB0cnVlO1xyXG4gICAgICAvLyAx77iP4oOjIEdldCBuZXcgdG9rZW4gZm9yIHNhbWUgY29uZmVyZW5jZVxyXG4gICAgICBjb25zdCB0b2tlbkRhdGE6IGFueSA9IGF3YWl0IHRoaXMuZ2V0T3V0Z29pbmdDYWxsVG9rZW4oY2FsbEluZm8/LmNvbmZlcmVuY2VJZCk7XHJcbiAgICAgIC8vIDLvuI/ig6MgUmVjb25uZWN0IGRldmljZVxyXG4gICAgICBjb25zdCBvcHRpb25zOiBhbnkgPSB7XHJcbiAgICAgICAgY29kZWNQcmVmZXJlbmNlczogWydvcHVzJywgJ3BjbXUnXSxcclxuICAgICAgICBjbG9zZVByb3RlY3Rpb246IHRydWUsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZGV2aWNlID0gbmV3IERldmljZSh0b2tlbkRhdGEudG9rZW4udmFsdWUsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgdGhpcy5jYWxsID0gYXdhaXQgdGhpcy5kZXZpY2UuY29ubmVjdCh7XHJcbiAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgICBGcm9tOiByZWpvaW5QYXJ0aWNpcGVudEluZm8uZnJvbSxcclxuICAgICAgICAgIFRvOiByZWpvaW5QYXJ0aWNpcGVudEluZm8udG8sXHJcbiAgICAgICAgICBFbnY6IGVudmlyb25tZW50LmFiYixcclxuICAgICAgICAgIFRva2VuOiB0b2tlbkRhdGEudG9rZW4uaWQsXHJcbiAgICAgICAgICBFeHQ6IHJlam9pblBhcnRpY2lwZW50SW5mby5leHROdW0sXHJcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IHJlam9pblBhcnRpY2lwZW50SW5mbz8uY29uZmVyZW5jZUlkXHJcbiAgICAgICAgfSxcclxuICAgICAgICBydGNDb25zdHJhaW50czogeyBhdWRpbzogeyBkZXZpY2VJZDogJ2RlZmF1bHQnIH0gfSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuY2FsbCA9IHRoaXMuY2FsbDtcclxuICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGFkZENsaWVudFBhcnRpY2lwYW50UmVzID0gdGhpcy5hZGRDbGllbnRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgICAgZnJvbTogcmVqb2luUGFydGljaXBlbnRJbmZvLmZyb20sXHJcbiAgICAgICAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcclxuICAgICAgICAgICAgICBwYXJ0aWNpcGFudE51bWJlcjogcmVqb2luUGFydGljaXBlbnRJbmZvPy50byxcclxuICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHJlam9pblBhcnRpY2lwZW50SW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICAgIHVzZXJJZDogdGhpcy51c2VySWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgIHByb3h5OiAnJyxcclxuICAgICAgICAgICAgICBjb3VudHJ5Y29kZTogJycsXHJcbiAgICAgICAgICAgICAgZGV2aWNlSWQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgICAgICAgICAgICAgY2xpZW50U2lkOiB0aGlzLmNhbGw/LnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSxcclxuICAgICAgICAgICAgICByZWNvcmRJZDogcmVqb2luUGFydGljaXBlbnRJbmZvPy5pZFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0ID0gcmVqb2luUGFydGljaXBlbnRJbmZvPy5jb25mZXJlbmNlSWQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycygpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gYWRkQ2xpZW50UGFydGljaXBhbnQ6JywgZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignUmVqb2luIGZhaWxlZCcsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1hcFVzZXJJbmZvKHBhcnRpY2lwYW50SW5mbzogYW55LCBjYWxsZXJJbmZvOiBhbnkpIHtcclxuICAgIHBhcnRpY2lwYW50SW5mb1snZW1haWwnXSA9IGNhbGxlckluZm8uZW1haWw7XHJcbiAgICAgIHBhcnRpY2lwYW50SW5mb1snbmFtZSddID0gY2FsbGVySW5mby5uYW1lO1xyXG4gICAgICBwYXJ0aWNpcGFudEluZm9bJ2ltYWdlJ10gPSBjYWxsZXJJbmZvLmltYWdlO1xyXG4gICAgICBwYXJ0aWNpcGFudEluZm9bJ2V4dGVuc2lvbiddID0gY2FsbGVySW5mby5leHRlbnNpb247XHJcbiAgICAgIHBhcnRpY2lwYW50SW5mb1sndXNlckluZm9JZCddID0gY2FsbGVySW5mby5pZDtcclxuICAgICAgcGFydGljaXBhbnRJbmZvWydtZXNzYWdlJ10gPSBjYWxsZXJJbmZvLm1lc3NhZ2U7XHJcbiAgICAgIHBhcnRpY2lwYW50SW5mbyBbJ25vdGUnXSA9IGNhbGxlckluZm8ubm90ZTtcclxuICAgICAgcGFydGljaXBhbnRJbmZvWydudW1iZXInXSA9IGNhbGxlckluZm8ubnVtYmVyO1xyXG4gICAgICBwYXJ0aWNpcGFudEluZm9bJ3BvaW50TmFtZSddID0gY2FsbGVySW5mby5wb2ludE5hbWU7XHJcbiAgICAgIHBhcnRpY2lwYW50SW5mb1snc29mdHBob25lVHdpbGlvQXV0aElkJ10gPSBjYWxsZXJJbmZvLnNvZnRwaG9uZVR3aWxpb0F1dGhJZDtcclxuICAgICAgcGFydGljaXBhbnRJbmZvWydzb3VyY2VOYW1lJ10gPSBjYWxsZXJJbmZvLnNvdXJjZU5hbWU7XHJcbiAgICAgIHBhcnRpY2lwYW50SW5mb1snc3ViamVjdCddID0gY2FsbGVySW5mby5zdWJqZWN0O1xyXG4gICAgICByZXR1cm4gey4uLnBhcnRpY2lwYW50SW5mb307XHJcbiAgfVxyXG5cclxuICB1cGRhdGVkUGFydGljaXBhbnRMaXN0KHBhcnRpY2lwYW50OmFueSkge1xyXG4gICAgaWYocGFydGljaXBhbnQ/Lmxlbmd0aCl7XHJcbiAgICAgIHRoaXMuYWxsQ29uUGFydGljaXBlbnRMaXN0W3BhcnRpY2lwYW50WzBdPy5jb25mZXJlbmNlSWRdID0gcGFydGljaXBhbnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZWxldGUgdGhpcy5hbGxDb25QYXJ0aWNpcGVudExpc3RbcGFydGljaXBhbnRbMF0/LmNvbmZlcmVuY2VJZF07XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgJiYgISF0aGlzLmFsbENvblBhcnRpY2lwZW50TGlzdD8uW3RoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdF0/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnBhcnRpY2lwYW50TGlzdEluZG8odGhpcy5hbGxDb25QYXJ0aWNpcGVudExpc3RbdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0XSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8uY29uZmVyZW5jZUlkO1xyXG4gICAgICB0aGlzLnBhcnRpY2lwYW50TGlzdEluZG8oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHBhcnRpY2lwYW50TGlzdEluZG8ocGFydGljaXBhbnRzPzogYW55KSB7XHJcbiAgICBpZiAoIXBhcnRpY2lwYW50cz8ubGVuZ3RoKSB7XHJcbiAgICAgIGlmICh0aGlzLmFsbFBhcnRpY2lwZW50TGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5hbGxQYXJ0aWNpcGVudExpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gW107XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHBhcnRpY2lwYW50cy5tYXAoYXN5bmMgKHA6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZyb21OYW1lID0gYXdhaXQgdGhpcy5nZXROYW1lKHAuZnJvbSk7XHJcbiAgICAgICAgY29uc3QgdG9OYW1lID0gYXdhaXQgdGhpcy5nZXROYW1lKHAudG8pO1xyXG4gICAgICAgIHJldHVybiB7IC4uLnAsIGZyb21OYW1lOiBmcm9tTmFtZSB8fCBwLmZyb21OYW1lLCB0b05hbWU6IHRvTmFtZSB8fCBwLnRvTmFtZSB9O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBCdWlsZCBhIGxvb2t1cCBtYXAgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlZCBsaXN0IHNvIHdlIGNhbiByZXVzZSB0aGUgc2FtZVxyXG4gICAgLy8gb2JqZWN0IHJlZmVyZW5jZSBmb3IgcGFydGljaXBhbnRzIHdob3NlIGRhdGEgaGFzbid0IGNoYW5nZWQuXHJcbiAgICAvLyBBbmd1bGFyJ3MgKm5nRm9yIHVzZXMgb2JqZWN0IGlkZW50aXR5ICg9PT0pIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHJlLXJlbmRlciBhIHJvdztcclxuICAgIC8vIGtlZXBpbmcgdGhlIHNhbWUgcmVmZXJlbmNlIHByZXZlbnRzIERPTSBkZXN0cnVjdGlvbi9yZWNyZWF0aW9uIGFuZCBlbGltaW5hdGVzIGZsaWNrZXJpbmcuXHJcbiAgICBjb25zdCBleGlzdGluZ01hcCA9IG5ldyBNYXA8YW55LCBhbnk+KFxyXG4gICAgICAodGhpcy5hbGxQYXJ0aWNpcGVudExpc3QgfHwgW10pLm1hcCgocDogYW55KSA9PiBbcC5pZCwgcF0pXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBhbnlDaGFuZ2UgPSByZXNvbHZlZC5sZW5ndGggIT09ICh0aGlzLmFsbFBhcnRpY2lwZW50TGlzdD8ubGVuZ3RoIHx8IDApO1xyXG5cclxuICAgIGNvbnN0IG1lcmdlZDogYW55W10gPSByZXNvbHZlZC5tYXAoKG5ld1A6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBleGlzdGluZyA9IGV4aXN0aW5nTWFwLmdldChuZXdQLmlkKTtcclxuICAgICAgaWYgKCFleGlzdGluZykge1xyXG4gICAgICAgIGFueUNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIG5ld1A7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGlzTXV0ZVBlbmRpbmcgPSB0aGlzLnBlbmRpbmdNdXRlUGFydGljaXBhbnRzLmhhcyhuZXdQLmlkKTtcclxuICAgICAgY29uc3QgaW50ZW5kZWRNdXRlID0gdGhpcy5pbnRlbmRlZE11dGVTdGF0ZXMuZ2V0KG5ld1AuaWQpO1xyXG4gICAgICBpZiAoaXNNdXRlUGVuZGluZyAmJiBpbnRlbmRlZE11dGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmIChuZXdQLmlzTXV0ZSA9PT0gaW50ZW5kZWRNdXRlKSB7XHJcbiAgICAgICAgICB0aGlzLnBlbmRpbmdNdXRlUGFydGljaXBhbnRzLmRlbGV0ZShuZXdQLmlkKTtcclxuICAgICAgICAgIHRoaXMuaW50ZW5kZWRNdXRlU3RhdGVzLmRlbGV0ZShuZXdQLmlkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbmV3UCA9IHsgLi4ubmV3UCwgaXNNdXRlOiBleGlzdGluZy5pc011dGUgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGNoYW5nZWQgPSBPYmplY3Qua2V5cyhuZXdQKS5zb21lKGsgPT4gZXhpc3Rpbmdba10gIT09IG5ld1Bba10pO1xyXG4gICAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICAgIGFueUNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4uZXhpc3RpbmcsIC4uLm5ld1AgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoYW55Q2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb25mTmFtZSA9IHRoaXMuY29uZmVyZW5jZUNhbGxMaXN0LmZpbmQoKHJlczogYW55KSA9PiByZXM/LmNvbmZlcmVuY2VJZCA9PSB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QpPy5jYWxsTGFiZWwgfHwgJyc7XHJcbiAgICAgIHRoaXMuYWxsUGFydGljaXBlbnRMaXN0ID0gbWVyZ2VkO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gWy4uLm1lcmdlZF07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93Q2FsbGluZ1RvYXN0KG51bWJlcjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdCA9IHtcclxuICAgICAgc2hvdzogdHJ1ZSxcclxuICAgICAgdHlwZTogJ2FsZXJ0LXN1Y2Nlc3MnLFxyXG4gICAgICBudW1iZXI6IG51bWJlcixcclxuICAgICAgZGlzcGxheU51bTogbnVtYmVyXHJcbiAgICB9O1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdC5zaG93ID0gZmFsc2U7XHJcbiAgICB9LCA3MDAwKTtcclxuICB9XHJcbiAgZ2V0U3RhdHVzKHJlczogYW55KSB7XHJcbiAgICBpZiAocmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIpIHtcclxuICAgICAgcmV0dXJuIHJlcz8uY2FsbFN0YXR1cyA9PSBcInBhcnRpY2lwYW50LWpvaW5cIiB8fCByZXM/LmNhbGxTdGF0dXMgPT0gXCJwYXJ0aWNpcGFudC1tdXRlXCIgfHwgcmVzPy5jYWxsU3RhdHVzID09IFwicGFydGljaXBhbnQtaG9sZFwiIHx8IHJlcz8uY2FsbFN0YXR1cyA9PSAnY29ubmVjdGVkJyA/IHRydWUgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZihyZXM/LmRpcmVjdGlvbiA9PSBcIm91dGdvaW5nLWNhbGxcIikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChyZXMuc3RhdHVzID09ICdhbnN3ZXJlZCcgJiYgcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgR2V0Q29udGFjdHNMaXN0KCkge1xyXG4gICAgY29uc3QgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfHwgJyc7XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UucmVhZENvbnRhY3RzKHRva2VuKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLnBob25lQm9vaykge1xyXG4gICAgICAgICAgdGhpcy5jb250YWN0cyA9IHJlcy5waG9uZUJvb2s7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHJlcy5waG9uZUJvb2s7XHJcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcclxuICAgICAgICAgIHRoaXMuY29udGFjdHMgPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHJlcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb250YWN0cyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcigpO1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY29udGFjdHM6JywgZXJyb3IpO1xyXG4gICAgICAgIHRoaXMuY29udGFjdHMgPSBbXTtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IFtdO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICBhZGRSZXM6IGFueTtcclxuICBhc3luYyBzdGFydENhbGwoY2FsbERhdGE6IGFueSwgaXNOZXdDb25mZXJlbmNlPzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY3VycmVudENhbGxMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2Uuc2V0SW5jb21pbmdNdXRlZChmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IHRydWU7XHJcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgY2hhbm5lbElkOiBlbnZpcm9ubWVudC5jaGFubmVsSWQsXHJcbiAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgICAgdG86IGNhbGxEYXRhLnBob25lLFxyXG4gICAgICAgIGZyb21OdW1iZXI6IGNhbGxEYXRhLmZyb20sXHJcbiAgICAgICAgc2NvcGU6ICdsb2NhbCcsXHJcbiAgICAgICAgZGV2aWNlSWQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgICAgICAgZmlyc3RuYW1lOiBudWxsLFxyXG4gICAgICAgIGxhc3RuYW1lOiBudWxsLFxyXG4gICAgICAgIGNvdW50cnljb2RlOiBudWxsLFxyXG4gICAgICAgIG51bWJlcjogbnVsbCxcclxuICAgICAgICBudW1vdHA6IG51bGwsXHJcbiAgICAgICAgZXh0ZW5zaW9uOiBudWxsLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmN1cnJlbnRDYWxsID0ge1xyXG4gICAgICAgIGJ1c2luZXNzTnVtYmVyOiBmYWxzZSxcclxuICAgICAgICBjYWxsU2lkOiAnJyxcclxuICAgICAgICBjYWxsU3RhdHVzOiAnJyxcclxuICAgICAgICBjb25mZXJlbmNlSWQ6ICcnLFxyXG4gICAgICAgIGRpYWw6IHRydWUsXHJcbiAgICAgICAgZGlyZWN0aW9uOiAnb3V0Z29pbmctY2FsbCcsXHJcbiAgICAgICAgZm9yd2FyZGVkVG86ICcnLFxyXG4gICAgICAgIGZyb206IGNhbGxEYXRhLmZyb20sXHJcbiAgICAgICAgaWQ6ICd5eXVnZ2hqYicsXHJcbiAgICAgICAgaW1nOiBjYWxsRGF0YS5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgIGlzQWNjZXB0Q2FsbDogdHJ1ZSxcclxuICAgICAgICBpc0NvbmZlcmVuY2U6IGZhbHNlLFxyXG4gICAgICAgIGlzSG9sZDogZmFsc2UsXHJcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxyXG4gICAgICAgIGlzTGVmdDogZmFsc2UsXHJcbiAgICAgICAgaXNNdXRlOiBmYWxzZSxcclxuICAgICAgICBqb2luZWRBdDogJycsXHJcbiAgICAgICAgbmFtZTogY2FsbERhdGE/Lm5hbWUgfHwgJycsXHJcbiAgICAgICAgcGFydGljaXBhbnRJZDogJycsXHJcbiAgICAgICAgcGhvbmU6IGNhbGxEYXRhPy5waG9uZSB8fCAnJyxcclxuICAgICAgICByb2xlOiAnY2FsbGVlJyxcclxuICAgICAgICBzdGF0dXM6ICcnLFxyXG4gICAgICAgIHRpbWU6ICcnLFxyXG4gICAgICAgIHRvOiBjYWxsRGF0YT8ucGhvbmUgfHwgJycsXHJcbiAgICAgICAgdG9OYW1lOiBjYWxsRGF0YT8ubmFtZSB8fCAnJyxcclxuICAgICAgICB1c2VySWQ6IHRoaXMudXNlcklkIHx8IGNhbGxEYXRhPy51c2VySWRcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5pbml0aWF0ZUNhbGwocGF5bG9hZCk7XHJcbiAgICAgIHRoaXMuY29uZmVyZW5jZUlkID0gcmVzcG9uc2U/LmNhbGxhdXRoPy5pZDtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICBjb25zdCB7IGlkOiBjYWxsQXV0aElkLCByZWNvcmRDYWxsLCAgdG9rZW5EYXRhfSA9IGF3YWl0IHRoaXMuZ2V0Q2FsbEF1dGhJZChyZXNwb25zZSk7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRDYWxsID0gcmVjb3JkQ2FsbDsgLy8gU3RvcmUgdGhlIHJlY29yZENhbGwgdmFsdWVcclxuICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3RUb0RldmljZShjYWxsQXV0aElkLCBjYWxsRGF0YSwgdG9rZW5EYXRhKTtcclxuICAgICAgICBhd2FpdCB0aGlzLnBvbGxDYWxsU3RhdHVzKGNhbGxBdXRoSWQpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGFkZENsaWVudFBhcnRpY2lwYW50UmVzOmFueSA9IHRoaXMuYWRkQ2xpZW50UGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICAgIGZyb206IGNhbGxEYXRhPy5mcm9tLFxyXG4gICAgICAgICAgICAgIHJvdXRlOiBcIk9VVEdPSU5HXCIsXHJcbiAgICAgICAgICAgICAgcGFydGljaXBhbnROdW1iZXI6IGNhbGxEYXRhPy5waG9uZSxcclxuICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHJlc3BvbnNlPy5jYWxsYXV0aD8uaWQsXHJcbiAgICAgICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgcHJveHk6ICcnLFxyXG4gICAgICAgICAgICAgIGNvdW50cnljb2RlOiAnJyxcclxuICAgICAgICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICAgICAgICBjbGllbnRTaWQ6IHRoaXMuY2FsbD8ucGFyYW1ldGVyc1snQ2FsbFNpZCddXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBpZihhZGRDbGllbnRQYXJ0aWNpcGFudFJlcz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICAvLyAgIHN3YWwoXCJFcnJvclwiLCBhZGRDbGllbnRQYXJ0aWNpcGFudFJlcz8ubWVzc2FnZS5qb2luKFwiPGJyLz5cIiksIFwiZXJyb3JcIik7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgdGhpcy5hZGRSZXMgPSBhd2FpdCB0aGlzLmFkZFBhcnRpY2lwYW50VG9DYWxsKHtcclxuICAgICAgICAgICAgICBmcm9tOiBjYWxsRGF0YT8uZnJvbSxcclxuICAgICAgICAgICAgICByb3V0ZTogXCJPVVRHT0lOR1wiLFxyXG4gICAgICAgICAgICAgIHBhcnRpY2lwYW50TnVtYmVyOiBjYWxsRGF0YT8ucGhvbmUsXHJcbiAgICAgICAgICAgICAgY29uZmVyZW5jZUlkOiByZXNwb25zZT8uY2FsbGF1dGg/LmlkLFxyXG4gICAgICAgICAgICAgIHVzZXJJZDogdGhpcy51c2VySWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgIHByb3h5OiAnJyxcclxuICAgICAgICAgICAgICBjb3VudHJ5Y29kZTogJycsXHJcbiAgICAgICAgICAgICAgZGV2aWNlSWQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZihpc05ld0NvbmZlcmVuY2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSByZXNwb25zZT8uY2FsbGF1dGg/LmlkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTmV3QWRkZWRDYWxsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5pc0xvYWRlcnNob3cubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlcnNob3duLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IHJlc3BvbnNlPy5jYWxsYXV0aD8uaWQ7XHJcbiAgICAgICAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHJlc3BvbnNlPy5jYWxsYXV0aD8uaWQpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhZGRpbmcgaW5pdGlhbCBwYXJ0aWNpcGFudDonLCBlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCAxNTAwKVxyXG4gICAgICAgIC8vIFBvbGwgdGhlIHN0YXR1cyBmb3IgMzAtNDUgc2Vjb25kc1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAyMDEpIHtcclxuICAgICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuaXNMb2FkZXJzaG93Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkZXJzaG93bi5lbWl0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLmlzTmV3QWRkZWRDYWxsID0gZmFsc2U7XHJcbiAgICAgICAgc3dhbChcIkVycm9yXCIsIHJlc3BvbnNlLm1lc3NhZ2Uuam9pbihcIjxici8+XCIpLCBcImVycm9yXCIpO1xyXG4gICAgICAgIHRoaXMuZW5kQ2FsbCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgdGhpcy5lbmRDYWxsKCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uTXV0ZVVzZXIoYzogYW55KSB7XHJcbiAgICBjb25zdCBwYXJ0aWNpcGFudElkID0gYy5pZDtcclxuICAgIGNvbnN0IG5ld011dGVTdGF0ZSA9ICFjLmlzTXV0ZTtcclxuXHJcbiAgICBcclxuICAgIHRoaXMucGVuZGluZ011dGVQYXJ0aWNpcGFudHMuYWRkKHBhcnRpY2lwYW50SWQpO1xyXG4gICAgdGhpcy5pbnRlbmRlZE11dGVTdGF0ZXMuc2V0KHBhcnRpY2lwYW50SWQsIG5ld011dGVTdGF0ZSk7XHJcblxyXG4gICAgYy5pc011dGUgPSBuZXdNdXRlU3RhdGU7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLm9uTXV0ZVBhcnRpY2lwYW50KHtcclxuICAgICAgcGFydGljaXBhbnRJZDogW3BhcnRpY2lwYW50SWRdLFxyXG4gICAgICBjb25mZXJlbmNlSWQ6IGM/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgaG9sZDogYy5pc0hvbGQsXHJcbiAgICAgIG11dGU6IG5ld011dGVTdGF0ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy9yZW1vdmUgcGVuZGluZyBndWFyZCBhZnRlciA1IHNlY29uZHMgaWYgbm8gY29uZmlybWF0aW9uXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMucGVuZGluZ011dGVQYXJ0aWNpcGFudHMuaGFzKHBhcnRpY2lwYW50SWQpKSB7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nTXV0ZVBhcnRpY2lwYW50cy5kZWxldGUocGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgdGhpcy5pbnRlbmRlZE11dGVTdGF0ZXMuZGVsZXRlKHBhcnRpY2lwYW50SWQpO1xyXG4gICAgICB9XHJcbiAgICB9LCA1MDAwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uSG9sZENhbGwoYzogYW55KSB7XHJcbiAgICB0aGlzLmlzSG9sZEJ0bkRpc2FibGUgPSB0cnVlO1xyXG4gICAgaWYoKChjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnICYmIHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhjPy5mcm9tKSkgfHwgKGM/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgdGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGM/LnRvKSkpICYmIGM/LmNsaWVudCAmJiAhYz8uYnVzaW5lc3NOdW1iZXIpIHtcclxuICAgICAgbGV0IHVuSG9sZEluZm86IGFueSA9IHt9O1xyXG4gICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZvckVhY2goYXN5bmMgKGNhbGw6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGlmIChjYWxsPy5jb25mZXJlbmNlSWQgPT0gYz8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgICBsZXQgcGFydGljaXBhbnRJbmZvID0gY2FsbC5wYXJ0aWNpcGFudHMuZmluZCgocmVzRGF0YTogYW55KSA9PlxyXG4gICAgICAgICAgICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy5mcm9tKSkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiAhcmVzRGF0YT8uYnVzaW5lc3NOdW1iZXIpKSAmJiAhcmVzRGF0YT8uaXNMZWZ0ICYmIHJlc0RhdGE/LmNsaWVudFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgaWYgKHBhcnRpY2lwYW50SW5mbz8uaWQgKSB7XHJcbiAgICAgICAgICAgIGxldCBob2xkSW5mbzogYW55ID0gYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbcGFydGljaXBhbnRJbmZvPy5pZF0sXHJcbiAgICAgICAgICAgICAgY29uZmVyZW5jZUlkOiBwYXJ0aWNpcGFudEluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgICBob2xkOiAhcGFydGljaXBhbnRJbmZvPy5pc0hvbGQsXHJcbiAgICAgICAgICAgICAgbXV0ZTogcGFydGljaXBhbnRJbmZvPy5tdXRlIHx8IGZhbHNlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZihob2xkSW5mbz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICAgIHN3YWwoXCJFcnJvclwiLCBob2xkSW5mbz8ubWVzc2FnZT8uam9pbj8uKFwiPGJyLz5cIikgfHwgJ0ludGVybmFsIFNlcnZlciBFcnJvcicsIFwiZXJyb3JcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYoYz8uaXNIb2xkKSB7XHJcbiAgICAgICAgICAgIHVuSG9sZEluZm8gPSBjYWxsLnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8udG8pICYmIHJlc0RhdGE/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgIXJlc0RhdGE/LmJ1c2luZXNzTnVtYmVyKSkgJiYgIXJlc0RhdGE/LmlzTGVmdCAmJiAhcmVzRGF0YT8uaXNIb2xkICYmIHJlc0RhdGE/LmNsaWVudFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdW5Ib2xkSW5mbyA9IGNhbGwucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICAgLy8gICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy5mcm9tKSkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiAhcmVzRGF0YT8uYnVzaW5lc3NOdW1iZXIpKSAmJiAhcmVzRGF0YT8uaXNMZWZ0ICYmIHJlc0RhdGE/LmlzSG9sZCAmJiByZXNEYXRhPy5jbGllbnRcclxuICAgICAgICAgICAgLy8gKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihpbmRleCA9PSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygndW5Ib2xkSW5mbycsIHVuSG9sZEluZm8pXHJcbiAgICAgICAgICBpZiAodW5Ib2xkSW5mbz8uaWQpIHtcclxuICAgICAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFt1bkhvbGRJbmZvPy5pZF0sXHJcbiAgICAgICAgICAgICAgY29uZmVyZW5jZUlkOiB1bkhvbGRJbmZvPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICAgICAgaG9sZDogIXVuSG9sZEluZm8/LmlzSG9sZCxcclxuICAgICAgICAgICAgICBtdXRlOiB1bkhvbGRJbmZvPy5tdXRlIHx8IGZhbHNlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZihob2xkSW5mbz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hvbGRJbmZvIDgwNScsIGhvbGRJbmZvKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXNIb2xkQnRuRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hvbGRCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBob2xkSW5mbzogYW55ID0gYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICBwYXJ0aWNpcGFudElkOiBbYy5pZF0sXHJcbiAgICAgICAgY29uZmVyZW5jZUlkOiBjPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgaG9sZDogIWMuaXNIb2xkLFxyXG4gICAgICAgIG11dGU6IGM/Lm11dGUgfHwgZmFsc2VcclxuICAgICAgfSk7XHJcbiAgICAgIGlmKGhvbGRJbmZvPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignaG9sZEluZm8gODE5JywgaG9sZEluZm8pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc0hvbGRCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgIGMuaXNIb2xkID0gIWMuaXNIb2xkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0ID0gYz8uY29uZmVyZW5jZUlkO1xyXG4gICAgLy8gYXdhaXQgdGhpcy5nZXRBbGxQYXJ0aWNpcGFudHMoYz8uY29uZmVyZW5jZUlkKTtcclxuICB9XHJcbiAgYXN5bmMgb25FbmRDYWxsKGM6IGFueSwgaXNBbGxDYWxsRW5kPzogYm9vbGVhbiwgaXNDb250ZWN0PzogYm9vbGVhbikge1xyXG4gICAgbGV0IHBhcnRpY2lwYW50SWQgPSBpc0FsbENhbGxFbmQgPyAnYWxsJyA6IGMucGFydGljaXBhbnRJZCB8fCBjPy5pZDtcclxuICAgIGNvbnN0IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8gPSB0aGlzLmdldEN1cnJlbnRDYWxsSW5mbygpO1xyXG4gICAgY29uc3QgcGFydGljaXBhbnRMaXN0ID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5maW5kKChjYWxsSW5mbzphbnkpID0+IGNhbGxJbmZvPy5jb25mZXJlbmNlSWQgPT0gYz8uY29uZmVyZW5jZUlkKS5wYXJ0aWNpcGFudHMuZmlsdGVyKChyZXNEYXRhOiBhbnkpID0+ICFyZXNEYXRhPy5pc0xlZnQpO1xyXG4gICAgaWYocGFydGljaXBhbnRMaXN0Py5sZW5ndGggPD0gMiAmJiAhaXNDb250ZWN0KSB7XHJcbiAgICAgIHBhcnRpY2lwYW50SWQgPSAnYWxsJztcclxuICAgIH1cclxuICAgIGxldCBjb25mZXJlbmNlSWQgPSBjLmNvbmZlcmVuY2VJZCB8fCBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlSWQ7XHJcbiAgICBsZXQgcmVzOiBhbnkgPSBhd2FpdCB0aGlzLmdldFJlbW92ZVBhcnRpY2lwYW50cyhwYXJ0aWNpcGFudElkLCBjb25mZXJlbmNlSWQpO1xyXG4gICAgaWYgKHJlcz8uc3RhdHVzID09IDIwMSAmJiByZXM/Lm1lc3NhZ2UgPT0gJ3BhcnRpY2lwYW50IGFscmVhZHkgbGVmdCcpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignUGFydGljaXBhbnQgYWxyZWFkeSBsZWZ0JywgcmVzKTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSBlbHNlIGlmIChyZXM/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVtb3ZpbmcgcGFydGljaXBhbnQnLCByZXMpO1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSBjb25mZXJlbmNlSWQ7XHJcbiAgICAvLyBhd2FpdCB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyh0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQpO1xyXG4gICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgLy8gdGhpcy5lbmRJbmNvbWluZ0NhbGxFdmVudC5lbWl0KGMpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGluaXRpYXRlQ2FsbChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuaW5pdGlhdGVDYWxsKHBheWxvYWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuaG9sZFBhcnRpY2lwYW50KHBheWxvYWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBhZGRQYXJ0aWNpcGFudFRvQ2FsbChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuYWRkUGFydGljaXBhbnQocGF5bG9hZCkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZENsaWVudFBhcnRpY2lwYW50KHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5hZGRDbGllbnRQYXJ0aWNpcGFudChwYXlsb2FkKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb25NdXRlUGFydGljaXBhbnQocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLm9uTXV0ZVBhcnRpY2lwYW50KHBheWxvYWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZDogYW55LCBjb25mZXJlbmNlSWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZCwgY29uZmVyZW5jZUlkKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q2FsbEF1dGhJZChyZXNwb25zZTogYW55KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpZDogcmVzcG9uc2UuY2FsbGF1dGguaWQsXHJcbiAgICAgIHJlY29yZENhbGw6IHJlc3BvbnNlLmNhbGxhdXRoLnJlY29yZENhbGwsXHJcbiAgICAgIHRva2VuRGF0YTogcmVzcG9uc2UuY2FsbGF1dGgudG9rZW5cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldE91dGdvaW5nQ2FsbFRva2VuKGNhbGxBdXRoSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDb25mZXJlbmNlQ2FsbFRva2VuKHsgYXV0aElkOiBjYWxsQXV0aElkIH0pLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjb25uZWN0VG9EZXZpY2UodG9rZW46IGFueSwgY2FsbERhdGE6IGFueSwgdG9rZW5EYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHtcclxuICAgICAgY29kZWNQcmVmZXJlbmNlczogWydvcHVzJywgJ3BjbXUnXSxcclxuICAgICAgY2xvc2VQcm90ZWN0aW9uOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmRldmljZSA9IG5ldyBEZXZpY2UodG9rZW5EYXRhLCBvcHRpb25zKTtcclxuICAgIHRoaXMuY2FsbCA9IGF3YWl0IHRoaXMuZGV2aWNlLmNvbm5lY3Qoe1xyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBGcm9tOiBjYWxsRGF0YS5mcm9tLFxyXG4gICAgICAgIFRvOiBjYWxsRGF0YS5waG9uZSxcclxuICAgICAgICBFbnY6IGVudmlyb25tZW50LmFiYixcclxuICAgICAgICBUb2tlbjogdG9rZW4sXHJcbiAgICAgICAgRXh0OiBjYWxsRGF0YS5leHROdW1cclxuICAgICAgfSxcclxuICAgICAgcnRjQ29uc3RyYWludHM6IHsgYXVkaW86IHRydWUgfSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy50d2lsaW9TZXJ2aWNlLmNhbGwgPSB0aGlzLmNhbGw7XHJcbiAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycygpIHtcclxuICAgIHRoaXMuc3RhcnRUaW1lcigpO1xyXG4gICAgdGhpcy5kZXZpY2U/Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN0b3BUaW1lcigpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYWxsPy5vbignZXJyb3InLCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3RvcFRpbWVyKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbGw/Lm9uKCdkaXNjb25uZWN0JywgKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygndGVzdC1kaXNjb25uZWN0JylcclxuICAgICAgY29uc29sZS5sb2coJzgzMicpXHJcbiAgICAgIC8vIENsZWFuIHVwIHRoaXMgY2FsbCBmcm9tIGFjY2VwdGVkQ2FsbExpc3RzIHNvIGRldmljZSByZS1pbml0IGd1YXJkIHJlc2V0c1xyXG4gICAgICBjb25zdCBkaXNjb25uZWN0ZWRTaWQgPSB0aGlzLmNhbGw/LnBhcmFtZXRlcnM/LkNhbGxTaWQ7XHJcbiAgICAgIGlmIChkaXNjb25uZWN0ZWRTaWQpIHtcclxuICAgICAgICB0aGlzLmFjY2VwdGVkQ2FsbExpc3QgPSB0aGlzLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKGMgPT4gYy5jYWxsU2lkICE9PSBkaXNjb25uZWN0ZWRTaWQpO1xyXG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0ID0gdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBkaXNjb25uZWN0ZWRTaWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMuY2FsbD8uZGlzY29ubmVjdCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYWxsPy5vbigncmluZ2luZycsICgpID0+IHtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FsbD8ub24oJ3JlamVjdCcsICgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ3Rlc3Q1JylcclxuICAgICAgdGhpcy5lbmRDYWxsKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbGw/Lm9uKCdhY2NlcHQnLCAoKSA9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd05ld0NhbGxMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSwgMjAwMCk7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZGlzYmFsZUVuZENhbGxCdG4gPSBmYWxzZTtcclxuICAgICAgLy8gRW5zdXJlIHRoZSBhY3RpdmUgb3V0Z29pbmcgY2FsbCBpcyBtYXJrZWQgYXMgYWNjZXB0ZWQgc28gdGhlIFVJIHN3aXRjaGVzIHRvIHRoZSBjb25uZWN0ZWQgdmlld1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciB1cGRhdGluZyBhY2NlcHQgc3RhdGU6JywgZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jYWxsPy5vbignbWVzc2FnZVJlY2VpdmVkJywgKG1lc3NhZ2U6IGFueSkgPT4ge1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXJ0VGltZXIoam9pbkF0Pzogc3RyaW5nKSB7XHJcbiAgICBpZiAoIWpvaW5BdCkgcmV0dXJuO1xyXG5cclxuICBjb25zdCBqb2luVGltZSA9IG5ldyBEYXRlKGpvaW5BdCkuZ2V0VGltZSgpIHx8IDA7XHJcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICBsZXQgc2Vjb25kcyA9IE1hdGguZmxvb3IoKG5vdyAtIGpvaW5UaW1lKSAvIDEwMDApO1xyXG4gICAgaWYgKHNlY29uZHMgPCAwKSB7XHJcbiAgICAgIHNlY29uZHMgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBzZWNvbmRzKys7XHJcbiAgICAgIC8vIHRoaXMudGltZXIgPSB0aGlzLmZvcm1hdFRpbWUoc2Vjb25kcyk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdG9wVGltZXIoKSB7XHJcbiAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XHJcbiAgICB0aGlzLnRpbWVyID0gJzAwOjAwJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0VGltZSh0b3RhbFNlY29uZHM6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsU2Vjb25kcyAvIDM2MDApO1xyXG4gIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh0b3RhbFNlY29uZHMgJSAzNjAwKSAvIDYwKTtcclxuICBjb25zdCBzZWNvbmRzID0gdG90YWxTZWNvbmRzICUgNjA7XHJcbiAgaWYgKGhvdXJzID4gMCkge1xyXG4gICAgcmV0dXJuIGAke3RoaXMucGFkKGhvdXJzKX06JHt0aGlzLnBhZChtaW51dGVzKX06JHt0aGlzLnBhZChzZWNvbmRzKX1gO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5wYWQobWludXRlcyl9OiR7dGhpcy5wYWQoc2Vjb25kcyl9YDtcclxuICB9XHJcbn1cclxuXHJcbiAgcHJpdmF0ZSBwYWQodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdmFsdWUgPCAxMCA/IGAwJHt2YWx1ZX1gIDogYCR7dmFsdWV9YDtcclxuICB9XHJcbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogYW55KSB7XHJcbiAgICBzd2FsKFwiRXJyb3JcIiwgZXJyb3IsIFwiZXJyb3JcIik7XHJcbiAgfVxyXG5cclxuICBlbmRDb25mZXJlbmVjZUNhbGwoY29uZj86IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbmYgPSBjb25mO1xyXG4gICAgLy8gdGhpcy5pc1VuaG9sZENvbmZlcmVuY2VDYWxsID0gdHJ1ZTtcclxuICAgIGxldCBjb25mZXJlbmNlID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8uZmluZCgocmVzOiBhbnkpID0+IHJlcz8uY29uZmVyZW5jZUlkID09IGNvbmY/LmNvbmZlcmVuY2VJZCk7XHJcbiAgICBsZXQgaG9zdE51bWJlciA9IGNvbmZlcmVuY2U/LnBhcnRpY2lwYW50cz8uZmluZCgocGFydGljaXBhbnQ6IGFueSkgPT4gcGFydGljaXBhbnQ/Lmhvc3QgJiYgIXBhcnRpY2lwYW50Py5idXNpbmVzc051bWJlcik7XHJcbiAgICBpZiAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhob3N0TnVtYmVyPy5mcm9tKSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGhvc3ROdW1iZXI/LnRvKSAmJiBob3N0TnVtYmVyPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmIGhvc3ROdW1iZXI/Lmhvc3QpKSAmJiBjb25mZXJlbmNlPy5wYXJ0aWNpcGFudHMuZmlsdGVyKChwOiBhbnkpID0+ICFwLmlzTGVmdCkubGVuZ3RoID4gMikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29uZiA9IGhvc3ROdW1iZXI7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb25mWydjb25OYW1lJ10gPSB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdC5maW5kKChyZXM6IGFueSkgPT4gcmVzPy5jb25mZXJlbmNlSWQgPT0gY29uZj8uY29uZmVyZW5jZUlkKT8uY2FsbExhYmVsIHx8ICcnO1xyXG4gICAgICB0aGlzLm9uQ2FsbERpc2Nvbm5lY3RlZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGNvbmY/LmNvbmZlcmVuY2VJZCkge1xyXG4gICAgICAgIGxldCBwYXJ0aWNpcGVudEluZm8gPSBjb25mZXJlbmNlPy5wYXJ0aWNpcGFudHM/LmZpbmQoKHBhcnRpY2lwYW50OiBhbnkpID0+ICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py5mcm9tKVxyXG4gICAgICAgICAgJiYgcGFydGljaXBhbnQ/LmNsaWVudCAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJykgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8udG8pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFwYXJ0aWNpcGFudD8uYnVzaW5lc3NOdW1iZXIpICYmICFwYXJ0aWNpcGFudD8uYnVzaW5lc3NOdW1iZXIpICYmICFwYXJ0aWNpcGFudD8uaXNMZWZ0KVxyXG4gICAgICAgIGlmIChwYXJ0aWNpcGVudEluZm8/LmlkKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pc0luTXVsdGlwbGVDb25mZXJlbmNlcygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQgPSBwYXJ0aWNpcGVudEluZm87XHJcbiAgICAgICAgICAgIHRoaXMubGVhdmVDb25mQ29uZmVyZW5jZU5hbWUgPSB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdC5maW5kKFxyXG4gICAgICAgICAgICAgIChjOiBhbnkpID0+IGMuY29uZmVyZW5jZUlkID09PSBjb25mZXJlbmNlPy5jb25mZXJlbmNlSWRcclxuICAgICAgICAgICAgKT8uY2FsbExhYmVsIHx8ICdDb25mZXJlbmNlJztcclxuICAgICAgICAgICAgdGhpcy5zaG93TGVhdmVDb25maXJtYXRpb25Nb2RhbCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub25FbmRDYWxsKHBhcnRpY2lwZW50SW5mbylcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbmRDYWxsKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGVuZENhbGwoaXNBbGxDYWxsRW5kPzogYm9vbGVhbikge1xyXG4gICAgLy8gdGhpcy5pc0NvbmZlcmVuY2UgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcclxuICAgIGlmIChpc0FsbENhbGxFbmQpIHtcclxuICAgICAgdGhpcy5zdG9wVGltZXIoKTtcclxuICAgICAgdGhpcy5vbkVuZENhbGwoe30sIGlzQWxsQ2FsbEVuZCk7XHJcbiAgICAgIGlmICghdGhpcy5jdXJyZW50Q2FsbExpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKDg5NilcclxuICAgICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRQYXJ0aWNpcGFudCA9IHRoaXMuZ2V0Q3VycmVudENhbGxJbmZvKCk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAodGhpcy5pc0luTXVsdGlwbGVDb25mZXJlbmNlcygpICYmIGN1cnJlbnRQYXJ0aWNpcGFudCkge1xyXG4gICAgICAgIHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQgPSBjdXJyZW50UGFydGljaXBhbnQ7XHJcbiAgICAgICAgdGhpcy5sZWF2ZUNvbmZDb25mZXJlbmNlTmFtZSA9IHRoaXMuY29uZmVyZW5jZUNhbGxMaXN0LmZpbmQoXHJcbiAgICAgICAgICAoYzogYW55KSA9PiBjLmNvbmZlcmVuY2VJZCA9PT0gY3VycmVudFBhcnRpY2lwYW50LmNvbmZlcmVuY2VJZFxyXG4gICAgICAgICk/LmNhbGxMYWJlbCB8fCAnQ3VycmVudCBDYWxsJztcclxuICAgICAgICB0aGlzLnNob3dMZWF2ZUNvbmZpcm1hdGlvbk1vZGFsID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm47IFxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLm9uRW5kQ2FsbChjdXJyZW50UGFydGljaXBhbnQsIGlzQWxsQ2FsbEVuZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgYXN5bmMgdG9nZ2xlTXV0ZShpc0NvbmZlcmVuY2U/OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzTXV0ZSA9ICF0aGlzLmlzTXV0ZTtcclxuICAgIHRoaXMucGVuZGluZ011dGVVcGRhdGUgPSB0cnVlOyBcclxuICAgIHRoaXMuaW50ZW5kZWRNdXRlU3RhdGUgPSB0aGlzLmlzTXV0ZTtcclxuICAgIHRoaXMuY2FsbD8ubXV0ZSh0aGlzLmlzTXV0ZSk7XHJcbiAgICBjb25zdCBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvID0gdGhpcy5nZXRDdXJyZW50Q2FsbEluZm8oKTtcclxuICAgIHRoaXMub25NdXRlUGFydGljaXBhbnQoe1xyXG4gICAgICBwYXJ0aWNpcGFudElkOiBbY3VycmVudENvbmZlcmVuY2VDYWxsSW5mby5wYXJ0aWNpcGFudElkIHx8IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/LmlkXSxcclxuICAgICAgY29uZmVyZW5jZUlkOiBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgIGhvbGQ6IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8uaXNIb2xkLFxyXG4gICAgICBtdXRlOiAhY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbz8uaXNNdXRlXHJcbiAgICAgIC8vIGNvbmZlcmVuY2U6IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8uaXNDb25mZXJlbmNlIHx8IGZhbHNlXHJcbiAgICB9KVxyXG4gICAgdGhpcy5jdXJyZW50Q2FsbC5pc011dGUgPSB0aGlzLmlzTXV0ZTtcclxuICAgIC8vIHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZUlkKTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRDYWxsSW5mbygpIHtcclxuICAgIHJldHVybiB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0XHJcbiAgICAgIC5mbGF0TWFwKChjYWxsSW5mbzogYW55KSA9PiBjYWxsSW5mby5wYXJ0aWNpcGFudHMpXHJcbiAgICAgIC5maW5kKChwYXJ0aWNpcGFudDogYW55KSA9PiAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8uZnJvbSkgJiYgcGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgJiYgcGFydGljaXBhbnQ/LmNsaWVudClcclxuICAgICAgICB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py50bykgJiYgcGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgcGFydGljaXBhbnQ/LmNsaWVudCAmJiAhcGFydGljaXBhbnQ/LmJ1c2luZXNzTnVtYmVyKSkgJiYgIXBhcnRpY2lwYW50Py5pc0xlZnQgJiYgIXBhcnRpY2lwYW50Py5pc0hvbGQpO1xyXG4gIH1cclxuICB0b2dnbGVLZXlwYWQoKSB7XHJcbiAgICB0aGlzLnNob3dLZXlwYWQgPSAhdGhpcy5zaG93S2V5cGFkO1xyXG4gICAgdGhpcy5jYWxsSW5wdXQgPSAnJztcclxuICB9XHJcblxyXG4gIC8vIFN3aXRjaCB0aGF0IHNpbGVuY2VzIChvciByZXN0b3JlcykgdGhlIGluY29taW5nIHJpbmcgd2hpbGUgYSBjYWxsIGlzIGluIHByb2dyZXNzLlxyXG4gIHRvZ2dsZU11dGVJbmNvbWluZ0NhbGwoKSB7XHJcbiAgICBjb25zdCBuZXdNdXRlZCA9ICF0aGlzLnR3aWxpb1NlcnZpY2UuaXNJbmNvbWluZ011dGVkO1xyXG4gICAgdGhpcy50d2lsaW9TZXJ2aWNlLnNldEluY29taW5nTXV0ZWQobmV3TXV0ZWQpO1xyXG4gICAgaWYgKG5ld011dGVkKSB7XHJcbiAgICAgIC8vIE11dGUgT046IHN0b3AgdGhlIGN1c3RvbSByaW5nIGltbWVkaWF0ZWx5IGZvciBhbnkgY3VycmVudGx5LXJpbmdpbmcgY2FsbC5cclxuICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gTXV0ZSBPRkY6IGlmIHRoZXJlIGFyZSBzdGlsbCB1bmFjY2VwdGVkIGluY29taW5nIGNhbGxzIHJpbmdpbmcsIHJlc3VtZSB0aGUgcmluZy5cclxuICAgICAgY29uc3QgaGFzUmluZ2luZyA9IHRoaXMuY3VycmVudENhbGxMaXN0LnNvbWUoKGM6IGFueSkgPT4gYy5pc05vdGlmaWNhdGlvbiAmJiAhYy5pc0FjY2VwdENhbGwpO1xyXG4gICAgICBpZiAoaGFzUmluZ2luZykge1xyXG4gICAgICAgIC8vIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UucGxheSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDb250YWN0c1BhbmVsKGNhbGxJbmZvPzogYW55LCBpc0Nsb3NlPzogYm9vbGVhbik6IGFueSB7XHJcbiAgICBpZiAoaXNDbG9zZSkge1xyXG4gICAgICB0aGlzLnNob3dDb250YWN0c1BhbmVsID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIFxyXG5cclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0NvbnRhY3RzUGFuZWwgPSAhaXNDbG9zZTtcclxuICAgIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IGNhbGxJbmZvPy5jb25mZXJlbmNlSWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29uZk5hbWUgPSB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdC5maW5kKChyZXNEYXRhOmFueSk9PiByZXNEYXRhPy5jb25mZXJlbmNlSWQgPT09IGNhbGxJbmZvPy5jb25mZXJlbmNlSWQpPy5jYWxsTGFiZWwgfHwgJyc7XHJcbiAgICAvLyB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyhjYWxsSW5mbz8uY29uZmVyZW5jZUlkKTtcclxuICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gdGhpcy5jb250YWN0cztcclxuICAgIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdDtcclxuICAgIHRoaXMuaXNTZWFyY2hWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUMyQ0luZm9QYW5lbCh1c2VySW5mbzogYW55LCBpc0Nsb3NlPzogYm9vbGVhbik6IGFueSB7XHJcbiAgICBpZiAoaXNDbG9zZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSB7fTtcclxuICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXVzZXJJbmZvPy5idXNpbmVzc051bWJlciAmJiAhdXNlckluZm8/LmlzQnVzaW5lc3NOdW1iZXIpIHtcclxuICAgICAgLy8gTm9uLUMyQyBpdGVtOiBqdXN0IG1hcmsgaXQgYXMgc2VsZWN0ZWQgZm9yIGhpZ2hsaWdodCwgbm8gQVBJIGNhbGwgbmVlZGVkLlxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBTZXQgc2VsZWN0aW9uIGltbWVkaWF0ZWx5IHNvIHRoZSBoaWdobGlnaHQgYXBwZWFycyBiZWZvcmUgdGhlIEFQSSByZXNwb25kcy5cclxuICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbyA9IHVzZXJJbmZvO1xyXG4gICAgbGV0IHBhcnRpY2lwYW50SUQgPSB1c2VySW5mbz8uYnVzaW5lc3NQYXJ0aWNpcGFudElkIHx8IHVzZXJJbmZvPy5wYXJ0aWNpcGFudElkIHx8IHVzZXJJbmZvPy5pZFxyXG4gICAgaWYoIXRoaXMuQzJDb25mb0xpc3RbdXNlckluZm8/LnBhcnRpY2lwYW50SWRdICYmICF0aGlzLkMyQ29uZm9MaXN0W3VzZXJJbmZvPy5idXNpbmVzc1BhcnRpY2lwYW50SWRdKSB7XHJcbiAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRVc2VySW5mb3JtYXRpb24ocGFydGljaXBhbnRJRCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzSW5mbzogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IGl0ZW0/LnBhcnRpY2lwYW50SWQgPT0gdXNlckluZm8/LmlkKVxyXG4gICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0W2luZGV4XSA9IHRoaXMubWFwVXNlckluZm8odGhpcy5jdXJyZW50Q2FsbExpc3RbaW5kZXhdLCByZXNJbmZvPy5jMmNJbmZvcm1hdGlvbik7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gdGhpcy5jdXJyZW50Q2FsbExpc3RbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMuQzJDb25mb0xpc3RbcGFydGljaXBhbnRJRF0gPSB0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF07XHJcbiAgICAgIH0sIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgdXNlciBpbmZvOicsIGVycik7XHJcbiAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSB0aGlzLkMyQ29uZm9MaXN0W3BhcnRpY2lwYW50SURdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGVja1RleHRIZWlnaHQoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFkZFJlbW92ZVBhcnRpY2lwYW50KCkge1xyXG4gICAgdGhpcy5pc0FkZFJlbW92ZVBhcnRpY2lwYW50ID0gIXRoaXMuaXNBZGRSZW1vdmVQYXJ0aWNpcGFudDtcclxuICAgIC8vIGF3YWl0IHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZUlkKTtcclxuICAgIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHdhaXRpbmdDYWxsQWNjZXB0KGluY29taW5nQ2FsbEluZm86YW55KSB7XHJcbiAgICBsZXQgb3VyTnVtYmVySW5mbzogYW55ID0ge31cclxuICAgIGxldCBjYWxsSW5mbyA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmluZCgoY2FsbEluZm86IGFueSwgaTogbnVtYmVyKSA9PiB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQgPT0gY2FsbEluZm8uY29uZmVyZW5jZUlkKVxyXG4gICAgaWYgKGNhbGxJbmZvPy5wYXJ0aWNpcGFudHM/Lmxlbmd0aCkge1xyXG4gICAgICBvdXJOdW1iZXJJbmZvID0gY2FsbEluZm8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy5mcm9tKSAmJiByZXNEYXRhPy5jbGllbnQpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8udG8pICYmIHJlc0RhdGE/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgIXJlc0RhdGE/LmJ1c2luZXNzTnVtYmVyKSkgJiYgIXJlc0RhdGE/LmlzTGVmdCAmJiB0aGlzLmdldFN0YXR1cyhyZXNEYXRhKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc3QgY2FwdHVyZWRDYWxsID0gdGhpcy50d2lsaW9TZXJ2aWNlLmdldEluY29taW5nQ2FsbEJ5SWQoaW5jb21pbmdDYWxsSW5mbz8uY2xpZW50U2lkKTtcclxuICAgIHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0LmZvckVhY2goKGNhbGw6IGFueSkgPT4ge1xyXG4gICAgICBjYWxsLm11dGUodHJ1ZSk7XHJcbiAgICB9KTtcclxuICAgIGlmIChvdXJOdW1iZXJJbmZvPy5pZCAmJiBvdXJOdW1iZXJJbmZvPy5jb25mZXJlbmNlSWQgIT09IGluY29taW5nQ2FsbEluZm8/LmNvbmZlcmVuY2VJZCkge1xyXG4gICAgICB0aGlzLmlzVW5ob2xkQ29uZmVyZW5jZUNhbGwgPSB0cnVlO1xyXG4gICAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgICBwYXJ0aWNpcGFudElkOiBbb3VyTnVtYmVySW5mbz8uaWRdLFxyXG4gICAgICAgIGNvbmZlcmVuY2VJZDogb3VyTnVtYmVySW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgIGhvbGQ6IHRydWUsXHJcbiAgICAgICAgbXV0ZTogb3VyTnVtYmVySW5mbz8ubXV0ZSB8fCBmYWxzZVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5ob2xkUGFydGljaXBhbnQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSk9PntcclxuICAgICAgICBjb25zb2xlLmxvZygnaG9sZFBhcnRpY2lwYW50IHJlcycsIHJlcylcclxuICAgICAgICBpZihyZXM/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgICAgIHN3YWwoXCJFcnJvclwiLCByZXM/Lm1lc3NhZ2U/LmpvaW4/LihcIjxici8+XCIpIHx8ICdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLCBcImVycm9yXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFkZChpbmNvbWluZ0NhbGxJbmZvLCBvdXJOdW1iZXJJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuaXNDb25mZXJlbmNlQ2FsbEhvbGQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hZGQoaW5jb21pbmdDYWxsSW5mbywgb3VyTnVtYmVySW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGQoZGF0YT86IGFueSwgb3VyTnVtYmVySW5mbz86IGFueSwgY2FwdHVyZWRDYWxsPzogQ2FsbCkge1xyXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRDYWxsTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudHdpbGlvU2VydmljZS5zZXRJbmNvbWluZ011dGVkKGZhbHNlKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXNDb25uZWN0aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPSBkYXRhPy5pZDtcclxuICAgIHRoaXMudHdpbGlvU2VydmljZS5pc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZC5uZXh0KGRhdGE/LmlkKTtcclxuICAgIHRoaXMuaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICBcclxuICAgIGxldCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBjb25zdCBjYWxsVG9BY2NlcHQgPSB0aGlzLnR3aWxpb1NlcnZpY2UuZ2V0SW5jb21pbmdDYWxsQnlJZChkYXRhPy5jbGllbnRTaWQpO1xyXG4gICAgICBpZihjYWxsVG9BY2NlcHQ/LnBhcmFtZXRlcnM/LkNhbGxTaWQpIHtcclxuICAgICAgICBjYWxsVG9BY2NlcHQuYWNjZXB0KCk7XHJcbiAgICAgICAgY29uc3QgYWNjZXB0ZWRFbnRyeSA9IHtcclxuICAgICAgICAgIGNhbGw6IGNhbGxUb0FjY2VwdCxcclxuICAgICAgICAgIGNhbGxTaWQ6IGRhdGEuY2xpZW50U2lkLFxyXG4gICAgICAgICAgZGF0YVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5hY2NlcHRlZENhbGxMaXN0LnB1c2goYWNjZXB0ZWRFbnRyeSk7XHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3QucHVzaChjYWxsVG9BY2NlcHQpO1xyXG4gICAgICAgIC8vIFN0YXJ0IHByZXBhcmluZyB0aGUgc3BhcmUgZGV2aWNlIGltbWVkaWF0ZWx5IChiZWZvcmUgdGhlIEFQSSByb3VuZC10cmlwKVxyXG4gICAgICAgIC8vIHNvIGl0IGlzIHJlZ2lzdGVyZWQgd2VsbCBiZWZvcmUgdGhlIG5leHQgY29uY3VycmVudCBjYWxsIGNhbiBhcnJpdmUuXHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLnByZXBhcmVEZXZpY2UyRm9ySW5jb21pbmdDYWxsKCk7XHJcbiAgICAgICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBjaGFubmVsSWQ6IGVudmlyb25tZW50LmNoYW5uZWxJZCxcclxuICAgICAgICAgIHJlY29yZElkOiBkYXRhPy5pZCxcclxuICAgICAgICAgIGlwQWRkcmVzczogJycsXHJcbiAgICAgICAgICBpcENvdW50cnk6ICcnLFxyXG4gICAgICAgICAgY2FsbFN0YXR1czogJ2Fuc3dlcmVkJyxcclxuICAgICAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICAgICAgdXNlcklkOiAgdGhpcy51c2VySWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgY29tcGFueUlkOiAnJyxcclxuICAgICAgICAgIGNsaWVudFNpZDogY2FsbFRvQWNjZXB0LnBhcmFtZXRlcnM/LkNhbGxTaWQgfHwgZGF0YS5jbGllbnRTaWQsXHJcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IGRhdGE/LmNvbmZlcmVuY2VJZCB8fCAnbm8nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5zZXRJbmNvbWluZ0NhbGxTdGF0dXMocGF5bG9hZCkuc3Vic2NyaWJlKGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0ID0gZGF0YT8uY29uZmVyZW5jZUlkO1xyXG4gICAgICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLmlzQ3VycmVudEluY29taW5nQ2FsbExpc3QucHVzaChkYXRhPy5pZCk7XHJcbiAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc1Nob3dJbmNvbWluZ0NhbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmlzQWNjZXB0SUluY29taW5nQ2FsbC5uZXh0KHsgY29uZmVyZW5jZUlkOiBkYXRhPy5jb25mZXJlbmNlSWQsIHBhcnRpY2lwYW50SWQ6IGRhdGE/LmlkID8/IGRhdGE/LnBhcnRpY2lwYW50SWQgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb25uZWN0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZC5uZXh0KCcnKTtcclxuICAgICAgICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2Uub25Db25jdXJyZW50Q2FsbEFjY2VwdGVkKGNhbGxUb0FjY2VwdCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBhY2NlcHRlZFNpZCA9IGNhbGxUb0FjY2VwdC5wYXJhbWV0ZXJzPy5DYWxsU2lkO1xyXG4gICAgICAgICAgICBjYWxsVG9BY2NlcHQub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGFjY2VwdGVkU2lkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjY2VwdGVkQ2FsbExpc3QgPSB0aGlzLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKGMgPT4gYy5jYWxsU2lkICE9PSBhY2NlcHRlZFNpZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuYWNjZXB0ZWRDYWxsTGlzdCA9IHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBhY2NlcHRlZFNpZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5yZWxlYXNlQ29uY3VycmVudENhbGxEZXZpY2UoYWNjZXB0ZWRTaWQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UudGVhcmRvd25TcGFyZURldmljZXNJZklkbGUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBzaWQgPSBjYWxsVG9BY2NlcHQucGFyYW1ldGVycz8uQ2FsbFNpZDtcclxuICAgICAgICAgICAgdGhpcy5hY2NlcHRlZENhbGxMaXN0ID0gdGhpcy5hY2NlcHRlZENhbGxMaXN0LmZpbHRlcihjID0+IGMuY2FsbFNpZCAhPT0gc2lkKTtcclxuICAgICAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3QgPSB0aGlzLnR3aWxpb1NlcnZpY2UuYWNjZXB0ZWRDYWxsTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBzaWRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKVxyXG4gICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQubmV4dCgnJyk7XHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmRJbmRleCgocmVzKSA9PiByZXMucGFydGljaXBhbnRJZCA9PSBkYXRhLnBhcnRpY2lwYW50SWQpXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnNwbGljZShpbmRleCwgMSlcclxuICAgICAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzU2hvd0luY29taW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ29ubmVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5jb21pbmdDYWxsQnRuRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcxMDk2JylcclxuICAgICAgICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdChkYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAvLyBzd2FsKFwiRXJyb3JcIiwgcmVzPy5tZXNzYWdlPy5qb2luPy4oXCI8YnIvPlwiKSB8fCAnSW50ZXJuYWwgU2VydmVyIEVycm9yJywgXCJlcnJvclwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHNldFRpbWVvdXQoKCk9PntcclxuICAgICAgICAgICAgdGhpcy5pc1VuaG9sZENvbmZlcmVuY2VDYWxsID0gZmFsc2U7XHJcbiAgICAgICAgICB9LDUwMClcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZClcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0gZWxzZSBpZih0aGlzLm1pc3NDYWxsSW5mbz8uZGF0YT8uZGF0YT8ucmVjb3JkSWQgPT0gZGF0YT8uaWQgJiYgIWNhbGxUb0FjY2VwdC5wYXJhbWV0ZXJzPy5DYWxsU2lkKXtcclxuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xyXG4gICAgICAgIGNvbnN0IHNpZCA9IGNhbGxUb0FjY2VwdC5wYXJhbWV0ZXJzPy5DYWxsU2lkO1xyXG4gICAgICAgIHRoaXMuaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPSAnJztcclxuICAgICAgICB0aGlzLmFjY2VwdGVkQ2FsbExpc3QgPSB0aGlzLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKGMgPT4gYy5jYWxsU2lkICE9PSBzaWQpO1xyXG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0ID0gdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBzaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgcGFydGljaXBhbnRJZDogW291ck51bWJlckluZm8/LmlkXSxcclxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogb3VyTnVtYmVySW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAgICAgICBtdXRlOiBvdXJOdW1iZXJJbmZvPy5tdXRlIHx8IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5ob2xkUGFydGljaXBhbnQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSk9PntcclxuICAgICAgICAgIGlmKHJlcz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICBzd2FsKFwiRXJyb3JcIiwgcmVzPy5tZXNzYWdlPy5qb2luPy4oXCI8YnIvPlwiKSB8fCAnSW50ZXJuYWwgU2VydmVyIEVycm9yJywgXCJlcnJvclwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc1Nob3dJbmNvbWluZ0NhbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQ29ubmVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5kZXN0cm95RGV2aWNlMigpO1xyXG4gICAgICAgIHN3YWwoXCJFcnJvclwiLCAnSW50ZXJuYWwgU2VydmVyIEVycm9yJywgXCJlcnJvclwiKTtcclxuICAgICAgICB0aGlzLm1pc3NDYWxsSW5mbyA9IHt9O1xyXG4gICAgICB9XHJcbiAgICB9LCAxMDAwKTtcclxuICB9XHJcbiAgYXN5bmMgY2FsbENvbnRhY3QoY29udGFjdDogYW55LCBpc1Vuc2F2ZWROdW1iZXI/OiBib29sZWFuLCBvcHRpb25zPzogeyBza2lwRHVwbGljYXRlQ2hlY2s/OiBib29sZWFuIH0pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3QgcGhvbmVOdW1iZXIgPSBpc1Vuc2F2ZWROdW1iZXIgPyBjb250YWN0IDogY29udGFjdD8ubnVtYmVyc0xpc3Q/LlswXT8ubnVtYmVyIHx8IGNvbnRhY3Q/LnBob25lO1xyXG4gICAgXHJcbiAgICBjb25zdCB0YXJnZXRDb25mZXJlbmNlSWQgPSB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgfHwgdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkO1xyXG4gICAgaWYgKCFvcHRpb25zPy5za2lwRHVwbGljYXRlQ2hlY2spIHtcclxuICAgICAgaWYgKHRhcmdldENvbmZlcmVuY2VJZCkge1xyXG4gICAgICAgIGNvbnN0IGFscmVhZHlJbkNhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChyZXM6IGFueSkgPT5cclxuICAgICAgICAgIHJlcy5jb25mZXJlbmNlSWQgPT09IHRhcmdldENvbmZlcmVuY2VJZCAmJlxyXG4gICAgICAgICAgKHJlcy50byA9PSBwaG9uZU51bWJlciB8fCByZXMuZnJvbSA9PSBwaG9uZU51bWJlcikgJiZcclxuICAgICAgICAgICFyZXM/LmlzTGVmdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGFscmVhZHlJbkNhbGwpIHtcclxuICAgICAgICAgIHN3YWwoJ0Vycm9yJywgYEFscmVhZHkgJHtwaG9uZU51bWJlcn0gbnVtYmVyIGluIHRoaXMgY2FsbCAyLmApO1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuaXNDb25mZXJlbmNlKSB7XHJcbiAgICAgICAgbGV0IGRhdGE6IGFueSA9IGF3YWl0IHRoaXMuYWRkUGFydGljaXBhbnRUb0NhbGwoe1xyXG4gICAgICAgICAgZnJvbTogdGhpcy5jYWxsRGF0YT8uZnJvbSA/IHRoaXMuY2FsbERhdGE/LmZyb20gOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcixcclxuICAgICAgICAgIHJvdXRlOiBcIk9VVEdPSU5HXCIsXHJcbiAgICAgICAgICBwYXJ0aWNpcGFudE51bWJlcjogcGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgIHVzZXJJZDogdGhpcy51c2VySWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgcHJveHk6ICcnLFxyXG4gICAgICAgICAgY291bnRyeWNvZGU6ICcnLFxyXG4gICAgICAgICAgZGV2aWNlSWQ6IHRoaXMuZGV2aWNlSWRcclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgaG9sZEluZm86IGFueSA9IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbZGF0YT8ucGFydGljaXBhbnRJZCB8fCBkYXRhPy5pZF0sXHJcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgIGhvbGQ6IG51bGwsXHJcbiAgICAgICAgICBtdXRlOiB0aGlzLmN1cnJlbnRDYWxsPy5tdXRlIHx8IGZhbHNlLFxyXG4gICAgICAgICAgY29uZmVyZW5jZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmKGhvbGRJbmZvPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdob2xkSW5mbyAxMjE4JywgaG9sZEluZm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FsbERhdGEgPSB7XHJcbiAgICAgICAgICBwaG9uZTogcGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICBkaXNwbGF5TnVtOiBwaG9uZU51bWJlcixcclxuICAgICAgICAgIG5hbWU6IGNvbnRhY3Q/Lm5hbWUgfHwgYCR7Y29udGFjdD8uZmlyc3ROYW1lfSAke2NvbnRhY3Q/Lmxhc3ROYW1lfWAgfHwgcGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICBpbWc6IGNvbnRhY3Q/LmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBkYXRhPy5wYXJ0aWNpcGFudElkLFxyXG4gICAgICAgICAgZnJvbTogdGhpcy5zZWxlY3RlZENhbGxlcklkPy5udW1iZXIsXHJcbiAgICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXHJcbiAgICAgICAgICBpc0hvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgaXNMZWZ0OiBmYWxzZSxcclxuICAgICAgICAgIGlzQ29uZmVyZW5jZTogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VJZDtcclxuICAgICAgICAvLyB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyh0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VJZCk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgbGV0IHBhcnRpY2lwYW50SURzOiBhbnkgPSBbXTtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LmZvckVhY2goYXN5bmMgKGM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYz8ucGFydGljaXBhbnRJZCAmJiAhYz8uaXNIb2xkICYmIHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZUlkID09IGM/LmNvbmZlcmVuY2VJZCkge1xyXG4gICAgICAgICAgICAgIHBhcnRpY2lwYW50SURzLnB1c2goYz8ucGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCBwYXJ0aWNpcGFudCB0byB0aGUgY29uZmVyZW5jZVxyXG4gICAgICAgICAgbGV0IGRhdGE6IGFueSA9IGF3YWl0IHRoaXMuYWRkUGFydGljaXBhbnRUb0NhbGwoe1xyXG4gICAgICAgICAgICBmcm9tOiB0aGlzLmNhbGxEYXRhPy5mcm9tIHx8IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxyXG4gICAgICAgICAgICByb3V0ZTogXCJPVVRHT0lOR1wiLFxyXG4gICAgICAgICAgICBwYXJ0aWNpcGFudE51bWJlcjogcGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICB1c2VySWQ6IHRoaXMudXNlcklkIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgcHJveHk6ICcnLFxyXG4gICAgICAgICAgICBjb3VudHJ5Y29kZTogJycsXHJcbiAgICAgICAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuaXNDYWxsT25Ib2xkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5pc0NvbmZlcmVuY2UgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIHBhcnRpY2lwYW50SURzLnB1c2goZGF0YT8ucGFydGljaXBhbnRJZClcclxuICAgICAgICAgIGxldCBob2xkSW5mbzogYW55ID0gYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgICAgcGFydGljaXBhbnRJZDogcGFydGljaXBhbnRJRHMsXHJcbiAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jdXJyZW50Q2FsbC5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICAgIGhvbGQ6IG51bGwsXHJcbiAgICAgICAgICAgIG11dGU6IG51bGwsXHJcbiAgICAgICAgICAgIGNvbmZlcmVuY2U6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmIChob2xkSW5mbz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdob2xkSW5mbyAxMjc3JywgaG9sZEluZm8pXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gYXdhaXQgdGhpcy5nZXRBbGxQYXJ0aWNpcGFudHModGhpcy5jdXJyZW50Q2FsbC5jb25mZXJlbmNlSWQpO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgICAgICB0aGlzLmNhbGxEYXRhID0ge1xyXG4gICAgICAgICAgICBwaG9uZTogcGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOdW06IHBob25lTnVtYmVyLFxyXG4gICAgICAgICAgICBuYW1lOiBjb250YWN0Py5uYW1lIHx8IGAke2NvbnRhY3Q/LmZpcnN0TmFtZX0gJHtjb250YWN0Py5sYXN0TmFtZX1gIHx8IHBob25lTnVtYmVyLFxyXG4gICAgICAgICAgICBpbWc6IGNvbnRhY3Q/LmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IGRhdGE/LnBhcnRpY2lwYW50SWQsXHJcbiAgICAgICAgICAgIGZyb206IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxyXG4gICAgICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXHJcbiAgICAgICAgICAgIGlzSG9sZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGlzTGVmdDogZmFsc2UsXHJcbiAgICAgICAgICAgIGlzQ29uZmVyZW5jZTogZmFsc2VcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFkZGluZyBwYXJ0aWNpcGFudDonLCBlcnJvcik7XHJcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBDYWxsVG9VbnNhdmVkTnVtYmVyKG51bWJlcjogc3RyaW5nLCBpc05ld0NvbmZlcmVuY2U/OiBib29sZWFuLCBvcHRpb25zPzogeyBza2lwRHVwbGljYXRlQ2hlY2s/OiBib29sZWFuIH0pIHtcclxuICAgIGNvbnNvbGUubG9nKCdza2lwRHVwbGljYXRlQ2hlY2s6Jywgb3B0aW9ucz8uc2tpcER1cGxpY2F0ZUNoZWNrLCAnaXNOZXdDb25mZXJlbmNlOicsIGlzTmV3Q29uZmVyZW5jZSk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBpc0ludmFsaWQgPSBhd2FpdCB0aGlzLmlzSW52YWxpZE51bWJlcihudW1iZXIpO1xyXG4gICAgICBpZiAoaXNJbnZhbGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAoIWlzTmV3Q29uZmVyZW5jZSAmJiAhb3B0aW9ucz8uc2tpcER1cGxpY2F0ZUNoZWNrKSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0Q29uZmVyZW5jZUlkID0gdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0IHx8IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZDtcclxuICAgICAgICBpZiAodGFyZ2V0Q29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgICBsZXQgYWxyZWFkeUluQ2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKHJlczogYW55KSA9PlxyXG4gICAgICAgICAgICByZXMuY29uZmVyZW5jZUlkID09PSB0YXJnZXRDb25mZXJlbmNlSWQgJiZcclxuICAgICAgICAgICAgKChyZXMudG8gPT0gbnVtYmVyICYmIHJlcz8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJykgfHxcclxuICAgICAgICAgICAgICAocmVzLmZyb20gPT0gbnVtYmVyICYmIHJlcz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyAmJiByZXMuaG9zdCkpICYmXHJcbiAgICAgICAgICAgICFyZXM/LmlzTGVmdFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChhbHJlYWR5SW5DYWxsKSB7XHJcbiAgICAgICAgICAgIHN3YWwoJ0Vycm9yJywgYEFscmVhZHkgJHtudW1iZXJ9IG51bWJlciBpbiB0aGlzIGNhbGwxLmApO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAobnVtYmVyID09PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndHdpbGlvTnVtYmVyJykpIHtcclxuICAgICAgICBzd2FsKCdFcnJvcicsICdZb3UgY2FuIG5vdCBkaWFsIHRoaXMgbnVtYmVyJyk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgY29udGFjdCA9IHRoaXMuY29udGFjdHMuZmluZCgoY29udGFjdDogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRhY3QubnVtYmVyc0xpc3Quc29tZSgobnVtOiBhbnkpID0+IG51bS5udW1iZXIgPT09IG51bWJlcilcclxuICAgICAgfSk7XHJcbiAgICAgIG51bWJlciA9IGF3YWl0IHRoaXMuZ2V0VG9OdW1iZXIobnVtYmVyKTtcclxuXHJcbiAgICAgIC8vIFVwZGF0ZSBjYWxsIGRhdGEgaW4gYSBzaW5nbGUgb3BlcmF0aW9uXHJcbiAgICAgIGNvbnN0IGNhbGxEYXRhID0ge1xyXG4gICAgICAgIG5hbWU6IGNvbnRhY3Q/LmZpcnN0TmFtZSxcclxuICAgICAgICBpbWc6IGNvbnRhY3Q/LmltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgICBwaG9uZTogbnVtYmVyLFxyXG4gICAgICAgIGV4dE51bTogJycsXHJcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxyXG4gICAgICAgIGRpYWw6IHRydWUsXHJcbiAgICAgICAgZnJvbTogdGhpcy5zZWxlY3RlZENhbGxlcklkLm51bWJlcixcclxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKGlzTmV3Q29uZmVyZW5jZSkge1xyXG4gICAgICAgIHRoaXMuaXNOZXdBZGRlZENhbGwgPSB0cnVlO1xyXG4gICAgICAgIGxldCBvdXJOdW1iZXJJbmZvOiBhbnkgPSB7fVxyXG4gICAgICAgIGxldCBjYWxsSW5mbyA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmluZCgoY2FsbEluZm86IGFueSwgaTogbnVtYmVyKSA9PiB0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VJZCA9PSBjYWxsSW5mby5jb25mZXJlbmNlSWQpXHJcbiAgICAgICAgaWYgKGNhbGxJbmZvKSB7XHJcbiAgICAgICAgICBvdXJOdW1iZXJJbmZvID0gY2FsbEluZm8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNEYXRhPy5idXNpbmVzc051bWJlcikpICYmICFyZXNEYXRhPy5pc0xlZnRcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvdXJOdW1iZXJJbmZvPy5pZCkge1xyXG4gICAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbb3VyTnVtYmVySW5mbz8uaWRdLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IG91ck51bWJlckluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgaG9sZDogdHJ1ZSxcclxuICAgICAgICAgICAgbXV0ZTogb3VyTnVtYmVySW5mbz8ubXV0ZSB8fCBmYWxzZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZihob2xkSW5mbz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdob2xkSW5mbyAxMzU1JywgaG9sZEluZm8pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMub25BZGROZXdDYWxsKGNhbGxEYXRhLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5vbkFkZE5ld0NhbGwoY2FsbERhdGEsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgICAgICB0aGlzLmNhbGxDb250YWN0KG51bWJlciwgdHJ1ZSwgb3B0aW9ucylcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdGYWlsZWQgdG8gaW5pdGlhdGUgY2FsbC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25BZGROZXdDYWxsKGNhbGxEYXRhOiBhbnksIGlzTmV3Q29uZmVyZW5jZUNhbGwgPSBmYWxzZSkge1xyXG4gICAgLy8gd2FybmluZyBvbmx5IGZvciBORVcgU0VQQVJBVEUgQ0FMTFxyXG4gICAgaWYgKGlzTmV3Q29uZmVyZW5jZUNhbGwgJiYgdGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnBlbmRpbmdDYWxsRGF0YSA9IGNhbGxEYXRhO1xyXG4gICAgICB0aGlzLnNob3dDb25mZXJlbmNlV2FybmluZ01vZGFsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXJ0Q2FsbChjYWxsRGF0YSwgaXNOZXdDb25mZXJlbmNlQ2FsbCk7XHJcbiAgfVxyXG5cclxuICBjb25maXJtTmV3Q2FsbCgpIHtcclxuICAgIHRoaXMuc2hvd0NvbmZlcmVuY2VXYXJuaW5nTW9kYWwgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnBlbmRpbmdDYWxsRGF0YSkge1xyXG4gICAgICB0aGlzLm5ld0NhbGxMb2FkZXJEYXRhID0ge1xyXG4gICAgICAgIG5hbWU6IHRoaXMucGVuZGluZ0NhbGxEYXRhLm5hbWUgfHwgJycsXHJcbiAgICAgICAgcGhvbmU6IHRoaXMucGVuZGluZ0NhbGxEYXRhLnBob25lLFxyXG4gICAgICAgIGltZzogdGhpcy5wZW5kaW5nQ2FsbERhdGEuaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1xyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdCA9IHtcclxuICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgIHR5cGU6ICdhbGVydC1zdWNjZXNzJyxcclxuICAgICAgICBudW1iZXI6IHRoaXMucGVuZGluZ0NhbGxEYXRhLnBob25lLFxyXG4gICAgICAgIGRpc3BsYXlOdW06IHRoaXMucGVuZGluZ0NhbGxEYXRhLnBob25lXHJcbiAgICAgIH07ICBcclxuICAgICAgXHJcbiAgICAgIHRoaXMuc2hvd05ld0NhbGxMb2FkZXIgPSB0cnVlO1xyXG4gICAgICBcclxuICAgICAgXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LnNob3cgPSBmYWxzZTtcclxuICAgICAgfSwgNzAwMCk7XHJcbiAgICAgIHRoaXMuc3RhcnRDYWxsKHRoaXMucGVuZGluZ0NhbGxEYXRhLCB0cnVlKTtcclxuICAgICAgdGhpcy5wZW5kaW5nQ2FsbERhdGEgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsTmV3Q2FsbCgpIHtcclxuICAgIHRoaXMuc2hvd0NvbmZlcmVuY2VXYXJuaW5nTW9kYWwgPSBmYWxzZTtcclxuICAgIHRoaXMucGVuZGluZ0NhbGxEYXRhID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFRvTnVtYmVyKGRpYWxlZE51bWJlcjogc3RyaW5nKSB7XHJcbiAgICBpZiAoZGlhbGVkTnVtYmVyWzBdICE9PSAnKycpIHtcclxuICAgICAgLy8gdGhpcyBpcyBjYXNlIHdoZW4gdXNlciBnZW9sb2NhdGlvbiBkaWFsIGNvZGUgaXMgb25cclxuICAgICAgbGV0IGlwQWRkcmVzczogYW55ID0gYXdhaXQgdGhpcy5pcFNlcnZpY2UuZ2V0SXBBZGRyZXNzSW5mbygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IHRoaXMudHdpbGlvU2VydmljZS5nZXRUb051bWJlcihkaWFsZWROdW1iZXIsIGlwQWRkcmVzcy5hZGRyZXNzLmNvdW50cnlDb2RlKS50b1Byb21pc2UoKTtcclxuICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlcz8udG9OdW1iZXJcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZGlhbGVkTnVtYmVyXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBkaWFsZWROdW1iZXJcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGlzSW52YWxpZE51bWJlcihudW1iZXI6IHN0cmluZykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKG51bWJlciA9PSAnJykge1xyXG4gICAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnSW52YWxpZCBOdW1iZXInKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB2YWxpZE51bWJlclBhdHRlcm4gPSAvXlsrXFxkXFxzKCktXSokLzsgLy8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHZhbGlkIGNoYXJhY3RlcnNcclxuICAgICAgY29uc3QgcGhvbmVOdW1iZXIgPSBudW1iZXI7XHJcbiAgICAgIGlmICghdmFsaWROdW1iZXJQYXR0ZXJuLnRlc3QocGhvbmVOdW1iZXIpKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdJbnZhbGlkIE51bWJlcicpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnSW52YWxpZCBOdW1iZXInKTtcclxuICAgICAgcmV0dXJuIHRydWU7IC8vIFJldHVybiB0cnVlIGlmIGFuIGVycm9yIG9jY3VycmVkLCBtZWFuaW5nIHRoZSBudW1iZXIgaXMgaW52YWxpZFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd0RpYWxBbGVydChtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGlhbEFsZXJ0ID0ge1xyXG4gICAgICBtc2c6IG1lc3NhZ2UsXHJcbiAgICAgIHNob3c6IHRydWVcclxuICAgIH07XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5kaWFsQWxlcnQuc2hvdyA9IGZhbHNlO1xyXG4gICAgfSwgMzAwMCk7XHJcbiAgfVxyXG5cclxuYXN5bmMgZ2V0QWxsUGFydGljaXBhbnRzKGNvbmZlcmVuY2VJZDogc3RyaW5nKSB7XHJcbiAgc2V0VGltZW91dCgoKT0+e1xyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldEFsbFBhcnRpY2lwYW50cyhjb25mZXJlbmNlSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBhcnRpY2lwYW50cyA9IHJlcz8ucGFydGljaXBhbnRzIHx8IHJlcz8ucGFydGljaXBhbnQgfHwgW107XHJcbiAgICAgICAgLy8gaWYgKCFwYXJ0aWNpcGFudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gICB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdCA9IFtdO1xyXG4gICAgICAgIC8vICAgdGhpcy5maWx0ZXJlZFBhcnRpY2lwZW50TGlzdCA9IFtdO1xyXG4gICAgICAgIC8vICAgcmV0dXJuO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICAvLyBjb25zdCB1cGRhdGVkUGFydGljaXBhbnRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgLy8gICBwYXJ0aWNpcGFudHMubWFwKGFzeW5jIChwOiBhbnkpID0+IHtcclxuICAgICAgICAvLyAgICAgY29uc3QgZnJvbU5hbWUgPSBhd2FpdCB0aGlzLmdldE5hbWUocC5mcm9tKTtcclxuICAgICAgICAvLyAgICAgY29uc3QgdG9OYW1lID0gYXdhaXQgdGhpcy5nZXROYW1lKHAudG8pO1xyXG4gIFxyXG4gICAgICAgIC8vICAgICByZXR1cm4ge1xyXG4gICAgICAgIC8vICAgICAgIC4uLnAsXHJcbiAgICAgICAgLy8gICAgICAgZnJvbU5hbWU6IGZyb21OYW1lIHx8IHAuZnJvbU5hbWUsXHJcbiAgICAgICAgLy8gICAgICAgdG9OYW1lOiB0b05hbWUgfHwgcC50b05hbWUsXHJcbiAgICAgICAgLy8gICAgIH07XHJcbiAgICAgICAgLy8gICB9KVxyXG4gICAgICAgIC8vICk7XHJcbiAgXHJcbiAgICAgICAgLy8gdGhpcy5hbGxQYXJ0aWNpcGVudExpc3QgPSB1cGRhdGVkUGFydGljaXBhbnRzO1xyXG4gICAgICAgIC8vIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSBbLi4udXBkYXRlZFBhcnRpY2lwYW50c107ICBcclxuICAgICAgICAvLyB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hbGxQYXJ0aWNpcGVudExpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gW107XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH0sNzAwKVxyXG59XHJcblxyXG4gIGFzeW5jIHN3YXBDYWxscyhjYWxsSW5mbzogYW55LCBpc0NvbmZlcmVuY2VDYWxsPzogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aGlzLmlzUGFydGljaXBhbnRQYW5lbExvYWRpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5mb3JFYWNoKGFzeW5jIChjOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGM/LmNvbmZlcmVuY2VJZCA9PSBjYWxsSW5mbz8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgdGhpcy5pc0hvbGRCdG5EaXNhYmxlID0gdHJ1ZTtcclxuICAgICAgICBsZXQgcGFydGljaXBhbnRJbmZvID0gYy5wYXJ0aWNpcGFudHMuZmluZCgocmVzRGF0YTogYW55KSA9PlxyXG4gICAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNEYXRhPy5idXNpbmVzc051bWJlcikpICYmICFyZXNEYXRhPy5pc0xlZnRcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKHBhcnRpY2lwYW50SW5mbz8uaWQpIHtcclxuICAgICAgICAgIGxldCBob2xkSW5mbzogYW55ID0gYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW3BhcnRpY2lwYW50SW5mbz8uaWRdLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHBhcnRpY2lwYW50SW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICBob2xkOiBmYWxzZSxcclxuICAgICAgICAgICAgbXV0ZTogcGFydGljaXBhbnRJbmZvPy5tdXRlIHx8IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmKGhvbGRJbmZvPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hvbGRJbmZvIDE1MDInLCBob2xkSW5mbylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIHRoaXMuaXNDb25mZXJlbmNlQ2FsbEhvbGQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5pc0hvbGRCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSBjYWxsSW5mbz8uY29uZmVyZW5jZUlkXHJcbiAgICAgICAgICAvLyB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyhjYWxsSW5mbz8uY29uZmVyZW5jZUlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IHBhcnRpY2lwYW50SW5mbyA9IGMucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pICYmIHJlc0RhdGE/LmNsaWVudCkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiAhcmVzRGF0YT8uYnVzaW5lc3NOdW1iZXIpKSAmJiAhcmVzRGF0YT8uaXNMZWZ0XHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmIChwYXJ0aWNpcGFudEluZm8/LmlkICYmICFwYXJ0aWNpcGFudEluZm8/LmlzSG9sZCkge1xyXG4gICAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbcGFydGljaXBhbnRJbmZvPy5pZF0sXHJcbiAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogcGFydGljaXBhbnRJbmZvPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICAgIGhvbGQ6IHRydWUsXHJcbiAgICAgICAgICAgIG11dGU6IHBhcnRpY2lwYW50SW5mbz8ubXV0ZSB8fCBmYWxzZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZihob2xkSW5mbz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdob2xkSW5mbyAxNTIxJywgaG9sZEluZm8pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmlzSG9sZEJ0bkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgIC8vIHRoaXMuaXNDb25mZXJlbmNlQ2FsbEhvbGQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoYz8uaXNDb25mZXJlbmNlICYmICFjPy5pc0hvbGQgJiYgdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkID09IGM/LmNvbmZlcmVuY2VJZCkge1xyXG4gICAgICAgIGxldCBob2xkSW5mbzogYW55ID0gYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtjPy5wYXJ0aWNpcGFudElkIHx8IGM/LmlkXSxcclxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogYy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICBob2xkOiB0cnVlLFxyXG4gICAgICAgICAgbXV0ZTogYz8ubXV0ZSB8fCBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmKGhvbGRJbmZvPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdob2xkSW5mbyAxNTM1JywgaG9sZEluZm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMuaXNDb25mZXJlbmNlQ2FsbEhvbGQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgaGFzRGV0YWlsZWRJbmZvKGNhbGxEYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghY2FsbERhdGEpIHJldHVybiBmYWxzZTtcclxuICAgIC8vIENoZWNrIGlmIHVzZXJJbmZvIGV4aXN0cyBhbmQgaGFzIG1lYW5pbmdmdWwgZGF0YVxyXG4gICAgaWYgKGNhbGxEYXRhLnVzZXJJbmZvICYmIGNhbGxEYXRhLnVzZXJJbmZvLmMyY0luZm9ybWF0aW9uKSB7XHJcbiAgICAgIGNvbnN0IGluZm8gPSBjYWxsRGF0YS51c2VySW5mby5jMmNJbmZvcm1hdGlvbjtcclxuICAgICAgcmV0dXJuICEhKFxyXG4gICAgICAgIGluZm8uc3ViamVjdCAmJiBpbmZvLnN1YmplY3QgIT09ICctJyB8fFxyXG4gICAgICAgIGluZm8uZW1haWwgJiYgaW5mby5lbWFpbCAhPT0gJy0nIHx8XHJcbiAgICAgICAgaW5mby5tZXNzYWdlICYmIGluZm8ubWVzc2FnZSAhPT0gJy0nIHx8XHJcbiAgICAgICAgaW5mby5wb2ludE5hbWUgJiYgaW5mby5wb2ludE5hbWUgIT09ICctJyB8fFxyXG4gICAgICAgIGluZm8uc291cmNlTmFtZSAmJiBpbmZvLnNvdXJjZU5hbWUgIT09ICctJyB8fFxyXG4gICAgICAgIGluZm8uZXh0ZW5zaW9uICYmIGluZm8uZXh0ZW5zaW9uICE9PSAnLScgfHxcclxuICAgICAgICBpbmZvLnVybCB8fFxyXG4gICAgICAgIGluZm8ubGF0aXR1ZGUgfHxcclxuICAgICAgICBpbmZvLmxvbmdpdHVkZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25DYWxsSW5wdXRzKG51bTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihudW0pIHx8IG51bSA9PSAnKycgfHwgbnVtID09ICcqJyB8fCBudW0gPT0gJyMnKSB7XHJcbiAgICAgICAgaWYgKG51bSA9PSAnIycpIHtcclxuICAgICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi1oYXNoLS5tcDNgKS5wbGF5KCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChudW0gPT0gJyonKSB7XHJcbiAgICAgICAgICBuZXcgQXVkaW8oYC9hc3NldHMvZGlhbC10b25lcy9kdG1mL2R0bWYtc3Rhci0ubXAzYCkucGxheSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuZXcgQXVkaW8oYC9hc3NldHMvZGlhbC10b25lcy9kdG1mL2R0bWYtJHtudW19LS5tcDNgKS5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FsbElucHV0ID0gdGhpcy5jYWxsSW5wdXQgKyBTdHJpbmcobnVtKTtcclxuICAgICAgICB0aGlzLnNob3dDbGVhckJ0biA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHN0ciA9IFN0cmluZyhudW0pO1xyXG4gICAgICBsZXQgc2VsZkNhbGwgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZpbmQoKHJlczogYW55KSA9PiByZXM/LmNvbmZlcmVuY2VJZCA9PSB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQpPy5wYXJ0aWNpcGFudHMuZmluZCgocmVzRGF0YTogYW55KSA9PlxyXG4gICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pICYmIHJlc0RhdGE/LmNsaWVudCkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiByZXNEYXRhPy5ob3N0KSkgJiYgIXJlc0RhdGE/LmlzTGVmdFxyXG4gICAgICApO1xyXG4gICAgICBsZXQgZGV2aWNlID0gdGhpcy50d2lsaW9TZXJ2aWNlLmdldEluY29taW5nQ2FsbEJ5SWQoc2VsZkNhbGw/LmNhbGxTaWQgfHwgc2VsZkNhbGw/LmNsaWVudFNpZClcclxuICAgICAgaWYoZGV2aWNlICYmIGRldmljZT8uX3N0YXR1cyAgPT0gJ29wZW4nKSB7XHJcbiAgICAgICAgZGV2aWNlLnNlbmREaWdpdHMoc3RyKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNhbGw/LnNlbmREaWdpdHMoc3RyKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uQ2FsbElucHV0RW50ZXIoZXY6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IHNlbGZDYWxsID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5maW5kKChyZXM6IGFueSkgPT4gcmVzPy5jb25mZXJlbmNlSWQgPT0gdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkKT8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy5mcm9tKSAmJiByZXNEYXRhPy5jbGllbnQpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8udG8pICYmIHJlc0RhdGE/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgcmVzRGF0YT8uaG9zdCkpICYmICFyZXNEYXRhPy5pc0xlZnRcclxuICAgICAgKTtcclxuICAgICAgbGV0IGRldmljZSA9IHRoaXMudHdpbGlvU2VydmljZS5nZXRJbmNvbWluZ0NhbGxCeUlkKHNlbGZDYWxsPy5jYWxsU2lkIHx8IHNlbGZDYWxsPy5jbGllbnRTaWQpXHJcbiAgICAgIGlmKGRldmljZSAmJiBkZXZpY2U/Ll9zdGF0dXMgID09ICdvcGVuJykge1xyXG4gICAgICAgIGRldmljZS5zZW5kRGlnaXRzKFN0cmluZyhldi5rZXkpKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNhbGw/LnNlbmREaWdpdHMoU3RyaW5nKGV2LmtleSkpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFySW5wdXRzKCkge1xyXG4gICAgdGhpcy5jYWxsSW5wdXQgPSB0aGlzLmNhbGxJbnB1dC5zbGljZSgwLCAtMSk7XHJcbiAgfVxyXG4gIGlzTWluaW1pc2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbWluaW1pc2VEaWFscGFkKCkge1xyXG4gICAgdGhpcy5taW5pbWlzZUV2ZW50LmVtaXQodHJ1ZSk7XHJcbiAgICB0aGlzLmlzTWluaW1pc2VkID0gdHJ1ZTtcclxuICB9XHJcbiAgbWF4aW1pc2VEaWFscGFkKCkge1xyXG4gICAgdGhpcy5taW5pbWlzZUV2ZW50LmVtaXQoZmFsc2UpO1xyXG4gICAgdGhpcy5pc01pbmltaXNlZCA9IGZhbHNlO1xyXG4gIH1cclxuICB0b2dnbGVSZWNvcmRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgIH1cclxuICB9XHJcbiAgc3RhcnRSZWNvcmRpbmcoKSB7XHJcbiAgICBsZXQgc2lkO1xyXG4gICAgY29uc3QgZGV0YWlscyA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDYWxsU2lkKCk7XHJcbiAgICB0aGlzLmluY29taW5nQ2FsbFNpZCA9IGRldGFpbHMuY2FsbFNpZDtcclxuICAgIHRoaXMuaW5jb21pbmdSZWNvcmRDYWxsID0gZGV0YWlscy5yZWNvcmRDYWxsO1xyXG4gICAgc2lkID0gdGhpcy5pbmNvbWluZ0NhbGxTaWQgPyB0aGlzLmluY29taW5nQ2FsbFNpZCA6IHRoaXMuY2FsbFNpZCB8fCB0aGlzLmFkZFJlcz8uY29uZmVyZW5jZVNpZDtcclxuXHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q2FsbFJlY29yZGluZyh7IFwiY29uZmVyZW5jZUlkXCI6IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCB9KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICB0aGlzLmlzUmVjb3JkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRpbWVFbGFwc2VkID0gMDtcclxuICAgICAgdGhpcy5zdGFydFRpbWVyMSgpO1xyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdGFydGluZyByZWNvcmRpbmcnLCBlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgc3RvcFJlY29yZGluZygpIHtcclxuICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnRpbWVyU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgcGF1c2VSZWNvcmRpbmcoKSB7XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UucGF1c2VPclJlc3VtZVJlY29yZGluZyh0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQsICdwYXVzZScpLnN1YnNjcmliZShcclxuICAgICAgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcFJlY29yZGluZ1RpbWVyKCk7XHJcbiAgICAgICAgdGhpcy5pc1BhdXNlZCA9IHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhdXNpbmcgcmVjb3JkaW5nOicsIGVycm9yKTtcclxuICAgICAgICAvLyBDb25zaWRlciB1cGRhdGluZyB0aGUgVUkgdG8gc2hvdyB0aGUgZXJyb3Igc3RhdGVcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgcmVzdW1lUmVjb3JkaW5nKCkge1xyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnBhdXNlT3JSZXN1bWVSZWNvcmRpbmcodGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLCAncmVzdW1lJykuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN0YXJ0VGltZXIxKCk7XHJcbiAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlc3VtaW5nIHJlY29yZGluZycsIGVycm9yKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRUaW1lRGlmZmVyZW5jZShpbnB1dFRpbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwYXN0VGltZSA9IG5ldyBEYXRlKGlucHV0VGltZSkuZ2V0VGltZSgpO1xyXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHJcbiAgICBsZXQgZGlmZiA9IE1hdGguZmxvb3IoKGN1cnJlbnRUaW1lIC0gcGFzdFRpbWUpIC8gMTAwMCk7IC8vIHRvdGFsIHNlY29uZHNcclxuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihkaWZmIC8gMzYwMCk7XHJcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigoZGlmZiAlIDM2MDApIC8gNjApO1xyXG4gICAgY29uc3Qgc2Vjb25kcyA9IGRpZmYgJSA2MDtcclxuXHJcbiAgICBjb25zdCBwYWQgPSAodmFsdWU6IG51bWJlcik6IHN0cmluZyA9PiB2YWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAvLyBJZiBkdXJhdGlvbiBpcyAxIGhvdXIgb3IgbW9yZSwgcmV0dXJuIEhIOm1tOnNzXHJcbiAgICBpZiAoaG91cnMgPiAwKSB7XHJcbiAgICAgIHJldHVybiBgJHtwYWQoaG91cnMpfToke3BhZChtaW51dGVzKX06JHtwYWQoc2Vjb25kcyl9YDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBPdGhlcndpc2UgcmV0dXJuIG1tOnNzXHJcbiAgICByZXR1cm4gYCR7cGFkKG1pbnV0ZXMpfToke3BhZChzZWNvbmRzKX1gO1xyXG4gIH1cclxuICBzdGFydFRpbWVyMSgpIHtcclxuICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24gPSBpbnRlcnZhbCgxMDAwKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLnRpbWVFbGFwc2VkKys7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgc3RvcFJlY29yZGluZ1RpbWVyKCkge1xyXG4gICAgaWYgKHRoaXMudGltZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyAvLyBQYXVzZSB0aGUgdGltZXJcclxuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDsgICAgICAgIC8vIE9wdGlvbmFsbHkgcmVzZXQgdGhlIHN1YnNjcmlwdGlvblxyXG4gICAgfVxyXG4gIH1cclxuICBnZXRGb3JtYXR0ZWRUaW1lKCkge1xyXG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IodGhpcy50aW1lRWxhcHNlZCAvIDYwKTtcclxuICAgIGNvbnN0IHNlY29uZHMgPSB0aGlzLnRpbWVFbGFwc2VkICUgNjA7XHJcbiAgICByZXR1cm4gYCR7bWludXRlc306JHtzZWNvbmRzIDwgMTAgPyAnMCcgOiAnJ30ke3NlY29uZHN9YDtcclxuICB9XHJcbiAgcG9sbENhbGxTdGF0dXMoY2FsbEF1dGhJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBtYXhUaW1lID0gMzAwMDA7IC8vIFBvbGwgZm9yIHVwIHRvIDMwIHNlY29uZHNcclxuICAgIGNvbnN0IHBvbGxJbnRlcnZhbCA9IDMwMDA7IC8vIFBvbGwgZXZlcnkgMyBzZWNvbmRzXHJcbiAgICBsZXQgZWxhcHNlZFRpbWUgPSAwO1xyXG4gICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcclxuICAgICAgZWxhcHNlZFRpbWUgKz0gcG9sbEludGVydmFsO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1c1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxTdGF0dXMoY2FsbEF1dGhJZCkudG9Qcm9taXNlKCkgYXMgQ2FsbFN0YXR1c1Jlc3BvbnNlO1xyXG4gICAgICAgIGlmIChzdGF0dXNSZXNwb25zZSAmJiBzdGF0dXNSZXNwb25zZS5jYWxsRGV0YWlscykge1xyXG4gICAgICAgICAgdGhpcy5jYWxsU3RhdHVzID0gc3RhdHVzUmVzcG9uc2UuY2FsbERldGFpbHMuY2FsbFN0YXR1cztcclxuICAgICAgICAgIGlmICh0aGlzLmNhbGxTdGF0dXMgPT09ICdpbi1wcm9ncmVzcycpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxsU2lkID0gc3RhdHVzUmVzcG9uc2UuY2FsbERldGFpbHMuY2FsbFNpZDtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVjb3JkQ2FsbCAmJiAhdGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhbGxTdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kQ2FsbCgpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZWxhcHNlZFRpbWUgPj0gbWF4VGltZSkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdNYXggcG9sbGluZyB0aW1lIHJlYWNoZWQuIFN0b3BwaW5nIHBvbGwuJyk7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgfVxyXG4gICAgfSwgcG9sbEludGVydmFsKTtcclxuICB9XHJcblxyXG4gIC8vIGdldFVzZXJJbmZvcm1hdGlvbihpZDogYW55KSB7XHJcbiAgLy8gICBpZihpZCkge1xyXG4gIC8vICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldFVzZXJJbmZvcm1hdGlvbihpZCkuc3Vic2NyaWJlKFxyXG4gIC8vICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gIC8vICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlLCAndXNlckluZm9ybWF0aW9uJyk7XHJcbiAgLy8gICAgIH0sIGVycm9yID0+IHtcclxuICAvLyAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdGFydGluZyByZWNvcmRpbmcnLCBlcnJvcik7XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICBzZWxlY3RlZEluY29taW5nQ2FsbEluZm8oZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsID0gZGF0YTtcclxuICB9XHJcblxyXG4gIC8vIGdldEhvbGRDYWxsTGlzdCgpIHtcclxuICAvLyAgIGxldCBob2xkTGlzdDogYW55W10gPSBbXTtcclxuICAvLyAgIGxldCBpc0NvbmZlcmVuY2UgPSBmYWxzZTtcclxuICAvLyAgIHRoaXMuY3VycmVudENhbGxMaXN0LmZvckVhY2goKGM6IGFueSkgPT4ge1xyXG4gIC8vICAgICBpZiAoYz8uaXNIb2xkICYmICFjPy5pc0NvbmZlcmVuY2UpIHtcclxuICAvLyAgICAgICBob2xkTGlzdC5wdXNoKGMpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGlmIChjPy5pc0NvbmZlcmVuY2UgJiYgIWlzQ29uZmVyZW5jZSkge1xyXG4gIC8vICAgICAgIGlzQ29uZmVyZW5jZSA9IHRydWU7XHJcbiAgLy8gICAgICAgY1snaXNDb25mZXJlbmNlQ2FsbEhvbGQnXSA9IHRydWU7XHJcbiAgLy8gICAgICAgaG9sZExpc3QucHVzaChjKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSk7XHJcbiAgLy8gICByZXR1cm4gaG9sZExpc3Q7XHJcbiAgLy8gfVxyXG5cclxuICBvbkNsaWNrRXhwYW5kKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKGRhdGEuaWQgIT0gdGhpcy5zZWxlY3RlZFVzZXJJbmZvPy5wYXJ0aWNpcGFudElkKSB7XHJcbiAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbyA9IGRhdGE7XHJcbiAgICAgIHRoaXMuY2hlY2tUZXh0SGVpZ2h0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSAhdGhpcy5pc0NsaWNrRXhwYW5kO1xyXG4gICAgICBpZiAodGhpcy5pc0NsaWNrRXhwYW5kKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gZGF0YTtcclxuICAgICAgICB0aGlzLmNoZWNrVGV4dEhlaWdodCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBzZXRJbmNvbWluZ0NhbGxTdGF0dXMoZGF0YTogYW55KSB7XHJcbiAgLy8gICBsZXQgcGF5bG9hZCA9IHtcclxuICAvLyAgICAgcmVjb3JkSWQ6IGRhdGE/LmlkLFxyXG4gIC8vICAgICBpcEFkZHJlc3M6ICcnLFxyXG4gIC8vICAgICBpcENvdW50cnk6ICcnLFxyXG4gIC8vICAgICBjYWxsU3RhdHVzOiAnYW5zd2VyZWQnLFxyXG4gIC8vICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAvLyAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQgfHwgZGF0YS5jb25mZXJlbmNlSWQgfHwgJ25vJ1xyXG4gIC8vICAgfVxyXG4gIC8vICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnNldEluY29taW5nQ2FsbFN0YXR1cyhwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKHJlcylcclxuICAvLyAgIH0pXHJcbiAgLy8gfVxyXG5cclxuICB0b2dnbGVTZWFyY2goKSB7XHJcbiAgICB0aGlzLmlzU2VhcmNoVmlzaWJsZSA9ICF0aGlzLmlzU2VhcmNoVmlzaWJsZTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgaWYgKCF0aGlzLmlzU2VhcmNoVmlzaWJsZSkge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHRoaXMuY29udGFjdHM7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFwcGx5RmlsdGVyKCkge1xyXG4gICAgY29uc3QgdGV4dCA9IHRoaXMuc2VhcmNoVGV4dC50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIHRoaXMuaXNEaXJlY3RDYWxsT3B0aW9uU2hvdyA9IC9eXFwrP1xcZCskLy50ZXN0KHRleHQpXHJcbiAgICBpZiAoIXRleHQubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gdGhpcy5jb250YWN0cztcclxuICAgICAgLy8gdGhpcy5maWx0ZXJlZExpc3QuZm9yRWFjaCgoYzogYW55KSA9PiB7XHJcbiAgICAgIC8vICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChjYzogYW55KSA9PiAhY2M/LklzQ29ubmVjdGVkICYmIChjYz8ucGhvbmUgPT0gYz8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlciB8fCBjYz8ucGhvbmUgPT0gYz8ubnVtYmVyc0xpc3RbMV0/Lm51bWJlcikpO1xyXG4gICAgICAvLyAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgIC8vICAgICBjWydJc0Nvbm5lY3RlZCddID0gdHJ1ZTtcclxuICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAvLyAgICAgY1snSXNDb25uZWN0ZWQnXSA9IGZhbHNlO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGlzTnVtZXJpY1NlYXJjaCA9IC9eXFwrP1xcZCskLy50ZXN0KHRleHQpO1xyXG4gICAgY29uc3QgZXhwYW5kZWQ6IGFueVtdID0gW107XHJcbiAgICB0aGlzLmNvbnRhY3RzLmZvckVhY2goKGM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXNOdW1lcmljU2VhcmNoKSB7XHJcbiAgICAgICAgKGM/Lm51bWJlcnNMaXN0IHx8IFtdKS5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICgobj8ubnVtYmVyIHx8ICcnKS5pbmNsdWRlcyh0ZXh0KSkge1xyXG4gICAgICAgICAgICBleHBhbmRlZC5wdXNoKHsgLi4uYywgbnVtYmVyc0xpc3Q6IFtuXSB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuYW1lTWF0Y2ggPSAoYz8uZmlyc3ROYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRleHQpIHx8XHJcbiAgICAgICAgICAoYz8ubGFzdE5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGV4dCkgfHxcclxuICAgICAgICAgIChjPy5taWRkbGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRleHQpIHx8XHJcbiAgICAgICAgICAoYz8ubmlja05hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGV4dCk7XHJcbiAgICAgICAgaWYgKG5hbWVNYXRjaCkge1xyXG4gICAgICAgICAgY29uc3QgbnVtYmVycyA9IGM/Lm51bWJlcnNMaXN0O1xyXG4gICAgICAgICAgaWYgKG51bWJlcnMgJiYgbnVtYmVycy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIG51bWJlcnMuZm9yRWFjaCgobnVtT2JqOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBleHBhbmRlZC5wdXNoKHsgLi4uYywgbnVtYmVyc0xpc3Q6IFtudW1PYmpdIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4cGFuZGVkLnB1c2goYyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gZXhwYW5kZWQ7XHJcbiAgICB0aGlzLmZpbHRlcmVkTGlzdC5mb3JFYWNoKChjOiBhbnkpID0+IHtcclxuICAgICAgY1snZnJvbU5hbWUnXSA9IHRoaXMuZ2V0TmFtZShjLmZyb20pIHx8ICcnO1xyXG4gICAgICBjWyd0b05hbWUnXSA9IHRoaXMuZ2V0TmFtZShjLnRvKSB8fCAnJztcclxuICAgICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChjYzogYW55KSA9PiBjYz8ucGhvbmUgPT0gYz8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlcik7XHJcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgY1snSXNDb25uZWN0ZWQnXSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY1snSXNDb25uZWN0ZWQnXSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgY2hlY2tUZXh0SGVpZ2h0KCkge1xyXG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudGV4dC1jb250YWluZXInKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmIChlbD8uc2Nyb2xsSGVpZ2h0ID4gZWw/LmNsaWVudEhlaWdodCkge1xyXG4gICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICB0b2dnbGVUZXh0KCkge1xyXG4gICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcclxuICB9XHJcbiAgc2hvd0Rpc2Nvbm5lY3RNb2RhbCA9IGZhbHNlO1xyXG4gIC8vIENhbGwgdGhpcyB3aGVuIGNhbGwgZGlzY29ubmVjdHNcclxuICBvbkNhbGxEaXNjb25uZWN0ZWQoKSB7XHJcbiAgICB0aGlzLnJlc2V0TGVhdmVUaW1lcigpO1xyXG4gICAgdGhpcy5zaG93RGlzY29ubmVjdE1vZGFsID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGVuZENvbmZlcmVuY2UoKSB7XHJcbiAgICB0aGlzLnNob3dEaXNjb25uZWN0TW9kYWwgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZj8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgIHRoaXMub25FbmRDYWxsKHRoaXMuc2VsZWN0ZWRDb25mLCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW5kQ2FsbCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBDb21iaW5lcyB0aGUgdHdvIDI0LWhvdXIgc2VsZWN0cyBpbnRvIGxlYXZlUmVhc29uIChISDpNTSkgKi9cclxuICBvblRpbWVDaGFuZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5sZWF2ZUhvdXIgIT09ICcnICYmIHRoaXMubGVhdmVNaW51dGUgIT09ICcnKSB7XHJcbiAgICAgIHRoaXMubGVhdmVSZWFzb24gPSBgJHt0aGlzLmxlYXZlSG91cn06JHt0aGlzLmxlYXZlTWludXRlfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVIb3VyRHJvcGRvd24oKSB7XHJcbiAgICB0aGlzLnNob3dIb3VyRHJvcGRvd24gPSAhdGhpcy5zaG93SG91ckRyb3Bkb3duO1xyXG4gICAgdGhpcy5zaG93TWludXRlRHJvcGRvd24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU1pbnV0ZURyb3Bkb3duKCkge1xyXG4gICAgdGhpcy5zaG93TWludXRlRHJvcGRvd24gPSAhdGhpcy5zaG93TWludXRlRHJvcGRvd247XHJcbiAgICB0aGlzLnNob3dIb3VyRHJvcGRvd24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEhvdXIoaDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmxlYXZlSG91ciA9IGg7XHJcbiAgICB0aGlzLnNob3dIb3VyRHJvcGRvd24gPSBmYWxzZTtcclxuICAgIHRoaXMub25UaW1lQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RNaW51dGUobTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmxlYXZlTWludXRlID0gbTtcclxuICAgIHRoaXMuc2hvd01pbnV0ZURyb3Bkb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm9uVGltZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgbGVhdmVDb25mZXJlbmNlKCkge1xyXG4gICAgdGhpcy5zaG93RGlzY29ubmVjdE1vZGFsID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5pc1JlYXNvbkNoZWNrZWQpIHtcclxuICAgICAgbGV0IHBheWxvYWQgPSB7IGNvbmZlcmVuY2VJZDogdGhpcy5zZWxlY3RlZENvbmY/LmNvbmZlcmVuY2VJZCB8fCB0aGlzLmhvc3RudW1iZXI/LmNvbmZlcmVuY2VJZCwgdGltZTogdGhpcy5jb252ZXJ0SEhNTVRvTWludXRlcyh0aGlzLmxlYXZlUmVhc29uKSwgdGltZXJEYXRlOiBuZXcgRGF0ZSgpLnRvU3RyaW5nKCkgfVxyXG4gICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2Uuc2V0VGltZXJGb3JFbmRDb25mZXJlbmNlQ2FsbChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlcykgPT4geyB9KVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25mPy5jb25mZXJlbmNlSWQpIHtcclxuICAgICAgbGV0IGNvbmZlcmVuY2UgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5maW5kKChyZXM6IGFueSkgPT4gcmVzPy5jb25mZXJlbmNlSWQgPT0gdGhpcy5zZWxlY3RlZENvbmY/LmNvbmZlcmVuY2VJZClcclxuICAgICAgbGV0IHBhcnRpY2lwZW50SW5mbyA9IGNvbmZlcmVuY2U/LnBhcnRpY2lwYW50cz8uZmluZCgocGFydGljaXBhbnQ6IGFueSkgPT4gKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LmZyb20pXHJcbiAgICAgICAgJiYgcGFydGljaXBhbnQ/LmNsaWVudCAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJykgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8udG8pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFwYXJ0aWNpcGFudD8uYnVzaW5lc3NOdW1iZXIgJiYgcGFydGljaXBhbnQ/Lmhvc3QpICYmIHBhcnRpY2lwYW50Py5jbGllbnQpICYmICFwYXJ0aWNpcGFudD8uaXNMZWZ0KVxyXG4gICAgICBpZiAocGFydGljaXBlbnRJbmZvPy5pZCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5NdWx0aXBsZUNvbmZlcmVuY2VzKCkpIHtcclxuICAgICAgICAgIC8vIFNob3cgcG9wdXAgaW5zdGVhZCBvZiBkaXJlY3RseSBsZWF2aW5nXHJcbiAgICAgICAgICB0aGlzLmxlYXZlQ29uZlBhcnRpY2lwYW50ID0gcGFydGljaXBlbnRJbmZvO1xyXG4gICAgICAgICAgdGhpcy5sZWF2ZUNvbmZDb25mZXJlbmNlTmFtZSA9IHRoaXMuY29uZmVyZW5jZUNhbGxMaXN0LmZpbmQoKGM6IGFueSkgPT4gYy5jb25mZXJlbmNlSWQgPT09IGNvbmZlcmVuY2UuY29uZmVyZW5jZUlkKT8uY2FsbExhYmVsIHx8ICdDb25mZXJlbmNlJztcclxuICAgICAgICAgIHRoaXMuc2hvd0xlYXZlQ29uZmlybWF0aW9uTW9kYWwgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm9uRW5kQ2FsbChwYXJ0aWNpcGVudEluZm8pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vbkVuZENhbGwodGhpcy5ob3N0bnVtYmVyKTtcclxuICAgIH1cclxuICB9XHJcbiAgY29udmVydEhITU1Ub01pbnV0ZXModGltZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcik7XHJcbiAgICByZXR1cm4gKGhvdXJzICogNjApICsgbWludXRlcztcclxuICB9XHJcblxyXG4gIG9uUmVqZWN0Q2FsbChjYWxsSW5mbzogYW55KSB7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgY2hhbm5lbElkOiBlbnZpcm9ubWVudC5jaGFubmVsSWQsXHJcbiAgICAgIHJlY29yZElkOiBjYWxsSW5mbz8uaWQsXHJcbiAgICAgIGlwQWRkcmVzczogJycsXHJcbiAgICAgIGlwQ291bnRyeTogJycsXHJcbiAgICAgIGNhbGxTdGF0dXM6ICdubycsXHJcbiAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICB1c2VySWQ6ICB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgIGNvbXBhbnlJZDogJycsXHJcbiAgICAgIGNsaWVudFNpZDogY2FsbEluZm8/LmNsaWVudFNpZCxcclxuICAgICAgY29uZmVyZW5jZUlkOiBjYWxsSW5mbz8uY29uZmVyZW5jZUlkIHx8ICdubydcclxuICAgIH1cclxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5zZXRJbmNvbWluZ0NhbGxTdGF0dXMocGF5bG9hZCkuc3Vic2NyaWJlKGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbHRlcigocmVzOiBhbnkpID0+IHJlcz8uaWQgIT0gY2FsbEluZm8/LmlkKTtcclxuICAgICAgdGhpcy5vbkNsb3NlQzJDSW5mb1BhbmVsKCk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pXHJcbiAgfVxyXG4gIFxyXG4gIGlzU2VsZk51bWJlcihwYXJ0aWNpcGFudDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VOdW1iZXJMaXN0LmZpbmQoKHJlczogYW55KSA9PiByZXMgPT0gKHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gcGFydGljaXBhbnQ/LmZyb20gOiBwYXJ0aWNpcGFudD8udG8pKTtcclxuICB9XHJcblxyXG4gIHNob3VsZFNob3dTZXBhcmF0b3IoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdmlzaWJsZUNvdW50ID0gdGhpcy5jdXJyZW50Q2FsbExpc3Quc2xpY2UoMCwgaW5kZXgpLmZpbHRlcigoY2FsbDogYW55KSA9PiAhY2FsbD8uaXNDb25mZXJlbmNlSG9sZCkubGVuZ3RoO1xyXG4gICAgcmV0dXJuIHZpc2libGVDb3VudCA+IDA7XHJcbiAgfVxyXG5cclxuICBvbkNsb3NlQzJDSW5mb1BhbmVsKCkge1xyXG4gICAgLy8gdGhpcy5pc0NsaWNrRXhwYW5kID0gZmFsc2U7XHJcbiAgICBsZXQgYnVzaW5lc3NJbmZvID0gdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LnBhcnRpY2lwYW50cy5maW5kKChpdGVtOiBhbnkpID0+ICEhaXRlbT8uYnVzaW5lc3NOdW1iZXIgJiYgdGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGl0ZW0/LnRvKSAmJiAhaXRlbT8uaG9zdCk7XHJcbiAgICBpZihidXNpbmVzc0luZm8pIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZChyZXMgPT4gYnVzaW5lc3NJbmZvPy5pZCA9PSByZXM/LmlkKTtcclxuICAgICAgdGhpcy50b2dnbGVDMkNJbmZvUGFuZWwodGhpcy5zZWxlY3RlZFVzZXJJbmZvKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TmFtZShudW1iZXI6IGFueSkge1xyXG4gICAgICBsZXQgY29udGFjdEluZm8gPSB0aGlzLmNvbnRhY3RzLmZpbmQoKGM6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBjPy5udW1iZXJzTGlzdFswXT8ubnVtYmVyICA9PSBudW1iZXIgfHwgYz8ubnVtYmVyc0xpc3RbMV0/Lm51bWJlciA9PSBudW1iZXI7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gY29udGFjdEluZm8/LmZpcnN0TmFtZSB8fCBjb250YWN0SW5mbz8ubWlkZGxlTmFtZSB8fCBjb250YWN0SW5mbz8ubGFzdE5hbWUgPyBgJHtjb250YWN0SW5mbz8uZmlyc3ROYW1lIHx8ICcnfSAke2NvbnRhY3RJbmZvPy5taWRkbGVOYW1lIHx8ICcnfSAke2NvbnRhY3RJbmZvPy5sYXN0TmFtZSB8fCAnJ31gIDogbnVsbFxyXG4gIH1cclxuICBcclxuICBnZXRJbWcobnVtYmVyOiBhbnkpIHtcclxuICAgIGxldCBjb250YWN0SW5mbyA9IHRoaXMuY29udGFjdHMuZmluZCgoYzogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBjPy5udW1iZXJzTGlzdFswXT8ubnVtYmVyICA9PSBudW1iZXIgfHwgYz8ubnVtYmVyc0xpc3RbMV0/Lm51bWJlciA9PSBudW1iZXI7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjb250YWN0SW5mbz8uaW1hZ2UgfHwgbnVsbFxyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dFbmRBbGxCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBhY3RpdmVQYXJ0aWNpcGFudHMgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maWx0ZXIoKGM6IGFueSkgPT4gIWMuaXNMZWZ0KTtcclxuICAgIHJldHVybiBhY3RpdmVQYXJ0aWNpcGFudHMubGVuZ3RoID4gMjtcclxuICB9XHJcbiAgY29uZmlybUxlYXZlUGFydGljaXBhbnQoYzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pc0luTXVsdGlwbGVDb25mZXJlbmNlcygpKSB7XHJcbiAgICAgIHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQgPSBjO1xyXG4gICAgICB0aGlzLmxlYXZlQ29uZkNvbmZlcmVuY2VOYW1lID0gdGhpcy5jb25mZXJlbmNlQ2FsbExpc3QuZmluZChcclxuICAgICAgICAoY29uZjogYW55KSA9PiBjb25mLmNvbmZlcmVuY2VJZCA9PT0gYy5jb25mZXJlbmNlSWRcclxuICAgICAgKT8uY2FsbExhYmVsIHx8ICdDb25mZXJlbmNlJztcclxuICAgICAgdGhpcy5zaG93TGVhdmVDb25maXJtYXRpb25Nb2RhbCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9uRW5kQ2FsbChjLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlzSW5NdWx0aXBsZUNvbmZlcmVuY2VzKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuICAgIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZm9yRWFjaCgoY29uZjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGNvbmYpO1xyXG4gICAgICBjb25zdCBvdXJQYXJ0aWNpcGFudCA9IGNvbmYucGFydGljaXBhbnRzPy5maW5kKChwOiBhbnkpID0+XHJcbiAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocD8uZnJvbSkgJiYgcD8uY2xpZW50KSB8fFxyXG4gICAgICAgICAgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwPy50bykgJiYgcD8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiAhcD8uYnVzaW5lc3NOdW1iZXIpKSAmJlxyXG4gICAgICAgICFwPy5pc0xlZnRcclxuICAgICAgKTtcclxuICAgICAgY29uc29sZS5sb2cob3VyUGFydGljaXBhbnQpO1xyXG4gICAgICBpZiAob3VyUGFydGljaXBhbnQpIGNvdW50Kys7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjb3VudCA+IDE7XHJcbiAgfVxyXG4gIGNvbmZpcm1MZWF2ZSgpIHtcclxuICAgIGlmICh0aGlzLmxlYXZlQ29uZlBhcnRpY2lwYW50KSB7XHJcbiAgICAgIHRoaXMub25FbmRDYWxsKHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQsIGZhbHNlKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0xlYXZlQ29uZmlybWF0aW9uTW9kYWwgPSBmYWxzZTtcclxuICAgIHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsTGVhdmUoKSB7XHJcbiAgICB0aGlzLnNob3dMZWF2ZUNvbmZpcm1hdGlvbk1vZGFsID0gZmFsc2U7XHJcbiAgICB0aGlzLmxlYXZlQ29uZlBhcnRpY2lwYW50ID0gbnVsbDtcclxuICB9XHJcbiAgZ2V0IGFjdGl2ZVBhcnRpY2lwYW50c0NvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5hbGxQYXJ0aWNpcGVudExpc3Q/LmZpbHRlcigocDogYW55KSA9PiAhcC5pc0xlZnQpLmxlbmd0aCB8fCAwO1xyXG4gIH1cclxuICB0cnVuY2F0ZVRleHQodGV4dDogc3RyaW5nLCBtYXhMZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRleHQpIHJldHVybiAnJztcclxuICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA+IG1heExlbmd0aCA/IHRleHQuc3Vic3RyaW5nKDAsIG1heExlbmd0aCkgKyAnLi4uJyA6IHRleHQ7XHJcbiAgfVxyXG5cclxuICBnZXQgdG90YWxQYXJ0aWNpcGFudHNDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuYWxsUGFydGljaXBlbnRMaXN0Py5sZW5ndGggfHwgMDtcclxuICB9XHJcbiAgb25SZWFzb25DaGVja0NoYW5nZWQobmV3VmFsdWU6Ym9vbGVhbikge1xyXG4gICAgaWYgKCFuZXdWYWx1ZSkge1xyXG4gICAgICB0aGlzLnNob3dIb3VyRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5zaG93TWludXRlRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5sZWF2ZUhvdXIgPSAnJztcclxuICAgICAgdGhpcy5sZWF2ZU1pbnV0ZSA9ICcnO1xyXG4gICAgICB0aGlzLmxlYXZlUmVhc29uID0gJyc7IFxyXG4gICAgfVxyXG4gIH1cclxuICByZXNldExlYXZlVGltZXIoKSB7XHJcbiAgICB0aGlzLmlzUmVhc29uQ2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5sZWF2ZUhvdXIgPSAnJztcclxuICAgIHRoaXMubGVhdmVNaW51dGUgPSAnJztcclxuICAgIHRoaXMubGVhdmVSZWFzb24gPSAnJztcclxuICAgIHRoaXMuc2hvd0hvdXJEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93TWludXRlRHJvcGRvd24gPSBmYWxzZTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmNhbGxEYXRhLmRpYWwgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnRpbWVyU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbn0iLCI8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FsbC1jb250YWluZXJcIiAqbmdJZj1cIiFpc01pbmltaXNlZCAmJiBjdXJyZW50Q2FsbExpc3Q/Lmxlbmd0aFwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydjb2xsb3BzJzogaXNDb2xsb3BzLCAnaW5jb21pbmctY2FsbC1jb250YWluZXInOiBpc0NsaWNrRXhwYW5kLCAnY29udGFjdHMtb3Blbic6IHNob3dDb250YWN0c1BhbmVsIH1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGVyLXdyYXBwZXIgb3V0Z29pbmctY2FsbC1sb2FkZXJcIlxyXG4gICAgICAgICAgICAqbmdJZj1cInNob3dOZXdDYWxsTG9hZGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3RpdmUtY2FsbFwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgcG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYW5pbWF0aW9uIGNhbGwtYW5pbWF0aW9uLXBsYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYXZhdGFyLWltZ1wiIFtzcmNdPVwibmV3Q2FsbExvYWRlckRhdGE/LmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbGVyRGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMSBzdHlsZT1cIm1hcmdpbi10b3A6IDhweDtcIj5Db25uZWN0aW5nLi4uPC9oMT5cclxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cInRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1wiPnt7IG5ld0NhbGxMb2FkZXJEYXRhPy5uYW1lIHx8IG5ld0NhbGxMb2FkZXJEYXRhPy5waG9uZSB8fCAnVW5rbm93bicgfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWFjdGlvbi1idG5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0biBlbmQtY2FsbC1idG5cIiBkaXNhYmxlZCAoY2xpY2spPVwiZW5kQ2FsbCgpXCIgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGlhbHBhZC1hbGVydHNcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAnY29uZmVyZW5jZS1hbGVydCc6IGlzQ29uZmVyZW5jZSAmJiBjdXJyZW50Q2FsbD8uaXNDb25mZXJlbmNlLFxyXG4gICAgICAgICdub3JtYWwtY2FsbC1hbGVydCc6ICFpc0NvbmZlcmVuY2VcclxuICAgICAgICB9XCIgKm5nSWY9XCJjYWxsTnVtYmVyVG9hc3Quc2hvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlhbGJveC1wb3AxIGFsZXJ0IGZhZGUgc2hvd1wiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjYWxsTnVtYmVyVG9hc3QudHlwZVwiXHJcbiAgICAgICAgICAgICAgICByb2xlPVwiYWxlcnRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgdGV4dC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgWW91J3IgY2FsbGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3tjYWxsTnVtYmVyVG9hc3QuZGlzcGxheU51bX19PC9zdHJvbmc+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tZGlzYyBwLTAgcHgtMVwiPiBDYW5jZWwgQ2FsbCA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gQWxsIHR5cGUgQ2FsbCBIb2xkIGxpc3QgIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGwtYmFubmVyXCJcclxuICAgICAgICAgICAgKm5nSWY9XCIoY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDEgJiYgISFjdXJyZW50Q2FsbCAmJiAoKGlzQ29uZmVyZW5jZUNhbGxIb2xkIHx8IGlzQ29uZmVyZW5jZSkgfHwgIWlzQ29uZmVyZW5jZSkpIHx8ICFpc0FsbEFjY2VwdGVkXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbmYgb2YgY3VycmVudENhbGxMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1jYWxsLWNvbnRlbnRcIiAqbmdJZj1cIiFjb25mPy5pc0FjY2VwdENhbGwgJiYgY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDEgJiYgZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhjb25mPy50bykgJiYgY29uZj8uaXNOb3RpZmljYXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaGVsZC1jYWxsLXNlbGVjdGVkJzogc2VsZWN0ZWRVc2VySW5mbz8ucGFydGljaXBhbnRJZCAmJiBzZWxlY3RlZFVzZXJJbmZvPy5wYXJ0aWNpcGFudElkID09PSBjb25mPy5wYXJ0aWNpcGFudElkfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbmY/LmJ1c2luZXNzTnVtYmVyID8gdG9nZ2xlQzJDSW5mb1BhbmVsKGNvbmYpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydjdXJzb3InOiBjb25mPy5idXNpbmVzc051bWJlciA/ICdwb2ludGVyJyA6ICdkZWZhdWx0J31cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhdmF0YXItaW1nLXdyYXBwZXIgYm9yZGVyLXJhZGl1cy01MFwiIFtzcmNdPVwiY29uZj8uaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIHdpZHRoPVwiMzVcIiBoZWlnaHQ9XCIzNVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1jYWxsZXJcIiAqbmdJZj1cIiFjb25mPy5idXNpbmVzc051bWJlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLWxhYmVsXCI+e3tjb25mPy5mcm9tfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbmFtZVwiPnt7Y29uZj8uZnJvbU5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGxlclwiICpuZ0lmPVwiY29uZj8uYnVzaW5lc3NOdW1iZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1tYWluLWxhYmVsXCI+Q2FsbCBmcm9tIEMyQzo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbGFiZWxcIiA+PHNwYW4gW3RpdGxlXT1cImNvbmY/LnNvdXJjZU5hbWVcIj57eyB0cnVuY2F0ZVRleHQoY29uZj8uc291cmNlTmFtZSwgMTApIH19PC9zcGFuPnxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiY29uZj8ucG9pbnROYW1lXCI+e3sgdHJ1bmNhdGVUZXh0KGNvbmY/LnBvaW50TmFtZSwgMTApIH19PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1sYWJlbFwiPnt7IHRydW5jYXRlVGV4dChjb25mPy5uYW1lLCAyNikgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ29ubmVjdGluZ0luY29taW5nQ2FsbElkID09IGNvbmY/LmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29ubmVjdGluZy13cmFwcGVyICBtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyaW5naW5nLXRleHRcIj5Db25uZWN0aW5nPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG90c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtaG9sZC1jb250YWN0IHJlY2VpdmUtYnRuXCIgKGNsaWNrKT1cIndhaXRpbmdDYWxsQWNjZXB0KGNvbmYpXCIgW2Rpc2FibGVkXT1cImlzQ29ubmVjdGluZyB8fCBpc0luY29taW5nQ2FsbEJ0bkRpc2FibGVcIiAqbmdJZj1cImlzQ29ubmVjdGluZ0luY29taW5nQ2FsbElkICE9PSBjb25mPy5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGwgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtY29udGFjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgdGl0bGU9XCJDYWxsIEVuZFwiIChjbGljayk9XCJvblJlamVjdENhbGwoY29uZik7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbmY/LmJ1c2luZXNzTnVtYmVyXCIgY2xhc3M9XCJ0b2dnbGVhcnJvdy1hcnJvdyBtZS0yXCIgaWQ9XCJ0b2dnbGVhcnJvd1wiIChjbGljayk9XCJ0b2dnbGVDMkNJbmZvUGFuZWwoY29uZilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mb1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbmYgb2YgY29uZmVyZW5jZUNhbGxMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1jYWxsLWNvbnRlbnRcIiAqbmdJZj1cIihjb25mPy5pc0NvbmZlcmVuY2VIb2xkIHx8IChzaG93TmV3Q2FsbExvYWRlciAmJiBpc0NvbmZlcmVuY2VDYWxsSG9sZCkpICYmIChjb25mZXJlbmNlQ2FsbExpc3QubGVuZ3RoID4gMSB8fCBzaG93TmV3Q2FsbExvYWRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaGVsZC1jYWxsLXNlbGVjdGVkJzogY29uZj8uaXNCdXNpbmVzc051bWJlciAmJiBzZWxlY3RlZFVzZXJJbmZvPy5wYXJ0aWNpcGFudElkID09PSBjb25mPy5idXNpbmVzc1BhcnRpY2lwYW50SWQgJiYgaXNDbGlja0V4cGFuZH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb25mPy5pc0J1c2luZXNzTnVtYmVyID8gdG9nZ2xlQzJDSW5mb1BhbmVsKGNvbmYpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydjdXJzb3InOiBjb25mPy5pc0J1c2luZXNzTnVtYmVyID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGhvbGQtaWNvblwiPnBhdXNlX2NpcmNsZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbGFiZWxcIj5Ib2xkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLW5hbWVcIj57e2NvbmY/LmNhbGxMYWJlbH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25mZXJlbmNlLWhvbGQtY29udGFjdFwiIFtuZ0NsYXNzXT1cInsgJ29uLWhvbGQnOiBjb25mPy5pc0NvbmZlcmVuY2VIb2xkIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN3YXBDYWxscyhjb25mLHRydWUpXCIgW2Rpc2FibGVkXT1cImlzSG9sZEJ0bkRpc2FibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29uZj8uaXNDb25mZXJlbmNlSG9sZFwiIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIFt0aXRsZV09XCInUmVzdW1lJ1wiPiByZXN1bWUgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtY29udGFjdFwiIChjbGljayk9XCJlbmRDb25mZXJlbmVjZUNhbGwoY29uZik7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHRpdGxlPVwiQ2FsbCBFbmRcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvZ2dsZWFycm93LWFycm93IG1lLTJcIiBpZD1cInRvZ2dsZWFycm93XCIgKGNsaWNrKT1cInRvZ2dsZUNvbnRhY3RzUGFuZWwoY29uZilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYW5nbGUtcmlnaHRcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEZvciBzaW5nbGUgaW5jb21pbmcgY2FsbCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaC0xMDAgcHktNVwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIlxyXG4gICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPT09IDEgJiYgY3VycmVudENhbGxMaXN0WzBdPy5pc0luY29taW5nQ2FsbCAmJiAhY3VycmVudENhbGxMaXN0WzBdPy5pc0FjY2VwdENhbGxcIj5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2FsbFRvTnVtXCI+SW5jb21pbmcgY2FsbCBvbiA8YnIgLz48c3Bhbj57e2N1cnJlbnRDYWxsTGlzdFswXT8udG8gfHwgJ1Vua25vd24gTnVtYmVyJ319PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsVG9OdW1cIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50Q2FsbExpc3RbMF0/LmJ1c2luZXNzTnVtYmVyOyBlbHNlIG5vcm1hbENhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICBDMkMgQ0FMTFxyXG4gICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPiBGcm9tIDoge3sgY3VycmVudENhbGxMaXN0WzBdPy5zb3VyY2VOYW1lIH19IHwge3sgY3VycmVudENhbGxMaXN0WzBdPy5wb2ludE5hbWUgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxDYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIEluY29taW5nIGNhbGwgb25cclxuICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjdXJyZW50Q2FsbExpc3RbMF0/LnRvIHx8ICdVbmtub3duIE51bWJlcicgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYW5pbWF0aW9uXCIgW25nQ2xhc3NdPVwieydjYWxsLWFuaW1hdGlvbi1wbGF5Jzogc2hvd1JpbmdBbmltYXRpb259XCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYXZhdGFyLWltZ1wiIFtzcmNdPVwiaW5jb21pbmdGcm9tSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgd2lkdGg9XCIxMjBcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxlckRldGFpbHNcIiAqbmdJZj1cIiFjdXJyZW50Q2FsbExpc3RbMF0/LmJ1c2luZXNzTnVtYmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aDE+e3sgY3VycmVudENhbGxMaXN0WzBdPy5uYW1lID8gY3VycmVudENhbGxMaXN0WzBdPy5uYW1lIDogY3VycmVudENhbGxMaXN0WzBdPy5waG9uZSB8fCAnVW5rbm93biBOdW1iZXInIH19PC9oMT5cclxuICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiISFjdXJyZW50Q2FsbExpc3RbMF0/Lm5hbWVcIj57eyBjdXJyZW50Q2FsbExpc3RbMF0/LnBob25lIH19PC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxlckRldGFpbHNcIiAqbmdJZj1cImN1cnJlbnRDYWxsTGlzdFswXT8uYnVzaW5lc3NOdW1iZXJcIj5cclxuICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiISFjdXJyZW50Q2FsbExpc3RbMF0/Lm5hbWVcIj57eyB0cnVuY2F0ZVRleHQoY3VycmVudENhbGxMaXN0WzBdPy5uYW1lLCA0NSkgfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8cCA+e3sgY3VycmVudENhbGxMaXN0WzBdPy5udW1iZXIgfX08L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIENvbm5lY3Rpbmcgb3ZlcmxheSAoc2hvd24gYWZ0ZXIgYWNjZXB0IGJ0biBjbGljaywgaGlkZGVuIG9uIEFQSSByZXNwb25zZSkgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25uZWN0aW5nLW92ZXJsYXkgbXQtYXV0b1wiICpuZ0lmPVwiaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPT0gY3VycmVudENhbGxMaXN0WzBdPy5pZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbm5lY3RpbmctZG90c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImNvbm5lY3RpbmctdGV4dFwiPkNvbm5lY3RpbmcuLi48L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYWN0aW9uLWJ0bnMgbXQtYXV0b1wiICpuZ0lmPVwiaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgIT0gY3VycmVudENhbGxMaXN0WzBdPy5pZFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuIHJlY2VpdmUtYnRuXCIgKm5nSWY9XCIhbmV3SW5jb21pbmdDYWxsc0xpc3RbMF0/LmlzQ2FsbENvbm5lY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzSW5jb21pbmdDYWxsQnRuRGlzYWJsZVwiIChjbGljayk9XCJhZGQoY3VycmVudENhbGxMaXN0WzBdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuIHJlamVjdC1idG5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAoY2xpY2spPVwib25SZWplY3RDYWxsKGN1cnJlbnRDYWxsTGlzdFswXSlcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEZvciBzaW5nbGUgYWN0aXZlIGNhbGwgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIighaXNDb25mZXJlbmNlIHx8IGlzQ29uZmVyZW5jZUNhbGxIb2xkKSAmJiAoISFjdXJyZW50Q2FsbD8uaWQgJiYgIWN1cnJlbnRDYWxsPy5pc0NvbmZlcmVuY2UpICYmIGN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGxcIlxyXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2Rpc3BsYXknOiAnZmxleCcsICdmbGV4LWRpcmVjdGlvbic6ICdjb2x1bW4nLCAncG9zaXRpb24nOiAncmVsYXRpdmUnfVwiIGNsYXNzPVwiYWN0aXZlLWNhbGxcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnRDYWxsPy5idXNpbmVzc051bWJlcjtcIiBjbGFzcz1cImNhbGxUb051bVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEMyQyBDQUxMXHJcbiAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+IEZyb20gOiB7eyBjdXJyZW50Q2FsbD8udXNlckluZm9JZD8uc291cmNlTmFtZSB9fSB8IHt7IGN1cnJlbnRDYWxsPy51c2VySW5mb0lkPy5wb2ludE5hbWUgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYW5pbWF0aW9uXCIgW25nQ2xhc3NdPVwieydjYWxsLWFuaW1hdGlvbi1wbGF5Jzogc2hvd1JpbmdBbmltYXRpb259XCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYXZhdGFyLWltZ1wiICpuZ0lmPVwiIWN1cnJlbnRDYWxsPy5jbGllbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiY3VycmVudENhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjdXJyZW50Q2FsbD8udG9JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgOiBjdXJyZW50Q2FsbD8uZnJvbUltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYXZhdGFyLWltZ1wiICpuZ0lmPVwiY3VycmVudENhbGw/LmNsaWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjdXJyZW50Q2FsbD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGN1cnJlbnRDYWxsPy5mcm9tSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnIDogY3VycmVudENhbGw/LnRvSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsZXJEZXRhaWxzXCI+XHJcbiAgICAgICAgICAgIDwhLS0gQzJDIEJ1c2luZXNzIENhbGwgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudENhbGw/LmJ1c2luZXNzTnVtYmVyOyBlbHNlIG5vcm1hbENhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDE+e3sgY3VycmVudENhbGw/LnVzZXJJbmZvSWQ/Lm5hbWUgfHwgJ1Vua25vd24nIH19PC9oMT5cclxuICAgICAgICAgICAgICAgICAgICA8cD57eyBjdXJyZW50Q2FsbD8udXNlckluZm9JZD8ubnVtYmVyIHx8IGN1cnJlbnRDYWxsPy5mcm9tIHx8ICdVbmtub3duJyB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gTm9ybWFsIENhbGwgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbENhbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgxICpuZ0lmPVwiIWN1cnJlbnRDYWxsPy5jbGllbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOic4cHgnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW50Q2FsbD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50Q2FsbD8udG9OYW1lIHx8IG91dGdvaW5nQ29udGFjdE5hbWUgfHwgJ1Vua25vd24nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRDYWxsPy5mcm9tTmFtZSB8fCAnVW5rbm93bicgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMSAqbmdJZj1cImN1cnJlbnRDYWxsPy5jbGllbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOic4cHgnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW50Q2FsbD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50Q2FsbD8uZnJvbU5hbWUgfHwgJ1Vua25vd24nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRDYWxsPy50b05hbWUgfHwgb3V0Z29pbmdDb250YWN0TmFtZSB8fCAnVW5rbm93bicgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiIWN1cnJlbnRDYWxsPy5jbGllbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY3VycmVudENhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY3VycmVudENhbGw/LnRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRDYWxsPy5mcm9tIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiY3VycmVudENhbGw/LmNsaWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW50Q2FsbD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50Q2FsbD8uZnJvbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50Q2FsbD8udG8gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8aDEgKm5nSWY9XCIhY3VycmVudENhbGw/LmNsaWVudFwiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICc4cHgnfVwiPnt7Y3VycmVudENhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjdXJyZW50Q2FsbD8udG9OYW1lIHx8IG91dGdvaW5nQ29udGFjdE5hbWUgfHwgJ1Vua25vd24nIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbD8uZnJvbU5hbWUgfHwgJ1Vua25vd24nfX08L2gxPlxyXG4gICAgICAgICAgICAgICAgPGgxICpuZ0lmPVwiY3VycmVudENhbGw/LmNsaWVudFwiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICc4cHgnfVwiPnt7Y3VycmVudENhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjdXJyZW50Q2FsbD8uZnJvbU5hbWUgfHwgJ1Vua25vd24nIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbD8udG9OYW1lIHx8ICdVbmtub3duJ319PC9oMT5cclxuICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiIWN1cnJlbnRDYWxsPy5jbGllbnRcIj57eyBjdXJyZW50Q2FsbD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGN1cnJlbnRDYWxsPy50byB8fCAnVW5rbm93bicgOiBjdXJyZW50Q2FsbD8uZnJvbSB8fCAnVW5rbm93bid9fTwvcD5cclxuICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiY3VycmVudENhbGw/LmNsaWVudFwiPnt7IGN1cnJlbnRDYWxsPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gY3VycmVudENhbGw/LmZyb20gfHwgJ1Vua25vd24nIDogY3VycmVudENhbGw/LnRvIHx8ICdVbmtub3duJ319PC9wPiAtLT5cclxuICAgICAgICAgICAgICAgIDxoNCBzdHlsZT1cIm1hcmdpbi10b3A6IDRweFwiPnt7IHRpbWVyfX08L2g0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1hY3Rpb24tYnRuc1wiICpuZ0lmPVwiIXNob3dLZXlwYWRcIiBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOiAnMjBweCd9XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWJ0bi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBzdGFydC1zdG9wXCIgKm5nSWY9XCIhaXNSZWNvcmRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3JlY29yZGluZyc6IGlzUmVjb3JkaW5nLCAnc3RvcHBlZCc6ICFpc1JlY29yZGluZywgJ2Rpc2FibGVkJzogdXNlclNldHRpbmdJbmZvPy5jYWxsUmVjb3JkaW5nID09ICdOJ31cIiAoY2xpY2spPVwidG9nZ2xlUmVjb3JkaW5nKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXNSZWNvcmRpbmcgPyAnU3RvcCBSZWNvcmRpbmcnIDogJ1N0YXJ0IFJlY29yZGluZydcIiBbZGlzYWJsZWRdPVwiIWN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGwgfHwgdXNlclNldHRpbmdJbmZvPy5jYWxsUmVjb3JkaW5nID09ICdOJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlY29yZGluZy1pY29uXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXVzZS1yZXN1bWUtYnRuc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBwYXVzZS1yZXN1bWVcIiAqbmdJZj1cImlzUmVjb3JkaW5nICYmICFpc1BhdXNlZFwiIChjbGljayk9XCJwYXVzZVJlY29yZGluZygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gcGF1c2UgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gcGF1c2UtcmVzdW1lXCIgKm5nSWY9XCJpc1BhdXNlZFwiIChjbGljayk9XCJyZXN1bWVSZWNvcmRpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBsYXlfYXJyb3cgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzUmVjb3JkaW5nXCIgY2xhc3M9XCJ0aW1lci1kaXNwbGF5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0Rm9ybWF0dGVkVGltZSgpIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gTXV0ZS91bm11dGUgaW5jb21pbmcgY2FsbCAgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdXRlLWluY29taW5nLXJvd1wiICpuZ0lmPVwiY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbCAmJiAhc2hvd0tleXBhZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdXRlLWluY29taW5nLWxhYmVsXCI+TXV0ZSBpbmNvbWluZyBjYWxsczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN3aXRjaCBtYi0wXCIgdGl0bGU9XCJTaWxlbmNlIHRoZSByaW5ndG9uZSBvZiBuZXcgaW5jb21pbmcgY2FsbHMgZHVyaW5nIHRoaXMgY2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJ0d2lsaW9TZXJ2aWNlLmlzSW5jb21pbmdNdXRlZFwiIChjaGFuZ2UpPVwidG9nZ2xlTXV0ZUluY29taW5nQ2FsbCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzd2l0Y2gtc2xpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93S2V5cGFkXCIgY2xhc3M9XCJzZW5kRGlnaXRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJjYWxsLWlucHV0c1wiIGlkPVwiY2FsbC1pbnB1dFwiIFsobmdNb2RlbCldPVwiY2FsbElucHV0XCIgKGtleXVwKT1cIm9uQ2FsbElucHV0RW50ZXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGlucHV0LWNsZWFyLWJ0blwiICpuZ0lmPVwiY2FsbElucHV0XCIgKGNsaWNrKT1cImNsZWFySW5wdXRzKClcIj5jbG9zZV9zbWFsbDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tY29udGFpbmVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiAqbmdJZj1cInNob3dLZXlwYWRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrZXktYnRuXCIgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlwYWRWYWxcIiAoY2xpY2spPVwib25DYWxsSW5wdXRzKGtleS5udW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3trZXkubnVtfX1cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1hbGJoYWJldHNcIj57e2tleS50ZXh0ID8ga2V5LnRleHQgOiAnJm5ic3A7J319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYWN0aW9uLWJ0bnNcIiBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOiAnNzIzeCd9XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWV2ZW5seSBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtc2VjLWJ0biBtci0zXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsXCIgKGNsaWNrKT1cInRvZ2dsZU11dGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAqbmdJZj1cImlzTXV0ZVwiPiBtaWNfb2ZmIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCIhaXNNdXRlXCI+IG1pYyA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtc2VjLWJ0biBtci0zXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIChjbGljayk9XCJ0b2dnbGVLZXlwYWQoKVwiPiB0cmFuc2l0aW9uX2Rpc3NvbHZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1zZWMtYnRuXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbnRhY3RzUGFuZWwoY3VycmVudENhbGwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBncm91cHNfMiA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuIGVuZC1jYWxsLWJ0blwiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiIChjbGljayk9XCJlbmRDYWxsKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBjb25mZXJlbmNlIGNhbGwgdmlldyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmVyZW5jZS1jYWxsLXZpZXdcIiAqbmdJZj1cImlzQ29uZmVyZW5jZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZi1oZWFkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmYtaWNvbiBtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGdyb3VwcyA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmYtdGl0bGVcIj57e2N1cnJlbnRDb25mZXJlbmNlQ2FsbD8uY2FsbExhYmVsIHx8ICdDb25mZXJlbmNlIENhbGwnfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbC10ZXh0IGNvbmYtbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhbGwgb2YgY3VycmVudENhbGxMaXN0OyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY2FsbD8uaXNDb25mZXJlbmNlSG9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG91bGRTaG93U2VwYXJhdG9yKGkpXCI+ICYgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjYWxsPy5jbGllbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzU2VsZk51bWJlcihjYWxsKSBlbHNlIHNlbGZOdW1iZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tjYWxsPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gY2FsbD8uZnJvbU5hbWUgfHwgY2FsbD8uZnJvbSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGw/LnRvTmFtZSB8fCBjYWxsPy50b319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VsZk51bWJlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WW91PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjYWxsPy5jbGllbnRcIj57e2NhbGw/LmRpcmVjdGlvbiA9PSBcIm91dGdvaW5nLWNhbGxcIiA/IGNhbGw/LnRvTmFtZSB8fCBjYWxsPy50byA6IGNhbGw/LmZyb21OYW1lIHx8IGNhbGw/LmZyb20gfHwgJ1Vua25vd24gbnVtYmVyJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtdGltZXJcIj57eyBjdXJyZW50Q29uZmVyZW5jZUNhbGw/LnRpbWVyIHx8IHRpbWVyIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtYWN0aW9uLWJ0bnMgbXQtYXV0b1wiICpuZ0lmPVwiIXNob3dLZXlwYWRcIiBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOiAnMjBweCd9XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWJ0bi1jb250YWluZXJcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gc3RhcnQtc3RvcFwiICpuZ0lmPVwiIWlzUmVjb3JkaW5nXCIgW2Rpc2FibGVkXT1cInVzZXJTZXR0aW5nSW5mby5jYWxsUmVjb3JkaW5nID09ICdOJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsncmVjb3JkaW5nJzogaXNSZWNvcmRpbmcsICdzdG9wcGVkJzogIWlzUmVjb3JkaW5nLCAnZGlzYWJsZWQnOiB1c2VyU2V0dGluZ0luZm8/LmNhbGxSZWNvcmRpbmcgPT0gJ04nfVwiIChjbGljayk9XCJ0b2dnbGVSZWNvcmRpbmcoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpc1JlY29yZGluZyA/ICdTdG9wIFJlY29yZGluZycgOiAnU3RhcnQgUmVjb3JkaW5nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlY29yZGluZy1pY29uXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXVzZS1yZXN1bWUtYnRuc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBwYXVzZS1yZXN1bWVcIiAqbmdJZj1cImlzUmVjb3JkaW5nICYmICFpc1BhdXNlZFwiIChjbGljayk9XCJwYXVzZVJlY29yZGluZygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gcGF1c2UgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gcGF1c2UtcmVzdW1lXCIgKm5nSWY9XCJpc1BhdXNlZFwiIChjbGljayk9XCJyZXN1bWVSZWNvcmRpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBsYXlfYXJyb3cgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzUmVjb3JkaW5nXCIgY2xhc3M9XCJ0aW1lci1kaXNwbGF5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0Rm9ybWF0dGVkVGltZSgpIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gTXV0ZS91bm11dGUgaW5jb21pbmcgY2FsbCAgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdXRlLWluY29taW5nLXJvd1wiICpuZ0lmPVwiY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbCAmJiAhc2hvd0tleXBhZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdXRlLWluY29taW5nLWxhYmVsXCI+TXV0ZSBpbmNvbWluZyBjYWxsczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN3aXRjaCBtYi0wXCIgdGl0bGU9XCJTaWxlbmNlIHRoZSByaW5ndG9uZSBvZiBuZXcgaW5jb21pbmcgY2FsbHMgZHVyaW5nIHRoaXMgY2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJ0d2lsaW9TZXJ2aWNlLmlzSW5jb21pbmdNdXRlZFwiIChjaGFuZ2UpPVwidG9nZ2xlTXV0ZUluY29taW5nQ2FsbCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzd2l0Y2gtc2xpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93S2V5cGFkXCIgY2xhc3M9XCJzZW5kRGlnaXQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNhbGwtaW5wdXRzXCIgaWQ9XCJjYWxsLWlucHV0XCIgWyhuZ01vZGVsKV09XCJjYWxsSW5wdXRcIiAoa2V5dXApPVwib25DYWxsSW5wdXRFbnRlcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaW5wdXQtY2xlYXItYnRuXCIgKm5nSWY9XCJjYWxsSW5wdXRcIiAoY2xpY2spPVwiY2xlYXJJbnB1dHMoKVwiPmNsb3NlX3NtYWxsPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwic2hvd0tleXBhZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtleS1idG5cIiAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXBhZFZhbFwiIChjbGljayk9XCJvbkNhbGxJbnB1dHMoa2V5Lm51bSlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2tleS5udW19fVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWFsYmhhYmV0c1wiPnt7a2V5LnRleHQgPyBrZXkudGV4dCA6ICcmbmJzcDsnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25mLWFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjaXJjbGUtYnRuXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc011dGV9XCIgKGNsaWNrKT1cInRvZ2dsZU11dGUodHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4ge3sgaXNNdXRlID8gJ21pY19vZmYnIDogJ21pYycgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2lyY2xlLWJ0blwiIChjbGljayk9XCJ0b2dnbGVLZXlwYWQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiB0cmFuc2l0aW9uX2Rpc3NvbHZlIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNpcmNsZS1idG5cIiAoY2xpY2spPVwidG9nZ2xlQ29udGFjdHNQYW5lbChjdXJyZW50Q2FsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gZ3JvdXBzXzIgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZi1lbmRcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjaXJjbGUtYnRuIGRhbmdlclwiIChjbGljayk9XCJlbmRDb25mZXJlbmVjZUNhbGwoY3VycmVudENvbmZlcmVuY2VDYWxsPy5wYXJ0aWNpcGFudHNbMF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndhdmUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJ3YXZlc1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxyXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMjQgMTUwIDI4XCIgcHJlc2VydmVBc3BlY3RSYXRpbz1cIm5vbmVcIiBzaGFwZS1yZW5kZXJpbmc9XCJhdXRvXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cImdlbnRsZS13YXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0tMTYwIDQ0YzMwIDAgNTgtMTggODgtMThzIDU4IDE4IDg4IDE4IDU4LTE4IDg4LTE4IDU4IDE4IDg4IDE4IHY0NGgtMzUyelwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICA8ZyBjbGFzcz1cInBhcmFsbGF4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCIgeD1cIjQ4XCIgeT1cIjBcIiBmaWxsPVwicmdiYSgyNTUsMjU1LDI1NSwwLjcpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIiB4PVwiNDhcIiB5PVwiM1wiIGZpbGw9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiIHg9XCI0OFwiIHk9XCI3XCIgZmlsbD1cIiNmZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gSW5jb21pbmcgY2FsbCB1c2VyIGRldGFpbHMgc2hvd24gaW4gbW9kZWwgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FsbC1jb250YWluZXItbW9kZWwgcC0zIHRleHQtd2hpdGUgbW9kZWwtY29udGVudCBjYWxsLWNvbnRhaW5lclwiICpuZ0lmPVwiaXNDbGlja0V4cGFuZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1pbmZvLXBhbmVsLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiICpuZ0lmPVwiY3VycmVudENvbmZlcmVuY2VDYWxsPy5jb25mZXJlbmNlSWQgIT0gc2VsZWN0ZWRVc2VySW5mbz8uY29uZmVyZW5jZUlkICYmIG5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICA8cD48L3A+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZGlhbC1jbG9zZS1idG4gXCIgKGNsaWNrKT1cIm9uQ2xvc2VDMkNJbmZvUGFuZWwoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjI0cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI2ZmZmZmZlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIm0yNTYtMjAwLTU2LTU2IDIyNC0yMjQtMjI0LTIyNCA1Ni01NiAyMjQgMjI0IDIyNC0yMjQgNTYgNTYtMjI0IDIyNCAyMjQgMjI0LTU2IDU2LTIyNC0yMjQtMjI0IDIyNFpcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItMiB1c2VyLWluZm8tc2VjdGlvblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbXktM1wiPlxyXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidGV4dC13aGl0ZVwiPkMyQyBDQUxMIDoge3tzZWxlY3RlZFVzZXJJbmZvPy5zb3VyY2VOYW1lfX0gfCB7e3NlbGVjdGVkVXNlckluZm8/LnBvaW50TmFtZX19PC9oMz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJ0ZXh0LXdoaXRlIG1iLTFcIj5OYW1lOjwvaDU+XHJcbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJ0ZXh0LXdoaXRlIHVzZXJOYW1lXCI+e3tzZWxlY3RlZFVzZXJJbmZvPy5uYW1lfX08L2g0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImYtMTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xXCI+RXh0ZW5zaW9uOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtMlwiPnt7c2VsZWN0ZWRVc2VySW5mbz8uZXh0ZW5zaW9ufX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMVwiPk51bWJlcjo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPnt7c2VsZWN0ZWRVc2VySW5mbz8ubnVtYmVyfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtMlwiPkVtYWlsOiA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57e3NlbGVjdGVkVXNlckluZm8/LmVtYWlsfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0yXCI+U3ViamVjdDo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTIgc3ViamVjdC10ZXh0XCIgdGl0bGU9XCJ7e3NlbGVjdGVkVXNlckluZm8/LnN1YmplY3R9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzZWxlY3RlZFVzZXJJbmZvPy5zdWJqZWN0fX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0yIG1iLTFcIj5JbWFnZTo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZWxsaXBzaXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkVXNlckluZm8/LmltYWdlICYmIHNlbGVjdGVkVXNlckluZm8/LmltYWdlICE9PSAnLSc7IGVsc2Ugbm9JbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwie3tzZWxlY3RlZFVzZXJJbmZvPy5pbWFnZX19XCIgYWx0PVwiXCIgd2lkdGg9XCIxNTBcIiBjbGFzcz1cIm1sLTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSW1hZ2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+Tm8gSW1hZ2UgQXZhaWxhYmxlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTFcIj5NZXNzYWdlOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29udGFpbmVyXCIgW2NsYXNzLmV4cGFuZGVkXT1cImlzRXhwYW5kZWRcIj57e3NlbGVjdGVkVXNlckluZm8/Lm1lc3NhZ2V9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0b2dnbGUtYnRuXCIgKm5nSWY9XCJzaG93QnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZVRleHQoKVwiPnt7IGlzRXhwYW5kZWQgPyAnU2VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVzcycgOiAnU2VlIG1vcmUnIH19PC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIGNvbnRhY3QgbGlzdCBwYW5lbCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1wYW5lbFwiICpuZ0lmPVwic2hvd0NvbnRhY3RzUGFuZWwgJiYgIXNob3dOZXdDYWxsTG9hZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWxvYWRlci1vdmVybGF5IHAtMyB0ZXh0LWNlbnRlclwiICpuZ0lmPVwiaXNQYXJ0aWNpcGFudFBhbmVsTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1zZWNvbmRhcnlcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5Mb2FkaW5nLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0yXCI+PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhcnRpY2lwYW50LWxpc3QtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkQ29uZk5hbWUgfHwgJ0NvbmZlcmVuY2UnIH19IFBhcnRpY2lwYW50c1xyXG4gICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwidG90YWxQYXJ0aWNpcGFudHNDb3VudCA8IDM7IGVsc2UgY29uZkhlYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICBDYWxsIFBhcnRpY2lwYW50c1xyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NvbmZIZWFkaW5nPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICA8cD48L3A+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZGlhbC1jbG9zZS1idG5cIiAoY2xpY2spPVwidG9nZ2xlQ29udGFjdHNQYW5lbCh7fSwgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgd2lkdGg9XCIyNHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMwMDAwMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJtMjU2LTIwMC01Ni01NiAyMjQtMjI0LTIyNC0yMjQgNTYtNTYgMjI0IDIyNCAyMjQtMjI0IDU2IDU2LTIyNCAyMjQgMjI0IDIyNC01NiA1Ni0yMjQtMjI0LTIyNCAyMjRaXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU0VBUkNIIElOUFVUICh2aXNpYmxlIHdoZW4gaXNTZWFyY2hWaXNpYmxlID0gdHJ1ZSkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1iYXIgcC0zIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiQWRkIGEgcGFydGljaXBhbnQgYnkgTmFtZSBvciBOdW1iZXJcIiB0aXRsZT1cIkFkZCBhIHBhcnRpY2lwYW50IGJ5IE5hbWUgb3IgTnVtYmVyXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgKGlucHV0KT1cImFwcGx5RmlsdGVyKClcIiAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhY3RzLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgZmlsdGVyZWRMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaXRlbVwiICpuZ0lmPVwic2VhcmNoVGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29udGFjdC1hdmF0YXJcIiBbc3JjXT1cImM/LmltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LW5hbWVcIj57e2M/LmZpcnN0TmFtZX19IHt7Yz8ubWlkZGxlTmFtZX19IHt7Yz8ubGFzdE5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtdGl0bGVcIj57eyAoYz8ubnVtYmVyc0xpc3QgJiYgYz8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlcikgfX17eyBjPy5udW1iZXJzTGlzdFswXT8ubnVtYmVyTGFiZWwgPyAnICgnICsgYy5udW1iZXJzTGlzdFswXS5udW1iZXJMYWJlbCArICcpJyA6ICcnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0biBjb250YWN0LWFkZC1idG4gbXItMlwiIChjbGljayk9XCJjYWxsQ29udGFjdChjKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjPy5Jc0Nvbm5lY3RlZFwiIHRpdGxlPVwiQWRkIHRvIGNhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBhZGQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRhY3QtY2FsbC1idG5cIiAoY2xpY2spPVwiQ2FsbFRvVW5zYXZlZE51bWJlcihjPy5udW1iZXJzTGlzdFswXT8ubnVtYmVyLCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjPy5Jc0Nvbm5lY3RlZFwiIHRpdGxlPVwiTmV3IENhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlsdGVyZWRMaXN0Lmxlbmd0aCAmJiBpc0RpcmVjdENhbGxPcHRpb25TaG93ICYmIHNlYXJjaFRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjb250YWN0LWF2YXRhclwiIFtzcmNdPVwiJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtdGl0bGVcIj57eyBzZWFyY2hUZXh0IH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0biBjb250YWN0LWFkZC1idG4gbXItMlwiIChjbGljayk9XCJDYWxsVG9VbnNhdmVkTnVtYmVyKHNlYXJjaFRleHQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQWRkIHRvIGNhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBhZGQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRhY3QtY2FsbC1idG5cIiAoY2xpY2spPVwiQ2FsbFRvVW5zYXZlZE51bWJlcihzZWFyY2hUZXh0LCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIk5ldyBDYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1saXN0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0wIHRpdGxlXCI+QWN0aXZlIHBhcnRpY2lwYW50cyAoe3sgYWN0aXZlUGFydGljaXBhbnRzQ291bnQgfX0pPC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxociBjbGFzcz1cIm1iLTIgbXQtMVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGZpbHRlcmVkUGFydGljaXBlbnRMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pdGVtXCIgKm5nSWY9XCIhYz8uaXNMZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbnRhY3QtYXZhdGFyXCIgKm5nSWY9XCIhYz8uY2xpZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8udG9JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgOiBjPy5mcm9tSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29udGFjdC1hdmF0YXJcIiAqbmdJZj1cImM/LmNsaWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiYz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb21JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgOiBjPy50b0ltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCIgKm5nSWY9XCIhYz8uY2xpZW50XCI+e3tjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8udG9OYW1lIHx8ICdVbmtub3duJyA6IGM/LmZyb21OYW1lIHx8ICdVbmtub3duJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiICpuZ0lmPVwiIWM/LmNsaWVudFwiPnt7IGM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy50byB8fCAnVW5rbm93bicgOiBjPy5mcm9tIHx8ICdVbmtub3duJ319PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCIgKm5nSWY9XCJjPy5jbGllbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNTZWxmTnVtYmVyKGMpIGVsc2Ugc2VsZk51bWJlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7Yz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb21OYW1lIHx8ICdVbmtub3duJyA6IGM/LnRvTmFtZSB8fCAnVW5rbm93bid9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzZWxmTnVtYmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPllvdTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiICpuZ0lmPVwiYz8uY2xpZW50XCI+e3sgYz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb20gfHwgJ1Vua25vd24nIDogYz8udG8gfHwgJ1Vua25vd24nfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiICpuZ0lmPVwiYz8uaG9zdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItbGFiZWxcIj5Pcmdhbml6ZXI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjPy5qb2luZWQgJiYgIWM/Lmhvc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbm5lY3Rpbmctd3JhcHBlciBtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJpbmdpbmctdGV4dFwiPlJpbmdpbmc8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ljwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjPy5qb2luZWQgfHwgYz8uaG9zdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWljLWJ0biBtci0yXCIgW2Rpc2FibGVkXT1cImM/LmlzSG9sZFwiIChjbGljayk9XCJvbk11dGVVc2VyKGMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAqbmdJZj1cImM/LmlzTXV0ZVwiPiBtaWNfb2ZmIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiIWM/LmlzTXV0ZVwiPiBtaWMgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtaG9sZC1jb250YWN0IG1yLTJcIiBbbmdDbGFzc109XCJ7ICdvbi1ob2xkJzogYz8uaXNIb2xkIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSG9sZENhbGwoYylcIiAqbmdJZj1cIiFjPy5ob3N0XCIgW2Rpc2FibGVkXT1cImlzSG9sZEJ0bkRpc2FibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWM/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/LmZyb20sIGZhbHNlLCB7IHNraXBEdXBsaWNhdGVDaGVjazogdHJ1ZSB9KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gYWRkIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlJlam9pbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0biBjb250YWN0LWFkZC1idG5cIiAqbmdJZj1cImM/LmNsaWVudCAmJiAhYz8uam9pbmVkICYmICFjPy5idXNpbmVzc051bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJDYWxsVG9VbnNhdmVkTnVtYmVyKGMuZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb20gOiBjPy50bywgZmFsc2UsIHsgc2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlIH0pXCI+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
2274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvY29tcG9uZW50cy9jYWxsLXByb2dyZXNzL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGlhbGJveC9zcmMvbGliL2NvbXBvbmVudHMvY2FsbC1wcm9ncmVzcy9jYWxsLXByb2dyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFRLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQW1COUMsTUFBTSxPQUFPLHFCQUFxQjtJQTJIaEMsWUFBb0IsZ0JBQWtDLEVBQVUsR0FBc0IsRUFDN0UsYUFBNEIsRUFDM0IsU0FBMkIsRUFDM0IsMEJBQXNEO1FBSDVDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUM3RSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQiwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO1FBMUh2RCx5QkFBb0IsR0FBUSxFQUFFLENBQUM7UUFDL0IsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFDdkIsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FB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QjtzQkFBMUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFrQkcscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQWlGRSxtQkFBbUI7c0JBQTNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDYWxsLCBEZXZpY2UgfSBmcm9tICdAdHdpbGlvL3ZvaWNlLXNkayc7XHJcbmltcG9ydCB7IEV4dGVuc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2V4dGVuc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHdpbGlvU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvdHdpbGlvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudHMnO1xyXG5pbXBvcnQgc3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XHJcbmltcG9ydCB7IGtleXBhZCB9IGZyb20gJy4uLy4uLy4uL2tleXBhZCc7XHJcbmltcG9ydCB7IGludGVydmFsLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2luY29tZWluZy1jYWxsLXNvY2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSXBBZGRyZXNzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvaXAtYWRkcmVzcy5zZXJ2aWNlJztcclxuaW50ZXJmYWNlIENhbGxEZXRhaWxzIHtcclxuICBjYWxsU2lkOiBzdHJpbmc7XHJcbiAgY2FsbFN0YXR1czogc3RyaW5nO1xyXG59XHJcbmludGVyZmFjZSBDYWxsU3RhdHVzUmVzcG9uc2Uge1xyXG4gIGNhbGxEZXRhaWxzOiBDYWxsRGV0YWlscztcclxuICByZXNwb25zZTogc3RyaW5nO1xyXG4gIGVycm9yVHlwZTogbnVtYmVyO1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxuICBzdGF0dXM6IG51bWJlcjtcclxufVxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jYWxsLXByb2dyZXNzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENhbGxQcm9ncmVzc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSBjYWxsRGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkQ2FsbGVySWQ6IGFueTtcclxuICBASW5wdXQoKSBuZXdJbmNvbWluZ0NhbGxEYXRhPzogQ2FsbDsgLy9cclxuICBASW5wdXQoKSBuZXdJbmNvbWluZ0NhbGxzTGlzdDogYW55ID0gW107XHJcbiAgQElucHV0KCkgY2FsbGVySWRMaXN0OiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSBuZXdDYWxsQ29uZmVyZW5jZTogYW55ID0ge307XHJcbiAgQElucHV0KCkgbWlzc0NhbGxJbmZvOiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSB1c2VyU2V0dGluZ0luZm86IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGRldmljZUlkOiBhbnk7XHJcbiAgQElucHV0KCkgY2FsbEFjdGlvbjogYW55O1xyXG4gIEBJbnB1dCgpIGNvbmZlcmVuY2VDYWxsSW5mbzogYW55O1xyXG4gIEBJbnB1dCgpIGluY29taW5nRnJvbUltYWdlOnN0cmluZyA9ICcnXHJcbiAgdXNlcklkOiBhbnk7XHJcbiAgQE91dHB1dCgpIGVuZENhbGxFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBpbmNvbWluZ0NhbGxzTmV3SW5mbzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsvL1xyXG4gIEBPdXRwdXQoKSBtaW5pbWlzZUV2ZW50OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgZGV2aWNlPzogRGV2aWNlO1xyXG4gIGNhbGwhOiBDYWxsIHwgYW55O1xyXG4gIHNob3dSaW5nQW5pbWF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdGltZXI6IHN0cmluZyA9ICcwMDowMCc7XHJcbiAgaW50ZXJ2YWxJZDogYW55O1xyXG4gIHNob3dLZXlwYWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBrZXlwYWRWYWwgPSBrZXlwYWQ7XHJcbiAgY2FsbElucHV0OiBzdHJpbmcgPSAnJztcclxuICBpc011dGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwZW5kaW5nTXV0ZVVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlOyBcclxuICBpbnRlbmRlZE11dGVTdGF0ZTogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xyXG4gIGRpc2JhbGVFbmRDYWxsQnRuOiBib29sZWFuID0gdHJ1ZTtcclxuICBzaG93Q2xlYXJCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0NvbGxvcHMgPSBmYWxzZTtcclxuICBjdXJyZW50Q2FsbDogYW55O1xyXG4gIGlzQ29uZmVyZW5jZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzT3V0Z29pbmdDYWxsOiBib29sZWFuID0gdHJ1ZTtcclxuICBAT3V0cHV0KCkgaW5jb21pbmdDYWxsSW5pdGlhdGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIGlzTG9hZGVyc2hvd246IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgZW5kSW5jb21pbmdDYWxsRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLy8gUmVjb3JkaW5nIHZhcmlhYmxlc1xyXG4gIGNhbGxTaWQ6IGFueTtcclxuICBpc1JlY29yZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzUGF1c2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdGltZXJTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcbiAgdGltZUVsYXBzZWQgPSAwOyAvLyBpbiBzZWNvbmRzXHJcbiAgcmVjb3JkQ2FsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGluY29taW5nQ2FsbFNpZDogYW55O1xyXG4gIGNhbGxTdGF0dXM6IHN0cmluZyA9ICdyaW5naW5nJzsgICAgLy9cclxuICBpbmNvbWluZ1JlY29yZENhbGw/OiBhbnk7XHJcbiAgc2VsZWN0ZWRJbmNvbWluZ0NhbGw6IGFueTtcclxuICBzaG93Q29udGFjdHNQYW5lbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzQWRkUmVtb3ZlUGFydGljaXBhbnQ6IGJvb2xlYW4gPSBmYWxzZTsgICAvL1xyXG4gIGlzQ29uY3VycmVudEluY29taW5nOiBib29sZWFuID0gZmFsc2U7ICAgLy9cclxuICBoZWxkQ2FsbD86IENhbGw7ICAvL1xyXG4gIGlzQ2FsbE9uSG9sZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNvbnRhY3RzOiBhbnlbXSA9IFtdO1xyXG4gIGN1cnJlbnRDYWxsTGlzdDogYW55W10gPSBbXTtcclxuICBjb25mZXJlbmNlSWQ6IGFueTtcclxuICBhbGxQYXJ0aWNpcGVudExpc3Q6IGFueTtcclxuICBpc0NsaWNrRXhwYW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNDYWxsSW5Qcm9ncmVzcyE6IGJvb2xlYW47XHJcbiAgaXNDdXJyZW50SW5jb21pbmdDYWxsTGlzdDogYW55ID0gW107XHJcbiAgaXNDb25mZXJlbmNlQ2FsbEhvbGQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWxlY3RlZFVzZXJJbmZvOiBhbnk7XHJcbiAgaXNTZWFyY2hWaXNpYmxlID0gZmFsc2U7XHJcbiAgaXNFeHBhbmRlZCA9IGZhbHNlO1xyXG4gIHNlYXJjaFRleHQgPSAnJztcclxuICBmaWx0ZXJlZExpc3Q6IGFueSA9IFtdO1xyXG4gIGZpbHRlcmVkUGFydGljaXBlbnRMaXN0OiBhbnk7XHJcbiAgc2hvd0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzUmluZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzRGlyZWN0Q2FsbE9wdGlvblNob3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkaWFsQWxlcnQgPSB7XHJcbiAgICBtc2c6ICcnLFxyXG4gICAgc2hvdzogZmFsc2VcclxuICB9XHJcbiAgbGVmdFBhcnRpY2lwZW50OiBhbnkgPSB7fTtcclxuICBjb25mZXJlbmNlQ2FsbExpc3Q6IGFueVtdID0gW107XHJcbiAgaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNDb25uZWN0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaG9zdG51bWJlcjogYW55O1xyXG4gIGlzTmV3QWRkZWRDYWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGV2aWNlTnVtYmVyTGlzdDogYW55ID0gW107XHJcbiAgb3VyTnVtYmVySW5mbzogYW55ID0ge307XHJcbiAgY3VycmVudENvbmZlcmVuY2VDYWxsOiBhbnkgPSB7fTtcclxuICBpc1JlYXNvbkNoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0FsbEFjY2VwdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbGVhdmVSZWFzb246IHN0cmluZyA9ICcnO1xyXG4gIC8vIDI0LWhvdXIgdGltZSBwaWNrZXJcclxuICBsZWF2ZUhvdXI6IHN0cmluZyA9ICcnO1xyXG4gIGxlYXZlTWludXRlOiBzdHJpbmcgPSAnJztcclxuICBob3Vyczogc3RyaW5nW10gPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNCB9LCAoXywgaSkgPT4gaS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykpO1xyXG4gIG1pbnV0ZXM6IHN0cmluZ1tdID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogNjAgfSwgKF8sIGkpID0+IGkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpKTtcclxuICBzaG93SG91ckRyb3Bkb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd01pbnV0ZURyb3Bkb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRDb25mOiBhbnk7XHJcbiAgc2hvd0NvbmZlcmVuY2VXYXJuaW5nTW9kYWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwZW5kaW5nQ2FsbERhdGE6IGFueSA9IG51bGw7XHJcbiAgY2FsbE51bWJlclRvYXN0ID0ge1xyXG4gICAgc2hvdzogZmFsc2UsXHJcbiAgICB0eXBlOiAnYWxlcnQtc3VjY2VzcycsXHJcbiAgICBudW1iZXI6ICcnLFxyXG4gICAgZGlzcGxheU51bTogJydcclxuICB9O1xyXG4gIGlzVW5ob2xkQ29uZmVyZW5jZUNhbGw6IGFueTsgIC8vXHJcbiAgY29uZmVyZW5jZUNhbGxOdWxsQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgYWxsQ29uUGFydGljaXBlbnRMaXN0OiBhbnkgPSB7fTtcclxuICBjb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0OiBhbnk7XHJcbiAgcHJpdmF0ZSBhY2NlcHRlZENhbGxMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGlzSG9sZEJ0bkRpc2FibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBDMkNvbmZvTGlzdDogYW55ID0ge307XHJcbiAgcHJpdmF0ZSBsYXN0QWN0aXZlQ29uZmVyZW5jZUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHBlbmRpbmdBdXRvVW5ob2xkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRDb25mTmFtZTogYW55O1xyXG4gIHBlbmRpbmdNdXRlUGFydGljaXBhbnRzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuICBpbnRlbmRlZE11dGVTdGF0ZXM6IE1hcDxzdHJpbmcsIGJvb2xlYW4+ID0gbmV3IE1hcCgpO1xyXG4gIHNob3dOZXdDYWxsTG9hZGVyOmJvb2xlYW4gPSBmYWxzZTtcclxuICBuZXdDYWxsTG9hZGVyRGF0YTogeyBuYW1lOiBzdHJpbmc7IHBob25lOiBzdHJpbmcsIGltZz86IHN0cmluZyB9ID0geyBuYW1lOiAnJywgcGhvbmU6ICcnLCBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyB9O1xyXG4gIEBJbnB1dCgpIG91dGdvaW5nQ29udGFjdE5hbWUgPSAnJztcclxuICBzaG93TGVhdmVDb25maXJtYXRpb25Nb2RhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGxlYXZlQ29uZlBhcnRpY2lwYW50OiBhbnkgPSBudWxsO1xyXG4gIGxlYXZlQ29uZkNvbmZlcmVuY2VOYW1lOiBzdHJpbmcgPSAnJztcclxuICBpc1BhcnRpY2lwYW50UGFuZWxMb2FkaW5nID0gZmFsc2U7XHJcbiAgaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQ6IGFueTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGV4dGVuc2lvblNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyB0d2lsaW9TZXJ2aWNlOiBUd2lsaW9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpcFNlcnZpY2U6IElwQWRkcmVzc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlOiBJbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5jYWxsID0gdGhpcy50d2lsaW9TZXJ2aWNlLmNhbGw7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIFN1YnNjcmliZSB0byBpbmNvbWluZyBjYWxscyBmcm9tIFR3aWxpb1NlcnZpY2VcclxuICAgICB0aGlzLkdldENvbnRhY3RzTGlzdCgpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuZXh0ZW5zaW9uU2VydmljZS51c2VySWQpIHtcclxuICAgICAgICB0aGlzLnVzZXJJZCA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS51c2VySWQ7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3Vic2NyaWJpbmcgdG8gaW5jb21pbmcgY2FsbHM6JywgZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRldmljZU51bWJlckxpc3QgPSB0aGlzLmNhbGxlcklkTGlzdC5tYXAoKHJlczogYW55KSA9PiByZXMubnVtYmVyKTtcclxuICAgXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAodGhpcy51c2VySWQpIHtcclxuICAgICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnVzZXJJZCA9IHRoaXMudXNlcklkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWydjYWxsRGF0YSddKSB7XHJcbiAgICAgIGlmIChjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZT8uaXNJbmNvbWluZ0NhbGwpIHtcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LmRpc3BsYXlOdW0gfHwgY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LmZyb20pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0ge1xyXG4gICAgICAgICAgLi4uY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWUsXHJcbiAgICAgICAgICBpZDogJzEyNScsXHJcbiAgICAgICAgICBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcclxuICAgICAgICAgIGlzSG9sZDogZmFsc2UsXHJcbiAgICAgICAgICBpc011dGU6IGZhbHNlLFxyXG4gICAgICAgICAgaXNDb25mZXJlbmNlOiBmYWxzZSxcclxuICAgICAgICAgIGlzQWNjZXB0Q2FsbDogdHJ1ZSxcclxuICAgICAgICAgIGRpYWw6IHRydWUsXHJcbiAgICAgICAgICBwaG9uZTogY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LnBob25lLFxyXG4gICAgICAgICAgcGFydGljaXBhbnRJZDogJzEyMScsXHJcbiAgICAgICAgICBuYW1lOiBjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZT8ubmFtZSB8fCBjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZT8uZnJvbU5hbWUgfHwgY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LnRvTmFtZSB8fCAnJyxcclxuICAgICAgICAgIHRpbWU6IHRoaXMudGltZXIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9uQWRkTmV3Q2FsbChjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWyduZXdJbmNvbWluZ0NhbGxzTGlzdCddPy5jdXJyZW50VmFsdWU/Lmxlbmd0aCB8fCBjaGFuZ2VzWyduZXdJbmNvbWluZ0NhbGxzTGlzdCddPy5wcmV2aW91c1ZhbHVlPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5pc1BhcnRpY2lwYW50UGFuZWxMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGV2aWNlTnVtYmVyTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmRldmljZU51bWJlckxpc3QgPSB0aGlzLmNhbGxlcklkTGlzdC5tYXAoKHJlczogYW55KSA9PiByZXMubnVtYmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coJ25ld0luY29taW5nQ2FsbHNMaXN0JywgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCk7XHJcbiAgICAgICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5mb3JFYWNoKChjYWxsSW5mbzogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUlkID0gaSA9PSAwID8gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdFtpXS5jb25mZXJlbmNlSWQgOiB0aGlzLmNvbmZlcmVuY2VJZDtcclxuICAgICAgICAgIGxldCBvdXJOdW1iZXJJbmZvID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdFtpXT8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyAmJiByZXNEYXRhPy5jbGllbnQpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8udG8pICYmIHJlc0RhdGE/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgKCFyZXNEYXRhPy5idXNpbmVzc051bWJlciB8fCAocmVzRGF0YT8uYnVzaW5lc3NOdW1iZXIgJiYgY2FsbEluZm8/LnBhcnRpY2lwYW50cz8ubGVuZ3RoID09IDEpKSkpICYmICFyZXNEYXRhPy5pc0xlZnRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGlmICghdGhpcy5wZW5kaW5nTXV0ZVVwZGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzTXV0ZSA9ICFvdXJOdW1iZXJJbmZvPy5pc0hvbGQgPyBvdXJOdW1iZXJJbmZvPy5pc011dGUgOiB0aGlzLmlzTXV0ZTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAob3VyTnVtYmVySW5mbz8uaXNNdXRlID09PSB0aGlzLmludGVuZGVkTXV0ZVN0YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNNdXRlID0gb3VyTnVtYmVySW5mbz8uaXNNdXRlO1xyXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdNdXRlVXBkYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaW50ZW5kZWRNdXRlU3RhdGUgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy90aGlzLmlzTXV0ZSA9ICFvdXJOdW1iZXJJbmZvPy5pc0hvbGQgPyBvdXJOdW1iZXJJbmZvPy5pc011dGUgOiB0aGlzLmlzTXV0ZTtcclxuICAgICAgICAgIGxldCBjdXJyZW50Y2FsbFBhcnRpY2lwYW50TGlzdElEID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmlsdGVyKChyZXMpPT4gcmVzLmNvbmZlcmVuY2VJZCA9PSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0W2ldPy5jb25mZXJlbmNlSWQpLm1hcCgocmVzKT0+IHJlcy5wYXJ0aWNpcGFudElkKTtcclxuICAgICAgICAgIGxldCB1cGRhdGVkTGlzdCA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChjb25mOiBhbnkpID0+IGNvbmYuY29uZmVyZW5jZUlkID09PSBjYWxsSW5mby5jb25mZXJlbmNlSWQpLmZsYXRNYXAoKGNvbmY6IGFueSkgPT4gY29uZi5wYXJ0aWNpcGFudHMubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uaWQpKTtcclxuICAgICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3RbaV0ucGFydGljaXBhbnRzLm1hcCgocmVzOmFueSkgPT4gcmVzLmlkKTtcclxuICAgICAgICAgIGN1cnJlbnRjYWxsUGFydGljaXBhbnRMaXN0SUQuZm9yRWFjaCgocGFydGljaXBhbnRJZDphbnkpID0+IHtcclxuICAgICAgICAgICAgaWYoIXVwZGF0ZWRMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50SWQpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maWx0ZXIoKHJlc0luZm86YW55KSA9PiByZXNJbmZvPy5wYXJ0aWNpcGFudElkICE9PSBwYXJ0aWNpcGFudElkIHx8IChyZXNJbmZvPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNJbmZvPy5pc0FjY2VwdENhbGwpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgaWYgKG91ck51bWJlckluZm8/LmlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlZFBhcnRpY2lwYW50TGlzdCh0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0W2ldPy5wYXJ0aWNpcGFudHMpO1xyXG4gICAgICAgICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0W2ldLnBhcnRpY2lwYW50cy5mb3JFYWNoKGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXM/Lmhvc3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaG9zdG51bWJlciA9IHJlcztcclxuICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgIGlmKG91ck51bWJlckluZm8/LmlzQ29uZmVyZW5jZSB8fCAodGhpcy5ob3N0bnVtYmVyPy5pc0NvbmZlcmVuY2UgJiYgdGhpcy5ob3N0bnVtYmVyPy5jb25mZXJlbmNlSWQgPT0gcmVzPy5jb25mZXJlbmNlSWQpIHx8IGNhbGxJbmZvPy5wYXJ0aWNpcGFudHM/Lmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNDb25mZXJlbmNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGFjdDogYW55ID0ge31cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhY3RzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgY29udGFjdCA9IHRoaXMuY29udGFjdHMuZmluZCgocmVzRGF0YSkgPT5cclxuICAgICAgICAgICAgICAgICAgICByZXNEYXRhPy5udW1iZXJzTGlzdFswXT8ubnVtYmVyID09IChyZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHJlcz8uZnJvbSA6IHJlcz8udG8pXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDYWxsTGlzdD8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kSW5kZXgoKGl0ZW06IGFueSkgPT4gaXRlbT8uaWQgPT0gcmVzPy5pZCk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSAmJiAhcmVzLmlzTGVmdCAmJiByZXM/LnN0YXR1cyAhPSAnbm8tYW5zd2VyJyAmJiByZXM/LnN0YXR1cyAhPSAnY2FuY2VsZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAuLi5yZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICBmcm9tTmFtZTogdGhpcy5nZXROYW1lKHJlcz8uZnJvbSkgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0b05hbWU6ICB0aGlzLmdldE5hbWUocmVzPy50bykgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpbWc6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gKHJlcz8uZnJvbUltYWdlIHx8IHJlcz8uaW1nKSAgOiByZXM/LnRvSW1hZ2UgfHwgY29udGFjdD8uaW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNIb2xkOiByZXM/LmlzSG9sZCxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzQ29uZmVyZW5jZUhvbGQ6IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3Q/Lmxlbmd0aCA+IDEgPyBvdXJOdW1iZXJJbmZvPy5pc0hvbGQgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzTm90aWZpY2F0aW9uOiBjYWxsSW5mbz8uX2lzTm90aWZpY2F0aW9uICYmICF0aGlzLmdldFN0YXR1cyhyZXMpICYmIHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNNdXRlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzQ29uZmVyZW5jZTogdGhpcy5pc0NvbmZlcmVuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0FjY2VwdENhbGw6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gdGhpcy5nZXRTdGF0dXMocmVzKSA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBkaWFsOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcGhvbmU6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gcmVzPy5mcm9tIDogcmVzPy50byxcclxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxMYWJlbDogY2FsbEluZm8/LmNhbGxMYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IHJlcz8uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25mZXJlbmNlU2lkOiBjYWxsSW5mbz8uY29uZmVyZW5jZVNpZCxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHJlcz8ubmFtZSB8fCByZXM/LmZyb21OYW1lIHx8IHJlcz8udG9OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogdGhpcy5nZXRUaW1lRGlmZmVyZW5jZShyZXM/LmpvaW5lZEF0IHx8IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbnRhY3RzUGFuZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZDtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF0aGlzLnRpbWVyIHx8IHRoaXMudGltZXIgPT0gJzAwOjAwJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VGltZXIob3VyTnVtYmVySW5mbz8uam9pbmVkQXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCAhPSAtMSAmJiAocmVzPy5pc0xlZnQgfHwgcmVzPy5zdGF0dXMgPT0gJ25vLWFuc3dlcicgfHwgcmVzPy5zdGF0dXMgPT0gJ2NhbmNlbGVkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2FsbExpc3RbaW5kZXhdPy5pZCA9PSB0aGlzLmN1cnJlbnRDYWxsPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbnRhY3RzUGFuZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZDtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZClcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFRpbWVyKHRoaXMuY3VycmVudENhbGw/LmpvaW5lZEF0KTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCAhPSAtMSAmJiAhcmVzPy5pc0xlZnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydGljaXBhbnRJZCA9IHJlcy5pZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgYSBtdXRlIHVwZGF0ZSBpcyBwZW5kaW5nIGZvciB0aGlzIHBhcnRpY2lwYW50XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNNdXRlUGVuZGluZyA9IHRoaXMucGVuZGluZ011dGVQYXJ0aWNpcGFudHMuaGFzKHBhcnRpY2lwYW50SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVuZGVkTXV0ZSA9IHRoaXMuaW50ZW5kZWRNdXRlU3RhdGVzLmdldChwYXJ0aWNpcGFudElkKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdXBkYXRlZE11dGU6IGJvb2xlYW47XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTXV0ZVBlbmRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBzZXJ2ZXIgYWxyZWFkeSBjb25maXJtZWQgb3VyIGNoYW5nZSwgYWNjZXB0IGl0IGFuZCBjbGVhciBwZW5kaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmlzTXV0ZSA9PT0gaW50ZW5kZWRNdXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRNdXRlID0gcmVzLmlzTXV0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nTXV0ZVBhcnRpY2lwYW50cy5kZWxldGUocGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW50ZW5kZWRNdXRlU3RhdGVzLmRlbGV0ZShwYXJ0aWNpcGFudElkKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwga2VlcCB0aGUgY3VycmVudCBsb2NhbCB2YWx1ZSAoaWdub3JlIHRoZSBzdGFsZSBzZXJ2ZXIgc3RhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRNdXRlID0gdGhpcy5jdXJyZW50Q2FsbExpc3RbaW5kZXhdLmlzTXV0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gTm8gcGVuZGluZyBtdXRlIOKAkyB0cnVzdCB0aGUgc2VydmVyIHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkTXV0ZSA9IHJlcy5pc011dGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0W2luZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgIC4uLnJlcyxcclxuICAgICAgICAgICAgICAgICAgICAgIGZyb21OYW1lOiB0aGlzLmdldE5hbWUocmVzPy5mcm9tKSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgIHRvTmFtZTogIHRoaXMuZ2V0TmFtZShyZXM/LnRvKSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGltZzogcmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyAocmVzPy5mcm9tSW1hZ2UgfHwgcmVzPy5pbWcpIDogcmVzPy50b0ltYWdlIHx8IGNvbnRhY3Q/LmltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIixcclxuICAgICAgICAgICAgICAgICAgICAgIGlzSG9sZDogcmVzPy5pc0hvbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0NvbmZlcmVuY2VIb2xkOiB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGggPiAxID8gb3VyTnVtYmVySW5mbz8uaXNIb2xkIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc05vdGlmaWNhdGlvbjogY2FsbEluZm8/Ll9pc05vdGlmaWNhdGlvbiAmJiAhdGhpcy5nZXRTdGF0dXMocmVzKSAmJiByZXM/LmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGlzTXV0ZTogdXBkYXRlZE11dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc0NvbmZlcmVuY2U6IHRoaXMuaXNDb25mZXJlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY2NlcHRDYWxsOiByZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gdGhpcy5nZXRTdGF0dXMocmVzKSA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBkaWFsOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcGhvbmU6IHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gcmVzPy5mcm9tIDogcmVzPy50byxcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IHJlcz8uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25mZXJlbmNlU2lkOiBjYWxsSW5mbz8uY29uZmVyZW5jZVNpZCxcclxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxMYWJlbDogY2FsbEluZm8/LmNhbGxMYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHJlcz8ubmFtZSB8fCByZXM/LmZyb21OYW1lIHx8IHJlcz8udG9OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGltZTogdGhpcy5nZXRUaW1lRGlmZmVyZW5jZShyZXM/LmpvaW5lZEF0IHx8IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghcmVzLmlzTGVmdCAmJiByZXM/LnN0YXR1cyAhPSAnbm8tYW5zd2VyJyAmJiByZXM/LnN0YXR1cyAhPSAnY2FuY2VsZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlcyxcclxuICAgICAgICAgICAgICAgICAgICBmcm9tTmFtZTogdGhpcy5nZXROYW1lKHJlcz8uZnJvbSkgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9OYW1lOiAgdGhpcy5nZXROYW1lKHJlcz8udG8pIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGltZzogcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IChyZXM/LmZyb21JbWFnZSB8fCByZXM/LmltZykgOiByZXM/LnRvSW1hZ2UgfHwgY29udGFjdD8uaW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiByZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzSG9sZDogcmVzPy5pc0hvbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNDb25mZXJlbmNlSG9sZDogdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoID4gMSA/IG91ck51bWJlckluZm8/LmlzSG9sZCA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTm90aWZpY2F0aW9uOiBjYWxsSW5mbz8uX2lzTm90aWZpY2F0aW9uICYmICF0aGlzLmdldFN0YXR1cyhyZXMpICYmIHJlcz8uZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTXV0ZTogcmVzPy5pc011dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNDb25mZXJlbmNlOiB0aGlzLmlzQ29uZmVyZW5jZSxcclxuICAgICAgICAgICAgICAgICAgICBpc0FjY2VwdENhbGw6IHJlcy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyB0aGlzLmdldFN0YXR1cyhyZXMpIDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBkaWFsOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHBob25lOiByZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gcmVzPy5mcm9tIDogcmVzPy50byxcclxuICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkOiByZXMuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmVyZW5jZVNpZDogY2FsbEluZm8/LmNvbmZlcmVuY2VTaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbExhYmVsOiBjYWxsSW5mbz8uY2FsbExhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHJlcz8ubmFtZSB8fCByZXM/LmZyb21OYW1lIHx8IHJlcz8udG9OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpbWU6IHRoaXMuZ2V0VGltZURpZmZlcmVuY2UocmVzPy5qb2luZWRBdCB8fCBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy50aW1lciA9ICcwMDowMCc7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcihyZXM/LmpvaW5lZEF0KTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmlzTG9hZGVyc2hvdy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5jb25mZXJlbmNlQ2FsbE51bGxDb3VudCA9IDA7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZih0aGlzLmNvbmZlcmVuY2VDYWxsTnVsbENvdW50ID4gNSkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDYWxsIGVuZCBpbiAyOTknKVxyXG4gICAgICAgICAgICB0aGlzLmlzUmluZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ29uY3VycmVudEluY29taW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNSaW5naW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDb250YWN0c1BhbmVsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIE5vIGNhbGwgaW4gcHJvZ3Jlc3M6IHJlc2V0IHRoZSBpbmNvbWluZy1tdXRlIHN3aXRjaCBiYWNrIHRvIGRlZmF1bHQgKG9mZikuXHJcbiAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5zZXRJbmNvbWluZ011dGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5pc1VuaG9sZENvbmZlcmVuY2VDYWxsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB7fVxyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmluZ2luZykge1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UucGF1c2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNhbGwuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3BUaW1lcigpO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxOdWxsQ291bnQrKztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIFJlbW92ZSBwYXJ0aWNpcGFudCBkYXRhIGZvciBjb25mZXJlbmNlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGFjdGl2ZSBsaXN0XHJcbiAgICAgICAgY29uc3QgYWN0aXZlQ29uZmVyZW5jZUlkcyA9IG5ldyBTZXQodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS5jb25mZXJlbmNlSWQpKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbmZJZCBvZiBPYmplY3Qua2V5cyh0aGlzLmFsbENvblBhcnRpY2lwZW50TGlzdCkpIHtcclxuICAgICAgICAgIGlmICghYWN0aXZlQ29uZmVyZW5jZUlkcy5oYXMoY29uZklkKSkge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5hbGxDb25QYXJ0aWNpcGVudExpc3RbY29uZklkXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHZhbGlkVmFsdWVzID0gbmV3IFNldCh0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZsYXRNYXAoKGl0ZW06IGFueSkgPT4gaXRlbT8ucGFydGljaXBhbnRzLm1hcCgodmFsOiBhbnkpID0+IHZhbD8uaWQpKSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gdmFsaWRWYWx1ZXMuaGFzKGl0ZW0/LnBhcnRpY2lwYW50SWQpKTtcclxuICAgICAgICBsZXQgY3VycmVudENhbGw6YW55ID0gW107XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGwgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZpbmQoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGl0ZW0/LnBhcnRpY2lwYW50cz8uZmluZCgocGFydGljaXBhbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZigoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8uZnJvbSkgJiYgcGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgJiYgcGFydGljaXBhbnQ/LmNsaWVudCkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8udG8pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmIHBhcnRpY2lwYW50Py5jbGllbnQpKSAmJiAhcGFydGljaXBhbnQ/LmlzTGVmdCAmJiAhcGFydGljaXBhbnQ/LmlzSG9sZCAmJiAhcGFydGljaXBhbnQ/LmJ1c2luZXNzTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgY3VycmVudENhbGwucHVzaChwYXJ0aWNpcGFudCk7XHJcbiAgICAgICAgICAgICAgdGhpcy50aW1lciA9IHRoaXMuZ2V0VGltZURpZmZlcmVuY2UocGFydGljaXBhbnQ/LmpvaW5lZEF0IHx8IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocGFydGljaXBhbnQ/Lmhvc3QpIHtcclxuICAgICAgICAgICAgICBpdGVtWyd0aW1lciddID0gdGhpcy5nZXRUaW1lRGlmZmVyZW5jZShwYXJ0aWNpcGFudD8uam9pbmVkQXQgfHwgbmV3IERhdGUoKS50b1VUQ1N0cmluZygpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LmZyb20pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnICYmIHBhcnRpY2lwYW50Py5jbGllbnQpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LnRvKSAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiBwYXJ0aWNpcGFudD8uY2xpZW50KSkgJiYgIXBhcnRpY2lwYW50Py5pc0xlZnQgJiYgIXBhcnRpY2lwYW50Py5pc0hvbGQgJiYgIXBhcnRpY2lwYW50Py5idXNpbmVzc051bWJlclxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBEZXRlY3QgZGlzY29ubmVjdCB2cy4gaG9sZCB0cmFuc2l0aW9uIGV4YWN0bHkgb25jZSBwZXIgZXZlbnQuXHJcbiAgICAgICAgLy8gU2FtZSBwYXJ0aWNpcGFudCBmaWx0ZXIgYXMgZ2V0Q3VycmVudENhbGxJbmZvKCkgKHdpdGhvdXQgIWlzSG9sZCkgdG8gc3RheSBjb25zaXN0ZW50LlxyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGwgJiYgIWN1cnJlbnRDYWxsWzBdPy5pc0hvbGQpIHtcclxuICAgICAgICAgIHRoaXMubGFzdEFjdGl2ZUNvbmZlcmVuY2VJZCA9IHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5jb25mZXJlbmNlSWQ7XHJcbiAgICAgICAgICB0aGlzLnBlbmRpbmdBdXRvVW5ob2xkID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxhc3RBY3RpdmVDb25mZXJlbmNlSWQgJiYgIXRoaXMucGVuZGluZ0F1dG9VbmhvbGQpIHtcclxuICAgICAgICAgIGNvbnN0IGxhc3RDb25mID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5maW5kKChjOiBhbnkpID0+IGMuY29uZmVyZW5jZUlkID09IHRoaXMubGFzdEFjdGl2ZUNvbmZlcmVuY2VJZCk7XHJcbiAgICAgICAgICBjb25zdCBvdXJQYXJ0aWNpcGFudEluTGFzdENvbmYgPSBsYXN0Q29uZj8ucGFydGljaXBhbnRzPy5maW5kKChwOiBhbnkpID0+XHJcbiAgICAgICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHA/LmZyb20pICYmIHA/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgJiYgcD8uY2xpZW50KSB8fFxyXG4gICAgICAgICAgICAgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwPy50bykgJiYgcD8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiBwPy5jbGllbnQgJiYgIXA/LmJ1c2luZXNzTnVtYmVyKSkgJiYgIXA/LmlzTGVmdFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIC8vIENvbmZlcmVuY2UgZ29uZSBPUiBvdXIgcGFydGljaXBhbnQgbm90IGhlbGQg4oaSIHRoZSBhY3RpdmUgY2FsbCBkaXNjb25uZWN0ZWQg4oaSIHF1ZXVlIGF1dG8tdW5ob2xkXHJcbiAgICAgICAgICBpZiAoIWxhc3RDb25mIHx8ICFvdXJQYXJ0aWNpcGFudEluTGFzdENvbmY/LmlzSG9sZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdBdXRvVW5ob2xkID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8ucGFydGljaXBhbnRzLmxlbmd0aCA9PSAyICYmIHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5wYXJ0aWNpcGFudHNbMF0/LmlkKSB7XHJcbiAgICAgICAgICBjb25zdCBvd25OdW1iZXJzID0gdGhpcy5kZXZpY2VOdW1iZXJMaXN0ICYmIHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgID8gdGhpcy5kZXZpY2VOdW1iZXJMaXN0XHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgIGNvbnN0IGNhbGxlck51bWJlciA9IHRoaXMuY2FsbERhdGE/LmZyb20gfHwgdGhpcy5zZWxlY3RlZENhbGxlcklkPy5udW1iZXI7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzPy5pc0NvbmZlcmVuY2VIb2xkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBpZiAob3duTnVtYmVycykge1xyXG4gICAgICAgICAgICAgIC8vIE9yaWdpbmFsIGxvZ2ljIOKAkyB3b3JrcyB3aGVuIHRoZSBjYWxsZXLigJFJRCBsaXN0IGlzIGxvYWRlZFxyXG4gICAgICAgICAgICAgIHJldHVybiAocmVzPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnICYmIHJlcz8uY2xpZW50ICYmICFvd25OdW1iZXJzLmluY2x1ZGVzKHJlcz8uZnJvbSkpIHx8XHJcbiAgICAgICAgICAgICAgICAocmVzPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmIHJlcz8uY2xpZW50ICYmICFvd25OdW1iZXJzLmluY2x1ZGVzKHJlcz8udG8pICYmICFyZXM/LmJ1c2luZXNzTnVtYmVyKSB8fFxyXG4gICAgICAgICAgICAgICAgKCFyZXM/LmNsaWVudCAmJiByZXM/LmlzQWNjZXB0Q2FsbCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gU2FmZSBmYWxsYmFjazogZXhjbHVkZSB0aGUgcGFydGljaXBhbnQgd2hvc2UgbnVtYmVyIG1hdGNoZXMgdGhlIGNhbGxlciBJRCB3ZSB1c2VkXHJcbiAgICAgICAgICAgICAgY29uc3QgaXNPd24gPSAocmVzPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnICYmIHJlcz8uZnJvbSA9PT0gY2FsbGVyTnVtYmVyKSB8fFxyXG4gICAgICAgICAgICAgICAgKHJlcz8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiByZXM/LnRvID09PSBjYWxsZXJOdW1iZXIgJiYgIXJlcz8uYnVzaW5lc3NOdW1iZXIpO1xyXG4gICAgICAgICAgICAgIHJldHVybiAhaXNPd247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0geyAuLi5zZWxlY3RlZCwgaXNBY2NlcHRDYWxsOiB0cnVlIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICBlbHNlIGlmICh0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8ucGFydGljaXBhbnRzPy5sZW5ndGggPiAyICYmIHRoaXMuY3VycmVudENvbmZlcmVuY2VDYWxsPy5wYXJ0aWNpcGFudHNbMV0/LmlzQ29uZmVyZW5jZSkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKHJlczogYW55KSA9PiAhcmVzPy5pc0NvbmZlcmVuY2VIb2xkKTtcclxuICAgICAgICAgIHRoaXMuaXNDb25mZXJlbmNlID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYodGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LnBhcnRpY2lwYW50cz8ubGVuZ3RoID09IDEgJiYgdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LnBhcnRpY2lwYW50c1swXT8uaWQpe1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKGNhbGxJbmZvOmFueSk9PiBjYWxsSW5mbz8uaWQgPT0gdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LnBhcnRpY2lwYW50c1swXT8uaWQpO1xyXG4gICAgICAgICAgaWYodGhpcy5jdXJyZW50Q2FsbD8uY2xpZW50ICYmIHRoaXMuY3VycmVudENhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbFsnY2xpZW50J109IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsWydpc0FjY2VwdENhbGwnXT0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jdXJyZW50Q2FsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmKCF0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbCAmJnRoaXMuY3VycmVudENhbGwgJiYgdGhpcy5jdXJyZW50Q2FsbExpc3Q/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChyZXM6IGFueSkgPT4gcmVzPy5pZCA9PSB0aGlzLmN1cnJlbnRDYWxsPy5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGwgJiYgIXRoaXMuaXNOZXdBZGRlZENhbGwpIHtcclxuICAgICAgICAgIGxldCBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvID0gdGhpcy5nZXRDdXJyZW50Q2FsbEluZm8oKTtcclxuICAgICAgICAgIGlmICghY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbz8uaWQgJiYgdGhpcy5wZW5kaW5nQXV0b1VuaG9sZCkge1xyXG4gICAgICAgICAgICAvLyBTZWFyY2ggQUxMIGNvbmZlcmVuY2VzIGV4Y2VwdCB0aGUgb25lIHRoYXQganVzdCBkaXNjb25uZWN0ZWQuXHJcbiAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgYSBzaW5nbGUtY29uZmVyZW5jZSBob2xkIChpbmNsdWRpbmcgYnJpZWYgaXNMZWZ0IHJhY2UgY29uZGl0aW9ucylcclxuICAgICAgICAgICAgLy8gZnJvbSBldmVyIHRyaWdnZXJpbmcgYW4gdW5ob2xkIOKAlCB3ZSBvbmx5IHVuaG9sZCBhIERJRkZFUkVOVCBoZWxkIGNvbmZlcmVuY2UuXHJcbiAgICAgICAgICAgIGxldCBob2xkQ2FsbEluZm86IGFueSA9IG51bGw7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29uZiBvZiB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0KSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbmYuY29uZmVyZW5jZUlkID09IHRoaXMubGFzdEFjdGl2ZUNvbmZlcmVuY2VJZCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgaG9sZENhbGxJbmZvID0gY29uZi5wYXJ0aWNpcGFudHMuZmluZCgoY2FsbEluZm86IGFueSkgPT4gKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMoY2FsbEluZm8/LmZyb20pICYmIGNhbGxJbmZvPy5jbGllbnQpXHJcbiAgICAgICAgICAgICAgICB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGNhbGxJbmZvPy50bykgJiYgY2FsbEluZm8/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcpKSAmJiAhY2FsbEluZm8/LmlzTGVmdCAmJiBjYWxsSW5mbz8uaXNIb2xkICYmICFjYWxsSW5mbz8uYnVzaW5lc3NOdW1iZXIpO1xyXG4gICAgICAgICAgICAgIGlmIChob2xkQ2FsbEluZm8pIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChob2xkQ2FsbEluZm8/LmlkICYmICF0aGlzLmlzVW5ob2xkQ29uZmVyZW5jZUNhbGwpIHtcclxuICAgICAgICAgICAgICBsZXQgaG9sZEluZm86IGFueSA9IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbaG9sZENhbGxJbmZvPy5pZF0sXHJcbiAgICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IGhvbGRDYWxsSW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBtdXRlOiBob2xkQ2FsbEluZm8/Lm11dGUgfHwgZmFsc2VcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBpZihob2xkSW5mbz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignaG9sZEluZm8gMzg3JywgaG9sZEluZm8pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IGhvbGRDYWxsSW5mbz8uY29uZmVyZW5jZUlkO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNVbmhvbGRDb25mZXJlbmNlQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMucGVuZGluZ0F1dG9VbmhvbGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmxhc3RBY3RpdmVDb25mZXJlbmNlSWQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVXNlckluZm8/LnBhcnRpY2lwYW50SWQpIHtcclxuICAgICAgICAgIGxldCBzZWxlY3RlZFVzZXIgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0/LmlkID09IHRoaXMuc2VsZWN0ZWRVc2VySW5mbz8ucGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRVc2VyICYmIChzZWxlY3RlZFVzZXI/LmNvbmZlcmVuY2VJZCA9PSB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8uY29uZmVyZW5jZUlkIHx8IHRoaXMuaXNDbGlja0V4cGFuZCkpIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRVc2VyLklzVXNlckluZm9TaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoc2VsZWN0ZWRVc2VyLmJ1c2luZXNzTnVtYmVyID09IHRydWUgJiYgIXNlbGVjdGVkVXNlci51c2VySW5mb0lkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2dnbGVDMkNJbmZvUGFuZWwoc2VsZWN0ZWRVc2VyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSBzZWxlY3RlZFVzZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jaGVja1RleHRIZWlnaHQoKTtcclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCByZXNJbmRleCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiAhIWl0ZW0/LmJ1c2luZXNzTnVtYmVyICYmIHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhpdGVtPy50bykpO1xyXG4gICAgICAgICAgaWYgKHJlc0luZGV4ID4gLTEgJiYgKHRoaXMuY3VycmVudENhbGxMaXN0W3Jlc0luZGV4XT8uY29uZmVyZW5jZUlkID09IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCB8fCB0aGlzLmlzQ2xpY2tFeHBhbmQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0W3Jlc0luZGV4XVsnSXNVc2VySW5mb1Nob3cnXSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbyA9IHRoaXMuY3VycmVudENhbGxMaXN0W3Jlc0luZGV4XTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja1RleHRIZWlnaHQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5jdXJyZW50Q2FsbD8uYnVzaW5lc3NOdW1iZXIgJiYgdGhpcy5DMkNvbmZvTGlzdFt0aGlzLmN1cnJlbnRDYWxsPy5wYXJ0aWNpcGFudElkXSkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbFsndXNlckluZm9JZCddID0gdGhpcy5DMkNvbmZvTGlzdFt0aGlzLmN1cnJlbnRDYWxsPy5wYXJ0aWNpcGFudElkXTtcclxuICAgICAgICAgIGlmKCF0aGlzLmlzQ2xpY2tFeHBhbmQgJiYgIXRoaXMuc2VsZWN0ZWRVc2VySW5mbyApIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gdGhpcy5DMkNvbmZvTGlzdFt0aGlzLmN1cnJlbnRDYWxsPy5wYXJ0aWNpcGFudElkXTtcclxuICAgICAgICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYodGhpcy5jdXJyZW50Q2FsbExpc3RbMF0/LmJ1c2luZXNzTnVtYmVyICYmICF0aGlzLkMyQ29uZm9MaXN0W3RoaXMuY3VycmVudENhbGxMaXN0WzBdPy5wYXJ0aWNpcGFudElkXSAmJiAhdGhpcy5jdXJyZW50Q2FsbExpc3RbMF0/LmlzQWNjZXB0Q2FsbCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gdGhpcy5jdXJyZW50Q2FsbExpc3RbMF07XHJcbiAgICAgICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuaXNBbGxBY2NlcHRlZCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmV2ZXJ5KChjYWxsOiBhbnkpID0+IGNhbGw/LmlzQWNjZXB0Q2FsbClcclxuICAgICAgICBjb25zdCB1bmlxdWVMaXN0ID0gW1xyXG4gICAgICAgICAgLi4ubmV3IE1hcCh0aGlzLmN1cnJlbnRDYWxsTGlzdC5tYXAoaXRlbSA9PiBbaXRlbS5jb25mZXJlbmNlSWQsIGl0ZW1dKSkudmFsdWVzKClcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdCA9IHVuaXF1ZUxpc3QubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcclxuICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxMaXN0LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgbGV0IHBhcnRpY2lwYW50TGlzdCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKHJlczogYW55KSA9PiByZXM/LmNvbmZlcmVuY2VJZCA9PSBpdGVtPy5jb25mZXJlbmNlSWQgJiYgcmVzPy5idXNpbmVzc051bWJlciAmJiAhcmVzPy5ob3N0KTtcclxuICAgICAgICAgIGlmKHBhcnRpY2lwYW50TGlzdD8uaWQpIHtcclxuICAgICAgICAgICAgaXRlbVsnaXNCdXNpbmVzc051bWJlciddID0gcGFydGljaXBhbnRMaXN0Py5idXNpbmVzc051bWJlcjtcclxuICAgICAgICAgICAgaXRlbVsnYnVzaW5lc3NQYXJ0aWNpcGFudElkJ10gPSBwYXJ0aWNpcGFudExpc3Q/LnBhcnRpY2lwYW50SWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7IFxyXG4gICAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxOdWxsQ291bnQgPSAwO1xyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgaWYodGhpcy5jb25mZXJlbmNlQ2FsbE51bGxDb3VudCA+IDUpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCc0MTEnKVxyXG4gICAgICAgIHRoaXMuaXNSaW5naW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmKHRoaXMuY2FsbCkge1xyXG4gICAgICAgICAgdGhpcy5jYWxsLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0ge31cclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNSaW5naW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNSaW5naW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0NvbmZlcmVuY2VDYWxsSG9sZCA9IGZhbHNlO1xyXG4gICAgICAgIC8vIE5vIGNhbGwgaW4gcHJvZ3Jlc3M6IHJlc2V0IHRoZSBpbmNvbWluZy1tdXRlIHN3aXRjaCBiYWNrIHRvIGRlZmF1bHQgKG9mZikuXHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLnNldEluY29taW5nTXV0ZWQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuc3RvcFRpbWVyKCk7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29uZmVyZW5jZUNhbGxOdWxsQ291bnQgKz0xO1xyXG4gICAgICAgIC8vIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoKTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydjYWxsQWN0aW9uJ10/LmN1cnJlbnRWYWx1ZSAmJiB0aGlzLmNhbGxBY3Rpb24/LnR5cGUgPT0gJ3JlSm9pbicpIHtcclxuICAgICAgdGhpcy5kZXZpY2VOdW1iZXJMaXN0ID0gdGhpcy5jYWxsZXJJZExpc3QubWFwKChyZXM6IGFueSkgPT4gcmVzLm51bWJlcik7XHJcbiAgICAgIGxldCBkYXRhID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0/LmNvbmZlcmVuY2VJZCA9PSB0aGlzLmNhbGxBY3Rpb24/LmNvbmZlcmVuY2VJZCk/LnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+IHJlc0RhdGE/Lmhvc3QpO1xyXG4gICAgICBpZihkYXRhPy5pc0xlZnQgfHwgIWRhdGEpIHtcclxuICAgICAgICB0aGlzLnJlam9pbkhvc3QodGhpcy5jYWxsQWN0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ25ld0NhbGxDb25mZXJlbmNlJ10/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLkNhbGxUb1Vuc2F2ZWROdW1iZXIodGhpcy5uZXdDYWxsQ29uZmVyZW5jZT8ubnVtYmVyLCB0cnVlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVqb2luSG9zdChjYWxsSW5mbzogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZih0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbyA9IHRoaXMuZ2V0Q3VycmVudENhbGxJbmZvKCk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/LmlkKSB7XHJcbiAgICAgICAgICBsZXQgaG9sZEluZm86IGFueSA9IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvPy5pZF0sXHJcbiAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICBob2xkOiB0cnVlLFxyXG4gICAgICAgICAgICBtdXRlOiBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvPy5tdXRlIHx8IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmKGhvbGRJbmZvPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hvbGRJbmZvIDM4NycsIGhvbGRJbmZvKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zdCByZWpvaW5QYXJ0aWNpcGVudEluZm8gPSBjYWxsSW5mbz8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pXHJcbiAgICAgICAgICAmJiByZXNEYXRhPy5jbGllbnQgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJykgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiAhcmVzRGF0YT8uYnVzaW5lc3NOdW1iZXIgJiYgcmVzRGF0YT8uaG9zdCkgJiYgcmVzRGF0YT8uaXNMZWZ0KVxyXG4gICAgICApXHJcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSB0cnVlO1xyXG4gICAgICAvLyAx77iP4oOjIEdldCBuZXcgdG9rZW4gZm9yIHNhbWUgY29uZmVyZW5jZVxyXG4gICAgICBjb25zdCB0b2tlbkRhdGE6IGFueSA9IGF3YWl0IHRoaXMuZ2V0T3V0Z29pbmdDYWxsVG9rZW4oY2FsbEluZm8/LmNvbmZlcmVuY2VJZCk7XHJcbiAgICAgIC8vIDLvuI/ig6MgUmVjb25uZWN0IGRldmljZVxyXG4gICAgICBjb25zdCBvcHRpb25zOiBhbnkgPSB7XHJcbiAgICAgICAgY29kZWNQcmVmZXJlbmNlczogWydvcHVzJywgJ3BjbXUnXSxcclxuICAgICAgICBjbG9zZVByb3RlY3Rpb246IHRydWUsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZGV2aWNlID0gbmV3IERldmljZSh0b2tlbkRhdGEudG9rZW4udmFsdWUsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgdGhpcy5jYWxsID0gYXdhaXQgdGhpcy5kZXZpY2UuY29ubmVjdCh7XHJcbiAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgICBGcm9tOiByZWpvaW5QYXJ0aWNpcGVudEluZm8uZnJvbSxcclxuICAgICAgICAgIFRvOiByZWpvaW5QYXJ0aWNpcGVudEluZm8udG8sXHJcbiAgICAgICAgICBFbnY6IGVudmlyb25tZW50LmFiYixcclxuICAgICAgICAgIFRva2VuOiB0b2tlbkRhdGEudG9rZW4uaWQsXHJcbiAgICAgICAgICBFeHQ6IHJlam9pblBhcnRpY2lwZW50SW5mby5leHROdW0sXHJcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IHJlam9pblBhcnRpY2lwZW50SW5mbz8uY29uZmVyZW5jZUlkXHJcbiAgICAgICAgfSxcclxuICAgICAgICBydGNDb25zdHJhaW50czogeyBhdWRpbzogeyBkZXZpY2VJZDogJ2RlZmF1bHQnIH0gfSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuY2FsbCA9IHRoaXMuY2FsbDtcclxuICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGFkZENsaWVudFBhcnRpY2lwYW50UmVzID0gdGhpcy5hZGRDbGllbnRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICAgICAgZnJvbTogcmVqb2luUGFydGljaXBlbnRJbmZvLmZyb20sXHJcbiAgICAgICAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcclxuICAgICAgICAgICAgICBwYXJ0aWNpcGFudE51bWJlcjogcmVqb2luUGFydGljaXBlbnRJbmZvPy50byxcclxuICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHJlam9pblBhcnRpY2lwZW50SW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICAgIHVzZXJJZDogdGhpcy51c2VySWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgIHByb3h5OiAnJyxcclxuICAgICAgICAgICAgICBjb3VudHJ5Y29kZTogJycsXHJcbiAgICAgICAgICAgICAgZGV2aWNlSWQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgICAgICAgICAgICAgY2xpZW50U2lkOiB0aGlzLmNhbGw/LnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSxcclxuICAgICAgICAgICAgICByZWNvcmRJZDogcmVqb2luUGFydGljaXBlbnRJbmZvPy5pZFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0ID0gcmVqb2luUGFydGljaXBlbnRJbmZvPy5jb25mZXJlbmNlSWQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycygpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gYWRkQ2xpZW50UGFydGljaXBhbnQ6JywgZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignUmVqb2luIGZhaWxlZCcsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1hcFVzZXJJbmZvKHBhcnRpY2lwYW50SW5mbzogYW55LCBjYWxsZXJJbmZvOiBhbnkpIHtcclxuICAgIHBhcnRpY2lwYW50SW5mb1snZW1haWwnXSA9IGNhbGxlckluZm8uZW1haWw7XHJcbiAgICAgIHBhcnRpY2lwYW50SW5mb1snbmFtZSddID0gY2FsbGVySW5mby5uYW1lO1xyXG4gICAgICBwYXJ0aWNpcGFudEluZm9bJ2ltYWdlJ10gPSBjYWxsZXJJbmZvLmltYWdlO1xyXG4gICAgICBwYXJ0aWNpcGFudEluZm9bJ2V4dGVuc2lvbiddID0gY2FsbGVySW5mby5leHRlbnNpb247XHJcbiAgICAgIHBhcnRpY2lwYW50SW5mb1sndXNlckluZm9JZCddID0gY2FsbGVySW5mby5pZDtcclxuICAgICAgcGFydGljaXBhbnRJbmZvWydtZXNzYWdlJ10gPSBjYWxsZXJJbmZvLm1lc3NhZ2U7XHJcbiAgICAgIHBhcnRpY2lwYW50SW5mbyBbJ25vdGUnXSA9IGNhbGxlckluZm8ubm90ZTtcclxuICAgICAgcGFydGljaXBhbnRJbmZvWydudW1iZXInXSA9IGNhbGxlckluZm8ubnVtYmVyO1xyXG4gICAgICBwYXJ0aWNpcGFudEluZm9bJ3BvaW50TmFtZSddID0gY2FsbGVySW5mby5wb2ludE5hbWU7XHJcbiAgICAgIHBhcnRpY2lwYW50SW5mb1snc29mdHBob25lVHdpbGlvQXV0aElkJ10gPSBjYWxsZXJJbmZvLnNvZnRwaG9uZVR3aWxpb0F1dGhJZDtcclxuICAgICAgcGFydGljaXBhbnRJbmZvWydzb3VyY2VOYW1lJ10gPSBjYWxsZXJJbmZvLnNvdXJjZU5hbWU7XHJcbiAgICAgIHBhcnRpY2lwYW50SW5mb1snc3ViamVjdCddID0gY2FsbGVySW5mby5zdWJqZWN0O1xyXG4gICAgICByZXR1cm4gey4uLnBhcnRpY2lwYW50SW5mb307XHJcbiAgfVxyXG5cclxuICB1cGRhdGVkUGFydGljaXBhbnRMaXN0KHBhcnRpY2lwYW50OmFueSkge1xyXG4gICAgaWYocGFydGljaXBhbnQ/Lmxlbmd0aCl7XHJcbiAgICAgIHRoaXMuYWxsQ29uUGFydGljaXBlbnRMaXN0W3BhcnRpY2lwYW50WzBdPy5jb25mZXJlbmNlSWRdID0gcGFydGljaXBhbnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZWxldGUgdGhpcy5hbGxDb25QYXJ0aWNpcGVudExpc3RbcGFydGljaXBhbnRbMF0/LmNvbmZlcmVuY2VJZF07XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgJiYgISF0aGlzLmFsbENvblBhcnRpY2lwZW50TGlzdD8uW3RoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdF0/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnBhcnRpY2lwYW50TGlzdEluZG8odGhpcy5hbGxDb25QYXJ0aWNpcGVudExpc3RbdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0XSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSB0aGlzLmN1cnJlbnRDb25mZXJlbmNlQ2FsbD8uY29uZmVyZW5jZUlkO1xyXG4gICAgICB0aGlzLnBhcnRpY2lwYW50TGlzdEluZG8oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHBhcnRpY2lwYW50TGlzdEluZG8ocGFydGljaXBhbnRzPzogYW55KSB7XHJcbiAgICBpZiAoIXBhcnRpY2lwYW50cz8ubGVuZ3RoKSB7XHJcbiAgICAgIGlmICh0aGlzLmFsbFBhcnRpY2lwZW50TGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5hbGxQYXJ0aWNpcGVudExpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gW107XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHBhcnRpY2lwYW50cy5tYXAoYXN5bmMgKHA6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZyb21OYW1lID0gYXdhaXQgdGhpcy5nZXROYW1lKHAuZnJvbSk7XHJcbiAgICAgICAgY29uc3QgdG9OYW1lID0gYXdhaXQgdGhpcy5nZXROYW1lKHAudG8pO1xyXG4gICAgICAgIHJldHVybiB7IC4uLnAsIGZyb21OYW1lOiBmcm9tTmFtZSB8fCBwLmZyb21OYW1lLCB0b05hbWU6IHRvTmFtZSB8fCBwLnRvTmFtZSB9O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBCdWlsZCBhIGxvb2t1cCBtYXAgZnJvbSB0aGUgY3VycmVudCByZW5kZXJlZCBsaXN0IHNvIHdlIGNhbiByZXVzZSB0aGUgc2FtZVxyXG4gICAgLy8gb2JqZWN0IHJlZmVyZW5jZSBmb3IgcGFydGljaXBhbnRzIHdob3NlIGRhdGEgaGFzbid0IGNoYW5nZWQuXHJcbiAgICAvLyBBbmd1bGFyJ3MgKm5nRm9yIHVzZXMgb2JqZWN0IGlkZW50aXR5ICg9PT0pIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHJlLXJlbmRlciBhIHJvdztcclxuICAgIC8vIGtlZXBpbmcgdGhlIHNhbWUgcmVmZXJlbmNlIHByZXZlbnRzIERPTSBkZXN0cnVjdGlvbi9yZWNyZWF0aW9uIGFuZCBlbGltaW5hdGVzIGZsaWNrZXJpbmcuXHJcbiAgICBjb25zdCBleGlzdGluZ01hcCA9IG5ldyBNYXA8YW55LCBhbnk+KFxyXG4gICAgICAodGhpcy5hbGxQYXJ0aWNpcGVudExpc3QgfHwgW10pLm1hcCgocDogYW55KSA9PiBbcC5pZCwgcF0pXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBhbnlDaGFuZ2UgPSByZXNvbHZlZC5sZW5ndGggIT09ICh0aGlzLmFsbFBhcnRpY2lwZW50TGlzdD8ubGVuZ3RoIHx8IDApO1xyXG5cclxuICAgIGNvbnN0IG1lcmdlZDogYW55W10gPSByZXNvbHZlZC5tYXAoKG5ld1A6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBleGlzdGluZyA9IGV4aXN0aW5nTWFwLmdldChuZXdQLmlkKTtcclxuICAgICAgaWYgKCFleGlzdGluZykge1xyXG4gICAgICAgIGFueUNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIG5ld1A7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGlzTXV0ZVBlbmRpbmcgPSB0aGlzLnBlbmRpbmdNdXRlUGFydGljaXBhbnRzLmhhcyhuZXdQLmlkKTtcclxuICAgICAgY29uc3QgaW50ZW5kZWRNdXRlID0gdGhpcy5pbnRlbmRlZE11dGVTdGF0ZXMuZ2V0KG5ld1AuaWQpO1xyXG4gICAgICBpZiAoaXNNdXRlUGVuZGluZyAmJiBpbnRlbmRlZE11dGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmIChuZXdQLmlzTXV0ZSA9PT0gaW50ZW5kZWRNdXRlKSB7XHJcbiAgICAgICAgICB0aGlzLnBlbmRpbmdNdXRlUGFydGljaXBhbnRzLmRlbGV0ZShuZXdQLmlkKTtcclxuICAgICAgICAgIHRoaXMuaW50ZW5kZWRNdXRlU3RhdGVzLmRlbGV0ZShuZXdQLmlkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbmV3UCA9IHsgLi4ubmV3UCwgaXNNdXRlOiBleGlzdGluZy5pc011dGUgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGNoYW5nZWQgPSBPYmplY3Qua2V5cyhuZXdQKS5zb21lKGsgPT4gZXhpc3Rpbmdba10gIT09IG5ld1Bba10pO1xyXG4gICAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICAgIGFueUNoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4uZXhpc3RpbmcsIC4uLm5ld1AgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoYW55Q2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb25mTmFtZSA9IHRoaXMuY29uZmVyZW5jZUNhbGxMaXN0LmZpbmQoKHJlczogYW55KSA9PiByZXM/LmNvbmZlcmVuY2VJZCA9PSB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QpPy5jYWxsTGFiZWwgfHwgJyc7XHJcbiAgICAgIHRoaXMuYWxsUGFydGljaXBlbnRMaXN0ID0gbWVyZ2VkO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gWy4uLm1lcmdlZF07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93Q2FsbGluZ1RvYXN0KG51bWJlcjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdCA9IHtcclxuICAgICAgc2hvdzogdHJ1ZSxcclxuICAgICAgdHlwZTogJ2FsZXJ0LXN1Y2Nlc3MnLFxyXG4gICAgICBudW1iZXI6IG51bWJlcixcclxuICAgICAgZGlzcGxheU51bTogbnVtYmVyXHJcbiAgICB9O1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdC5zaG93ID0gZmFsc2U7XHJcbiAgICB9LCA3MDAwKTtcclxuICB9XHJcbiAgZ2V0U3RhdHVzKHJlczogYW55KSB7XHJcbiAgICBpZiAocmVzPy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIpIHtcclxuICAgICAgcmV0dXJuIHJlcz8uY2FsbFN0YXR1cyA9PSBcInBhcnRpY2lwYW50LWpvaW5cIiB8fCByZXM/LmNhbGxTdGF0dXMgPT0gXCJwYXJ0aWNpcGFudC1tdXRlXCIgfHwgcmVzPy5jYWxsU3RhdHVzID09IFwicGFydGljaXBhbnQtaG9sZFwiIHx8IHJlcz8uY2FsbFN0YXR1cyA9PSAnY29ubmVjdGVkJyA/IHRydWUgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZihyZXM/LmRpcmVjdGlvbiA9PSBcIm91dGdvaW5nLWNhbGxcIikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChyZXMuc3RhdHVzID09ICdhbnN3ZXJlZCcgJiYgcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgR2V0Q29udGFjdHNMaXN0KCkge1xyXG4gICAgY29uc3QgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfHwgJyc7XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UucmVhZENvbnRhY3RzKHRva2VuKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLnBob25lQm9vaykge1xyXG4gICAgICAgICAgdGhpcy5jb250YWN0cyA9IHJlcy5waG9uZUJvb2s7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHJlcy5waG9uZUJvb2s7XHJcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcclxuICAgICAgICAgIHRoaXMuY29udGFjdHMgPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHJlcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb250YWN0cyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcigpO1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY29udGFjdHM6JywgZXJyb3IpO1xyXG4gICAgICAgIHRoaXMuY29udGFjdHMgPSBbXTtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IFtdO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICBhZGRSZXM6IGFueTtcclxuICBhc3luYyBzdGFydENhbGwoY2FsbERhdGE6IGFueSwgaXNOZXdDb25mZXJlbmNlPzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY3VycmVudENhbGxMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2Uuc2V0SW5jb21pbmdNdXRlZChmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IHRydWU7XHJcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgY2hhbm5lbElkOiBlbnZpcm9ubWVudC5jaGFubmVsSWQsXHJcbiAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgICAgdG86IGNhbGxEYXRhLnBob25lLFxyXG4gICAgICAgIGZyb21OdW1iZXI6IGNhbGxEYXRhLmZyb20sXHJcbiAgICAgICAgc2NvcGU6ICdsb2NhbCcsXHJcbiAgICAgICAgZGV2aWNlSWQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgICAgICAgZmlyc3RuYW1lOiBudWxsLFxyXG4gICAgICAgIGxhc3RuYW1lOiBudWxsLFxyXG4gICAgICAgIGNvdW50cnljb2RlOiBudWxsLFxyXG4gICAgICAgIG51bWJlcjogbnVsbCxcclxuICAgICAgICBudW1vdHA6IG51bGwsXHJcbiAgICAgICAgZXh0ZW5zaW9uOiBudWxsLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmN1cnJlbnRDYWxsID0ge1xyXG4gICAgICAgIGJ1c2luZXNzTnVtYmVyOiBmYWxzZSxcclxuICAgICAgICBjYWxsU2lkOiAnJyxcclxuICAgICAgICBjYWxsU3RhdHVzOiAnJyxcclxuICAgICAgICBjb25mZXJlbmNlSWQ6ICcnLFxyXG4gICAgICAgIGRpYWw6IHRydWUsXHJcbiAgICAgICAgZGlyZWN0aW9uOiAnb3V0Z29pbmctY2FsbCcsXHJcbiAgICAgICAgZm9yd2FyZGVkVG86ICcnLFxyXG4gICAgICAgIGZyb206IGNhbGxEYXRhLmZyb20sXHJcbiAgICAgICAgaWQ6ICd5eXVnZ2hqYicsXHJcbiAgICAgICAgaW1nOiBjYWxsRGF0YS5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxyXG4gICAgICAgIGlzQWNjZXB0Q2FsbDogdHJ1ZSxcclxuICAgICAgICBpc0NvbmZlcmVuY2U6IGZhbHNlLFxyXG4gICAgICAgIGlzSG9sZDogZmFsc2UsXHJcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxyXG4gICAgICAgIGlzTGVmdDogZmFsc2UsXHJcbiAgICAgICAgaXNNdXRlOiBmYWxzZSxcclxuICAgICAgICBqb2luZWRBdDogJycsXHJcbiAgICAgICAgbmFtZTogY2FsbERhdGE/Lm5hbWUgfHwgJycsXHJcbiAgICAgICAgcGFydGljaXBhbnRJZDogJycsXHJcbiAgICAgICAgcGhvbmU6IGNhbGxEYXRhPy5waG9uZSB8fCAnJyxcclxuICAgICAgICByb2xlOiAnY2FsbGVlJyxcclxuICAgICAgICBzdGF0dXM6ICcnLFxyXG4gICAgICAgIHRpbWU6ICcnLFxyXG4gICAgICAgIHRvOiBjYWxsRGF0YT8ucGhvbmUgfHwgJycsXHJcbiAgICAgICAgdG9OYW1lOiBjYWxsRGF0YT8ubmFtZSB8fCAnJyxcclxuICAgICAgICB1c2VySWQ6IHRoaXMudXNlcklkIHx8IGNhbGxEYXRhPy51c2VySWRcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5pbml0aWF0ZUNhbGwocGF5bG9hZCk7XHJcbiAgICAgIHRoaXMuY29uZmVyZW5jZUlkID0gcmVzcG9uc2U/LmNhbGxhdXRoPy5pZDtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICBjb25zdCB7IGlkOiBjYWxsQXV0aElkLCByZWNvcmRDYWxsLCAgdG9rZW5EYXRhfSA9IGF3YWl0IHRoaXMuZ2V0Q2FsbEF1dGhJZChyZXNwb25zZSk7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRDYWxsID0gcmVjb3JkQ2FsbDsgLy8gU3RvcmUgdGhlIHJlY29yZENhbGwgdmFsdWVcclxuICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3RUb0RldmljZShjYWxsQXV0aElkLCBjYWxsRGF0YSwgdG9rZW5EYXRhKTtcclxuICAgICAgICBhd2FpdCB0aGlzLnBvbGxDYWxsU3RhdHVzKGNhbGxBdXRoSWQpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGFkZENsaWVudFBhcnRpY2lwYW50UmVzOmFueSA9IHRoaXMuYWRkQ2xpZW50UGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICAgIGZyb206IGNhbGxEYXRhPy5mcm9tLFxyXG4gICAgICAgICAgICAgIHJvdXRlOiBcIk9VVEdPSU5HXCIsXHJcbiAgICAgICAgICAgICAgcGFydGljaXBhbnROdW1iZXI6IGNhbGxEYXRhPy5waG9uZSxcclxuICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHJlc3BvbnNlPy5jYWxsYXV0aD8uaWQsXHJcbiAgICAgICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgcHJveHk6ICcnLFxyXG4gICAgICAgICAgICAgIGNvdW50cnljb2RlOiAnJyxcclxuICAgICAgICAgICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAgICAgICAgICAgICBjbGllbnRTaWQ6IHRoaXMuY2FsbD8ucGFyYW1ldGVyc1snQ2FsbFNpZCddXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBpZihhZGRDbGllbnRQYXJ0aWNpcGFudFJlcz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICAvLyAgIHN3YWwoXCJFcnJvclwiLCBhZGRDbGllbnRQYXJ0aWNpcGFudFJlcz8ubWVzc2FnZS5qb2luKFwiPGJyLz5cIiksIFwiZXJyb3JcIik7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgdGhpcy5hZGRSZXMgPSBhd2FpdCB0aGlzLmFkZFBhcnRpY2lwYW50VG9DYWxsKHtcclxuICAgICAgICAgICAgICBmcm9tOiBjYWxsRGF0YT8uZnJvbSxcclxuICAgICAgICAgICAgICByb3V0ZTogXCJPVVRHT0lOR1wiLFxyXG4gICAgICAgICAgICAgIHBhcnRpY2lwYW50TnVtYmVyOiBjYWxsRGF0YT8ucGhvbmUsXHJcbiAgICAgICAgICAgICAgY29uZmVyZW5jZUlkOiByZXNwb25zZT8uY2FsbGF1dGg/LmlkLFxyXG4gICAgICAgICAgICAgIHVzZXJJZDogdGhpcy51c2VySWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgIHByb3h5OiAnJyxcclxuICAgICAgICAgICAgICBjb3VudHJ5Y29kZTogJycsXHJcbiAgICAgICAgICAgICAgZGV2aWNlSWQ6IHRoaXMuZGV2aWNlSWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZihpc05ld0NvbmZlcmVuY2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSByZXNwb25zZT8uY2FsbGF1dGg/LmlkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzTmV3QWRkZWRDYWxsID0gZmFsc2VcclxuICAgICAgICAgICAgaWYodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5pc0xvYWRlcnNob3cubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlcnNob3duLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IHJlc3BvbnNlPy5jYWxsYXV0aD8uaWQ7XHJcbiAgICAgICAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHJlc3BvbnNlPy5jYWxsYXV0aD8uaWQpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhZGRpbmcgaW5pdGlhbCBwYXJ0aWNpcGFudDonLCBlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCAxNTAwKVxyXG4gICAgICAgIC8vIFBvbGwgdGhlIHN0YXR1cyBmb3IgMzAtNDUgc2Vjb25kc1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAyMDEpIHtcclxuICAgICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuaXNMb2FkZXJzaG93Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkZXJzaG93bi5lbWl0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLmlzTmV3QWRkZWRDYWxsID0gZmFsc2U7XHJcbiAgICAgICAgc3dhbChcIkVycm9yXCIsIHJlc3BvbnNlLm1lc3NhZ2Uuam9pbihcIjxici8+XCIpLCBcImVycm9yXCIpO1xyXG4gICAgICAgIHRoaXMuZW5kQ2FsbCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgdGhpcy5lbmRDYWxsKCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uTXV0ZVVzZXIoYzogYW55KSB7XHJcbiAgICBjb25zdCBwYXJ0aWNpcGFudElkID0gYy5pZDtcclxuICAgIGNvbnN0IG5ld011dGVTdGF0ZSA9ICFjLmlzTXV0ZTtcclxuXHJcbiAgICBcclxuICAgIHRoaXMucGVuZGluZ011dGVQYXJ0aWNpcGFudHMuYWRkKHBhcnRpY2lwYW50SWQpO1xyXG4gICAgdGhpcy5pbnRlbmRlZE11dGVTdGF0ZXMuc2V0KHBhcnRpY2lwYW50SWQsIG5ld011dGVTdGF0ZSk7XHJcblxyXG4gICAgYy5pc011dGUgPSBuZXdNdXRlU3RhdGU7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLm9uTXV0ZVBhcnRpY2lwYW50KHtcclxuICAgICAgcGFydGljaXBhbnRJZDogW3BhcnRpY2lwYW50SWRdLFxyXG4gICAgICBjb25mZXJlbmNlSWQ6IGM/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgaG9sZDogYy5pc0hvbGQsXHJcbiAgICAgIG11dGU6IG5ld011dGVTdGF0ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy9yZW1vdmUgcGVuZGluZyBndWFyZCBhZnRlciA1IHNlY29uZHMgaWYgbm8gY29uZmlybWF0aW9uXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMucGVuZGluZ011dGVQYXJ0aWNpcGFudHMuaGFzKHBhcnRpY2lwYW50SWQpKSB7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nTXV0ZVBhcnRpY2lwYW50cy5kZWxldGUocGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgdGhpcy5pbnRlbmRlZE11dGVTdGF0ZXMuZGVsZXRlKHBhcnRpY2lwYW50SWQpO1xyXG4gICAgICB9XHJcbiAgICB9LCA1MDAwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uSG9sZENhbGwoYzogYW55KSB7XHJcbiAgICB0aGlzLmlzSG9sZEJ0bkRpc2FibGUgPSB0cnVlO1xyXG4gICAgaWYoKChjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnICYmIHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhjPy5mcm9tKSkgfHwgKGM/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgdGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGM/LnRvKSkpICYmIGM/LmNsaWVudCAmJiAhYz8uYnVzaW5lc3NOdW1iZXIpIHtcclxuICAgICAgbGV0IHVuSG9sZEluZm86IGFueSA9IHt9O1xyXG4gICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZvckVhY2goYXN5bmMgKGNhbGw6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGlmIChjYWxsPy5jb25mZXJlbmNlSWQgPT0gYz8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgICBsZXQgcGFydGljaXBhbnRJbmZvID0gY2FsbC5wYXJ0aWNpcGFudHMuZmluZCgocmVzRGF0YTogYW55KSA9PlxyXG4gICAgICAgICAgICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy5mcm9tKSkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiAhcmVzRGF0YT8uYnVzaW5lc3NOdW1iZXIpKSAmJiAhcmVzRGF0YT8uaXNMZWZ0ICYmIHJlc0RhdGE/LmNsaWVudFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgaWYgKHBhcnRpY2lwYW50SW5mbz8uaWQgKSB7XHJcbiAgICAgICAgICAgIGxldCBob2xkSW5mbzogYW55ID0gYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbcGFydGljaXBhbnRJbmZvPy5pZF0sXHJcbiAgICAgICAgICAgICAgY29uZmVyZW5jZUlkOiBwYXJ0aWNpcGFudEluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgICBob2xkOiAhcGFydGljaXBhbnRJbmZvPy5pc0hvbGQsXHJcbiAgICAgICAgICAgICAgbXV0ZTogcGFydGljaXBhbnRJbmZvPy5tdXRlIHx8IGZhbHNlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZihob2xkSW5mbz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICAgIHN3YWwoXCJFcnJvclwiLCBob2xkSW5mbz8ubWVzc2FnZT8uam9pbj8uKFwiPGJyLz5cIikgfHwgJ0ludGVybmFsIFNlcnZlciBFcnJvcicsIFwiZXJyb3JcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYoYz8uaXNIb2xkKSB7XHJcbiAgICAgICAgICAgIHVuSG9sZEluZm8gPSBjYWxsLnBhcnRpY2lwYW50cy5maW5kKChyZXNEYXRhOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8udG8pICYmIHJlc0RhdGE/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgIXJlc0RhdGE/LmJ1c2luZXNzTnVtYmVyKSkgJiYgIXJlc0RhdGE/LmlzTGVmdCAmJiAhcmVzRGF0YT8uaXNIb2xkICYmIHJlc0RhdGE/LmNsaWVudFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdW5Ib2xkSW5mbyA9IGNhbGwucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICAgLy8gICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy5mcm9tKSkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiAhcmVzRGF0YT8uYnVzaW5lc3NOdW1iZXIpKSAmJiAhcmVzRGF0YT8uaXNMZWZ0ICYmIHJlc0RhdGE/LmlzSG9sZCAmJiByZXNEYXRhPy5jbGllbnRcclxuICAgICAgICAgICAgLy8gKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihpbmRleCA9PSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygndW5Ib2xkSW5mbycsIHVuSG9sZEluZm8pXHJcbiAgICAgICAgICBpZiAodW5Ib2xkSW5mbz8uaWQpIHtcclxuICAgICAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFt1bkhvbGRJbmZvPy5pZF0sXHJcbiAgICAgICAgICAgICAgY29uZmVyZW5jZUlkOiB1bkhvbGRJbmZvPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICAgICAgaG9sZDogIXVuSG9sZEluZm8/LmlzSG9sZCxcclxuICAgICAgICAgICAgICBtdXRlOiB1bkhvbGRJbmZvPy5tdXRlIHx8IGZhbHNlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZihob2xkSW5mbz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hvbGRJbmZvIDgwNScsIGhvbGRJbmZvKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXNIb2xkQnRuRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hvbGRCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBob2xkSW5mbzogYW55ID0gYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICBwYXJ0aWNpcGFudElkOiBbYy5pZF0sXHJcbiAgICAgICAgY29uZmVyZW5jZUlkOiBjPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgaG9sZDogIWMuaXNIb2xkLFxyXG4gICAgICAgIG11dGU6IGM/Lm11dGUgfHwgZmFsc2VcclxuICAgICAgfSk7XHJcbiAgICAgIGlmKGhvbGRJbmZvPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignaG9sZEluZm8gODE5JywgaG9sZEluZm8pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc0hvbGRCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgIGMuaXNIb2xkID0gIWMuaXNIb2xkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0ID0gYz8uY29uZmVyZW5jZUlkO1xyXG4gICAgLy8gYXdhaXQgdGhpcy5nZXRBbGxQYXJ0aWNpcGFudHMoYz8uY29uZmVyZW5jZUlkKTtcclxuICB9XHJcbiAgYXN5bmMgb25FbmRDYWxsKGM6IGFueSwgaXNBbGxDYWxsRW5kPzogYm9vbGVhbiwgaXNDb250ZWN0PzogYm9vbGVhbikge1xyXG4gICAgbGV0IHBhcnRpY2lwYW50SWQgPSBpc0FsbENhbGxFbmQgPyAnYWxsJyA6IGMucGFydGljaXBhbnRJZCB8fCBjPy5pZDtcclxuICAgIGNvbnN0IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8gPSB0aGlzLmdldEN1cnJlbnRDYWxsSW5mbygpO1xyXG4gICAgY29uc3QgcGFydGljaXBhbnRMaXN0ID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5maW5kKChjYWxsSW5mbzphbnkpID0+IGNhbGxJbmZvPy5jb25mZXJlbmNlSWQgPT0gYz8uY29uZmVyZW5jZUlkKS5wYXJ0aWNpcGFudHMuZmlsdGVyKChyZXNEYXRhOiBhbnkpID0+ICFyZXNEYXRhPy5pc0xlZnQpO1xyXG4gICAgaWYocGFydGljaXBhbnRMaXN0Py5sZW5ndGggPD0gMiAmJiAhaXNDb250ZWN0KSB7XHJcbiAgICAgIHBhcnRpY2lwYW50SWQgPSAnYWxsJztcclxuICAgIH1cclxuICAgIGxldCBjb25mZXJlbmNlSWQgPSBjLmNvbmZlcmVuY2VJZCB8fCBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlSWQ7XHJcbiAgICBsZXQgcmVzOiBhbnkgPSBhd2FpdCB0aGlzLmdldFJlbW92ZVBhcnRpY2lwYW50cyhwYXJ0aWNpcGFudElkLCBjb25mZXJlbmNlSWQpO1xyXG4gICAgaWYgKHJlcz8uc3RhdHVzID09IDIwMSAmJiByZXM/Lm1lc3NhZ2UgPT0gJ3BhcnRpY2lwYW50IGFscmVhZHkgbGVmdCcpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignUGFydGljaXBhbnQgYWxyZWFkeSBsZWZ0JywgcmVzKTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSBlbHNlIGlmIChyZXM/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVtb3ZpbmcgcGFydGljaXBhbnQnLCByZXMpO1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSBjb25mZXJlbmNlSWQ7XHJcbiAgICAvLyBhd2FpdCB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyh0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQpO1xyXG4gICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgLy8gdGhpcy5lbmRJbmNvbWluZ0NhbGxFdmVudC5lbWl0KGMpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGluaXRpYXRlQ2FsbChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuaW5pdGlhdGVDYWxsKHBheWxvYWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuaG9sZFBhcnRpY2lwYW50KHBheWxvYWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBhZGRQYXJ0aWNpcGFudFRvQ2FsbChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuYWRkUGFydGljaXBhbnQocGF5bG9hZCkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZENsaWVudFBhcnRpY2lwYW50KHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5hZGRDbGllbnRQYXJ0aWNpcGFudChwYXlsb2FkKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb25NdXRlUGFydGljaXBhbnQocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLm9uTXV0ZVBhcnRpY2lwYW50KHBheWxvYWQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZDogYW55LCBjb25mZXJlbmNlSWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZCwgY29uZmVyZW5jZUlkKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q2FsbEF1dGhJZChyZXNwb25zZTogYW55KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpZDogcmVzcG9uc2UuY2FsbGF1dGguaWQsXHJcbiAgICAgIHJlY29yZENhbGw6IHJlc3BvbnNlLmNhbGxhdXRoLnJlY29yZENhbGwsXHJcbiAgICAgIHRva2VuRGF0YTogcmVzcG9uc2UuY2FsbGF1dGgudG9rZW5cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldE91dGdvaW5nQ2FsbFRva2VuKGNhbGxBdXRoSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDb25mZXJlbmNlQ2FsbFRva2VuKHsgYXV0aElkOiBjYWxsQXV0aElkIH0pLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjb25uZWN0VG9EZXZpY2UodG9rZW46IGFueSwgY2FsbERhdGE6IGFueSwgdG9rZW5EYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHtcclxuICAgICAgY29kZWNQcmVmZXJlbmNlczogWydvcHVzJywgJ3BjbXUnXSxcclxuICAgICAgY2xvc2VQcm90ZWN0aW9uOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmRldmljZSA9IG5ldyBEZXZpY2UodG9rZW5EYXRhLCBvcHRpb25zKTtcclxuICAgIHRoaXMuY2FsbCA9IGF3YWl0IHRoaXMuZGV2aWNlLmNvbm5lY3Qoe1xyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBGcm9tOiBjYWxsRGF0YS5mcm9tLFxyXG4gICAgICAgIFRvOiBjYWxsRGF0YS5waG9uZSxcclxuICAgICAgICBFbnY6IGVudmlyb25tZW50LmFiYixcclxuICAgICAgICBUb2tlbjogdG9rZW4sXHJcbiAgICAgICAgRXh0OiBjYWxsRGF0YS5leHROdW1cclxuICAgICAgfSxcclxuICAgICAgcnRjQ29uc3RyYWludHM6IHsgYXVkaW86IHRydWUgfSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy50d2lsaW9TZXJ2aWNlLmNhbGwgPSB0aGlzLmNhbGw7XHJcbiAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycygpIHtcclxuICAgIHRoaXMuc3RhcnRUaW1lcigpO1xyXG4gICAgdGhpcy5kZXZpY2U/Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN0b3BUaW1lcigpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYWxsPy5vbignZXJyb3InLCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3RvcFRpbWVyKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbGw/Lm9uKCdkaXNjb25uZWN0JywgKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygndGVzdC1kaXNjb25uZWN0JylcclxuICAgICAgY29uc29sZS5sb2coJzgzMicpXHJcbiAgICAgIC8vIENsZWFuIHVwIHRoaXMgY2FsbCBmcm9tIGFjY2VwdGVkQ2FsbExpc3RzIHNvIGRldmljZSByZS1pbml0IGd1YXJkIHJlc2V0c1xyXG4gICAgICBjb25zdCBkaXNjb25uZWN0ZWRTaWQgPSB0aGlzLmNhbGw/LnBhcmFtZXRlcnM/LkNhbGxTaWQ7XHJcbiAgICAgIGlmIChkaXNjb25uZWN0ZWRTaWQpIHtcclxuICAgICAgICB0aGlzLmFjY2VwdGVkQ2FsbExpc3QgPSB0aGlzLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKGMgPT4gYy5jYWxsU2lkICE9PSBkaXNjb25uZWN0ZWRTaWQpO1xyXG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0ID0gdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBkaXNjb25uZWN0ZWRTaWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMuY2FsbD8uZGlzY29ubmVjdCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYWxsPy5vbigncmluZ2luZycsICgpID0+IHtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FsbD8ub24oJ3JlamVjdCcsICgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ3Rlc3Q1JylcclxuICAgICAgdGhpcy5lbmRDYWxsKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbGw/Lm9uKCdhY2NlcHQnLCAoKSA9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd05ld0NhbGxMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSwgMjAwMCk7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZGlzYmFsZUVuZENhbGxCdG4gPSBmYWxzZTtcclxuICAgICAgLy8gRW5zdXJlIHRoZSBhY3RpdmUgb3V0Z29pbmcgY2FsbCBpcyBtYXJrZWQgYXMgYWNjZXB0ZWQgc28gdGhlIFVJIHN3aXRjaGVzIHRvIHRoZSBjb25uZWN0ZWQgdmlld1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciB1cGRhdGluZyBhY2NlcHQgc3RhdGU6JywgZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jYWxsPy5vbignbWVzc2FnZVJlY2VpdmVkJywgKG1lc3NhZ2U6IGFueSkgPT4ge1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXJ0VGltZXIoam9pbkF0Pzogc3RyaW5nKSB7XHJcbiAgICBpZiAoIWpvaW5BdCkgcmV0dXJuO1xyXG5cclxuICBjb25zdCBqb2luVGltZSA9IG5ldyBEYXRlKGpvaW5BdCkuZ2V0VGltZSgpIHx8IDA7XHJcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICBsZXQgc2Vjb25kcyA9IE1hdGguZmxvb3IoKG5vdyAtIGpvaW5UaW1lKSAvIDEwMDApO1xyXG4gICAgaWYgKHNlY29uZHMgPCAwKSB7XHJcbiAgICAgIHNlY29uZHMgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBzZWNvbmRzKys7XHJcbiAgICAgIC8vIHRoaXMudGltZXIgPSB0aGlzLmZvcm1hdFRpbWUoc2Vjb25kcyk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdG9wVGltZXIoKSB7XHJcbiAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XHJcbiAgICB0aGlzLnRpbWVyID0gJzAwOjAwJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0VGltZSh0b3RhbFNlY29uZHM6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsU2Vjb25kcyAvIDM2MDApO1xyXG4gIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh0b3RhbFNlY29uZHMgJSAzNjAwKSAvIDYwKTtcclxuICBjb25zdCBzZWNvbmRzID0gdG90YWxTZWNvbmRzICUgNjA7XHJcbiAgaWYgKGhvdXJzID4gMCkge1xyXG4gICAgcmV0dXJuIGAke3RoaXMucGFkKGhvdXJzKX06JHt0aGlzLnBhZChtaW51dGVzKX06JHt0aGlzLnBhZChzZWNvbmRzKX1gO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5wYWQobWludXRlcyl9OiR7dGhpcy5wYWQoc2Vjb25kcyl9YDtcclxuICB9XHJcbn1cclxuXHJcbiAgcHJpdmF0ZSBwYWQodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdmFsdWUgPCAxMCA/IGAwJHt2YWx1ZX1gIDogYCR7dmFsdWV9YDtcclxuICB9XHJcbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogYW55KSB7XHJcbiAgICBzd2FsKFwiRXJyb3JcIiwgZXJyb3IsIFwiZXJyb3JcIik7XHJcbiAgfVxyXG5cclxuICBlbmRDb25mZXJlbmVjZUNhbGwoY29uZj86IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbmYgPSBjb25mO1xyXG4gICAgLy8gdGhpcy5pc1VuaG9sZENvbmZlcmVuY2VDYWxsID0gdHJ1ZTtcclxuICAgIGxldCBjb25mZXJlbmNlID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdD8uZmluZCgocmVzOiBhbnkpID0+IHJlcz8uY29uZmVyZW5jZUlkID09IGNvbmY/LmNvbmZlcmVuY2VJZCk7XHJcbiAgICBsZXQgaG9zdE51bWJlciA9IGNvbmZlcmVuY2U/LnBhcnRpY2lwYW50cz8uZmluZCgocGFydGljaXBhbnQ6IGFueSkgPT4gcGFydGljaXBhbnQ/Lmhvc3QgJiYgIXBhcnRpY2lwYW50Py5idXNpbmVzc051bWJlcik7XHJcbiAgICBpZiAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhob3N0TnVtYmVyPy5mcm9tKSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGhvc3ROdW1iZXI/LnRvKSAmJiBob3N0TnVtYmVyPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmIGhvc3ROdW1iZXI/Lmhvc3QpKSAmJiBjb25mZXJlbmNlPy5wYXJ0aWNpcGFudHMuZmlsdGVyKChwOiBhbnkpID0+ICFwLmlzTGVmdCkubGVuZ3RoID4gMikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29uZiA9IGhvc3ROdW1iZXI7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb25mWydjb25OYW1lJ10gPSB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdC5maW5kKChyZXM6IGFueSkgPT4gcmVzPy5jb25mZXJlbmNlSWQgPT0gY29uZj8uY29uZmVyZW5jZUlkKT8uY2FsbExhYmVsIHx8ICcnO1xyXG4gICAgICB0aGlzLm9uQ2FsbERpc2Nvbm5lY3RlZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGNvbmY/LmNvbmZlcmVuY2VJZCkge1xyXG4gICAgICAgIGxldCBwYXJ0aWNpcGVudEluZm8gPSBjb25mZXJlbmNlPy5wYXJ0aWNpcGFudHM/LmZpbmQoKHBhcnRpY2lwYW50OiBhbnkpID0+ICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py5mcm9tKVxyXG4gICAgICAgICAgJiYgcGFydGljaXBhbnQ/LmNsaWVudCAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJykgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8udG8pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFwYXJ0aWNpcGFudD8uYnVzaW5lc3NOdW1iZXIpICYmICFwYXJ0aWNpcGFudD8uYnVzaW5lc3NOdW1iZXIpICYmICFwYXJ0aWNpcGFudD8uaXNMZWZ0KVxyXG4gICAgICAgIGlmIChwYXJ0aWNpcGVudEluZm8/LmlkKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pc0luTXVsdGlwbGVDb25mZXJlbmNlcygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQgPSBwYXJ0aWNpcGVudEluZm87XHJcbiAgICAgICAgICAgIHRoaXMubGVhdmVDb25mQ29uZmVyZW5jZU5hbWUgPSB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdC5maW5kKFxyXG4gICAgICAgICAgICAgIChjOiBhbnkpID0+IGMuY29uZmVyZW5jZUlkID09PSBjb25mZXJlbmNlPy5jb25mZXJlbmNlSWRcclxuICAgICAgICAgICAgKT8uY2FsbExhYmVsIHx8ICdDb25mZXJlbmNlJztcclxuICAgICAgICAgICAgdGhpcy5zaG93TGVhdmVDb25maXJtYXRpb25Nb2RhbCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub25FbmRDYWxsKHBhcnRpY2lwZW50SW5mbylcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbmRDYWxsKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGVuZENhbGwoaXNBbGxDYWxsRW5kPzogYm9vbGVhbikge1xyXG4gICAgLy8gdGhpcy5pc0NvbmZlcmVuY2UgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcclxuICAgIGlmIChpc0FsbENhbGxFbmQpIHtcclxuICAgICAgdGhpcy5zdG9wVGltZXIoKTtcclxuICAgICAgdGhpcy5vbkVuZENhbGwoe30sIGlzQWxsQ2FsbEVuZCk7XHJcbiAgICAgIGlmICghdGhpcy5jdXJyZW50Q2FsbExpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKDg5NilcclxuICAgICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRQYXJ0aWNpcGFudCA9IHRoaXMuZ2V0Q3VycmVudENhbGxJbmZvKCk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAodGhpcy5pc0luTXVsdGlwbGVDb25mZXJlbmNlcygpICYmIGN1cnJlbnRQYXJ0aWNpcGFudCkge1xyXG4gICAgICAgIHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQgPSBjdXJyZW50UGFydGljaXBhbnQ7XHJcbiAgICAgICAgdGhpcy5sZWF2ZUNvbmZDb25mZXJlbmNlTmFtZSA9IHRoaXMuY29uZmVyZW5jZUNhbGxMaXN0LmZpbmQoXHJcbiAgICAgICAgICAoYzogYW55KSA9PiBjLmNvbmZlcmVuY2VJZCA9PT0gY3VycmVudFBhcnRpY2lwYW50LmNvbmZlcmVuY2VJZFxyXG4gICAgICAgICk/LmNhbGxMYWJlbCB8fCAnQ3VycmVudCBDYWxsJztcclxuICAgICAgICB0aGlzLnNob3dMZWF2ZUNvbmZpcm1hdGlvbk1vZGFsID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm47IFxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLm9uRW5kQ2FsbChjdXJyZW50UGFydGljaXBhbnQsIGlzQWxsQ2FsbEVuZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgYXN5bmMgdG9nZ2xlTXV0ZShpc0NvbmZlcmVuY2U/OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzTXV0ZSA9ICF0aGlzLmlzTXV0ZTtcclxuICAgIHRoaXMucGVuZGluZ011dGVVcGRhdGUgPSB0cnVlOyBcclxuICAgIHRoaXMuaW50ZW5kZWRNdXRlU3RhdGUgPSB0aGlzLmlzTXV0ZTtcclxuICAgIHRoaXMuY2FsbD8ubXV0ZSh0aGlzLmlzTXV0ZSk7XHJcbiAgICBjb25zdCBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvID0gdGhpcy5nZXRDdXJyZW50Q2FsbEluZm8oKTtcclxuICAgIHRoaXMub25NdXRlUGFydGljaXBhbnQoe1xyXG4gICAgICBwYXJ0aWNpcGFudElkOiBbY3VycmVudENvbmZlcmVuY2VDYWxsSW5mby5wYXJ0aWNpcGFudElkIHx8IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8/LmlkXSxcclxuICAgICAgY29uZmVyZW5jZUlkOiBjdXJyZW50Q29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgIGhvbGQ6IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8uaXNIb2xkLFxyXG4gICAgICBtdXRlOiAhY3VycmVudENvbmZlcmVuY2VDYWxsSW5mbz8uaXNNdXRlXHJcbiAgICAgIC8vIGNvbmZlcmVuY2U6IGN1cnJlbnRDb25mZXJlbmNlQ2FsbEluZm8uaXNDb25mZXJlbmNlIHx8IGZhbHNlXHJcbiAgICB9KVxyXG4gICAgdGhpcy5jdXJyZW50Q2FsbC5pc011dGUgPSB0aGlzLmlzTXV0ZTtcclxuICAgIC8vIHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZUlkKTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRDYWxsSW5mbygpIHtcclxuICAgIHJldHVybiB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0XHJcbiAgICAgIC5mbGF0TWFwKChjYWxsSW5mbzogYW55KSA9PiBjYWxsSW5mby5wYXJ0aWNpcGFudHMpXHJcbiAgICAgIC5maW5kKChwYXJ0aWNpcGFudDogYW55KSA9PiAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8uZnJvbSkgJiYgcGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgJiYgcGFydGljaXBhbnQ/LmNsaWVudClcclxuICAgICAgICB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHBhcnRpY2lwYW50Py50bykgJiYgcGFydGljaXBhbnQ/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgcGFydGljaXBhbnQ/LmNsaWVudCAmJiAhcGFydGljaXBhbnQ/LmJ1c2luZXNzTnVtYmVyKSkgJiYgIXBhcnRpY2lwYW50Py5pc0xlZnQgJiYgIXBhcnRpY2lwYW50Py5pc0hvbGQpO1xyXG4gIH1cclxuICB0b2dnbGVLZXlwYWQoKSB7XHJcbiAgICB0aGlzLnNob3dLZXlwYWQgPSAhdGhpcy5zaG93S2V5cGFkO1xyXG4gICAgdGhpcy5jYWxsSW5wdXQgPSAnJztcclxuICB9XHJcblxyXG4gIC8vIFN3aXRjaCB0aGF0IHNpbGVuY2VzIChvciByZXN0b3JlcykgdGhlIGluY29taW5nIHJpbmcgd2hpbGUgYSBjYWxsIGlzIGluIHByb2dyZXNzLlxyXG4gIHRvZ2dsZU11dGVJbmNvbWluZ0NhbGwoKSB7XHJcbiAgICBjb25zdCBuZXdNdXRlZCA9ICF0aGlzLnR3aWxpb1NlcnZpY2UuaXNJbmNvbWluZ011dGVkO1xyXG4gICAgdGhpcy50d2lsaW9TZXJ2aWNlLnNldEluY29taW5nTXV0ZWQobmV3TXV0ZWQpO1xyXG4gICAgaWYgKG5ld011dGVkKSB7XHJcbiAgICAgIC8vIE11dGUgT046IHN0b3AgdGhlIGN1c3RvbSByaW5nIGltbWVkaWF0ZWx5IGZvciBhbnkgY3VycmVudGx5LXJpbmdpbmcgY2FsbC5cclxuICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gTXV0ZSBPRkY6IGlmIHRoZXJlIGFyZSBzdGlsbCB1bmFjY2VwdGVkIGluY29taW5nIGNhbGxzIHJpbmdpbmcsIHJlc3VtZSB0aGUgcmluZy5cclxuICAgICAgY29uc3QgaGFzUmluZ2luZyA9IHRoaXMuY3VycmVudENhbGxMaXN0LnNvbWUoKGM6IGFueSkgPT4gYy5pc05vdGlmaWNhdGlvbiAmJiAhYy5pc0FjY2VwdENhbGwpO1xyXG4gICAgICBpZiAoaGFzUmluZ2luZykge1xyXG4gICAgICAgIC8vIHRoaXMuaW5jb21laW5nQ2FsbFNvY2tldFNlcnZpY2UucGxheSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDb250YWN0c1BhbmVsKGNhbGxJbmZvPzogYW55LCBpc0Nsb3NlPzogYm9vbGVhbik6IGFueSB7XHJcbiAgICBpZiAoaXNDbG9zZSkge1xyXG4gICAgICB0aGlzLnNob3dDb250YWN0c1BhbmVsID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIFxyXG5cclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0NvbnRhY3RzUGFuZWwgPSAhaXNDbG9zZTtcclxuICAgIHRoaXMuY29uZmVyZW5jZUNhbGxJREZvclBhcnRpY2lwYW50TGlzdCA9IGNhbGxJbmZvPy5jb25mZXJlbmNlSWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29uZk5hbWUgPSB0aGlzLmNvbmZlcmVuY2VDYWxsTGlzdC5maW5kKChyZXNEYXRhOmFueSk9PiByZXNEYXRhPy5jb25mZXJlbmNlSWQgPT09IGNhbGxJbmZvPy5jb25mZXJlbmNlSWQpPy5jYWxsTGFiZWwgfHwgJyc7XHJcbiAgICAvLyB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyhjYWxsSW5mbz8uY29uZmVyZW5jZUlkKTtcclxuICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gdGhpcy5jb250YWN0cztcclxuICAgIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdDtcclxuICAgIHRoaXMuaXNTZWFyY2hWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUMyQ0luZm9QYW5lbCh1c2VySW5mbzogYW55LCBpc0Nsb3NlPzogYm9vbGVhbik6IGFueSB7XHJcbiAgICBpZiAoaXNDbG9zZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSB7fTtcclxuICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXVzZXJJbmZvPy5idXNpbmVzc051bWJlciAmJiAhdXNlckluZm8/LmlzQnVzaW5lc3NOdW1iZXIpIHtcclxuICAgICAgLy8gTm9uLUMyQyBpdGVtOiBqdXN0IG1hcmsgaXQgYXMgc2VsZWN0ZWQgZm9yIGhpZ2hsaWdodCwgbm8gQVBJIGNhbGwgbmVlZGVkLlxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBTZXQgc2VsZWN0aW9uIGltbWVkaWF0ZWx5IHNvIHRoZSBoaWdobGlnaHQgYXBwZWFycyBiZWZvcmUgdGhlIEFQSSByZXNwb25kcy5cclxuICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbyA9IHVzZXJJbmZvO1xyXG4gICAgbGV0IHBhcnRpY2lwYW50SUQgPSB1c2VySW5mbz8uYnVzaW5lc3NQYXJ0aWNpcGFudElkIHx8IHVzZXJJbmZvPy5wYXJ0aWNpcGFudElkIHx8IHVzZXJJbmZvPy5pZFxyXG4gICAgaWYoIXRoaXMuQzJDb25mb0xpc3RbdXNlckluZm8/LnBhcnRpY2lwYW50SWRdICYmICF0aGlzLkMyQ29uZm9MaXN0W3VzZXJJbmZvPy5idXNpbmVzc1BhcnRpY2lwYW50SWRdKSB7XHJcbiAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRVc2VySW5mb3JtYXRpb24ocGFydGljaXBhbnRJRCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzSW5mbzogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IGl0ZW0/LnBhcnRpY2lwYW50SWQgPT0gdXNlckluZm8/LmlkKVxyXG4gICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0W2luZGV4XSA9IHRoaXMubWFwVXNlckluZm8odGhpcy5jdXJyZW50Q2FsbExpc3RbaW5kZXhdLCByZXNJbmZvPy5jMmNJbmZvcm1hdGlvbik7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gdGhpcy5jdXJyZW50Q2FsbExpc3RbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMuQzJDb25mb0xpc3RbcGFydGljaXBhbnRJRF0gPSB0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF07XHJcbiAgICAgIH0sIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgdXNlciBpbmZvOicsIGVycik7XHJcbiAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSB0aGlzLkMyQ29uZm9MaXN0W3BhcnRpY2lwYW50SURdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGVja1RleHRIZWlnaHQoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFkZFJlbW92ZVBhcnRpY2lwYW50KCkge1xyXG4gICAgdGhpcy5pc0FkZFJlbW92ZVBhcnRpY2lwYW50ID0gIXRoaXMuaXNBZGRSZW1vdmVQYXJ0aWNpcGFudDtcclxuICAgIC8vIGF3YWl0IHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZUlkKTtcclxuICAgIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHdhaXRpbmdDYWxsQWNjZXB0KGluY29taW5nQ2FsbEluZm86YW55KSB7XHJcbiAgICBsZXQgb3VyTnVtYmVySW5mbzogYW55ID0ge31cclxuICAgIGxldCBjYWxsSW5mbyA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmluZCgoY2FsbEluZm86IGFueSwgaTogbnVtYmVyKSA9PiB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQgPT0gY2FsbEluZm8uY29uZmVyZW5jZUlkKVxyXG4gICAgaWYgKGNhbGxJbmZvPy5wYXJ0aWNpcGFudHM/Lmxlbmd0aCkge1xyXG4gICAgICBvdXJOdW1iZXJJbmZvID0gY2FsbEluZm8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy5mcm9tKSAmJiByZXNEYXRhPy5jbGllbnQpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8udG8pICYmIHJlc0RhdGE/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgIXJlc0RhdGE/LmJ1c2luZXNzTnVtYmVyKSkgJiYgIXJlc0RhdGE/LmlzTGVmdCAmJiB0aGlzLmdldFN0YXR1cyhyZXNEYXRhKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc3QgY2FwdHVyZWRDYWxsID0gdGhpcy50d2lsaW9TZXJ2aWNlLmdldEluY29taW5nQ2FsbEJ5SWQoaW5jb21pbmdDYWxsSW5mbz8uY2xpZW50U2lkKTtcclxuICAgIHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0LmZvckVhY2goKGNhbGw6IGFueSkgPT4ge1xyXG4gICAgICBjYWxsLm11dGUodHJ1ZSk7XHJcbiAgICB9KTtcclxuICAgIGlmIChvdXJOdW1iZXJJbmZvPy5pZCAmJiBvdXJOdW1iZXJJbmZvPy5jb25mZXJlbmNlSWQgIT09IGluY29taW5nQ2FsbEluZm8/LmNvbmZlcmVuY2VJZCkge1xyXG4gICAgICB0aGlzLmlzVW5ob2xkQ29uZmVyZW5jZUNhbGwgPSB0cnVlO1xyXG4gICAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgICBwYXJ0aWNpcGFudElkOiBbb3VyTnVtYmVySW5mbz8uaWRdLFxyXG4gICAgICAgIGNvbmZlcmVuY2VJZDogb3VyTnVtYmVySW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgIGhvbGQ6IHRydWUsXHJcbiAgICAgICAgbXV0ZTogb3VyTnVtYmVySW5mbz8ubXV0ZSB8fCBmYWxzZVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5ob2xkUGFydGljaXBhbnQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSk9PntcclxuICAgICAgICBjb25zb2xlLmxvZygnaG9sZFBhcnRpY2lwYW50IHJlcycsIHJlcylcclxuICAgICAgICBpZihyZXM/LnN0YXR1cyAhPSAyMDApIHtcclxuICAgICAgICAgIHN3YWwoXCJFcnJvclwiLCByZXM/Lm1lc3NhZ2U/LmpvaW4/LihcIjxici8+XCIpIHx8ICdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLCBcImVycm9yXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFkZChpbmNvbWluZ0NhbGxJbmZvLCBvdXJOdW1iZXJJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuaXNDb25mZXJlbmNlQ2FsbEhvbGQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hZGQoaW5jb21pbmdDYWxsSW5mbywgb3VyTnVtYmVySW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGQoZGF0YT86IGFueSwgb3VyTnVtYmVySW5mbz86IGFueSwgY2FwdHVyZWRDYWxsPzogQ2FsbCkge1xyXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRDYWxsTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudHdpbGlvU2VydmljZS5zZXRJbmNvbWluZ011dGVkKGZhbHNlKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXNDb25uZWN0aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPSBkYXRhPy5pZDtcclxuICAgIHRoaXMudHdpbGlvU2VydmljZS5pc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZC5uZXh0KGRhdGE/LmlkKTtcclxuICAgIHRoaXMuaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICBcclxuICAgIGxldCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBjb25zdCBjYWxsVG9BY2NlcHQgPSB0aGlzLnR3aWxpb1NlcnZpY2UuZ2V0SW5jb21pbmdDYWxsQnlJZChkYXRhPy5jbGllbnRTaWQpO1xyXG4gICAgICBpZihjYWxsVG9BY2NlcHQ/LnBhcmFtZXRlcnM/LkNhbGxTaWQpIHtcclxuICAgICAgICBjYWxsVG9BY2NlcHQuYWNjZXB0KCk7XHJcbiAgICAgICAgY29uc3QgYWNjZXB0ZWRFbnRyeSA9IHtcclxuICAgICAgICAgIGNhbGw6IGNhbGxUb0FjY2VwdCxcclxuICAgICAgICAgIGNhbGxTaWQ6IGRhdGEuY2xpZW50U2lkLFxyXG4gICAgICAgICAgZGF0YVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5hY2NlcHRlZENhbGxMaXN0LnB1c2goYWNjZXB0ZWRFbnRyeSk7XHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3QucHVzaChjYWxsVG9BY2NlcHQpO1xyXG4gICAgICAgIC8vIFN0YXJ0IHByZXBhcmluZyB0aGUgc3BhcmUgZGV2aWNlIGltbWVkaWF0ZWx5IChiZWZvcmUgdGhlIEFQSSByb3VuZC10cmlwKVxyXG4gICAgICAgIC8vIHNvIGl0IGlzIHJlZ2lzdGVyZWQgd2VsbCBiZWZvcmUgdGhlIG5leHQgY29uY3VycmVudCBjYWxsIGNhbiBhcnJpdmUuXHJcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLnByZXBhcmVEZXZpY2UyRm9ySW5jb21pbmdDYWxsKCk7XHJcbiAgICAgICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBjaGFubmVsSWQ6IGVudmlyb25tZW50LmNoYW5uZWxJZCxcclxuICAgICAgICAgIHJlY29yZElkOiBkYXRhPy5pZCxcclxuICAgICAgICAgIGlwQWRkcmVzczogJycsXHJcbiAgICAgICAgICBpcENvdW50cnk6ICcnLFxyXG4gICAgICAgICAgY2FsbFN0YXR1czogJ2Fuc3dlcmVkJyxcclxuICAgICAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICAgICAgdXNlcklkOiAgdGhpcy51c2VySWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgY29tcGFueUlkOiAnJyxcclxuICAgICAgICAgIGNsaWVudFNpZDogY2FsbFRvQWNjZXB0LnBhcmFtZXRlcnM/LkNhbGxTaWQgfHwgZGF0YS5jbGllbnRTaWQsXHJcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IGRhdGE/LmNvbmZlcmVuY2VJZCB8fCAnbm8nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5zZXRJbmNvbWluZ0NhbGxTdGF0dXMocGF5bG9hZCkuc3Vic2NyaWJlKGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0ID0gZGF0YT8uY29uZmVyZW5jZUlkO1xyXG4gICAgICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLmlzQ3VycmVudEluY29taW5nQ2FsbExpc3QucHVzaChkYXRhPy5pZCk7XHJcbiAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc1Nob3dJbmNvbWluZ0NhbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmlzQWNjZXB0SUluY29taW5nQ2FsbC5uZXh0KHsgY29uZmVyZW5jZUlkOiBkYXRhPy5jb25mZXJlbmNlSWQsIHBhcnRpY2lwYW50SWQ6IGRhdGE/LmlkID8/IGRhdGE/LnBhcnRpY2lwYW50SWQgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDb25uZWN0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZC5uZXh0KCcnKTtcclxuICAgICAgICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2Uub25Db25jdXJyZW50Q2FsbEFjY2VwdGVkKGNhbGxUb0FjY2VwdCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBhY2NlcHRlZFNpZCA9IGNhbGxUb0FjY2VwdC5wYXJhbWV0ZXJzPy5DYWxsU2lkO1xyXG4gICAgICAgICAgICBjYWxsVG9BY2NlcHQub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGFjY2VwdGVkU2lkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjY2VwdGVkQ2FsbExpc3QgPSB0aGlzLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKGMgPT4gYy5jYWxsU2lkICE9PSBhY2NlcHRlZFNpZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuYWNjZXB0ZWRDYWxsTGlzdCA9IHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0LmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBhY2NlcHRlZFNpZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5yZWxlYXNlQ29uY3VycmVudENhbGxEZXZpY2UoYWNjZXB0ZWRTaWQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UudGVhcmRvd25TcGFyZURldmljZXNJZklkbGUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBzaWQgPSBjYWxsVG9BY2NlcHQucGFyYW1ldGVycz8uQ2FsbFNpZDtcclxuICAgICAgICAgICAgdGhpcy5hY2NlcHRlZENhbGxMaXN0ID0gdGhpcy5hY2NlcHRlZENhbGxMaXN0LmZpbHRlcihjID0+IGMuY2FsbFNpZCAhPT0gc2lkKTtcclxuICAgICAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3QgPSB0aGlzLnR3aWxpb1NlcnZpY2UuYWNjZXB0ZWRDYWxsTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBzaWRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKVxyXG4gICAgICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQubmV4dCgnJyk7XHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmRJbmRleCgocmVzKSA9PiByZXMucGFydGljaXBhbnRJZCA9PSBkYXRhLnBhcnRpY2lwYW50SWQpXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnNwbGljZShpbmRleCwgMSlcclxuICAgICAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzU2hvd0luY29taW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ29ubmVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5jb21pbmdDYWxsQnRuRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmluY29tZWluZ0NhbGxTb2NrZXRTZXJ2aWNlLnBhdXNlKCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcxMDk2JylcclxuICAgICAgICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdChkYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICBzd2FsKFwiRXJyb3JcIiwgcmVzPy5tZXNzYWdlPy5qb2luPy4oXCI8YnIvPlwiKSB8fCAnSW50ZXJuYWwgU2VydmVyIEVycm9yJywgXCJlcnJvclwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHNldFRpbWVvdXQoKCk9PntcclxuICAgICAgICAgICAgdGhpcy5pc1VuaG9sZENvbmZlcmVuY2VDYWxsID0gZmFsc2U7XHJcbiAgICAgICAgICB9LDUwMClcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZClcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0gZWxzZSBpZih0aGlzLm1pc3NDYWxsSW5mbz8uZGF0YT8uZGF0YT8ucmVjb3JkSWQgPT0gZGF0YT8uaWQgJiYgIWNhbGxUb0FjY2VwdC5wYXJhbWV0ZXJzPy5DYWxsU2lkKXtcclxuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xyXG4gICAgICAgIGNvbnN0IHNpZCA9IGNhbGxUb0FjY2VwdC5wYXJhbWV0ZXJzPy5DYWxsU2lkO1xyXG4gICAgICAgIHRoaXMuaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPSAnJztcclxuICAgICAgICB0aGlzLmFjY2VwdGVkQ2FsbExpc3QgPSB0aGlzLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKGMgPT4gYy5jYWxsU2lkICE9PSBzaWQpO1xyXG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5hY2NlcHRlZENhbGxMaXN0ID0gdGhpcy50d2lsaW9TZXJ2aWNlLmFjY2VwdGVkQ2FsbExpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBzaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgcGFydGljaXBhbnRJZDogW291ck51bWJlckluZm8/LmlkXSxcclxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogb3VyTnVtYmVySW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgaG9sZDogZmFsc2UsXHJcbiAgICAgICAgICBtdXRlOiBvdXJOdW1iZXJJbmZvPy5tdXRlIHx8IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5ob2xkUGFydGljaXBhbnQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSk9PntcclxuICAgICAgICAgIGlmKHJlcz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICBzd2FsKFwiRXJyb3JcIiwgcmVzPy5tZXNzYWdlPy5qb2luPy4oXCI8YnIvPlwiKSB8fCAnSW50ZXJuYWwgU2VydmVyIEVycm9yJywgXCJlcnJvclwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc1Nob3dJbmNvbWluZ0NhbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQ29ubmVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNJbmNvbWluZ0NhbGxCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbmNvbWVpbmdDYWxsU29ja2V0U2VydmljZS5wYXVzZSgpO1xyXG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5kZXN0cm95RGV2aWNlMigpO1xyXG4gICAgICAgIHN3YWwoXCJFcnJvclwiLCAnSW50ZXJuYWwgU2VydmVyIEVycm9yJywgXCJlcnJvclwiKTtcclxuICAgICAgICB0aGlzLm1pc3NDYWxsSW5mbyA9IHt9O1xyXG4gICAgICB9XHJcbiAgICB9LCAxMDAwKTtcclxuICB9XHJcbiAgYXN5bmMgY2FsbENvbnRhY3QoY29udGFjdDogYW55LCBpc1Vuc2F2ZWROdW1iZXI/OiBib29sZWFuLCBvcHRpb25zPzogeyBza2lwRHVwbGljYXRlQ2hlY2s/OiBib29sZWFuIH0pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3QgcGhvbmVOdW1iZXIgPSBpc1Vuc2F2ZWROdW1iZXIgPyBjb250YWN0IDogY29udGFjdD8ubnVtYmVyc0xpc3Q/LlswXT8ubnVtYmVyIHx8IGNvbnRhY3Q/LnBob25lO1xyXG4gICAgXHJcbiAgICBjb25zdCB0YXJnZXRDb25mZXJlbmNlSWQgPSB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgfHwgdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkO1xyXG4gICAgaWYgKCFvcHRpb25zPy5za2lwRHVwbGljYXRlQ2hlY2spIHtcclxuICAgICAgaWYgKHRhcmdldENvbmZlcmVuY2VJZCkge1xyXG4gICAgICAgIGNvbnN0IGFscmVhZHlJbkNhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChyZXM6IGFueSkgPT5cclxuICAgICAgICAgIHJlcy5jb25mZXJlbmNlSWQgPT09IHRhcmdldENvbmZlcmVuY2VJZCAmJlxyXG4gICAgICAgICAgKHJlcy50byA9PSBwaG9uZU51bWJlciB8fCByZXMuZnJvbSA9PSBwaG9uZU51bWJlcikgJiZcclxuICAgICAgICAgICFyZXM/LmlzTGVmdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGFscmVhZHlJbkNhbGwpIHtcclxuICAgICAgICAgIHN3YWwoJ0Vycm9yJywgYEFscmVhZHkgJHtwaG9uZU51bWJlcn0gbnVtYmVyIGluIHRoaXMgY2FsbCAyLmApO1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuaXNDb25mZXJlbmNlKSB7XHJcbiAgICAgICAgbGV0IGRhdGE6IGFueSA9IGF3YWl0IHRoaXMuYWRkUGFydGljaXBhbnRUb0NhbGwoe1xyXG4gICAgICAgICAgZnJvbTogdGhpcy5jYWxsRGF0YT8uZnJvbSA/IHRoaXMuY2FsbERhdGE/LmZyb20gOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcixcclxuICAgICAgICAgIHJvdXRlOiBcIk9VVEdPSU5HXCIsXHJcbiAgICAgICAgICBwYXJ0aWNpcGFudE51bWJlcjogcGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgIHVzZXJJZDogdGhpcy51c2VySWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgcHJveHk6ICcnLFxyXG4gICAgICAgICAgY291bnRyeWNvZGU6ICcnLFxyXG4gICAgICAgICAgZGV2aWNlSWQ6IHRoaXMuZGV2aWNlSWRcclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgaG9sZEluZm86IGFueSA9IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbZGF0YT8ucGFydGljaXBhbnRJZCB8fCBkYXRhPy5pZF0sXHJcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgIGhvbGQ6IG51bGwsXHJcbiAgICAgICAgICBtdXRlOiB0aGlzLmN1cnJlbnRDYWxsPy5tdXRlIHx8IGZhbHNlLFxyXG4gICAgICAgICAgY29uZmVyZW5jZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmKGhvbGRJbmZvPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdob2xkSW5mbyAxMjE4JywgaG9sZEluZm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FsbERhdGEgPSB7XHJcbiAgICAgICAgICBwaG9uZTogcGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICBkaXNwbGF5TnVtOiBwaG9uZU51bWJlcixcclxuICAgICAgICAgIG5hbWU6IGNvbnRhY3Q/Lm5hbWUgfHwgYCR7Y29udGFjdD8uZmlyc3ROYW1lfSAke2NvbnRhY3Q/Lmxhc3ROYW1lfWAgfHwgcGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICBpbWc6IGNvbnRhY3Q/LmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBkYXRhPy5wYXJ0aWNpcGFudElkLFxyXG4gICAgICAgICAgZnJvbTogdGhpcy5zZWxlY3RlZENhbGxlcklkPy5udW1iZXIsXHJcbiAgICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXHJcbiAgICAgICAgICBpc0hvbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgaXNMZWZ0OiBmYWxzZSxcclxuICAgICAgICAgIGlzQ29uZmVyZW5jZTogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VJZDtcclxuICAgICAgICAvLyB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyh0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VJZCk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgbGV0IHBhcnRpY2lwYW50SURzOiBhbnkgPSBbXTtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LmZvckVhY2goYXN5bmMgKGM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYz8ucGFydGljaXBhbnRJZCAmJiAhYz8uaXNIb2xkICYmIHRoaXMuY3VycmVudENhbGwuY29uZmVyZW5jZUlkID09IGM/LmNvbmZlcmVuY2VJZCkge1xyXG4gICAgICAgICAgICAgIHBhcnRpY2lwYW50SURzLnB1c2goYz8ucGFydGljaXBhbnRJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCBwYXJ0aWNpcGFudCB0byB0aGUgY29uZmVyZW5jZVxyXG4gICAgICAgICAgbGV0IGRhdGE6IGFueSA9IGF3YWl0IHRoaXMuYWRkUGFydGljaXBhbnRUb0NhbGwoe1xyXG4gICAgICAgICAgICBmcm9tOiB0aGlzLmNhbGxEYXRhPy5mcm9tIHx8IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxyXG4gICAgICAgICAgICByb3V0ZTogXCJPVVRHT0lOR1wiLFxyXG4gICAgICAgICAgICBwYXJ0aWNpcGFudE51bWJlcjogcGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICB1c2VySWQ6IHRoaXMudXNlcklkIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgcHJveHk6ICcnLFxyXG4gICAgICAgICAgICBjb3VudHJ5Y29kZTogJycsXHJcbiAgICAgICAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuaXNDYWxsT25Ib2xkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5pc0NvbmZlcmVuY2UgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIHBhcnRpY2lwYW50SURzLnB1c2goZGF0YT8ucGFydGljaXBhbnRJZClcclxuICAgICAgICAgIGxldCBob2xkSW5mbzogYW55ID0gYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgICAgcGFydGljaXBhbnRJZDogcGFydGljaXBhbnRJRHMsXHJcbiAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jdXJyZW50Q2FsbC5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICAgIGhvbGQ6IG51bGwsXHJcbiAgICAgICAgICAgIG11dGU6IG51bGwsXHJcbiAgICAgICAgICAgIGNvbmZlcmVuY2U6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmIChob2xkSW5mbz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdob2xkSW5mbyAxMjc3JywgaG9sZEluZm8pXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gYXdhaXQgdGhpcy5nZXRBbGxQYXJ0aWNpcGFudHModGhpcy5jdXJyZW50Q2FsbC5jb25mZXJlbmNlSWQpO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgICAgICB0aGlzLmNhbGxEYXRhID0ge1xyXG4gICAgICAgICAgICBwaG9uZTogcGhvbmVOdW1iZXIsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOdW06IHBob25lTnVtYmVyLFxyXG4gICAgICAgICAgICBuYW1lOiBjb250YWN0Py5uYW1lIHx8IGAke2NvbnRhY3Q/LmZpcnN0TmFtZX0gJHtjb250YWN0Py5sYXN0TmFtZX1gIHx8IHBob25lTnVtYmVyLFxyXG4gICAgICAgICAgICBpbWc6IGNvbnRhY3Q/LmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXHJcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IGRhdGE/LnBhcnRpY2lwYW50SWQsXHJcbiAgICAgICAgICAgIGZyb206IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxyXG4gICAgICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXHJcbiAgICAgICAgICAgIGlzSG9sZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGlzTGVmdDogZmFsc2UsXHJcbiAgICAgICAgICAgIGlzQ29uZmVyZW5jZTogZmFsc2VcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFkZGluZyBwYXJ0aWNpcGFudDonLCBlcnJvcik7XHJcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBDYWxsVG9VbnNhdmVkTnVtYmVyKG51bWJlcjogc3RyaW5nLCBpc05ld0NvbmZlcmVuY2U/OiBib29sZWFuLCBvcHRpb25zPzogeyBza2lwRHVwbGljYXRlQ2hlY2s/OiBib29sZWFuIH0pIHtcclxuICAgIGNvbnNvbGUubG9nKCdza2lwRHVwbGljYXRlQ2hlY2s6Jywgb3B0aW9ucz8uc2tpcER1cGxpY2F0ZUNoZWNrLCAnaXNOZXdDb25mZXJlbmNlOicsIGlzTmV3Q29uZmVyZW5jZSk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBpc0ludmFsaWQgPSBhd2FpdCB0aGlzLmlzSW52YWxpZE51bWJlcihudW1iZXIpO1xyXG4gICAgICBpZiAoaXNJbnZhbGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAoIWlzTmV3Q29uZmVyZW5jZSAmJiAhb3B0aW9ucz8uc2tpcER1cGxpY2F0ZUNoZWNrKSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0Q29uZmVyZW5jZUlkID0gdGhpcy5jb25mZXJlbmNlQ2FsbElERm9yUGFydGljaXBhbnRMaXN0IHx8IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZDtcclxuICAgICAgICBpZiAodGFyZ2V0Q29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgICBsZXQgYWxyZWFkeUluQ2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKHJlczogYW55KSA9PlxyXG4gICAgICAgICAgICByZXMuY29uZmVyZW5jZUlkID09PSB0YXJnZXRDb25mZXJlbmNlSWQgJiZcclxuICAgICAgICAgICAgKChyZXMudG8gPT0gbnVtYmVyICYmIHJlcz8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJykgfHxcclxuICAgICAgICAgICAgICAocmVzLmZyb20gPT0gbnVtYmVyICYmIHJlcz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyAmJiByZXMuaG9zdCkpICYmXHJcbiAgICAgICAgICAgICFyZXM/LmlzTGVmdFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChhbHJlYWR5SW5DYWxsKSB7XHJcbiAgICAgICAgICAgIHN3YWwoJ0Vycm9yJywgYEFscmVhZHkgJHtudW1iZXJ9IG51bWJlciBpbiB0aGlzIGNhbGwxLmApO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAobnVtYmVyID09PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndHdpbGlvTnVtYmVyJykpIHtcclxuICAgICAgICBzd2FsKCdFcnJvcicsICdZb3UgY2FuIG5vdCBkaWFsIHRoaXMgbnVtYmVyJyk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgY29udGFjdCA9IHRoaXMuY29udGFjdHMuZmluZCgoY29udGFjdDogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRhY3QubnVtYmVyc0xpc3Quc29tZSgobnVtOiBhbnkpID0+IG51bS5udW1iZXIgPT09IG51bWJlcilcclxuICAgICAgfSk7XHJcbiAgICAgIG51bWJlciA9IGF3YWl0IHRoaXMuZ2V0VG9OdW1iZXIobnVtYmVyKTtcclxuXHJcbiAgICAgIC8vIFVwZGF0ZSBjYWxsIGRhdGEgaW4gYSBzaW5nbGUgb3BlcmF0aW9uXHJcbiAgICAgIGNvbnN0IGNhbGxEYXRhID0ge1xyXG4gICAgICAgIG5hbWU6IGNvbnRhY3Q/LmZpcnN0TmFtZSxcclxuICAgICAgICBpbWc6IGNvbnRhY3Q/LmltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcclxuICAgICAgICBwaG9uZTogbnVtYmVyLFxyXG4gICAgICAgIGV4dE51bTogJycsXHJcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxyXG4gICAgICAgIGRpYWw6IHRydWUsXHJcbiAgICAgICAgZnJvbTogdGhpcy5zZWxlY3RlZENhbGxlcklkLm51bWJlcixcclxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKGlzTmV3Q29uZmVyZW5jZSkge1xyXG4gICAgICAgIHRoaXMuaXNOZXdBZGRlZENhbGwgPSB0cnVlO1xyXG4gICAgICAgIGxldCBvdXJOdW1iZXJJbmZvOiBhbnkgPSB7fVxyXG4gICAgICAgIGxldCBjYWxsSW5mbyA9IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZmluZCgoY2FsbEluZm86IGFueSwgaTogbnVtYmVyKSA9PiB0aGlzLmN1cnJlbnRDYWxsLmNvbmZlcmVuY2VJZCA9PSBjYWxsSW5mby5jb25mZXJlbmNlSWQpXHJcbiAgICAgICAgaWYgKGNhbGxJbmZvKSB7XHJcbiAgICAgICAgICBvdXJOdW1iZXJJbmZvID0gY2FsbEluZm8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNEYXRhPy5idXNpbmVzc051bWJlcikpICYmICFyZXNEYXRhPy5pc0xlZnRcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvdXJOdW1iZXJJbmZvPy5pZCkge1xyXG4gICAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbb3VyTnVtYmVySW5mbz8uaWRdLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IG91ck51bWJlckluZm8/LmNvbmZlcmVuY2VJZCxcclxuICAgICAgICAgICAgaG9sZDogdHJ1ZSxcclxuICAgICAgICAgICAgbXV0ZTogb3VyTnVtYmVySW5mbz8ubXV0ZSB8fCBmYWxzZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZihob2xkSW5mbz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdob2xkSW5mbyAxMzU1JywgaG9sZEluZm8pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmlzQ29uZmVyZW5jZUNhbGxIb2xkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMub25BZGROZXdDYWxsKGNhbGxEYXRhLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5vbkFkZE5ld0NhbGwoY2FsbERhdGEsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgICAgICB0aGlzLmNhbGxDb250YWN0KG51bWJlciwgdHJ1ZSwgb3B0aW9ucylcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdGYWlsZWQgdG8gaW5pdGlhdGUgY2FsbC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25BZGROZXdDYWxsKGNhbGxEYXRhOiBhbnksIGlzTmV3Q29uZmVyZW5jZUNhbGwgPSBmYWxzZSkge1xyXG4gICAgLy8gd2FybmluZyBvbmx5IGZvciBORVcgU0VQQVJBVEUgQ0FMTFxyXG4gICAgaWYgKGlzTmV3Q29uZmVyZW5jZUNhbGwgJiYgdGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnBlbmRpbmdDYWxsRGF0YSA9IGNhbGxEYXRhO1xyXG4gICAgICB0aGlzLnNob3dDb25mZXJlbmNlV2FybmluZ01vZGFsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXJ0Q2FsbChjYWxsRGF0YSwgaXNOZXdDb25mZXJlbmNlQ2FsbCk7XHJcbiAgfVxyXG5cclxuICBjb25maXJtTmV3Q2FsbCgpIHtcclxuICAgIHRoaXMuc2hvd0NvbmZlcmVuY2VXYXJuaW5nTW9kYWwgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnBlbmRpbmdDYWxsRGF0YSkge1xyXG4gICAgICB0aGlzLm5ld0NhbGxMb2FkZXJEYXRhID0ge1xyXG4gICAgICAgIG5hbWU6IHRoaXMucGVuZGluZ0NhbGxEYXRhLm5hbWUgfHwgJycsXHJcbiAgICAgICAgcGhvbmU6IHRoaXMucGVuZGluZ0NhbGxEYXRhLnBob25lLFxyXG4gICAgICAgIGltZzogdGhpcy5wZW5kaW5nQ2FsbERhdGEuaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1xyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdCA9IHtcclxuICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgIHR5cGU6ICdhbGVydC1zdWNjZXNzJyxcclxuICAgICAgICBudW1iZXI6IHRoaXMucGVuZGluZ0NhbGxEYXRhLnBob25lLFxyXG4gICAgICAgIGRpc3BsYXlOdW06IHRoaXMucGVuZGluZ0NhbGxEYXRhLnBob25lXHJcbiAgICAgIH07ICBcclxuICAgICAgXHJcbiAgICAgIHRoaXMuc2hvd05ld0NhbGxMb2FkZXIgPSB0cnVlO1xyXG4gICAgICBcclxuICAgICAgXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LnNob3cgPSBmYWxzZTtcclxuICAgICAgfSwgNzAwMCk7XHJcbiAgICAgIHRoaXMuc3RhcnRDYWxsKHRoaXMucGVuZGluZ0NhbGxEYXRhLCB0cnVlKTtcclxuICAgICAgdGhpcy5wZW5kaW5nQ2FsbERhdGEgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsTmV3Q2FsbCgpIHtcclxuICAgIHRoaXMuc2hvd0NvbmZlcmVuY2VXYXJuaW5nTW9kYWwgPSBmYWxzZTtcclxuICAgIHRoaXMucGVuZGluZ0NhbGxEYXRhID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFRvTnVtYmVyKGRpYWxlZE51bWJlcjogc3RyaW5nKSB7XHJcbiAgICBpZiAoZGlhbGVkTnVtYmVyWzBdICE9PSAnKycpIHtcclxuICAgICAgLy8gdGhpcyBpcyBjYXNlIHdoZW4gdXNlciBnZW9sb2NhdGlvbiBkaWFsIGNvZGUgaXMgb25cclxuICAgICAgbGV0IGlwQWRkcmVzczogYW55ID0gYXdhaXQgdGhpcy5pcFNlcnZpY2UuZ2V0SXBBZGRyZXNzSW5mbygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IHRoaXMudHdpbGlvU2VydmljZS5nZXRUb051bWJlcihkaWFsZWROdW1iZXIsIGlwQWRkcmVzcy5hZGRyZXNzLmNvdW50cnlDb2RlKS50b1Byb21pc2UoKTtcclxuICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlcz8udG9OdW1iZXJcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZGlhbGVkTnVtYmVyXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBkaWFsZWROdW1iZXJcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGlzSW52YWxpZE51bWJlcihudW1iZXI6IHN0cmluZykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKG51bWJlciA9PSAnJykge1xyXG4gICAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnSW52YWxpZCBOdW1iZXInKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB2YWxpZE51bWJlclBhdHRlcm4gPSAvXlsrXFxkXFxzKCktXSokLzsgLy8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHZhbGlkIGNoYXJhY3RlcnNcclxuICAgICAgY29uc3QgcGhvbmVOdW1iZXIgPSBudW1iZXI7XHJcbiAgICAgIGlmICghdmFsaWROdW1iZXJQYXR0ZXJuLnRlc3QocGhvbmVOdW1iZXIpKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdJbnZhbGlkIE51bWJlcicpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnSW52YWxpZCBOdW1iZXInKTtcclxuICAgICAgcmV0dXJuIHRydWU7IC8vIFJldHVybiB0cnVlIGlmIGFuIGVycm9yIG9jY3VycmVkLCBtZWFuaW5nIHRoZSBudW1iZXIgaXMgaW52YWxpZFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd0RpYWxBbGVydChtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGlhbEFsZXJ0ID0ge1xyXG4gICAgICBtc2c6IG1lc3NhZ2UsXHJcbiAgICAgIHNob3c6IHRydWVcclxuICAgIH07XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5kaWFsQWxlcnQuc2hvdyA9IGZhbHNlO1xyXG4gICAgfSwgMzAwMCk7XHJcbiAgfVxyXG5cclxuYXN5bmMgZ2V0QWxsUGFydGljaXBhbnRzKGNvbmZlcmVuY2VJZDogc3RyaW5nKSB7XHJcbiAgc2V0VGltZW91dCgoKT0+e1xyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldEFsbFBhcnRpY2lwYW50cyhjb25mZXJlbmNlSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBhcnRpY2lwYW50cyA9IHJlcz8ucGFydGljaXBhbnRzIHx8IHJlcz8ucGFydGljaXBhbnQgfHwgW107XHJcbiAgICAgICAgLy8gaWYgKCFwYXJ0aWNpcGFudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gICB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdCA9IFtdO1xyXG4gICAgICAgIC8vICAgdGhpcy5maWx0ZXJlZFBhcnRpY2lwZW50TGlzdCA9IFtdO1xyXG4gICAgICAgIC8vICAgcmV0dXJuO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICAvLyBjb25zdCB1cGRhdGVkUGFydGljaXBhbnRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgLy8gICBwYXJ0aWNpcGFudHMubWFwKGFzeW5jIChwOiBhbnkpID0+IHtcclxuICAgICAgICAvLyAgICAgY29uc3QgZnJvbU5hbWUgPSBhd2FpdCB0aGlzLmdldE5hbWUocC5mcm9tKTtcclxuICAgICAgICAvLyAgICAgY29uc3QgdG9OYW1lID0gYXdhaXQgdGhpcy5nZXROYW1lKHAudG8pO1xyXG4gIFxyXG4gICAgICAgIC8vICAgICByZXR1cm4ge1xyXG4gICAgICAgIC8vICAgICAgIC4uLnAsXHJcbiAgICAgICAgLy8gICAgICAgZnJvbU5hbWU6IGZyb21OYW1lIHx8IHAuZnJvbU5hbWUsXHJcbiAgICAgICAgLy8gICAgICAgdG9OYW1lOiB0b05hbWUgfHwgcC50b05hbWUsXHJcbiAgICAgICAgLy8gICAgIH07XHJcbiAgICAgICAgLy8gICB9KVxyXG4gICAgICAgIC8vICk7XHJcbiAgXHJcbiAgICAgICAgLy8gdGhpcy5hbGxQYXJ0aWNpcGVudExpc3QgPSB1cGRhdGVkUGFydGljaXBhbnRzO1xyXG4gICAgICAgIC8vIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSBbLi4udXBkYXRlZFBhcnRpY2lwYW50c107ICBcclxuICAgICAgICAvLyB0aGlzLmFwcGx5RmlsdGVyKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hbGxQYXJ0aWNpcGVudExpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkUGFydGljaXBlbnRMaXN0ID0gW107XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH0sNzAwKVxyXG59XHJcblxyXG4gIGFzeW5jIHN3YXBDYWxscyhjYWxsSW5mbzogYW55LCBpc0NvbmZlcmVuY2VDYWxsPzogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aGlzLmlzUGFydGljaXBhbnRQYW5lbExvYWRpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5mb3JFYWNoKGFzeW5jIChjOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGM/LmNvbmZlcmVuY2VJZCA9PSBjYWxsSW5mbz8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgICAgdGhpcy5pc0hvbGRCdG5EaXNhYmxlID0gdHJ1ZTtcclxuICAgICAgICBsZXQgcGFydGljaXBhbnRJbmZvID0gYy5wYXJ0aWNpcGFudHMuZmluZCgocmVzRGF0YTogYW55KSA9PlxyXG4gICAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8uZnJvbSkgJiYgcmVzRGF0YT8uY2xpZW50KSB8fCAodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LnRvKSAmJiByZXNEYXRhPy5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFyZXNEYXRhPy5idXNpbmVzc051bWJlcikpICYmICFyZXNEYXRhPy5pc0xlZnRcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKHBhcnRpY2lwYW50SW5mbz8uaWQpIHtcclxuICAgICAgICAgIGxldCBob2xkSW5mbzogYW55ID0gYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW3BhcnRpY2lwYW50SW5mbz8uaWRdLFxyXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHBhcnRpY2lwYW50SW5mbz8uY29uZmVyZW5jZUlkLFxyXG4gICAgICAgICAgICBob2xkOiBmYWxzZSxcclxuICAgICAgICAgICAgbXV0ZTogcGFydGljaXBhbnRJbmZvPy5tdXRlIHx8IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmKGhvbGRJbmZvPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hvbGRJbmZvIDE1MDInLCBob2xkSW5mbylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIHRoaXMuaXNDb25mZXJlbmNlQ2FsbEhvbGQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5pc0hvbGRCdG5EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNvbmZlcmVuY2VDYWxsSURGb3JQYXJ0aWNpcGFudExpc3QgPSBjYWxsSW5mbz8uY29uZmVyZW5jZUlkXHJcbiAgICAgICAgICAvLyB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyhjYWxsSW5mbz8uY29uZmVyZW5jZUlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IHBhcnRpY2lwYW50SW5mbyA9IGMucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pICYmIHJlc0RhdGE/LmNsaWVudCkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiAhcmVzRGF0YT8uYnVzaW5lc3NOdW1iZXIpKSAmJiAhcmVzRGF0YT8uaXNMZWZ0XHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmIChwYXJ0aWNpcGFudEluZm8/LmlkICYmICFwYXJ0aWNpcGFudEluZm8/LmlzSG9sZCkge1xyXG4gICAgICAgICAgbGV0IGhvbGRJbmZvOiBhbnkgPSBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xyXG4gICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbcGFydGljaXBhbnRJbmZvPy5pZF0sXHJcbiAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogcGFydGljaXBhbnRJbmZvPy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICAgIGhvbGQ6IHRydWUsXHJcbiAgICAgICAgICAgIG11dGU6IHBhcnRpY2lwYW50SW5mbz8ubXV0ZSB8fCBmYWxzZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZihob2xkSW5mbz8uc3RhdHVzICE9IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdob2xkSW5mbyAxNTIxJywgaG9sZEluZm8pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmlzSG9sZEJ0bkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgIC8vIHRoaXMuaXNDb25mZXJlbmNlQ2FsbEhvbGQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoYz8uaXNDb25mZXJlbmNlICYmICFjPy5pc0hvbGQgJiYgdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkID09IGM/LmNvbmZlcmVuY2VJZCkge1xyXG4gICAgICAgIGxldCBob2xkSW5mbzogYW55ID0gYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcclxuICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtjPy5wYXJ0aWNpcGFudElkIHx8IGM/LmlkXSxcclxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogYy5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgICBob2xkOiB0cnVlLFxyXG4gICAgICAgICAgbXV0ZTogYz8ubXV0ZSB8fCBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmKGhvbGRJbmZvPy5zdGF0dXMgIT0gMjAwKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdob2xkSW5mbyAxNTM1JywgaG9sZEluZm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMuaXNDb25mZXJlbmNlQ2FsbEhvbGQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgaGFzRGV0YWlsZWRJbmZvKGNhbGxEYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghY2FsbERhdGEpIHJldHVybiBmYWxzZTtcclxuICAgIC8vIENoZWNrIGlmIHVzZXJJbmZvIGV4aXN0cyBhbmQgaGFzIG1lYW5pbmdmdWwgZGF0YVxyXG4gICAgaWYgKGNhbGxEYXRhLnVzZXJJbmZvICYmIGNhbGxEYXRhLnVzZXJJbmZvLmMyY0luZm9ybWF0aW9uKSB7XHJcbiAgICAgIGNvbnN0IGluZm8gPSBjYWxsRGF0YS51c2VySW5mby5jMmNJbmZvcm1hdGlvbjtcclxuICAgICAgcmV0dXJuICEhKFxyXG4gICAgICAgIGluZm8uc3ViamVjdCAmJiBpbmZvLnN1YmplY3QgIT09ICctJyB8fFxyXG4gICAgICAgIGluZm8uZW1haWwgJiYgaW5mby5lbWFpbCAhPT0gJy0nIHx8XHJcbiAgICAgICAgaW5mby5tZXNzYWdlICYmIGluZm8ubWVzc2FnZSAhPT0gJy0nIHx8XHJcbiAgICAgICAgaW5mby5wb2ludE5hbWUgJiYgaW5mby5wb2ludE5hbWUgIT09ICctJyB8fFxyXG4gICAgICAgIGluZm8uc291cmNlTmFtZSAmJiBpbmZvLnNvdXJjZU5hbWUgIT09ICctJyB8fFxyXG4gICAgICAgIGluZm8uZXh0ZW5zaW9uICYmIGluZm8uZXh0ZW5zaW9uICE9PSAnLScgfHxcclxuICAgICAgICBpbmZvLnVybCB8fFxyXG4gICAgICAgIGluZm8ubGF0aXR1ZGUgfHxcclxuICAgICAgICBpbmZvLmxvbmdpdHVkZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25DYWxsSW5wdXRzKG51bTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihudW0pIHx8IG51bSA9PSAnKycgfHwgbnVtID09ICcqJyB8fCBudW0gPT0gJyMnKSB7XHJcbiAgICAgICAgaWYgKG51bSA9PSAnIycpIHtcclxuICAgICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi1oYXNoLS5tcDNgKS5wbGF5KCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChudW0gPT0gJyonKSB7XHJcbiAgICAgICAgICBuZXcgQXVkaW8oYC9hc3NldHMvZGlhbC10b25lcy9kdG1mL2R0bWYtc3Rhci0ubXAzYCkucGxheSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuZXcgQXVkaW8oYC9hc3NldHMvZGlhbC10b25lcy9kdG1mL2R0bWYtJHtudW19LS5tcDNgKS5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FsbElucHV0ID0gdGhpcy5jYWxsSW5wdXQgKyBTdHJpbmcobnVtKTtcclxuICAgICAgICB0aGlzLnNob3dDbGVhckJ0biA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHN0ciA9IFN0cmluZyhudW0pO1xyXG4gICAgICBsZXQgc2VsZkNhbGwgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZpbmQoKHJlczogYW55KSA9PiByZXM/LmNvbmZlcmVuY2VJZCA9PSB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQpPy5wYXJ0aWNpcGFudHMuZmluZCgocmVzRGF0YTogYW55KSA9PlxyXG4gICAgICAgICgodGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKHJlc0RhdGE/LmZyb20pICYmIHJlc0RhdGE/LmNsaWVudCkgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy50bykgJiYgcmVzRGF0YT8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiByZXNEYXRhPy5ob3N0KSkgJiYgIXJlc0RhdGE/LmlzTGVmdFxyXG4gICAgICApO1xyXG4gICAgICBsZXQgZGV2aWNlID0gdGhpcy50d2lsaW9TZXJ2aWNlLmdldEluY29taW5nQ2FsbEJ5SWQoc2VsZkNhbGw/LmNhbGxTaWQgfHwgc2VsZkNhbGw/LmNsaWVudFNpZClcclxuICAgICAgaWYoZGV2aWNlICYmIGRldmljZT8uX3N0YXR1cyAgPT0gJ29wZW4nKSB7XHJcbiAgICAgICAgZGV2aWNlLnNlbmREaWdpdHMoc3RyKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNhbGw/LnNlbmREaWdpdHMoc3RyKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uQ2FsbElucHV0RW50ZXIoZXY6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IHNlbGZDYWxsID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5maW5kKChyZXM6IGFueSkgPT4gcmVzPy5jb25mZXJlbmNlSWQgPT0gdGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkKT8ucGFydGljaXBhbnRzLmZpbmQoKHJlc0RhdGE6IGFueSkgPT5cclxuICAgICAgICAoKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhyZXNEYXRhPy5mcm9tKSAmJiByZXNEYXRhPy5jbGllbnQpIHx8ICh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocmVzRGF0YT8udG8pICYmIHJlc0RhdGE/LmRpcmVjdGlvbiA9PSAnaW5jb21pbmctY2FsbCcgJiYgcmVzRGF0YT8uaG9zdCkpICYmICFyZXNEYXRhPy5pc0xlZnRcclxuICAgICAgKTtcclxuICAgICAgbGV0IGRldmljZSA9IHRoaXMudHdpbGlvU2VydmljZS5nZXRJbmNvbWluZ0NhbGxCeUlkKHNlbGZDYWxsPy5jYWxsU2lkIHx8IHNlbGZDYWxsPy5jbGllbnRTaWQpXHJcbiAgICAgIGlmKGRldmljZSAmJiBkZXZpY2U/Ll9zdGF0dXMgID09ICdvcGVuJykge1xyXG4gICAgICAgIGRldmljZS5zZW5kRGlnaXRzKFN0cmluZyhldi5rZXkpKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNhbGw/LnNlbmREaWdpdHMoU3RyaW5nKGV2LmtleSkpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFySW5wdXRzKCkge1xyXG4gICAgdGhpcy5jYWxsSW5wdXQgPSB0aGlzLmNhbGxJbnB1dC5zbGljZSgwLCAtMSk7XHJcbiAgfVxyXG4gIGlzTWluaW1pc2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbWluaW1pc2VEaWFscGFkKCkge1xyXG4gICAgdGhpcy5taW5pbWlzZUV2ZW50LmVtaXQodHJ1ZSk7XHJcbiAgICB0aGlzLmlzTWluaW1pc2VkID0gdHJ1ZTtcclxuICB9XHJcbiAgbWF4aW1pc2VEaWFscGFkKCkge1xyXG4gICAgdGhpcy5taW5pbWlzZUV2ZW50LmVtaXQoZmFsc2UpO1xyXG4gICAgdGhpcy5pc01pbmltaXNlZCA9IGZhbHNlO1xyXG4gIH1cclxuICB0b2dnbGVSZWNvcmRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgIH1cclxuICB9XHJcbiAgc3RhcnRSZWNvcmRpbmcoKSB7XHJcbiAgICBsZXQgc2lkO1xyXG4gICAgY29uc3QgZGV0YWlscyA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDYWxsU2lkKCk7XHJcbiAgICB0aGlzLmluY29taW5nQ2FsbFNpZCA9IGRldGFpbHMuY2FsbFNpZDtcclxuICAgIHRoaXMuaW5jb21pbmdSZWNvcmRDYWxsID0gZGV0YWlscy5yZWNvcmRDYWxsO1xyXG4gICAgc2lkID0gdGhpcy5pbmNvbWluZ0NhbGxTaWQgPyB0aGlzLmluY29taW5nQ2FsbFNpZCA6IHRoaXMuY2FsbFNpZCB8fCB0aGlzLmFkZFJlcz8uY29uZmVyZW5jZVNpZDtcclxuXHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q2FsbFJlY29yZGluZyh7IFwiY29uZmVyZW5jZUlkXCI6IHRoaXMuY3VycmVudENhbGw/LmNvbmZlcmVuY2VJZCB9KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICB0aGlzLmlzUmVjb3JkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRpbWVFbGFwc2VkID0gMDtcclxuICAgICAgdGhpcy5zdGFydFRpbWVyMSgpO1xyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdGFydGluZyByZWNvcmRpbmcnLCBlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgc3RvcFJlY29yZGluZygpIHtcclxuICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnRpbWVyU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgcGF1c2VSZWNvcmRpbmcoKSB7XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UucGF1c2VPclJlc3VtZVJlY29yZGluZyh0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQsICdwYXVzZScpLnN1YnNjcmliZShcclxuICAgICAgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcFJlY29yZGluZ1RpbWVyKCk7XHJcbiAgICAgICAgdGhpcy5pc1BhdXNlZCA9IHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhdXNpbmcgcmVjb3JkaW5nOicsIGVycm9yKTtcclxuICAgICAgICAvLyBDb25zaWRlciB1cGRhdGluZyB0aGUgVUkgdG8gc2hvdyB0aGUgZXJyb3Igc3RhdGVcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgcmVzdW1lUmVjb3JkaW5nKCkge1xyXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnBhdXNlT3JSZXN1bWVSZWNvcmRpbmcodGhpcy5jdXJyZW50Q2FsbD8uY29uZmVyZW5jZUlkLCAncmVzdW1lJykuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN0YXJ0VGltZXIxKCk7XHJcbiAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlc3VtaW5nIHJlY29yZGluZycsIGVycm9yKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRUaW1lRGlmZmVyZW5jZShpbnB1dFRpbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwYXN0VGltZSA9IG5ldyBEYXRlKGlucHV0VGltZSkuZ2V0VGltZSgpO1xyXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHJcbiAgICBsZXQgZGlmZiA9IE1hdGguZmxvb3IoKGN1cnJlbnRUaW1lIC0gcGFzdFRpbWUpIC8gMTAwMCk7IC8vIHRvdGFsIHNlY29uZHNcclxuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihkaWZmIC8gMzYwMCk7XHJcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigoZGlmZiAlIDM2MDApIC8gNjApO1xyXG4gICAgY29uc3Qgc2Vjb25kcyA9IGRpZmYgJSA2MDtcclxuXHJcbiAgICBjb25zdCBwYWQgPSAodmFsdWU6IG51bWJlcik6IHN0cmluZyA9PiB2YWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAvLyBJZiBkdXJhdGlvbiBpcyAxIGhvdXIgb3IgbW9yZSwgcmV0dXJuIEhIOm1tOnNzXHJcbiAgICBpZiAoaG91cnMgPiAwKSB7XHJcbiAgICAgIHJldHVybiBgJHtwYWQoaG91cnMpfToke3BhZChtaW51dGVzKX06JHtwYWQoc2Vjb25kcyl9YDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBPdGhlcndpc2UgcmV0dXJuIG1tOnNzXHJcbiAgICByZXR1cm4gYCR7cGFkKG1pbnV0ZXMpfToke3BhZChzZWNvbmRzKX1gO1xyXG4gIH1cclxuICBzdGFydFRpbWVyMSgpIHtcclxuICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24gPSBpbnRlcnZhbCgxMDAwKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLnRpbWVFbGFwc2VkKys7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgc3RvcFJlY29yZGluZ1RpbWVyKCkge1xyXG4gICAgaWYgKHRoaXMudGltZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyAvLyBQYXVzZSB0aGUgdGltZXJcclxuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDsgICAgICAgIC8vIE9wdGlvbmFsbHkgcmVzZXQgdGhlIHN1YnNjcmlwdGlvblxyXG4gICAgfVxyXG4gIH1cclxuICBnZXRGb3JtYXR0ZWRUaW1lKCkge1xyXG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IodGhpcy50aW1lRWxhcHNlZCAvIDYwKTtcclxuICAgIGNvbnN0IHNlY29uZHMgPSB0aGlzLnRpbWVFbGFwc2VkICUgNjA7XHJcbiAgICByZXR1cm4gYCR7bWludXRlc306JHtzZWNvbmRzIDwgMTAgPyAnMCcgOiAnJ30ke3NlY29uZHN9YDtcclxuICB9XHJcbiAgcG9sbENhbGxTdGF0dXMoY2FsbEF1dGhJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBtYXhUaW1lID0gMzAwMDA7IC8vIFBvbGwgZm9yIHVwIHRvIDMwIHNlY29uZHNcclxuICAgIGNvbnN0IHBvbGxJbnRlcnZhbCA9IDMwMDA7IC8vIFBvbGwgZXZlcnkgMyBzZWNvbmRzXHJcbiAgICBsZXQgZWxhcHNlZFRpbWUgPSAwO1xyXG4gICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcclxuICAgICAgZWxhcHNlZFRpbWUgKz0gcG9sbEludGVydmFsO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1c1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxTdGF0dXMoY2FsbEF1dGhJZCkudG9Qcm9taXNlKCkgYXMgQ2FsbFN0YXR1c1Jlc3BvbnNlO1xyXG4gICAgICAgIGlmIChzdGF0dXNSZXNwb25zZSAmJiBzdGF0dXNSZXNwb25zZS5jYWxsRGV0YWlscykge1xyXG4gICAgICAgICAgdGhpcy5jYWxsU3RhdHVzID0gc3RhdHVzUmVzcG9uc2UuY2FsbERldGFpbHMuY2FsbFN0YXR1cztcclxuICAgICAgICAgIGlmICh0aGlzLmNhbGxTdGF0dXMgPT09ICdpbi1wcm9ncmVzcycpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxsU2lkID0gc3RhdHVzUmVzcG9uc2UuY2FsbERldGFpbHMuY2FsbFNpZDtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVjb3JkQ2FsbCAmJiAhdGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhbGxTdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kQ2FsbCgpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZWxhcHNlZFRpbWUgPj0gbWF4VGltZSkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdNYXggcG9sbGluZyB0aW1lIHJlYWNoZWQuIFN0b3BwaW5nIHBvbGwuJyk7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgfVxyXG4gICAgfSwgcG9sbEludGVydmFsKTtcclxuICB9XHJcblxyXG4gIC8vIGdldFVzZXJJbmZvcm1hdGlvbihpZDogYW55KSB7XHJcbiAgLy8gICBpZihpZCkge1xyXG4gIC8vICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldFVzZXJJbmZvcm1hdGlvbihpZCkuc3Vic2NyaWJlKFxyXG4gIC8vICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gIC8vICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlLCAndXNlckluZm9ybWF0aW9uJyk7XHJcbiAgLy8gICAgIH0sIGVycm9yID0+IHtcclxuICAvLyAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdGFydGluZyByZWNvcmRpbmcnLCBlcnJvcik7XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICBzZWxlY3RlZEluY29taW5nQ2FsbEluZm8oZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsID0gZGF0YTtcclxuICB9XHJcblxyXG4gIC8vIGdldEhvbGRDYWxsTGlzdCgpIHtcclxuICAvLyAgIGxldCBob2xkTGlzdDogYW55W10gPSBbXTtcclxuICAvLyAgIGxldCBpc0NvbmZlcmVuY2UgPSBmYWxzZTtcclxuICAvLyAgIHRoaXMuY3VycmVudENhbGxMaXN0LmZvckVhY2goKGM6IGFueSkgPT4ge1xyXG4gIC8vICAgICBpZiAoYz8uaXNIb2xkICYmICFjPy5pc0NvbmZlcmVuY2UpIHtcclxuICAvLyAgICAgICBob2xkTGlzdC5wdXNoKGMpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGlmIChjPy5pc0NvbmZlcmVuY2UgJiYgIWlzQ29uZmVyZW5jZSkge1xyXG4gIC8vICAgICAgIGlzQ29uZmVyZW5jZSA9IHRydWU7XHJcbiAgLy8gICAgICAgY1snaXNDb25mZXJlbmNlQ2FsbEhvbGQnXSA9IHRydWU7XHJcbiAgLy8gICAgICAgaG9sZExpc3QucHVzaChjKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSk7XHJcbiAgLy8gICByZXR1cm4gaG9sZExpc3Q7XHJcbiAgLy8gfVxyXG5cclxuICBvbkNsaWNrRXhwYW5kKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKGRhdGEuaWQgIT0gdGhpcy5zZWxlY3RlZFVzZXJJbmZvPy5wYXJ0aWNpcGFudElkKSB7XHJcbiAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbyA9IGRhdGE7XHJcbiAgICAgIHRoaXMuY2hlY2tUZXh0SGVpZ2h0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSAhdGhpcy5pc0NsaWNrRXhwYW5kO1xyXG4gICAgICBpZiAodGhpcy5pc0NsaWNrRXhwYW5kKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gZGF0YTtcclxuICAgICAgICB0aGlzLmNoZWNrVGV4dEhlaWdodCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBzZXRJbmNvbWluZ0NhbGxTdGF0dXMoZGF0YTogYW55KSB7XHJcbiAgLy8gICBsZXQgcGF5bG9hZCA9IHtcclxuICAvLyAgICAgcmVjb3JkSWQ6IGRhdGE/LmlkLFxyXG4gIC8vICAgICBpcEFkZHJlc3M6ICcnLFxyXG4gIC8vICAgICBpcENvdW50cnk6ICcnLFxyXG4gIC8vICAgICBjYWxsU3RhdHVzOiAnYW5zd2VyZWQnLFxyXG4gIC8vICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcclxuICAvLyAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmN1cnJlbnRDYWxsPy5jb25mZXJlbmNlSWQgfHwgZGF0YS5jb25mZXJlbmNlSWQgfHwgJ25vJ1xyXG4gIC8vICAgfVxyXG4gIC8vICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnNldEluY29taW5nQ2FsbFN0YXR1cyhwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKHJlcylcclxuICAvLyAgIH0pXHJcbiAgLy8gfVxyXG5cclxuICB0b2dnbGVTZWFyY2goKSB7XHJcbiAgICB0aGlzLmlzU2VhcmNoVmlzaWJsZSA9ICF0aGlzLmlzU2VhcmNoVmlzaWJsZTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgaWYgKCF0aGlzLmlzU2VhcmNoVmlzaWJsZSkge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkTGlzdCA9IHRoaXMuY29udGFjdHM7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRQYXJ0aWNpcGVudExpc3QgPSB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFwcGx5RmlsdGVyKCkge1xyXG4gICAgY29uc3QgdGV4dCA9IHRoaXMuc2VhcmNoVGV4dC50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIHRoaXMuaXNEaXJlY3RDYWxsT3B0aW9uU2hvdyA9IC9eXFwrP1xcZCskLy50ZXN0KHRleHQpXHJcbiAgICBpZiAoIXRleHQubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gdGhpcy5jb250YWN0cztcclxuICAgICAgLy8gdGhpcy5maWx0ZXJlZExpc3QuZm9yRWFjaCgoYzogYW55KSA9PiB7XHJcbiAgICAgIC8vICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChjYzogYW55KSA9PiAhY2M/LklzQ29ubmVjdGVkICYmIChjYz8ucGhvbmUgPT0gYz8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlciB8fCBjYz8ucGhvbmUgPT0gYz8ubnVtYmVyc0xpc3RbMV0/Lm51bWJlcikpO1xyXG4gICAgICAvLyAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgIC8vICAgICBjWydJc0Nvbm5lY3RlZCddID0gdHJ1ZTtcclxuICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAvLyAgICAgY1snSXNDb25uZWN0ZWQnXSA9IGZhbHNlO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGlzTnVtZXJpY1NlYXJjaCA9IC9eXFwrP1xcZCskLy50ZXN0KHRleHQpO1xyXG4gICAgY29uc3QgZXhwYW5kZWQ6IGFueVtdID0gW107XHJcbiAgICB0aGlzLmNvbnRhY3RzLmZvckVhY2goKGM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXNOdW1lcmljU2VhcmNoKSB7XHJcbiAgICAgICAgKGM/Lm51bWJlcnNMaXN0IHx8IFtdKS5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICgobj8ubnVtYmVyIHx8ICcnKS5pbmNsdWRlcyh0ZXh0KSkge1xyXG4gICAgICAgICAgICBleHBhbmRlZC5wdXNoKHsgLi4uYywgbnVtYmVyc0xpc3Q6IFtuXSB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuYW1lTWF0Y2ggPSAoYz8uZmlyc3ROYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRleHQpIHx8XHJcbiAgICAgICAgICAoYz8ubGFzdE5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGV4dCkgfHxcclxuICAgICAgICAgIChjPy5taWRkbGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRleHQpIHx8XHJcbiAgICAgICAgICAoYz8ubmlja05hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGV4dCk7XHJcbiAgICAgICAgaWYgKG5hbWVNYXRjaCkge1xyXG4gICAgICAgICAgY29uc3QgbnVtYmVycyA9IGM/Lm51bWJlcnNMaXN0O1xyXG4gICAgICAgICAgaWYgKG51bWJlcnMgJiYgbnVtYmVycy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIG51bWJlcnMuZm9yRWFjaCgobnVtT2JqOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBleHBhbmRlZC5wdXNoKHsgLi4uYywgbnVtYmVyc0xpc3Q6IFtudW1PYmpdIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4cGFuZGVkLnB1c2goYyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gZXhwYW5kZWQ7XHJcbiAgICB0aGlzLmZpbHRlcmVkTGlzdC5mb3JFYWNoKChjOiBhbnkpID0+IHtcclxuICAgICAgY1snZnJvbU5hbWUnXSA9IHRoaXMuZ2V0TmFtZShjLmZyb20pIHx8ICcnO1xyXG4gICAgICBjWyd0b05hbWUnXSA9IHRoaXMuZ2V0TmFtZShjLnRvKSB8fCAnJztcclxuICAgICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChjYzogYW55KSA9PiBjYz8ucGhvbmUgPT0gYz8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlcik7XHJcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgY1snSXNDb25uZWN0ZWQnXSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY1snSXNDb25uZWN0ZWQnXSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgY2hlY2tUZXh0SGVpZ2h0KCkge1xyXG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudGV4dC1jb250YWluZXInKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmIChlbD8uc2Nyb2xsSGVpZ2h0ID4gZWw/LmNsaWVudEhlaWdodCkge1xyXG4gICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICB0b2dnbGVUZXh0KCkge1xyXG4gICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcclxuICB9XHJcbiAgc2hvd0Rpc2Nvbm5lY3RNb2RhbCA9IGZhbHNlO1xyXG4gIC8vIENhbGwgdGhpcyB3aGVuIGNhbGwgZGlzY29ubmVjdHNcclxuICBvbkNhbGxEaXNjb25uZWN0ZWQoKSB7XHJcbiAgICB0aGlzLnJlc2V0TGVhdmVUaW1lcigpO1xyXG4gICAgdGhpcy5zaG93RGlzY29ubmVjdE1vZGFsID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGVuZENvbmZlcmVuY2UoKSB7XHJcbiAgICB0aGlzLnNob3dEaXNjb25uZWN0TW9kYWwgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29uZj8uY29uZmVyZW5jZUlkKSB7XHJcbiAgICAgIHRoaXMub25FbmRDYWxsKHRoaXMuc2VsZWN0ZWRDb25mLCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW5kQ2FsbCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBDb21iaW5lcyB0aGUgdHdvIDI0LWhvdXIgc2VsZWN0cyBpbnRvIGxlYXZlUmVhc29uIChISDpNTSkgKi9cclxuICBvblRpbWVDaGFuZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5sZWF2ZUhvdXIgIT09ICcnICYmIHRoaXMubGVhdmVNaW51dGUgIT09ICcnKSB7XHJcbiAgICAgIHRoaXMubGVhdmVSZWFzb24gPSBgJHt0aGlzLmxlYXZlSG91cn06JHt0aGlzLmxlYXZlTWludXRlfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVIb3VyRHJvcGRvd24oKSB7XHJcbiAgICB0aGlzLnNob3dIb3VyRHJvcGRvd24gPSAhdGhpcy5zaG93SG91ckRyb3Bkb3duO1xyXG4gICAgdGhpcy5zaG93TWludXRlRHJvcGRvd24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU1pbnV0ZURyb3Bkb3duKCkge1xyXG4gICAgdGhpcy5zaG93TWludXRlRHJvcGRvd24gPSAhdGhpcy5zaG93TWludXRlRHJvcGRvd247XHJcbiAgICB0aGlzLnNob3dIb3VyRHJvcGRvd24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEhvdXIoaDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmxlYXZlSG91ciA9IGg7XHJcbiAgICB0aGlzLnNob3dIb3VyRHJvcGRvd24gPSBmYWxzZTtcclxuICAgIHRoaXMub25UaW1lQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RNaW51dGUobTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmxlYXZlTWludXRlID0gbTtcclxuICAgIHRoaXMuc2hvd01pbnV0ZURyb3Bkb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLm9uVGltZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgbGVhdmVDb25mZXJlbmNlKCkge1xyXG4gICAgdGhpcy5zaG93RGlzY29ubmVjdE1vZGFsID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5pc1JlYXNvbkNoZWNrZWQpIHtcclxuICAgICAgbGV0IHBheWxvYWQgPSB7IGNvbmZlcmVuY2VJZDogdGhpcy5zZWxlY3RlZENvbmY/LmNvbmZlcmVuY2VJZCB8fCB0aGlzLmhvc3RudW1iZXI/LmNvbmZlcmVuY2VJZCwgdGltZTogdGhpcy5jb252ZXJ0SEhNTVRvTWludXRlcyh0aGlzLmxlYXZlUmVhc29uKSwgdGltZXJEYXRlOiBuZXcgRGF0ZSgpLnRvU3RyaW5nKCkgfVxyXG4gICAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2Uuc2V0VGltZXJGb3JFbmRDb25mZXJlbmNlQ2FsbChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlcykgPT4geyB9KVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25mPy5jb25mZXJlbmNlSWQpIHtcclxuICAgICAgbGV0IGNvbmZlcmVuY2UgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Py5maW5kKChyZXM6IGFueSkgPT4gcmVzPy5jb25mZXJlbmNlSWQgPT0gdGhpcy5zZWxlY3RlZENvbmY/LmNvbmZlcmVuY2VJZClcclxuICAgICAgbGV0IHBhcnRpY2lwZW50SW5mbyA9IGNvbmZlcmVuY2U/LnBhcnRpY2lwYW50cz8uZmluZCgocGFydGljaXBhbnQ6IGFueSkgPT4gKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocGFydGljaXBhbnQ/LmZyb20pXHJcbiAgICAgICAgJiYgcGFydGljaXBhbnQ/LmNsaWVudCAmJiBwYXJ0aWNpcGFudD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJykgfHwgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwYXJ0aWNpcGFudD8udG8pICYmIHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ2luY29taW5nLWNhbGwnICYmICFwYXJ0aWNpcGFudD8uYnVzaW5lc3NOdW1iZXIgJiYgcGFydGljaXBhbnQ/Lmhvc3QpICYmIHBhcnRpY2lwYW50Py5jbGllbnQpICYmICFwYXJ0aWNpcGFudD8uaXNMZWZ0KVxyXG4gICAgICBpZiAocGFydGljaXBlbnRJbmZvPy5pZCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5NdWx0aXBsZUNvbmZlcmVuY2VzKCkpIHtcclxuICAgICAgICAgIC8vIFNob3cgcG9wdXAgaW5zdGVhZCBvZiBkaXJlY3RseSBsZWF2aW5nXHJcbiAgICAgICAgICB0aGlzLmxlYXZlQ29uZlBhcnRpY2lwYW50ID0gcGFydGljaXBlbnRJbmZvO1xyXG4gICAgICAgICAgdGhpcy5sZWF2ZUNvbmZDb25mZXJlbmNlTmFtZSA9IHRoaXMuY29uZmVyZW5jZUNhbGxMaXN0LmZpbmQoKGM6IGFueSkgPT4gYy5jb25mZXJlbmNlSWQgPT09IGNvbmZlcmVuY2UuY29uZmVyZW5jZUlkKT8uY2FsbExhYmVsIHx8ICdDb25mZXJlbmNlJztcclxuICAgICAgICAgIHRoaXMuc2hvd0xlYXZlQ29uZmlybWF0aW9uTW9kYWwgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm9uRW5kQ2FsbChwYXJ0aWNpcGVudEluZm8pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vbkVuZENhbGwodGhpcy5ob3N0bnVtYmVyKTtcclxuICAgIH1cclxuICB9XHJcbiAgY29udmVydEhITU1Ub01pbnV0ZXModGltZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcik7XHJcbiAgICByZXR1cm4gKGhvdXJzICogNjApICsgbWludXRlcztcclxuICB9XHJcblxyXG4gIG9uUmVqZWN0Q2FsbChjYWxsSW5mbzogYW55KSB7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgY2hhbm5lbElkOiBlbnZpcm9ubWVudC5jaGFubmVsSWQsXHJcbiAgICAgIHJlY29yZElkOiBjYWxsSW5mbz8uaWQsXHJcbiAgICAgIGlwQWRkcmVzczogJycsXHJcbiAgICAgIGlwQ291bnRyeTogJycsXHJcbiAgICAgIGNhbGxTdGF0dXM6ICdubycsXHJcbiAgICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkLFxyXG4gICAgICB1c2VySWQ6ICB0aGlzLnVzZXJJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXHJcbiAgICAgIGNvbXBhbnlJZDogJycsXHJcbiAgICAgIGNsaWVudFNpZDogY2FsbEluZm8/LmNsaWVudFNpZCxcclxuICAgICAgY29uZmVyZW5jZUlkOiBjYWxsSW5mbz8uY29uZmVyZW5jZUlkIHx8ICdubydcclxuICAgIH1cclxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5zZXRJbmNvbWluZ0NhbGxTdGF0dXMocGF5bG9hZCkuc3Vic2NyaWJlKGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbHRlcigocmVzOiBhbnkpID0+IHJlcz8uaWQgIT0gY2FsbEluZm8/LmlkKTtcclxuICAgICAgdGhpcy5vbkNsb3NlQzJDSW5mb1BhbmVsKCk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pXHJcbiAgfVxyXG4gIFxyXG4gIGlzU2VsZk51bWJlcihwYXJ0aWNpcGFudDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VOdW1iZXJMaXN0LmZpbmQoKHJlczogYW55KSA9PiByZXMgPT0gKHBhcnRpY2lwYW50Py5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gcGFydGljaXBhbnQ/LmZyb20gOiBwYXJ0aWNpcGFudD8udG8pKTtcclxuICB9XHJcblxyXG4gIHNob3VsZFNob3dTZXBhcmF0b3IoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdmlzaWJsZUNvdW50ID0gdGhpcy5jdXJyZW50Q2FsbExpc3Quc2xpY2UoMCwgaW5kZXgpLmZpbHRlcigoY2FsbDogYW55KSA9PiAhY2FsbD8uaXNDb25mZXJlbmNlSG9sZCkubGVuZ3RoO1xyXG4gICAgcmV0dXJuIHZpc2libGVDb3VudCA+IDA7XHJcbiAgfVxyXG5cclxuICBvbkNsb3NlQzJDSW5mb1BhbmVsKCkge1xyXG4gICAgLy8gdGhpcy5pc0NsaWNrRXhwYW5kID0gZmFsc2U7XHJcbiAgICBsZXQgYnVzaW5lc3NJbmZvID0gdGhpcy5jdXJyZW50Q29uZmVyZW5jZUNhbGw/LnBhcnRpY2lwYW50cy5maW5kKChpdGVtOiBhbnkpID0+ICEhaXRlbT8uYnVzaW5lc3NOdW1iZXIgJiYgdGhpcy5kZXZpY2VOdW1iZXJMaXN0LmluY2x1ZGVzKGl0ZW0/LnRvKSAmJiAhaXRlbT8uaG9zdCk7XHJcbiAgICBpZihidXNpbmVzc0luZm8pIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZChyZXMgPT4gYnVzaW5lc3NJbmZvPy5pZCA9PSByZXM/LmlkKTtcclxuICAgICAgdGhpcy50b2dnbGVDMkNJbmZvUGFuZWwodGhpcy5zZWxlY3RlZFVzZXJJbmZvKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TmFtZShudW1iZXI6IGFueSkge1xyXG4gICAgICBsZXQgY29udGFjdEluZm8gPSB0aGlzLmNvbnRhY3RzLmZpbmQoKGM6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBjPy5udW1iZXJzTGlzdFswXT8ubnVtYmVyICA9PSBudW1iZXIgfHwgYz8ubnVtYmVyc0xpc3RbMV0/Lm51bWJlciA9PSBudW1iZXI7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gY29udGFjdEluZm8/LmZpcnN0TmFtZSB8fCBjb250YWN0SW5mbz8ubWlkZGxlTmFtZSB8fCBjb250YWN0SW5mbz8ubGFzdE5hbWUgPyBgJHtjb250YWN0SW5mbz8uZmlyc3ROYW1lIHx8ICcnfSAke2NvbnRhY3RJbmZvPy5taWRkbGVOYW1lIHx8ICcnfSAke2NvbnRhY3RJbmZvPy5sYXN0TmFtZSB8fCAnJ31gIDogbnVsbFxyXG4gIH1cclxuICBcclxuICBnZXRJbWcobnVtYmVyOiBhbnkpIHtcclxuICAgIGxldCBjb250YWN0SW5mbyA9IHRoaXMuY29udGFjdHMuZmluZCgoYzogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBjPy5udW1iZXJzTGlzdFswXT8ubnVtYmVyICA9PSBudW1iZXIgfHwgYz8ubnVtYmVyc0xpc3RbMV0/Lm51bWJlciA9PSBudW1iZXI7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjb250YWN0SW5mbz8uaW1hZ2UgfHwgbnVsbFxyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dFbmRBbGxCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBhY3RpdmVQYXJ0aWNpcGFudHMgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maWx0ZXIoKGM6IGFueSkgPT4gIWMuaXNMZWZ0KTtcclxuICAgIHJldHVybiBhY3RpdmVQYXJ0aWNpcGFudHMubGVuZ3RoID4gMjtcclxuICB9XHJcbiAgY29uZmlybUxlYXZlUGFydGljaXBhbnQoYzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pc0luTXVsdGlwbGVDb25mZXJlbmNlcygpKSB7XHJcbiAgICAgIHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQgPSBjO1xyXG4gICAgICB0aGlzLmxlYXZlQ29uZkNvbmZlcmVuY2VOYW1lID0gdGhpcy5jb25mZXJlbmNlQ2FsbExpc3QuZmluZChcclxuICAgICAgICAoY29uZjogYW55KSA9PiBjb25mLmNvbmZlcmVuY2VJZCA9PT0gYy5jb25mZXJlbmNlSWRcclxuICAgICAgKT8uY2FsbExhYmVsIHx8ICdDb25mZXJlbmNlJztcclxuICAgICAgdGhpcy5zaG93TGVhdmVDb25maXJtYXRpb25Nb2RhbCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9uRW5kQ2FsbChjLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlzSW5NdWx0aXBsZUNvbmZlcmVuY2VzKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuICAgIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZm9yRWFjaCgoY29uZjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGNvbmYpO1xyXG4gICAgICBjb25zdCBvdXJQYXJ0aWNpcGFudCA9IGNvbmYucGFydGljaXBhbnRzPy5maW5kKChwOiBhbnkpID0+XHJcbiAgICAgICAgKCh0aGlzLmRldmljZU51bWJlckxpc3QuaW5jbHVkZXMocD8uZnJvbSkgJiYgcD8uY2xpZW50KSB8fFxyXG4gICAgICAgICAgKHRoaXMuZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhwPy50bykgJiYgcD8uZGlyZWN0aW9uID09ICdpbmNvbWluZy1jYWxsJyAmJiAhcD8uYnVzaW5lc3NOdW1iZXIpKSAmJlxyXG4gICAgICAgICFwPy5pc0xlZnRcclxuICAgICAgKTtcclxuICAgICAgY29uc29sZS5sb2cob3VyUGFydGljaXBhbnQpO1xyXG4gICAgICBpZiAob3VyUGFydGljaXBhbnQpIGNvdW50Kys7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjb3VudCA+IDE7XHJcbiAgfVxyXG4gIGNvbmZpcm1MZWF2ZSgpIHtcclxuICAgIGlmICh0aGlzLmxlYXZlQ29uZlBhcnRpY2lwYW50KSB7XHJcbiAgICAgIHRoaXMub25FbmRDYWxsKHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQsIGZhbHNlKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0xlYXZlQ29uZmlybWF0aW9uTW9kYWwgPSBmYWxzZTtcclxuICAgIHRoaXMubGVhdmVDb25mUGFydGljaXBhbnQgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsTGVhdmUoKSB7XHJcbiAgICB0aGlzLnNob3dMZWF2ZUNvbmZpcm1hdGlvbk1vZGFsID0gZmFsc2U7XHJcbiAgICB0aGlzLmxlYXZlQ29uZlBhcnRpY2lwYW50ID0gbnVsbDtcclxuICB9XHJcbiAgZ2V0IGFjdGl2ZVBhcnRpY2lwYW50c0NvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5hbGxQYXJ0aWNpcGVudExpc3Q/LmZpbHRlcigocDogYW55KSA9PiAhcC5pc0xlZnQpLmxlbmd0aCB8fCAwO1xyXG4gIH1cclxuICB0cnVuY2F0ZVRleHQodGV4dDogc3RyaW5nLCBtYXhMZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRleHQpIHJldHVybiAnJztcclxuICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA+IG1heExlbmd0aCA/IHRleHQuc3Vic3RyaW5nKDAsIG1heExlbmd0aCkgKyAnLi4uJyA6IHRleHQ7XHJcbiAgfVxyXG5cclxuICBnZXQgdG90YWxQYXJ0aWNpcGFudHNDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuYWxsUGFydGljaXBlbnRMaXN0Py5sZW5ndGggfHwgMDtcclxuICB9XHJcbiAgb25SZWFzb25DaGVja0NoYW5nZWQobmV3VmFsdWU6Ym9vbGVhbikge1xyXG4gICAgaWYgKCFuZXdWYWx1ZSkge1xyXG4gICAgICB0aGlzLnNob3dIb3VyRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5zaG93TWludXRlRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5sZWF2ZUhvdXIgPSAnJztcclxuICAgICAgdGhpcy5sZWF2ZU1pbnV0ZSA9ICcnO1xyXG4gICAgICB0aGlzLmxlYXZlUmVhc29uID0gJyc7IFxyXG4gICAgfVxyXG4gIH1cclxuICByZXNldExlYXZlVGltZXIoKSB7XHJcbiAgICB0aGlzLmlzUmVhc29uQ2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5sZWF2ZUhvdXIgPSAnJztcclxuICAgIHRoaXMubGVhdmVNaW51dGUgPSAnJztcclxuICAgIHRoaXMubGVhdmVSZWFzb24gPSAnJztcclxuICAgIHRoaXMuc2hvd0hvdXJEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93TWludXRlRHJvcGRvd24gPSBmYWxzZTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmNhbGxEYXRhLmRpYWwgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnRpbWVyU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbn0iLCI8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FsbC1jb250YWluZXJcIiAqbmdJZj1cIiFpc01pbmltaXNlZCAmJiBjdXJyZW50Q2FsbExpc3Q/Lmxlbmd0aFwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydjb2xsb3BzJzogaXNDb2xsb3BzLCAnaW5jb21pbmctY2FsbC1jb250YWluZXInOiBpc0NsaWNrRXhwYW5kLCAnY29udGFjdHMtb3Blbic6IHNob3dDb250YWN0c1BhbmVsIH1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGVyLXdyYXBwZXIgb3V0Z29pbmctY2FsbC1sb2FkZXJcIlxyXG4gICAgICAgICAgICAqbmdJZj1cInNob3dOZXdDYWxsTG9hZGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3RpdmUtY2FsbFwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgcG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYW5pbWF0aW9uIGNhbGwtYW5pbWF0aW9uLXBsYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYXZhdGFyLWltZ1wiIFtzcmNdPVwibmV3Q2FsbExvYWRlckRhdGE/LmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbGVyRGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMSBzdHlsZT1cIm1hcmdpbi10b3A6IDhweDtcIj5Db25uZWN0aW5nLi4uPC9oMT5cclxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cInRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1wiPnt7IG5ld0NhbGxMb2FkZXJEYXRhPy5uYW1lIHx8IG5ld0NhbGxMb2FkZXJEYXRhPy5waG9uZSB8fCAnVW5rbm93bicgfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWFjdGlvbi1idG5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0biBlbmQtY2FsbC1idG5cIiBkaXNhYmxlZCAoY2xpY2spPVwiZW5kQ2FsbCgpXCIgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGlhbHBhZC1hbGVydHNcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAnY29uZmVyZW5jZS1hbGVydCc6IGlzQ29uZmVyZW5jZSAmJiBjdXJyZW50Q2FsbD8uaXNDb25mZXJlbmNlLFxyXG4gICAgICAgICdub3JtYWwtY2FsbC1hbGVydCc6ICFpc0NvbmZlcmVuY2VcclxuICAgICAgICB9XCIgKm5nSWY9XCJjYWxsTnVtYmVyVG9hc3Quc2hvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlhbGJveC1wb3AxIGFsZXJ0IGZhZGUgc2hvd1wiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjYWxsTnVtYmVyVG9hc3QudHlwZVwiXHJcbiAgICAgICAgICAgICAgICByb2xlPVwiYWxlcnRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgdGV4dC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgWW91J3IgY2FsbGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3tjYWxsTnVtYmVyVG9hc3QuZGlzcGxheU51bX19PC9zdHJvbmc+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tZGlzYyBwLTAgcHgtMVwiPiBDYW5jZWwgQ2FsbCA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gQWxsIHR5cGUgQ2FsbCBIb2xkIGxpc3QgIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGwtYmFubmVyXCJcclxuICAgICAgICAgICAgKm5nSWY9XCIoY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDEgJiYgISFjdXJyZW50Q2FsbCAmJiAoKGlzQ29uZmVyZW5jZUNhbGxIb2xkIHx8IGlzQ29uZmVyZW5jZSkgfHwgIWlzQ29uZmVyZW5jZSkpIHx8ICFpc0FsbEFjY2VwdGVkXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbmYgb2YgY3VycmVudENhbGxMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1jYWxsLWNvbnRlbnRcIiAqbmdJZj1cIiFjb25mPy5pc0FjY2VwdENhbGwgJiYgY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDEgJiYgZGV2aWNlTnVtYmVyTGlzdC5pbmNsdWRlcyhjb25mPy50bykgJiYgY29uZj8uaXNOb3RpZmljYXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaGVsZC1jYWxsLXNlbGVjdGVkJzogc2VsZWN0ZWRVc2VySW5mbz8ucGFydGljaXBhbnRJZCAmJiBzZWxlY3RlZFVzZXJJbmZvPy5wYXJ0aWNpcGFudElkID09PSBjb25mPy5wYXJ0aWNpcGFudElkfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbmY/LmJ1c2luZXNzTnVtYmVyID8gdG9nZ2xlQzJDSW5mb1BhbmVsKGNvbmYpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydjdXJzb3InOiBjb25mPy5idXNpbmVzc051bWJlciA/ICdwb2ludGVyJyA6ICdkZWZhdWx0J31cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhdmF0YXItaW1nLXdyYXBwZXIgYm9yZGVyLXJhZGl1cy01MFwiIFtzcmNdPVwiY29uZj8uaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIHdpZHRoPVwiMzVcIiBoZWlnaHQ9XCIzNVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1jYWxsZXJcIiAqbmdJZj1cIiFjb25mPy5idXNpbmVzc051bWJlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLWxhYmVsXCI+e3tjb25mPy5mcm9tfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbmFtZVwiPnt7Y29uZj8uZnJvbU5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGxlclwiICpuZ0lmPVwiY29uZj8uYnVzaW5lc3NOdW1iZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1tYWluLWxhYmVsXCI+Q2FsbCBmcm9tIEMyQzo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbGFiZWxcIiA+PHNwYW4gW3RpdGxlXT1cImNvbmY/LnNvdXJjZU5hbWVcIj57eyB0cnVuY2F0ZVRleHQoY29uZj8uc291cmNlTmFtZSwgMTApIH19PC9zcGFuPnxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiY29uZj8ucG9pbnROYW1lXCI+e3sgdHJ1bmNhdGVUZXh0KGNvbmY/LnBvaW50TmFtZSwgMTApIH19PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1sYWJlbFwiPnt7IHRydW5jYXRlVGV4dChjb25mPy5uYW1lLCAyNikgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ29ubmVjdGluZ0luY29taW5nQ2FsbElkID09IGNvbmY/LmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29ubmVjdGluZy13cmFwcGVyICBtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyaW5naW5nLXRleHRcIj5Db25uZWN0aW5nPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG90c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtaG9sZC1jb250YWN0IHJlY2VpdmUtYnRuXCIgKGNsaWNrKT1cIndhaXRpbmdDYWxsQWNjZXB0KGNvbmYpXCIgW2Rpc2FibGVkXT1cImlzQ29ubmVjdGluZyB8fCBpc0luY29taW5nQ2FsbEJ0bkRpc2FibGVcIiAqbmdJZj1cImlzQ29ubmVjdGluZ0luY29taW5nQ2FsbElkICE9PSBjb25mPy5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGwgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtY29udGFjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgdGl0bGU9XCJDYWxsIEVuZFwiIChjbGljayk9XCJvblJlamVjdENhbGwoY29uZik7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbmY/LmJ1c2luZXNzTnVtYmVyXCIgY2xhc3M9XCJ0b2dnbGVhcnJvdy1hcnJvdyBtZS0yXCIgaWQ9XCJ0b2dnbGVhcnJvd1wiIChjbGljayk9XCJ0b2dnbGVDMkNJbmZvUGFuZWwoY29uZilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mb1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbmYgb2YgY29uZmVyZW5jZUNhbGxMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1jYWxsLWNvbnRlbnRcIiAqbmdJZj1cIihjb25mPy5pc0NvbmZlcmVuY2VIb2xkIHx8IChzaG93TmV3Q2FsbExvYWRlciAmJiBpc0NvbmZlcmVuY2VDYWxsSG9sZCkpICYmIChjb25mZXJlbmNlQ2FsbExpc3QubGVuZ3RoID4gMSB8fCBzaG93TmV3Q2FsbExvYWRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaGVsZC1jYWxsLXNlbGVjdGVkJzogY29uZj8uaXNCdXNpbmVzc051bWJlciAmJiBzZWxlY3RlZFVzZXJJbmZvPy5wYXJ0aWNpcGFudElkID09PSBjb25mPy5idXNpbmVzc1BhcnRpY2lwYW50SWQgJiYgaXNDbGlja0V4cGFuZH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb25mPy5pc0J1c2luZXNzTnVtYmVyID8gdG9nZ2xlQzJDSW5mb1BhbmVsKGNvbmYpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydjdXJzb3InOiBjb25mPy5pc0J1c2luZXNzTnVtYmVyID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGhvbGQtaWNvblwiPnBhdXNlX2NpcmNsZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbGFiZWxcIj5Ib2xkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLW5hbWVcIj57e2NvbmY/LmNhbGxMYWJlbH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25mZXJlbmNlLWhvbGQtY29udGFjdFwiIFtuZ0NsYXNzXT1cInsgJ29uLWhvbGQnOiBjb25mPy5pc0NvbmZlcmVuY2VIb2xkIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN3YXBDYWxscyhjb25mLHRydWUpXCIgW2Rpc2FibGVkXT1cImlzSG9sZEJ0bkRpc2FibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29uZj8uaXNDb25mZXJlbmNlSG9sZFwiIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIFt0aXRsZV09XCInUmVzdW1lJ1wiPiByZXN1bWUgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtY29udGFjdFwiIChjbGljayk9XCJlbmRDb25mZXJlbmVjZUNhbGwoY29uZik7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHRpdGxlPVwiQ2FsbCBFbmRcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvZ2dsZWFycm93LWFycm93IG1lLTJcIiBpZD1cInRvZ2dsZWFycm93XCIgKGNsaWNrKT1cInRvZ2dsZUNvbnRhY3RzUGFuZWwoY29uZilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYW5nbGUtcmlnaHRcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEZvciBzaW5nbGUgaW5jb21pbmcgY2FsbCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaC0xMDAgcHktNVwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIlxyXG4gICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPT09IDEgJiYgY3VycmVudENhbGxMaXN0WzBdPy5pc0luY29taW5nQ2FsbCAmJiAhY3VycmVudENhbGxMaXN0WzBdPy5pc0FjY2VwdENhbGxcIj5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2FsbFRvTnVtXCI+SW5jb21pbmcgY2FsbCBvbiA8YnIgLz48c3Bhbj57e2N1cnJlbnRDYWxsTGlzdFswXT8udG8gfHwgJ1Vua25vd24gTnVtYmVyJ319PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsVG9OdW1cIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50Q2FsbExpc3RbMF0/LmJ1c2luZXNzTnVtYmVyOyBlbHNlIG5vcm1hbENhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICBDMkMgQ0FMTFxyXG4gICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPiBGcm9tIDoge3sgY3VycmVudENhbGxMaXN0WzBdPy5zb3VyY2VOYW1lIH19IHwge3sgY3VycmVudENhbGxMaXN0WzBdPy5wb2ludE5hbWUgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxDYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIEluY29taW5nIGNhbGwgb25cclxuICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjdXJyZW50Q2FsbExpc3RbMF0/LnRvIHx8ICdVbmtub3duIE51bWJlcicgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYW5pbWF0aW9uXCIgW25nQ2xhc3NdPVwieydjYWxsLWFuaW1hdGlvbi1wbGF5Jzogc2hvd1JpbmdBbmltYXRpb259XCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYXZhdGFyLWltZ1wiIFtzcmNdPVwiaW5jb21pbmdGcm9tSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgd2lkdGg9XCIxMjBcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxlckRldGFpbHNcIiAqbmdJZj1cIiFjdXJyZW50Q2FsbExpc3RbMF0/LmJ1c2luZXNzTnVtYmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aDE+e3sgY3VycmVudENhbGxMaXN0WzBdPy5uYW1lID8gY3VycmVudENhbGxMaXN0WzBdPy5uYW1lIDogY3VycmVudENhbGxMaXN0WzBdPy5waG9uZSB8fCAnVW5rbm93biBOdW1iZXInIH19PC9oMT5cclxuICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiISFjdXJyZW50Q2FsbExpc3RbMF0/Lm5hbWVcIj57eyBjdXJyZW50Q2FsbExpc3RbMF0/LnBob25lIH19PC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxlckRldGFpbHNcIiAqbmdJZj1cImN1cnJlbnRDYWxsTGlzdFswXT8uYnVzaW5lc3NOdW1iZXJcIj5cclxuICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiISFjdXJyZW50Q2FsbExpc3RbMF0/Lm5hbWVcIj57eyB0cnVuY2F0ZVRleHQoY3VycmVudENhbGxMaXN0WzBdPy5uYW1lLCA0NSkgfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8cCA+e3sgY3VycmVudENhbGxMaXN0WzBdPy5udW1iZXIgfX08L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIENvbm5lY3Rpbmcgb3ZlcmxheSAoc2hvd24gYWZ0ZXIgYWNjZXB0IGJ0biBjbGljaywgaGlkZGVuIG9uIEFQSSByZXNwb25zZSkgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25uZWN0aW5nLW92ZXJsYXkgbXQtYXV0b1wiICpuZ0lmPVwiaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPT0gY3VycmVudENhbGxMaXN0WzBdPy5pZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbm5lY3RpbmctZG90c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImNvbm5lY3RpbmctdGV4dFwiPkNvbm5lY3RpbmcuLi48L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYWN0aW9uLWJ0bnMgbXQtYXV0b1wiICpuZ0lmPVwiaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgIT0gY3VycmVudENhbGxMaXN0WzBdPy5pZFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuIHJlY2VpdmUtYnRuXCIgKm5nSWY9XCIhbmV3SW5jb21pbmdDYWxsc0xpc3RbMF0/LmlzQ2FsbENvbm5lY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzSW5jb21pbmdDYWxsQnRuRGlzYWJsZVwiIChjbGljayk9XCJhZGQoY3VycmVudENhbGxMaXN0WzBdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuIHJlamVjdC1idG5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAoY2xpY2spPVwib25SZWplY3RDYWxsKGN1cnJlbnRDYWxsTGlzdFswXSlcIj4gY2FsbF9lbmQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEZvciBzaW5nbGUgYWN0aXZlIGNhbGwgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIighaXNDb25mZXJlbmNlIHx8IGlzQ29uZmVyZW5jZUNhbGxIb2xkKSAmJiAoISFjdXJyZW50Q2FsbD8uaWQgJiYgIWN1cnJlbnRDYWxsPy5pc0NvbmZlcmVuY2UpICYmIGN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGxcIlxyXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2Rpc3BsYXknOiAnZmxleCcsICdmbGV4LWRpcmVjdGlvbic6ICdjb2x1bW4nLCAncG9zaXRpb24nOiAncmVsYXRpdmUnfVwiIGNsYXNzPVwiYWN0aXZlLWNhbGxcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnRDYWxsPy5idXNpbmVzc051bWJlcjtcIiBjbGFzcz1cImNhbGxUb051bVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEMyQyBDQUxMXHJcbiAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+IEZyb20gOiB7eyBjdXJyZW50Q2FsbD8udXNlckluZm9JZD8uc291cmNlTmFtZSB9fSB8IHt7IGN1cnJlbnRDYWxsPy51c2VySW5mb0lkPy5wb2ludE5hbWUgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYW5pbWF0aW9uXCIgW25nQ2xhc3NdPVwieydjYWxsLWFuaW1hdGlvbi1wbGF5Jzogc2hvd1JpbmdBbmltYXRpb259XCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYXZhdGFyLWltZ1wiICpuZ0lmPVwiIWN1cnJlbnRDYWxsPy5jbGllbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiY3VycmVudENhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjdXJyZW50Q2FsbD8udG9JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgOiBjdXJyZW50Q2FsbD8uZnJvbUltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYXZhdGFyLWltZ1wiICpuZ0lmPVwiY3VycmVudENhbGw/LmNsaWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjdXJyZW50Q2FsbD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGN1cnJlbnRDYWxsPy5mcm9tSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnIDogY3VycmVudENhbGw/LnRvSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsZXJEZXRhaWxzXCI+XHJcbiAgICAgICAgICAgIDwhLS0gQzJDIEJ1c2luZXNzIENhbGwgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudENhbGw/LmJ1c2luZXNzTnVtYmVyOyBlbHNlIG5vcm1hbENhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDE+e3sgY3VycmVudENhbGw/LnVzZXJJbmZvSWQ/Lm5hbWUgfHwgJ1Vua25vd24nIH19PC9oMT5cclxuICAgICAgICAgICAgICAgICAgICA8cD57eyBjdXJyZW50Q2FsbD8udXNlckluZm9JZD8ubnVtYmVyIHx8IGN1cnJlbnRDYWxsPy5mcm9tIHx8ICdVbmtub3duJyB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gTm9ybWFsIENhbGwgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbENhbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgxICpuZ0lmPVwiIWN1cnJlbnRDYWxsPy5jbGllbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOic4cHgnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW50Q2FsbD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50Q2FsbD8udG9OYW1lIHx8IG91dGdvaW5nQ29udGFjdE5hbWUgfHwgJ1Vua25vd24nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRDYWxsPy5mcm9tTmFtZSB8fCAnVW5rbm93bicgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMSAqbmdJZj1cImN1cnJlbnRDYWxsPy5jbGllbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOic4cHgnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW50Q2FsbD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50Q2FsbD8uZnJvbU5hbWUgfHwgJ1Vua25vd24nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRDYWxsPy50b05hbWUgfHwgb3V0Z29pbmdDb250YWN0TmFtZSB8fCAnVW5rbm93bicgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiIWN1cnJlbnRDYWxsPy5jbGllbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY3VycmVudENhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY3VycmVudENhbGw/LnRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRDYWxsPy5mcm9tIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiY3VycmVudENhbGw/LmNsaWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW50Q2FsbD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50Q2FsbD8uZnJvbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50Q2FsbD8udG8gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8aDEgKm5nSWY9XCIhY3VycmVudENhbGw/LmNsaWVudFwiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICc4cHgnfVwiPnt7Y3VycmVudENhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjdXJyZW50Q2FsbD8udG9OYW1lIHx8IG91dGdvaW5nQ29udGFjdE5hbWUgfHwgJ1Vua25vd24nIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbD8uZnJvbU5hbWUgfHwgJ1Vua25vd24nfX08L2gxPlxyXG4gICAgICAgICAgICAgICAgPGgxICpuZ0lmPVwiY3VycmVudENhbGw/LmNsaWVudFwiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICc4cHgnfVwiPnt7Y3VycmVudENhbGw/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjdXJyZW50Q2FsbD8uZnJvbU5hbWUgfHwgJ1Vua25vd24nIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbD8udG9OYW1lIHx8ICdVbmtub3duJ319PC9oMT5cclxuICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiIWN1cnJlbnRDYWxsPy5jbGllbnRcIj57eyBjdXJyZW50Q2FsbD8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGN1cnJlbnRDYWxsPy50byB8fCAnVW5rbm93bicgOiBjdXJyZW50Q2FsbD8uZnJvbSB8fCAnVW5rbm93bid9fTwvcD5cclxuICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiY3VycmVudENhbGw/LmNsaWVudFwiPnt7IGN1cnJlbnRDYWxsPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gY3VycmVudENhbGw/LmZyb20gfHwgJ1Vua25vd24nIDogY3VycmVudENhbGw/LnRvIHx8ICdVbmtub3duJ319PC9wPiAtLT5cclxuICAgICAgICAgICAgICAgIDxoNCBzdHlsZT1cIm1hcmdpbi10b3A6IDRweFwiPnt7IHRpbWVyfX08L2g0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1hY3Rpb24tYnRuc1wiICpuZ0lmPVwiIXNob3dLZXlwYWRcIiBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOiAnMjBweCd9XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWJ0bi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBzdGFydC1zdG9wXCIgKm5nSWY9XCIhaXNSZWNvcmRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3JlY29yZGluZyc6IGlzUmVjb3JkaW5nLCAnc3RvcHBlZCc6ICFpc1JlY29yZGluZywgJ2Rpc2FibGVkJzogdXNlclNldHRpbmdJbmZvPy5jYWxsUmVjb3JkaW5nID09ICdOJ31cIiAoY2xpY2spPVwidG9nZ2xlUmVjb3JkaW5nKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXNSZWNvcmRpbmcgPyAnU3RvcCBSZWNvcmRpbmcnIDogJ1N0YXJ0IFJlY29yZGluZydcIiBbZGlzYWJsZWRdPVwiIWN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGwgfHwgdXNlclNldHRpbmdJbmZvPy5jYWxsUmVjb3JkaW5nID09ICdOJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlY29yZGluZy1pY29uXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXVzZS1yZXN1bWUtYnRuc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBwYXVzZS1yZXN1bWVcIiAqbmdJZj1cImlzUmVjb3JkaW5nICYmICFpc1BhdXNlZFwiIChjbGljayk9XCJwYXVzZVJlY29yZGluZygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gcGF1c2UgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gcGF1c2UtcmVzdW1lXCIgKm5nSWY9XCJpc1BhdXNlZFwiIChjbGljayk9XCJyZXN1bWVSZWNvcmRpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBsYXlfYXJyb3cgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzUmVjb3JkaW5nXCIgY2xhc3M9XCJ0aW1lci1kaXNwbGF5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0Rm9ybWF0dGVkVGltZSgpIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gTXV0ZS91bm11dGUgaW5jb21pbmcgY2FsbCAgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdXRlLWluY29taW5nLXJvd1wiICpuZ0lmPVwiY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbCAmJiAhc2hvd0tleXBhZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdXRlLWluY29taW5nLWxhYmVsXCI+TXV0ZSBpbmNvbWluZyBjYWxsczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN3aXRjaCBtYi0wXCIgdGl0bGU9XCJTaWxlbmNlIHRoZSByaW5ndG9uZSBvZiBuZXcgaW5jb21pbmcgY2FsbHMgZHVyaW5nIHRoaXMgY2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJ0d2lsaW9TZXJ2aWNlLmlzSW5jb21pbmdNdXRlZFwiIChjaGFuZ2UpPVwidG9nZ2xlTXV0ZUluY29taW5nQ2FsbCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzd2l0Y2gtc2xpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93S2V5cGFkXCIgY2xhc3M9XCJzZW5kRGlnaXRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJjYWxsLWlucHV0c1wiIGlkPVwiY2FsbC1pbnB1dFwiIFsobmdNb2RlbCldPVwiY2FsbElucHV0XCIgKGtleXVwKT1cIm9uQ2FsbElucHV0RW50ZXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGlucHV0LWNsZWFyLWJ0blwiICpuZ0lmPVwiY2FsbElucHV0XCIgKGNsaWNrKT1cImNsZWFySW5wdXRzKClcIj5jbG9zZV9zbWFsbDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tY29udGFpbmVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiAqbmdJZj1cInNob3dLZXlwYWRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrZXktYnRuXCIgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlwYWRWYWxcIiAoY2xpY2spPVwib25DYWxsSW5wdXRzKGtleS5udW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3trZXkubnVtfX1cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1hbGJoYWJldHNcIj57e2tleS50ZXh0ID8ga2V5LnRleHQgOiAnJm5ic3A7J319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYWN0aW9uLWJ0bnNcIiBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOiAnNzIzeCd9XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWV2ZW5seSBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtc2VjLWJ0biBtci0zXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsXCIgKGNsaWNrKT1cInRvZ2dsZU11dGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAqbmdJZj1cImlzTXV0ZVwiPiBtaWNfb2ZmIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCIhaXNNdXRlXCI+IG1pYyA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtc2VjLWJ0biBtci0zXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIChjbGljayk9XCJ0b2dnbGVLZXlwYWQoKVwiPiB0cmFuc2l0aW9uX2Rpc3NvbHZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1zZWMtYnRuXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbnRhY3RzUGFuZWwoY3VycmVudENhbGwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBncm91cHNfMiA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuIGVuZC1jYWxsLWJ0blwiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiIChjbGljayk9XCJlbmRDYWxsKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBjb25mZXJlbmNlIGNhbGwgdmlldyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmVyZW5jZS1jYWxsLXZpZXdcIiAqbmdJZj1cImlzQ29uZmVyZW5jZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZi1oZWFkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmYtaWNvbiBtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGdyb3VwcyA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmYtdGl0bGVcIj57e2N1cnJlbnRDb25mZXJlbmNlQ2FsbD8uY2FsbExhYmVsIHx8ICdDb25mZXJlbmNlIENhbGwnfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbC10ZXh0IGNvbmYtbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhbGwgb2YgY3VycmVudENhbGxMaXN0OyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY2FsbD8uaXNDb25mZXJlbmNlSG9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG91bGRTaG93U2VwYXJhdG9yKGkpXCI+ICYgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjYWxsPy5jbGllbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzU2VsZk51bWJlcihjYWxsKSBlbHNlIHNlbGZOdW1iZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tjYWxsPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gY2FsbD8uZnJvbU5hbWUgfHwgY2FsbD8uZnJvbSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGw/LnRvTmFtZSB8fCBjYWxsPy50b319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VsZk51bWJlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WW91PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjYWxsPy5jbGllbnRcIj57e2NhbGw/LmRpcmVjdGlvbiA9PSBcIm91dGdvaW5nLWNhbGxcIiA/IGNhbGw/LnRvTmFtZSB8fCBjYWxsPy50byA6IGNhbGw/LmZyb21OYW1lIHx8IGNhbGw/LmZyb20gfHwgJ1Vua25vd24gbnVtYmVyJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtdGltZXJcIj57eyBjdXJyZW50Q29uZmVyZW5jZUNhbGw/LnRpbWVyIHx8IHRpbWVyIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtYWN0aW9uLWJ0bnMgbXQtYXV0b1wiICpuZ0lmPVwiIXNob3dLZXlwYWRcIiBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOiAnMjBweCd9XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWJ0bi1jb250YWluZXJcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gc3RhcnQtc3RvcFwiICpuZ0lmPVwiIWlzUmVjb3JkaW5nXCIgW2Rpc2FibGVkXT1cInVzZXJTZXR0aW5nSW5mby5jYWxsUmVjb3JkaW5nID09ICdOJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsncmVjb3JkaW5nJzogaXNSZWNvcmRpbmcsICdzdG9wcGVkJzogIWlzUmVjb3JkaW5nLCAnZGlzYWJsZWQnOiB1c2VyU2V0dGluZ0luZm8/LmNhbGxSZWNvcmRpbmcgPT0gJ04nfVwiIChjbGljayk9XCJ0b2dnbGVSZWNvcmRpbmcoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpc1JlY29yZGluZyA/ICdTdG9wIFJlY29yZGluZycgOiAnU3RhcnQgUmVjb3JkaW5nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlY29yZGluZy1pY29uXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXVzZS1yZXN1bWUtYnRuc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBwYXVzZS1yZXN1bWVcIiAqbmdJZj1cImlzUmVjb3JkaW5nICYmICFpc1BhdXNlZFwiIChjbGljayk9XCJwYXVzZVJlY29yZGluZygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gcGF1c2UgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gcGF1c2UtcmVzdW1lXCIgKm5nSWY9XCJpc1BhdXNlZFwiIChjbGljayk9XCJyZXN1bWVSZWNvcmRpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBsYXlfYXJyb3cgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzUmVjb3JkaW5nXCIgY2xhc3M9XCJ0aW1lci1kaXNwbGF5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0Rm9ybWF0dGVkVGltZSgpIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gTXV0ZS91bm11dGUgaW5jb21pbmcgY2FsbCAgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdXRlLWluY29taW5nLXJvd1wiICpuZ0lmPVwiY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbCAmJiAhc2hvd0tleXBhZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdXRlLWluY29taW5nLWxhYmVsXCI+TXV0ZSBpbmNvbWluZyBjYWxsczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN3aXRjaCBtYi0wXCIgdGl0bGU9XCJTaWxlbmNlIHRoZSByaW5ndG9uZSBvZiBuZXcgaW5jb21pbmcgY2FsbHMgZHVyaW5nIHRoaXMgY2FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJ0d2lsaW9TZXJ2aWNlLmlzSW5jb21pbmdNdXRlZFwiIChjaGFuZ2UpPVwidG9nZ2xlTXV0ZUluY29taW5nQ2FsbCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzd2l0Y2gtc2xpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93S2V5cGFkXCIgY2xhc3M9XCJzZW5kRGlnaXQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNhbGwtaW5wdXRzXCIgaWQ9XCJjYWxsLWlucHV0XCIgWyhuZ01vZGVsKV09XCJjYWxsSW5wdXRcIiAoa2V5dXApPVwib25DYWxsSW5wdXRFbnRlcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaW5wdXQtY2xlYXItYnRuXCIgKm5nSWY9XCJjYWxsSW5wdXRcIiAoY2xpY2spPVwiY2xlYXJJbnB1dHMoKVwiPmNsb3NlX3NtYWxsPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwic2hvd0tleXBhZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtleS1idG5cIiAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXBhZFZhbFwiIChjbGljayk9XCJvbkNhbGxJbnB1dHMoa2V5Lm51bSlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2tleS5udW19fVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWFsYmhhYmV0c1wiPnt7a2V5LnRleHQgPyBrZXkudGV4dCA6ICcmbmJzcDsnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25mLWFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjaXJjbGUtYnRuXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc011dGV9XCIgKGNsaWNrKT1cInRvZ2dsZU11dGUodHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4ge3sgaXNNdXRlID8gJ21pY19vZmYnIDogJ21pYycgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2lyY2xlLWJ0blwiIChjbGljayk9XCJ0b2dnbGVLZXlwYWQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiB0cmFuc2l0aW9uX2Rpc3NvbHZlIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNpcmNsZS1idG5cIiAoY2xpY2spPVwidG9nZ2xlQ29udGFjdHNQYW5lbChjdXJyZW50Q2FsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gZ3JvdXBzXzIgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZi1lbmRcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjaXJjbGUtYnRuIGRhbmdlclwiIChjbGljayk9XCJlbmRDb25mZXJlbmVjZUNhbGwoY3VycmVudENvbmZlcmVuY2VDYWxsPy5wYXJ0aWNpcGFudHNbMF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGxfZW5kIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndhdmUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJ3YXZlc1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxyXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMjQgMTUwIDI4XCIgcHJlc2VydmVBc3BlY3RSYXRpbz1cIm5vbmVcIiBzaGFwZS1yZW5kZXJpbmc9XCJhdXRvXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cImdlbnRsZS13YXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0tMTYwIDQ0YzMwIDAgNTgtMTggODgtMThzIDU4IDE4IDg4IDE4IDU4LTE4IDg4LTE4IDU4IDE4IDg4IDE4IHY0NGgtMzUyelwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICA8ZyBjbGFzcz1cInBhcmFsbGF4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCIgeD1cIjQ4XCIgeT1cIjBcIiBmaWxsPVwicmdiYSgyNTUsMjU1LDI1NSwwLjcpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIiB4PVwiNDhcIiB5PVwiM1wiIGZpbGw9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiIHg9XCI0OFwiIHk9XCI3XCIgZmlsbD1cIiNmZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gSW5jb21pbmcgY2FsbCB1c2VyIGRldGFpbHMgc2hvd24gaW4gbW9kZWwgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FsbC1jb250YWluZXItbW9kZWwgcC0zIHRleHQtd2hpdGUgbW9kZWwtY29udGVudCBjYWxsLWNvbnRhaW5lclwiICpuZ0lmPVwiaXNDbGlja0V4cGFuZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1pbmZvLXBhbmVsLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiICpuZ0lmPVwiY3VycmVudENvbmZlcmVuY2VDYWxsPy5jb25mZXJlbmNlSWQgIT0gc2VsZWN0ZWRVc2VySW5mbz8uY29uZmVyZW5jZUlkICYmIG5ld0luY29taW5nQ2FsbHNMaXN0Py5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICA8cD48L3A+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZGlhbC1jbG9zZS1idG4gXCIgKGNsaWNrKT1cIm9uQ2xvc2VDMkNJbmZvUGFuZWwoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjI0cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI2ZmZmZmZlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIm0yNTYtMjAwLTU2LTU2IDIyNC0yMjQtMjI0LTIyNCA1Ni01NiAyMjQgMjI0IDIyNC0yMjQgNTYgNTYtMjI0IDIyNCAyMjQgMjI0LTU2IDU2LTIyNC0yMjQtMjI0IDIyNFpcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItMiB1c2VyLWluZm8tc2VjdGlvblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbXktM1wiPlxyXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidGV4dC13aGl0ZVwiPkMyQyBDQUxMIDoge3tzZWxlY3RlZFVzZXJJbmZvPy5zb3VyY2VOYW1lfX0gfCB7e3NlbGVjdGVkVXNlckluZm8/LnBvaW50TmFtZX19PC9oMz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJ0ZXh0LXdoaXRlIG1iLTFcIj5OYW1lOjwvaDU+XHJcbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJ0ZXh0LXdoaXRlIHVzZXJOYW1lXCI+e3tzZWxlY3RlZFVzZXJJbmZvPy5uYW1lfX08L2g0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImYtMTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xXCI+RXh0ZW5zaW9uOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtMlwiPnt7c2VsZWN0ZWRVc2VySW5mbz8uZXh0ZW5zaW9ufX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMVwiPk51bWJlcjo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPnt7c2VsZWN0ZWRVc2VySW5mbz8ubnVtYmVyfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtMlwiPkVtYWlsOiA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57e3NlbGVjdGVkVXNlckluZm8/LmVtYWlsfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0yXCI+U3ViamVjdDo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTIgc3ViamVjdC10ZXh0XCIgdGl0bGU9XCJ7e3NlbGVjdGVkVXNlckluZm8/LnN1YmplY3R9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzZWxlY3RlZFVzZXJJbmZvPy5zdWJqZWN0fX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0yIG1iLTFcIj5JbWFnZTo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZWxsaXBzaXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkVXNlckluZm8/LmltYWdlICYmIHNlbGVjdGVkVXNlckluZm8/LmltYWdlICE9PSAnLSc7IGVsc2Ugbm9JbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwie3tzZWxlY3RlZFVzZXJJbmZvPy5pbWFnZX19XCIgYWx0PVwiXCIgd2lkdGg9XCIxNTBcIiBjbGFzcz1cIm1sLTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSW1hZ2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+Tm8gSW1hZ2UgQXZhaWxhYmxlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTFcIj5NZXNzYWdlOjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29udGFpbmVyXCIgW2NsYXNzLmV4cGFuZGVkXT1cImlzRXhwYW5kZWRcIj57e3NlbGVjdGVkVXNlckluZm8/Lm1lc3NhZ2V9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0b2dnbGUtYnRuXCIgKm5nSWY9XCJzaG93QnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZVRleHQoKVwiPnt7IGlzRXhwYW5kZWQgPyAnU2VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVzcycgOiAnU2VlIG1vcmUnIH19PC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIGNvbnRhY3QgbGlzdCBwYW5lbCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1wYW5lbFwiICpuZ0lmPVwic2hvd0NvbnRhY3RzUGFuZWwgJiYgIXNob3dOZXdDYWxsTG9hZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWxvYWRlci1vdmVybGF5IHAtMyB0ZXh0LWNlbnRlclwiICpuZ0lmPVwiaXNQYXJ0aWNpcGFudFBhbmVsTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1zZWNvbmRhcnlcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5Mb2FkaW5nLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0yXCI+PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhcnRpY2lwYW50LWxpc3QtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkQ29uZk5hbWUgfHwgJ0NvbmZlcmVuY2UnIH19IFBhcnRpY2lwYW50c1xyXG4gICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwidG90YWxQYXJ0aWNpcGFudHNDb3VudCA8IDM7IGVsc2UgY29uZkhlYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICBDYWxsIFBhcnRpY2lwYW50c1xyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NvbmZIZWFkaW5nPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICA8cD48L3A+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZGlhbC1jbG9zZS1idG5cIiAoY2xpY2spPVwidG9nZ2xlQ29udGFjdHNQYW5lbCh7fSwgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgd2lkdGg9XCIyNHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMwMDAwMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJtMjU2LTIwMC01Ni01NiAyMjQtMjI0LTIyNC0yMjQgNTYtNTYgMjI0IDIyNCAyMjQtMjI0IDU2IDU2LTIyNCAyMjQgMjI0IDIyNC01NiA1Ni0yMjQtMjI0LTIyNCAyMjRaXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU0VBUkNIIElOUFVUICh2aXNpYmxlIHdoZW4gaXNTZWFyY2hWaXNpYmxlID0gdHJ1ZSkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1iYXIgcC0zIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiQWRkIGEgcGFydGljaXBhbnQgYnkgTmFtZSBvciBOdW1iZXJcIiB0aXRsZT1cIkFkZCBhIHBhcnRpY2lwYW50IGJ5IE5hbWUgb3IgTnVtYmVyXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgKGlucHV0KT1cImFwcGx5RmlsdGVyKClcIiAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhY3RzLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgZmlsdGVyZWRMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaXRlbVwiICpuZ0lmPVwic2VhcmNoVGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29udGFjdC1hdmF0YXJcIiBbc3JjXT1cImM/LmltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LW5hbWVcIj57e2M/LmZpcnN0TmFtZX19IHt7Yz8ubWlkZGxlTmFtZX19IHt7Yz8ubGFzdE5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtdGl0bGVcIj57eyAoYz8ubnVtYmVyc0xpc3QgJiYgYz8ubnVtYmVyc0xpc3RbMF0/Lm51bWJlcikgfX17eyBjPy5udW1iZXJzTGlzdFswXT8ubnVtYmVyTGFiZWwgPyAnICgnICsgYy5udW1iZXJzTGlzdFswXS5udW1iZXJMYWJlbCArICcpJyA6ICcnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0biBjb250YWN0LWFkZC1idG4gbXItMlwiIChjbGljayk9XCJjYWxsQ29udGFjdChjKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjPy5Jc0Nvbm5lY3RlZFwiIHRpdGxlPVwiQWRkIHRvIGNhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBhZGQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRhY3QtY2FsbC1idG5cIiAoY2xpY2spPVwiQ2FsbFRvVW5zYXZlZE51bWJlcihjPy5udW1iZXJzTGlzdFswXT8ubnVtYmVyLCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjPy5Jc0Nvbm5lY3RlZFwiIHRpdGxlPVwiTmV3IENhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlsdGVyZWRMaXN0Lmxlbmd0aCAmJiBpc0RpcmVjdENhbGxPcHRpb25TaG93ICYmIHNlYXJjaFRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjb250YWN0LWF2YXRhclwiIFtzcmNdPVwiJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtdGl0bGVcIj57eyBzZWFyY2hUZXh0IH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0biBjb250YWN0LWFkZC1idG4gbXItMlwiIChjbGljayk9XCJDYWxsVG9VbnNhdmVkTnVtYmVyKHNlYXJjaFRleHQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQWRkIHRvIGNhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBhZGQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRhY3QtY2FsbC1idG5cIiAoY2xpY2spPVwiQ2FsbFRvVW5zYXZlZE51bWJlcihzZWFyY2hUZXh0LCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIk5ldyBDYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1saXN0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0wIHRpdGxlXCI+QWN0aXZlIHBhcnRpY2lwYW50cyAoe3sgYWN0aXZlUGFydGljaXBhbnRzQ291bnQgfX0pPC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxociBjbGFzcz1cIm1iLTIgbXQtMVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGZpbHRlcmVkUGFydGljaXBlbnRMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pdGVtXCIgKm5nSWY9XCIhYz8uaXNMZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbnRhY3QtYXZhdGFyXCIgKm5nSWY9XCIhYz8uY2xpZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8udG9JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgOiBjPy5mcm9tSW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29udGFjdC1hdmF0YXJcIiAqbmdJZj1cImM/LmNsaWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiYz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb21JbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgOiBjPy50b0ltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCIgKm5nSWY9XCIhYz8uY2xpZW50XCI+e3tjPy5kaXJlY3Rpb24gPT0gJ291dGdvaW5nLWNhbGwnID8gYz8udG9OYW1lIHx8ICdVbmtub3duJyA6IGM/LmZyb21OYW1lIHx8ICdVbmtub3duJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiICpuZ0lmPVwiIWM/LmNsaWVudFwiPnt7IGM/LmRpcmVjdGlvbiA9PSAnb3V0Z29pbmctY2FsbCcgPyBjPy50byB8fCAnVW5rbm93bicgOiBjPy5mcm9tIHx8ICdVbmtub3duJ319PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCIgKm5nSWY9XCJjPy5jbGllbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNTZWxmTnVtYmVyKGMpIGVsc2Ugc2VsZk51bWJlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7Yz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb21OYW1lIHx8ICdVbmtub3duJyA6IGM/LnRvTmFtZSB8fCAnVW5rbm93bid9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzZWxmTnVtYmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPllvdTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiICpuZ0lmPVwiYz8uY2xpZW50XCI+e3sgYz8uZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb20gfHwgJ1Vua25vd24nIDogYz8udG8gfHwgJ1Vua25vd24nfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiICpuZ0lmPVwiYz8uaG9zdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItbGFiZWxcIj5Pcmdhbml6ZXI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjPy5qb2luZWQgJiYgIWM/Lmhvc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbm5lY3Rpbmctd3JhcHBlciBtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJpbmdpbmctdGV4dFwiPlJpbmdpbmc8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ljwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjPy5qb2luZWQgfHwgYz8uaG9zdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWljLWJ0biBtci0yXCIgW2Rpc2FibGVkXT1cImM/LmlzSG9sZFwiIChjbGljayk9XCJvbk11dGVVc2VyKGMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAqbmdJZj1cImM/LmlzTXV0ZVwiPiBtaWNfb2ZmIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiIWM/LmlzTXV0ZVwiPiBtaWMgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtaG9sZC1jb250YWN0IG1yLTJcIiBbbmdDbGFzc109XCJ7ICdvbi1ob2xkJzogYz8uaXNIb2xkIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSG9sZENhbGwoYylcIiAqbmdJZj1cIiFjPy5ob3N0XCIgW2Rpc2FibGVkXT1cImlzSG9sZEJ0bkRpc2FibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWM/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/LmZyb20sIGZhbHNlLCB7IHNraXBEdXBsaWNhdGVDaGVjazogdHJ1ZSB9KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gYWRkIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlJlam9pbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0biBjb250YWN0LWFkZC1idG5cIiAqbmdJZj1cImM/LmNsaWVudCAmJiAhYz8uam9pbmVkICYmICFjPy5idXNpbmVzc051bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJDYWxsVG9VbnNhdmVkTnVtYmVyKGMuZGlyZWN0aW9uID09ICdvdXRnb2luZy1jYWxsJyA/IGM/LmZyb20gOiBjPy50bywgZmFsc2UsIHsgc2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlIH0pXCI+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