@vgroup/dialbox 0.7.60 → 0.7.61

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.
@@ -1,6 +1,6 @@
1
1
  import { HttpHeaders, HttpParams } from '@angular/common/http';
2
2
  import { Injectable } from '@angular/core';
3
- import { BehaviorSubject, of, throwError } from 'rxjs';
3
+ import { BehaviorSubject, of, Subject, throwError } from 'rxjs';
4
4
  import { catchError, shareReplay, tap } from 'rxjs/operators';
5
5
  import { Device } from '@twilio/voice-sdk';
6
6
  import { environment } from '../environments/environments';
@@ -44,6 +44,7 @@ export class TwilioService {
44
44
  this.tokenRefreshInProgress = false;
45
45
  this.recoveryAttempts = 0;
46
46
  this.recoveryTimer = null;
47
+ this.incomingCallNotification = new Subject();
47
48
  // User-controlled switch (in the call-progress UI). When ON, a new incoming
48
49
  // call's built-in Twilio ringtone is silenced so it does not disturb the
49
50
  // ongoing call. Source of truth so newly created (spare) devices inherit it.
@@ -111,6 +112,8 @@ export class TwilioService {
111
112
  });
112
113
  this.device.on('incoming', (call) => {
113
114
  console.log('Twilio Device incoming call event:', call);
115
+ const notification = this.buildIncomingNotification(call);
116
+ this.incomingCallNotification.next(notification);
114
117
  if (this.acceptedCallList.length > 0 || this.primaryHasCall) {
115
118
  console.log('primary device: concurrent call arriving – spare device will handle it');
116
119
  this.isShowIncomingCall = true;
@@ -209,6 +212,57 @@ export class TwilioService {
209
212
  });
210
213
  }, delay);
211
214
  }
215
+ // Build the full incoming-call notification payload (matches the shape the BE used to
216
+ // push over the socket) from the raw Twilio 'incoming' Call: parsed Params fields plus
217
+ // the derived clientSid/participantSid/notificationType/title/msgBody.
218
+ buildIncomingNotification(call) {
219
+ const notification = this.convertToJson(call?.parameters?.['Params'] || '{}');
220
+ const callSid = call?.parameters?.['CallSid'];
221
+ notification.clientSid = callSid;
222
+ // Only real Twilio SID exposed client-side for this leg; no separate participant SID
223
+ // is available, so it mirrors clientSid.
224
+ notification.participantSid = callSid;
225
+ notification.notificationType = 'incomingcall';
226
+ notification.title = 'Incoming Call';
227
+ notification.msgBody = `you have incoming call ${notification.fromName || ''}`;
228
+ return notification;
229
+ }
230
+ convertToJson(data) {
231
+ const obj = {};
232
+ if (!data) {
233
+ return obj;
234
+ }
235
+ // Format: key=value&key=value
236
+ if (data.includes('&')) {
237
+ const params = new URLSearchParams(data);
238
+ params.forEach((value, key) => {
239
+ obj[key] = value === 'true'
240
+ ? true
241
+ : value === 'false'
242
+ ? false
243
+ : decodeURIComponent(value);
244
+ });
245
+ }
246
+ else {
247
+ // Format: {key=value, key=value}
248
+ const text = data.trim().replace(/^\{|\}$/g, '');
249
+ text.split(',').forEach(item => {
250
+ const index = item.indexOf('=');
251
+ if (index > -1) {
252
+ const key = item.substring(0, index).trim();
253
+ let value = item.substring(index + 1).trim();
254
+ if (value === 'true')
255
+ value = true;
256
+ else if (value === 'false')
257
+ value = false;
258
+ obj[key] = value;
259
+ }
260
+ });
261
+ }
262
+ obj.read = false;
263
+ obj.save = false;
264
+ return obj;
265
+ }
212
266
  // Safety net for the case where the underlying socket dies silently during a long
213
267
  // sleep/idle period without ever firing 'error'/'unregistered' (the OS can suspend
214
268
  // timers/sockets outright) — re-check device health whenever the app wakes up.
@@ -355,6 +409,7 @@ export class TwilioService {
355
409
  spare.on('incoming', (call) => {
356
410
  // Guard: once this spare is already handling a call (pending or accepted),
357
411
  // ignore any further incoming events so another spare can take the next call.
412
+ this.incomingCallNotification.next(this.buildIncomingNotification(call));
358
413
  if (spare._ownsAcceptedCall || spare._pendingIncomingCall) {
359
414
  return;
360
415
  }
@@ -525,4 +580,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
525
580
  providedIn: 'root'
526
581
  }]
527
582
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.ExtensionService }]; } });
528
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdpbGlvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvc2VydmljZS90d2lsaW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7QUFjM0QsTUFBTSxPQUFPLGFBQWE7SUFnRHhCLFlBQ1UsSUFBZ0IsRUFDaEIsZ0JBQWtDO1FBRGxDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQWhENUMsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDNUQsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBYyxJQUFJLENBQUMsQ0FBQztRQUNyRCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLGlDQUFpQztRQUd0RixzQkFBaUIsR0FBUSxFQUFFLENBQUM7UUFFNUIsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFTLEtBQUssQ0FBQyxDQUFDO1FBRTlDLFVBQUssR0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxD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Q25ELENBQUMsQ0FBQTtJQUNKLENBQUM7OzJHQXpoQlUsYUFBYTsrR0FBYixhQUFhLGNBRlosTUFBTTs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzaGFyZVJlcGxheSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEZXZpY2UsIENhbGwgfSBmcm9tICdAdHdpbGlvL3ZvaWNlLXNkayc7XHJcbmltcG9ydCB7IEV4dGVuc2lvblNlcnZpY2UgfSBmcm9tICcuL2V4dGVuc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnRzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlhbFBheWxvYWQge1xyXG4gIG51bWJlcjogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBpbWc6IHN0cmluZztcclxuICBjYWxsZXJJZDpzdHJpbmc7XHJcbiAgaXNEaWFsRnJvbUhpc3Rvcnk6Ym9vbGVhbjtcclxuICBmcm9tOnN0cmluZztcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyAgXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUd2lsaW9TZXJ2aWNlIHtcclxuICBcclxuICBvcGVuSW5Qcm9ncmVzc0RpYWxwYWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjdXJyZW50Q2FsbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FsbCB8IG51bGw+KG51bGwpO1xyXG4gIGN1cnJlbnRDYWxsU3RhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oJ25vbmUnKTsgLy9pbi1wcm9ncmVzcywgb3V0LXByb2dyZXNzLCBub25lXHJcbiAgZGV2aWNlOmFueTtcclxuICBjYWxsITogQ2FsbDtcclxuICBpbmNvbWluZ0NhbGxUb2tlbjpzdHJpbmc9Jyc7XHJcbiAgb3V0Z29pbmdDYWxsVG9rZW4/OnN0cmluZztcclxuICBjYWxsVHlwZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignTklMJyk7XHJcbiAgaW5jb21pbmdDYWxsRGV0YWlsOiBhbnk7IC8vIGZvciBib3RoIGluY29taW5nIGFuZCBvdXRnb2luZ1xyXG4gIHRva2VuOmFueSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKTtcclxuICBpc05ld0NvbnRhY3RBZGRlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHVwZGF0ZVJlY2VudENhbGwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjYWxsaGFuZGxlRnJvbU5vdGlmaWNhdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XHJcblxyXG4gIGVuZENhbGwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBkaWFsTnVtYmVyRnJvbU90aGVyTW9kdWxlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEaWFsUGF5bG9hZD4oeyBudW1iZXI6ICcnLCBuYW1lOiAnJywgaW1nOiAnJywgY2FsbGVySWQ6ICcnLCBpc0RpYWxGcm9tSGlzdG9yeTogZmFsc2UsIGZyb206ICcnIH0pO1xyXG5cclxuICB0b2dnbGVDYWxsZXJJZEFsZXJ0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcclxuICBpc1RyaWFsT3ZlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzUGF5bWVudER1ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzQXZhaWxhYmxlTnVtYmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FsbGVySWRMaXN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xyXG4gIHRyaWdnZXJTTVNSZWxvYWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcblxyXG4gIHRva2VuSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIHRva2VuSW5pdGlhbGl6YXRpb24kOiBPYnNlcnZhYmxlPGFueT4gfCBudWxsID0gbnVsbDtcclxuICBkZXZpY2VJZDogYW55O1xyXG4gIGNvbmZlcmVuY2VDYWxsSW5mbzogYW55O1xyXG4gIGlzU2hvd0luY29taW5nQ2FsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBDUklUSUNBTDogVHJhY2sgYWxsIGFjY2VwdGVkIENhbGwgb2JqZWN0cyAobWlycm9ycyBpT1MgYWNjZXB0ZWRDYWxsTGlzdClcclxuICAvLyBVc2VkIHRvIGd1YXJkIGRldmljZSByZS1pbml0aWFsaXphdGlvbiBzbyBhY3RpdmUgY2FsbHMgYXJlIG5ldmVyIHRvcm4gZG93blxyXG4gIGFjY2VwdGVkQ2FsbExpc3Q6IENhbGxbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIHByaW1hcnlIYXNDYWxsID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzcGFyZURldmljZTogYW55ID0gbnVsbDtcclxuICBzcGFyZURldmljZVJlYWR5ID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBwZW5kaW5nSW5jb21pbmdEZXZpY2VzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcclxuICBwcml2YXRlIGV4dHJhRGV2aWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XHJcbiAgaW5jb21pbmdDYWxsc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XHJcblxyXG4gIHByaXZhdGUgdG9rZW5SZWZyZXNoSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcmVjb3ZlcnlBdHRlbXB0cyA9IDA7XHJcbiAgcHJpdmF0ZSByZWNvdmVyeVRpbWVyOiBhbnkgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgZXh0ZW5zaW9uU2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcclxuICApIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVRva2VuKCk7XHJcbiAgICAvLyBTYWZldHkgbmV0IGZvciBsb25nIGlkbGUvc2xlZXAgcGVyaW9kczogdGhlIHNpZ25hbGluZyBzb2NrZXQgY2FuIGRpZSBzaWxlbnRseVxyXG4gICAgLy8gKE9TIHN1c3BlbmRzIHRpbWVycywgdGFiIGlzIGJhY2tncm91bmRlZCkgd2l0aG91dCBldmVyIGZpcmluZyAnZXJyb3InLyd1bnJlZ2lzdGVyZWQnLlxyXG4gICAgLy8gUmUtY2hlY2sgZGV2aWNlIGhlYWx0aCB3aGVuZXZlciB0aGUgYXBwIGJlY29tZXMgYWN0aXZlL29ubGluZSBhZ2Fpbi5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykge1xyXG4gICAgICAgIHRoaXMuZW5zdXJlRGV2aWNlSGVhbHRoeSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCAoKSA9PiB0aGlzLmVuc3VyZURldmljZUhlYWx0aHkoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVUb2tlbigpIHtcclxuICAgIGlmICh0aGlzLnRva2VuSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQgfHwgb2YobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50b2tlbkluaXRpYWxpemF0aW9uJCA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRJbmNvbWluZ0NhbGxUb2tlbih0aGlzLmRldmljZUlkKS5waXBlKFxyXG4gICAgICB0YXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsVG9rZW4gPSBkYXRhLnRva2VuO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdpbi10b2tlbicsIGRhdGEudG9rZW4pO1xyXG4gICAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RmZGZkc2Zkc2ZkcycpXHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRGV2aWNlKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgVHdpbGlvIHRva2VuOicsIGVycm9yKTtcclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XHJcbiAgICAgIH0pLFxyXG4gICAgICBzaGFyZVJlcGxheSgxKSAvLyBDYWNoZSB0aGUgcmVzdWx0IGZvciBzdWJzZXF1ZW50IHN1YnNjcmliZXJzXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGluaXRpYWxpemVUd2lsaW9EZXZpY2UoZGV2aWNlSWQ6IGFueSkge1xyXG4gICAgdGhpcy5kZXZpY2VJZCA9IGRldmljZUlkO1xyXG4gICAgaWYgKHRoaXMudG9rZW5Jbml0aWFsaXplZCAmJiB0aGlzLmluY29taW5nQ2FsbFRva2VuKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZURldmljZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplVG9rZW4oKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZURldmljZSgpIHtcclxuICAgIGlmICh0aGlzLmRldmljZSkge1xyXG4gICAgICBpZiAodGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ1NraXBwaW5nIGRldmljZSByZS1pbml0OiBhY3RpdmUgYWNjZXB0ZWQgY2FsbHMgZXhpc3Q6JywgdGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGV2aWNlLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaW5jb21pbmdDYWxsVG9rZW4pIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTm8gVHdpbGlvIHRva2VuIGF2YWlsYWJsZScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kZXZpY2UgPSBuZXcgRGV2aWNlKHRoaXMuaW5jb21pbmdDYWxsVG9rZW4sIHsgYWxsb3dJbmNvbWluZ1doaWxlQnVzeTogdHJ1ZSB9KTtcclxuXHJcbiAgICB0aGlzLmRldmljZS5vbigncmVnaXN0ZXJlZCcsICgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ1R3aWxpbyBEZXZpY2UgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgdGhpcy5yZWNvdmVyeUF0dGVtcHRzID0gMDtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFR3aWxpbyBmaXJlcyB0aGlzIH4zIG1pbnV0ZXMgYmVmb3JlIHRoZSBhY2Nlc3MgdG9rZW4gZXhwaXJlcy4gU3dhcCBpbiBhXHJcbiAgICAvLyBmcmVzaCBvbmUgdmlhIHVwZGF0ZVRva2VuKCkgc28gdGhlIHNpZ25hbGluZyBjb25uZWN0aW9uIG5ldmVyIGhhcyB0byBkcm9wXHJcbiAgICAvLyBpbiB0aGUgZmlyc3QgcGxhY2UgKHRoaXMgaXMgdGhlIG1haW4gY2F1c2Ugb2YgXCJpZGxlIGZvciBhIHdoaWxlLCBCRSBzdGlsbFxyXG4gICAgLy8gbm90aWZpZXMgYnV0IFR3aWxpbyBpbmNvbWluZyBldmVudCBuZXZlciBmaXJlc1wiKS5cclxuICAgIHRoaXMuZGV2aWNlLm9uKCd0b2tlbldpbGxFeHBpcmUnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVmcmVzaERldmljZVRva2VuKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRldmljZS5vbignaW5jb21pbmcnLCAoY2FsbDogQ2FsbCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygnVHdpbGlvIERldmljZSBpbmNvbWluZyBjYWxsIGV2ZW50OicsIGNhbGwpO1xyXG4gICAgICBpZiAodGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCA+IDAgfHwgdGhpcy5wcmltYXJ5SGFzQ2FsbCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdwcmltYXJ5IGRldmljZTogY29uY3VycmVudCBjYWxsIGFycml2aW5nIOKAkyBzcGFyZSBkZXZpY2Ugd2lsbCBoYW5kbGUgaXQnKTtcclxuICAgICAgICB0aGlzLmlzU2hvd0luY29taW5nQ2FsbCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnByaW1hcnlIYXNDYWxsID0gdHJ1ZTtcclxuICAgICAgLy8gQXJtIGEgc3BhcmUgZGV2aWNlIHJpZ2h0IG5vdyAoYmVmb3JlIHRoZSB1c2VyIGV2ZW4gYWNjZXB0cykgc28gaXQgY2FuXHJcbiAgICAgIC8vIHJlZ2lzdGVyIGluIHRpbWUgZm9yIGFueSBjYWxsIHRoYXQgYXJyaXZlcyBzZWNvbmRzIGxhdGVyLlxyXG4gICAgICB0aGlzLnByZXBhcmVEZXZpY2UyRm9ySW5jb21pbmdDYWxsKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0luY29taW5nTXV0ZWQpIHtcclxuICAgICAgICB0cnkgeyB0aGlzLmRldmljZS5hdWRpbz8uaW5jb21pbmcoZmFsc2UpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB9XHJcbiAgICAgIGNhbGwub24oJ2FjY2VwdCcsICgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnSW5jb21pbmcgY2FsbCBhbnN3ZXJlZC9hY2NlcHRlZCcpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNhbGwub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NhbGwgZGlzY29ubmVjdGVkJyk7XHJcbiAgICAgICAgdGhpcy5wcmltYXJ5SGFzQ2FsbCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNhbGwub24oJ2NhbmNlbCcsICgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQ2FsbGVyIGh1bmcgdXAgYmVmb3JlIGFuc3dlcicpO1xyXG4gICAgICAgIHRoaXMucHJpbWFyeUhhc0NhbGwgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjYWxsLm9uKCdyZWplY3QnLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NhbGwgcmVqZWN0ZWQnKTtcclxuICAgICAgICB0aGlzLnByaW1hcnlIYXNDYWxsID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnRyYWNrSW5jb21pbmdDYWxsKGNhbGwpO1xyXG4gICAgICB0aGlzLmluY29taW5nQ2FsbERldGFpbCA9IGNhbGw7XHJcbiAgICAgIHRoaXMuaXNTaG93SW5jb21pbmdDYWxsID0gdHJ1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGV2aWNlLm9uKCdlcnJvcicsIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1R3aWxpbyBEZXZpY2UgRXJyb3I6JywgZXJyb3IpO1xyXG4gICAgICB0aGlzLmlzU2hvd0luY29taW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRva2VuSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zY2hlZHVsZURldmljZVJlY292ZXJ5KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRldmljZS5vbigndW5yZWdpc3RlcmVkJywgKCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygnVHdpbGlvIERldmljZSB1bnJlZ2lzdGVyZWQnKTtcclxuICAgICAgdGhpcy5pc1Nob3dJbmNvbWluZ0NhbGwgPSBmYWxzZTtcclxuICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2NoZWR1bGVEZXZpY2VSZWNvdmVyeSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUmVnaXN0ZXIgQUZURVIgYXR0YWNoaW5nIGFsbCBsaXN0ZW5lcnNcclxuICAgIHRoaXMuZGV2aWNlLnJlZ2lzdGVyKCk7XHJcbiAgICBjb25zb2xlLmxvZygnZGV2aWNlIGNyZWF0ZWQnLCB0aGlzLmRldmljZSk7XHJcbiAgfVxyXG5cclxuICAvLyBQcm9hY3RpdmVseSBzd2FwIGluIGEgZnJlc2ggYWNjZXNzIHRva2VuIGFoZWFkIG9mIGV4cGlyeSAoc2VlICd0b2tlbldpbGxFeHBpcmUnXHJcbiAgLy8gYWJvdmUpIHNvIHRoZSBEZXZpY2UncyBzaWduYWxpbmcgY29ubmVjdGlvbiBzdXJ2aXZlcyBsb25nIGlkbGUgcGVyaW9kcy5cclxuICBwcml2YXRlIHJlZnJlc2hEZXZpY2VUb2tlbigpIHtcclxuICAgIGlmICh0aGlzLnRva2VuUmVmcmVzaEluUHJvZ3Jlc3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRJbmNvbWluZ0NhbGxUb2tlbih0aGlzLmRldmljZUlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxUb2tlbiA9IGRhdGEudG9rZW47XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2luLXRva2VuJywgZGF0YS50b2tlbik7XHJcbiAgICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5kZXZpY2U/LnVwZGF0ZVRva2VuKHRoaXMuaW5jb21pbmdDYWxsVG9rZW4pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGFwcGx5IHJlZnJlc2hlZCBUd2lsaW8gdG9rZW46JywgZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHJlZnJlc2ggVHdpbGlvIHRva2VuIGFoZWFkIG9mIGV4cGlyeTonLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIFNlbGYtaGVhbCBhZnRlciB0aGUgRGV2aWNlIGRpZXMgKGV4cGlyZWQgdG9rZW4sIGRyb3BwZWQgc2lnbmFsaW5nIHNvY2tldCB3aGlsZVxyXG4gIC8vIGlkbGUvYXNsZWVwLCBldGMpLiBOZXZlciBydW5zIHdoaWxlIGEgY2FsbCBpcyBhY3R1YWxseSBhY3RpdmUsIGFuZCBiYWNrcyBvZmYgc28gYVxyXG4gIC8vIGdlbnVpbmVseSBsb2dnZWQtb3V0L29mZmxpbmUgdXNlciBkb2Vzbid0IHJldHJ5IGZvcmV2ZXIuXHJcbiAgcHJpdmF0ZSBzY2hlZHVsZURldmljZVJlY292ZXJ5KCkge1xyXG4gICAgaWYgKHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGggPiAwIHx8IHRoaXMucmVjb3ZlcnlUaW1lcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZWxheSA9IE1hdGgubWluKDMwMDAwLCAyMDAwICogTWF0aC5wb3coMiwgdGhpcy5yZWNvdmVyeUF0dGVtcHRzKSk7XHJcbiAgICB0aGlzLnJlY292ZXJ5QXR0ZW1wdHMrKztcclxuICAgIHRoaXMucmVjb3ZlcnlUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlY292ZXJ5VGltZXIgPSBudWxsO1xyXG4gICAgICBjb25zdCBhdXRoVG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJyk7XHJcbiAgICAgIGlmICghYXV0aFRva2VuIHx8IGF1dGhUb2tlbiA9PT0gJ2xvZ291dCcpIHtcclxuICAgICAgICB0aGlzLnJlY292ZXJ5QXR0ZW1wdHMgPSAwO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRva2VuSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pbml0aWFsaXplVG9rZW4oKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdUd2lsaW8gZGV2aWNlIHJlY292ZXJ5IGF0dGVtcHQgZmFpbGVkOicsIGVycilcclxuICAgICAgfSk7XHJcbiAgICB9LCBkZWxheSk7XHJcbiAgfVxyXG5cclxuICAvLyBTYWZldHkgbmV0IGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdW5kZXJseWluZyBzb2NrZXQgZGllcyBzaWxlbnRseSBkdXJpbmcgYSBsb25nXHJcbiAgLy8gc2xlZXAvaWRsZSBwZXJpb2Qgd2l0aG91dCBldmVyIGZpcmluZyAnZXJyb3InLyd1bnJlZ2lzdGVyZWQnICh0aGUgT1MgY2FuIHN1c3BlbmRcclxuICAvLyB0aW1lcnMvc29ja2V0cyBvdXRyaWdodCkg4oCUIHJlLWNoZWNrIGRldmljZSBoZWFsdGggd2hlbmV2ZXIgdGhlIGFwcCB3YWtlcyB1cC5cclxuICBwcml2YXRlIGVuc3VyZURldmljZUhlYWx0aHkoKSB7XHJcbiAgICBpZiAodGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmRldmljZSB8fCB0aGlzLmRldmljZS5zdGF0ZSAhPT0gJ3JlZ2lzdGVyZWQnKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdUd2lsaW8gZGV2aWNlIHVuaGVhbHRoeSBhZnRlciB3YWtlL3Zpc2liaWxpdHkgY2hhbmdlLCByZS1pbml0aWFsaXppbmcnKTtcclxuICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVRva2VuKCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcignVHdpbGlvIGRldmljZSByZWNvdmVyeSBmYWlsZWQ6JywgZXJyKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVDb250YWN0KHBheWxvYWQ6IGFueSk6IE9ic2VydmFibGU8W10+IHtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKX0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9hZGQvY29udGFjdHMvbWFudWFsbHknLCBwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDb250YWN0KHBheWxvYWQ6YW55KXtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIHRoaXMudG9rZW59KSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svdXBkYXRlL2NvbnRhY3QnLCBwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG4gIFxyXG4gIGRlbGV0ZUNvbnRhY3QoaWQ6c3RyaW5nKXtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBwaG9uZWJvb2tpZDogaWRcclxuICAgIH1cclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svZGVsZXRlL2NvbnRhY3QvJytpZCxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG4gIGdldENvbnRhY3RMaXN0KCl7XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svcmVhZC9jb250YWN0cycsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGFkZENvbnRhY3RUb0Zhdm91cml0ZShwYXlsb2FkOiBhbnkpe1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay91cGRhdGUvZmF2b3VyaXRlJywgcGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmF2b3VyaXRDb250YWN0cygpe1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL2Zhdm91cml0ZS9jb250YWN0cycsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldFJlY2VudENhbGxzKHBhZ2VJbmRleD86IHN0cmluZywgcGFnZVNpemU/OiBzdHJpbmcsKXtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSAgeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9O1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPXtoZWFkZXJzfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9yZWNlbnQvY2FsbHMnLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG4gIGRlbGV0ZVJlY2VudENhbGxMb2coaWQ6c3RyaW5nfCBzdHJpbmdbXSl7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgcmVjb3JkSWQ6IGlkXHJcbiAgICB9XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL2RlbGV0ZS9jYWxscy8nK2lkLHBheWxvYWQsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHVwbG9hZFBob3RvKHBheWxvYWQ6IGFueSl7XHJcbiAgICBsZXQgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJylcclxuICAgICAgfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay91cGxvYWQvcGhvdG8nLHBheWxvYWQsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVBob3RvKGlkOnN0cmluZyl7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgcGhvbmVib29raWQ6IGlkXHJcbiAgICB9XHJcbiAgICBsZXQgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJylcclxuICAgICAgfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9kZWxldGUvcGhvdG8vJytpZCxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDb3V0cnlDb2RlVG9hc3QodmFsOmFueSl7XHJcbiAgICBsZXQgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJylcclxuICAgICAgfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvc29mdHBob25lL2NvdW50cnljb2RlL2FsZXJ0LycgKyB2YWwsIHt9LCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG4gIGdldFRvTnVtYmVyKGRpYWxsZWRObzogc3RyaW5nLCBpc29Db2RlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSxcclxuICAgICAgcGFyYW1zOiBuZXcgSHR0cFBhcmFtcygpLnNldCgnaXNvQ29kZScsIGlzb0NvZGUpXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ2lzb0NvZGUnLCBpc29Db2RlKVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3NvZnRwaG9uZS9jaGVjay9jb3VudHJ5Q29kZS8nICsgZGlhbGxlZE5vLCBodHRwT3B0aW9ucyk7XHJcbiAgfSBcclxuICBcclxuICAvLyBSZWNvcmQgYSByaW5naW5nIGluY29taW5nIENhbGwgc28gaXQgY2FuIGxhdGVyIGJlIGFjY2VwdGVkIGJ5IGl0cyBzcGVjaWZpYyBpZC5cclxuICAvLyBUaGUgbWFwIGlzIGNsZWFuZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBjYWxsIGlzIGNhbmNlbGxlZC9kaXNjb25uZWN0ZWQvcmVqZWN0ZWQuXHJcbiAgcHJpdmF0ZSB0cmFja0luY29taW5nQ2FsbChjYWxsOiBhbnkpIHtcclxuICAgIGNvbnN0IGNhbGxTaWQgPSBjYWxsPy5wYXJhbWV0ZXJzPy5bJ0NhbGxTaWQnXTtcclxuICAgIGlmIChjYWxsU2lkKSB7XHJcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsc01hcC5zZXQoY2FsbFNpZCwgY2FsbCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xyXG4gICAgICBpZiAoIWNhbGxTaWQpIHJldHVybjtcclxuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTWFwLmRlbGV0ZShjYWxsU2lkKTtcclxuICAgICAgLy8gSWYgdGhlIGNhbGwgZW5kZWQgYmVmb3JlIHRoZSB1c2VyIGFjY2VwdGVkIGl0LCBkZXN0cm95IHRoZSBwZW5kaW5nIHNwYXJlXHJcbiAgICAgIC8vIGRldmljZSB0aGF0IHdhcyBob2xkaW5nIGl0IHNvIHdlIGRvbid0IGxlYWsgZGV2aWNlIHJlZ2lzdHJhdGlvbnMuXHJcbiAgICAgIGNvbnN0IGRldiA9IHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5nZXQoY2FsbFNpZCk7XHJcbiAgICAgIGlmIChkZXYgJiYgIWRldi5fb3duc0FjY2VwdGVkQ2FsbCkge1xyXG4gICAgICAgIHRyeSB7IGRldi5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmRlbGV0ZShjYWxsU2lkKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNhbGwub24oJ2NhbmNlbCcsIGNsZWFudXApO1xyXG4gICAgY2FsbC5vbignZGlzY29ubmVjdCcsIGNsZWFudXApO1xyXG4gICAgY2FsbC5vbigncmVqZWN0JywgY2xlYW51cCk7XHJcbiAgfVxyXG5cclxuICAvLyBSZXNvbHZlIHRoZSBFWEFDVCByaW5naW5nIENhbGwgZm9yIGEgZ2l2ZW4gVUkgZW50cnkgaWQgKHBhcnRpY2lwYW50L3JlY29yZCBpZCkuXHJcbiAgLy8gRmFsbHMgYmFjayB0byB0aGUgbW9zdCByZWNlbnQgaW5jb21pbmcgY2FsbCBzbyBvbGRlciBzaW5nbGUtY2FsbCBmbG93cyBzdGlsbCB3b3JrLlxyXG4gIGdldEluY29taW5nQ2FsbEJ5SWQoaWQ6IGFueSkge1xyXG4gICAgaWYgKGlkICE9IG51bGwgJiYgdGhpcy5pbmNvbWluZ0NhbGxzTWFwLmhhcyhpZCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5jb21pbmdDYWxsc01hcC5nZXQoaWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaW5jb21pbmdDYWxsRGV0YWlsLnBhcmFtZXRlcnM/LlsnQ2FsbFNpZCddID09IGlkID8gdGhpcy5pbmNvbWluZ0NhbGxEZXRhaWwgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJlcGFyZURldmljZTJGb3JJbmNvbWluZ0NhbGwoKSB7XHJcbiAgICBpZiAodGhpcy5zcGFyZURldmljZSkge1xyXG4gICAgICByZXR1cm47IC8vIGEgZnJlZSBzcGFyZSBpcyBhbHJlYWR5IHdhaXRpbmdcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5pbmNvbWluZ0NhbGxUb2tlbikge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ3ByZXBhcmVTcGFyZURldmljZTogbm8gdG9rZW4gYXZhaWxhYmxlJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNwYXJlOiBhbnkgPSBuZXcgRGV2aWNlKHRoaXMuaW5jb21pbmdDYWxsVG9rZW4sIHsgYWxsb3dJbmNvbWluZ1doaWxlQnVzeTogdHJ1ZSB9KTtcclxuICAgIHNwYXJlLl9vd25zQWNjZXB0ZWRDYWxsID0gZmFsc2U7XHJcblxyXG4gICAgc3BhcmUub24oJ3JlZ2lzdGVyZWQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3BhcmVEZXZpY2VSZWFkeSA9IHRydWU7XHJcbiAgICAgIC8vIEFwcGx5IHRoZSBtdXRlIHByZWZlcmVuY2UgaGVyZSDigJQgYHNwYXJlLmF1ZGlvYCBpcyBvbmx5IHJlYWR5IGFmdGVyIHJlZ2lzdHJhdGlvbixcclxuICAgICAgLy8gc28gdGhlIGNhbGwgYWJvdmUgKGJlZm9yZSByZWdpc3RlcigpKSB3YXMgYWx3YXlzIGEgbm8tb3AuXHJcbiAgICAgIHRyeSB7IHNwYXJlLmF1ZGlvPy5pbmNvbWluZyghdGhpcy5pc0luY29taW5nTXV0ZWQpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICBjb25zb2xlLmxvZygnU3BhcmUgZGV2aWNlIHJlZ2lzdGVyZWQg4oCTIHJlYWR5IGZvciB0aGUgbmV4dCBjb25jdXJyZW50IGNhbGwnKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHNwYXJlLm9uKCdpbmNvbWluZycsIChjYWxsOiBDYWxsKSA9PiB7XHJcbiAgICAgIC8vIEd1YXJkOiBvbmNlIHRoaXMgc3BhcmUgaXMgYWxyZWFkeSBoYW5kbGluZyBhIGNhbGwgKHBlbmRpbmcgb3IgYWNjZXB0ZWQpLFxyXG4gICAgICAvLyBpZ25vcmUgYW55IGZ1cnRoZXIgaW5jb21pbmcgZXZlbnRzIHNvIGFub3RoZXIgc3BhcmUgY2FuIHRha2UgdGhlIG5leHQgY2FsbC5cclxuICAgICAgaWYgKHNwYXJlLl9vd25zQWNjZXB0ZWRDYWxsIHx8IHNwYXJlLl9wZW5kaW5nSW5jb21pbmdDYWxsKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHNwYXJlLl9wZW5kaW5nSW5jb21pbmdDYWxsID0gY2FsbDtcclxuICAgICAgY29uc3QgY2FsbFNpZCA9IGNhbGw/LnBhcmFtZXRlcnM/LlsnQ2FsbFNpZCddO1xyXG5cclxuICAgICAgLy8gVHJhbnNpdGlvbiB0aGlzIHNwYXJlIGZyb20gXCJmcmVlXCIg4oaSIFwicGVuZGluZ1wiOiByZW1vdmUgaXQgYXMgdGhlIGFjdGl2ZVxyXG4gICAgICAvLyBzcGFyZURldmljZSBhbmQgdHJhY2sgaXQgYnkgQ2FsbFNpZCBzbyBvbkNvbmN1cnJlbnRDYWxsQWNjZXB0ZWQgY2FuIGZpbmQgaXQuXHJcbiAgICAgIGlmICh0aGlzLnNwYXJlRGV2aWNlID09PSBzcGFyZSkge1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2VSZWFkeSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjYWxsU2lkKSB7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLnNldChjYWxsU2lkLCBzcGFyZSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSW1tZWRpYXRlbHkgYXJtIHRoZSBORVhUIGZyZWUgc3BhcmUgc28gaXQgaXMgcmVhZHkgZm9yIGNhbGwgTisyIHdpdGhvdXRcclxuICAgICAgLy8gd2FpdGluZyBmb3IgdGhlIHVzZXIgdG8gYWNjZXB0IHRoaXMgY2FsbCBmaXJzdC5cclxuICAgICAgdGhpcy5wcmVwYXJlRGV2aWNlMkZvckluY29taW5nQ2FsbCgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNJbmNvbWluZ011dGVkKSB7XHJcbiAgICAgICAgdHJ5IHsgc3BhcmUuYXVkaW8/LmluY29taW5nKGZhbHNlKTsgfSBjYXRjaCAoXykge31cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyYWNrSW5jb21pbmdDYWxsKGNhbGwpO1xyXG4gICAgICB0aGlzLmluY29taW5nQ2FsbERldGFpbCA9IGNhbGw7XHJcbiAgICAgIHRoaXMuaXNTaG93SW5jb21pbmdDYWxsID0gdHJ1ZTtcclxuICAgICAgY29uc29sZS5sb2coJ3NwYXJlIGRldmljZTogaW5jb21pbmcgY2FsbCcsIGNhbGwpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgc3BhcmUub24oJ2Vycm9yJywgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignU3BhcmUgZGV2aWNlIGVycm9yOicsIGVycm9yKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHNwYXJlLnJlZ2lzdGVyKCk7XHJcbiAgICB0aGlzLnNwYXJlRGV2aWNlID0gc3BhcmU7XHJcbiAgICBjb25zb2xlLmxvZygnc3BhcmUgZGV2aWNlIGNyZWF0ZWQgYW5kIHJlZ2lzdGVyaW5nJyk7XHJcbiAgfVxyXG5cclxuICBvbkNvbmN1cnJlbnRDYWxsQWNjZXB0ZWQoYWNjZXB0ZWRDYWxsOiBhbnkpIHtcclxuICAgIGNvbnN0IHNpZCA9IGFjY2VwdGVkQ2FsbD8ucGFyYW1ldGVycz8uWydDYWxsU2lkJ107XHJcbiAgICBpZiAoc2lkKSB7XHJcbiAgICAgIC8vIFByaW1hcnkgcGF0aDogdGhlIGFjY2VwdGVkIGNhbGwgd2FzIGhlbGQgYnkgYSBwZW5kaW5nIHNwYXJlIGRldmljZS5cclxuICAgICAgY29uc3QgZGV2ID0gdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmdldChzaWQpO1xyXG4gICAgICBpZiAoZGV2KSB7XHJcbiAgICAgICAgZGV2Ll9vd25zQWNjZXB0ZWRDYWxsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmV4dHJhRGV2aWNlcy5zZXQoc2lkLCBkZXYpO1xyXG4gICAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5kZWxldGUoc2lkKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBMZWdhY3kgZmFsbGJhY2s6IG9sZCBzaW5nbGUtc3BhcmUgcGF0aCAoc3BhcmUgc3RpbGwgaG9sZHMgdGhlIGNhbGwpLlxyXG4gICAgICBlbHNlIGlmICh0aGlzLnNwYXJlRGV2aWNlICYmIHRoaXMuc3BhcmVEZXZpY2UuX3BlbmRpbmdJbmNvbWluZ0NhbGwgPT09IGFjY2VwdGVkQ2FsbCkge1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2UuX293bnNBY2NlcHRlZENhbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZXh0cmFEZXZpY2VzLnNldChzaWQsIHRoaXMuc3BhcmVEZXZpY2UpO1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2VSZWFkeSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBFbnN1cmUgYSBmcmVlIHNwYXJlIGlzIGFsd2F5cyByZWFkeSBmb3IgdGhlIG5leHQgY29uY3VycmVudCBjYWxsLlxyXG4gICAgdGhpcy5wcmVwYXJlRGV2aWNlMkZvckluY29taW5nQ2FsbCgpO1xyXG4gIH1cclxuXHJcbiAgcmVsZWFzZUNvbmN1cnJlbnRDYWxsRGV2aWNlKGNhbGxTaWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGV2ID0gdGhpcy5leHRyYURldmljZXMuZ2V0KGNhbGxTaWQpO1xyXG4gICAgaWYgKGRldikge1xyXG4gICAgICB0cnkgeyBkZXYuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB0aGlzLmV4dHJhRGV2aWNlcy5kZWxldGUoY2FsbFNpZCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdyZWxlYXNlZCBjb25jdXJyZW50LWNhbGwgZGV2aWNlIGZvcicsIGNhbGxTaWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBBbHNvIHJlbGVhc2UgcGVuZGluZyBkZXZpY2VzIHRoYXQgd2VyZSBjYW5jZWxsZWQgYmVmb3JlIGFjY2VwdGFuY2UuXHJcbiAgICBjb25zdCBwZW5kaW5nRGV2ID0gdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmdldChjYWxsU2lkKTtcclxuICAgIGlmIChwZW5kaW5nRGV2KSB7XHJcbiAgICAgIHRyeSB7IHBlbmRpbmdEZXYuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZGVsZXRlKGNhbGxTaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gV2hlbiBubyBhY2NlcHRlZCBjYWxscyByZW1haW4sIHRlYXIgZG93biBhbGwgc3BhcmUvcGVuZGluZy9leHRyYSBkZXZpY2VzIHNvXHJcbiAgLy8gdGhlIHByaW1hcnkgZGV2aWNlIGNsZWFubHkgaGFuZGxlcyB0aGUgbmV4dCBmcmVzaCBpbmNvbWluZyBjYWxsLlxyXG4gIHRlYXJkb3duU3BhcmVEZXZpY2VzSWZJZGxlKCkge1xyXG4gICAgaWYgKHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZXh0cmFEZXZpY2VzLmZvckVhY2goKGQpID0+IHsgdHJ5IHsgZC5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9IH0pO1xyXG4gICAgdGhpcy5leHRyYURldmljZXMuY2xlYXIoKTtcclxuICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5mb3JFYWNoKChkKSA9PiB7IHRyeSB7IGQuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fSB9KTtcclxuICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMuc3BhcmVEZXZpY2UpIHtcclxuICAgICAgdHJ5IHsgdGhpcy5zcGFyZURldmljZS5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBudWxsO1xyXG4gICAgICB0aGlzLnNwYXJlRGV2aWNlUmVhZHkgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMucHJpbWFyeUhhc0NhbGwgPSBmYWxzZTtcclxuICAgIGNvbnNvbGUubG9nKCdzcGFyZS9leHRyYSBkZXZpY2VzIHRvcm4gZG93biAoaWRsZSknKTtcclxuICB9XHJcblxyXG4gIC8vIEJhY2t3YXJkcy1jb21wYXRpYmxlIGFsaWFzIGtlcHQgZm9yIGV4aXN0aW5nIGNhbGwgc2l0ZXMuXHJcbiAgZGVzdHJveURldmljZTIoKSB7XHJcbiAgICB0aGlzLnRlYXJkb3duU3BhcmVEZXZpY2VzSWZJZGxlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBVc2VyLWNvbnRyb2xsZWQgc3dpdGNoIChpbiB0aGUgY2FsbC1wcm9ncmVzcyBVSSkuIFdoZW4gT04sIGEgbmV3IGluY29taW5nXHJcbiAgLy8gY2FsbCdzIGJ1aWx0LWluIFR3aWxpbyByaW5ndG9uZSBpcyBzaWxlbmNlZCBzbyBpdCBkb2VzIG5vdCBkaXN0dXJiIHRoZVxyXG4gIC8vIG9uZ29pbmcgY2FsbC4gU291cmNlIG9mIHRydXRoIHNvIG5ld2x5IGNyZWF0ZWQgKHNwYXJlKSBkZXZpY2VzIGluaGVyaXQgaXQuXHJcbiAgaXNJbmNvbWluZ011dGVkID0gZmFsc2U7XHJcblxyXG4gIC8vIEFwcGx5IHRoZSBjdXJyZW50IG11dGUgcHJlZmVyZW5jZSB0byBldmVyeSBsaXZlIERldmljZSAocHJpbWFyeSArIHNwYXJlICtcclxuICAvLyBhbnkgY29uY3VycmVudC1jYWxsIGRldmljZXMpIHZpYSBUd2lsaW8ncyBvd24gZGV2aWNlLmF1ZGlvLmluY29taW5nKCkuXHJcbiAgYXBwbHlJbmNvbWluZ011dGUoKSB7XHJcbiAgICBjb25zdCBlbmFibGVkID0gIXRoaXMuaXNJbmNvbWluZ011dGVkOyAvLyByaW5ndG9uZSBlbmFibGVkID0gTk9UIG11dGVkXHJcbiAgICBjb25zdCBhcHBseSA9IChkZXY6IGFueSkgPT4ge1xyXG4gICAgICB0cnkgeyBkZXY/LmF1ZGlvPy5pbmNvbWluZz8uKGVuYWJsZWQpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgfTtcclxuICAgIGFwcGx5KHRoaXMuZGV2aWNlKTtcclxuICAgIGFwcGx5KHRoaXMuc3BhcmVEZXZpY2UpO1xyXG4gICAgdGhpcy5leHRyYURldmljZXMuZm9yRWFjaChhcHBseSk7XHJcbiAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZm9yRWFjaChhcHBseSk7XHJcbiAgfVxyXG5cclxuICAvLyBUb2dnbGUvc2V0IHRoZSBtdXRlIHN3aXRjaCBhbmQgaW1tZWRpYXRlbHkgYXBwbHkgaXQuXHJcbiAgc2V0SW5jb21pbmdNdXRlZChtdXRlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0luY29taW5nTXV0ZWQgPSBtdXRlZDtcclxuICAgIHRoaXMuYXBwbHlJbmNvbWluZ011dGUoKTtcclxuICAgIGlmIChtdXRlZCkge1xyXG4gICAgICAvLyBkZXZpY2UuYXVkaW8uaW5jb21pbmcoZmFsc2UpIG9ubHkgcHJldmVudHMgZnV0dXJlIHJpbmdzIOKAlCBpdCBkb2VzIE5PVCBzdG9wXHJcbiAgICAgIC8vIGEgY2FsbCB0aGF0IGlzIGFscmVhZHkgcmluZ2luZy4gU3RvcCB0aGUgYWN0aXZlIHJpbmcgZGlyZWN0bHkgdmlhIHNvdW5kY2FjaGUuXHJcbiAgICAgIGNvbnN0IHN0b3BSaW5nID0gKGRldjogYW55KSA9PiB7XHJcbiAgICAgICAgdHJ5IHsgZGV2Py5fc291bmRjYWNoZT8uZ2V0Py4oJ2luY29taW5nJyk/LnN0b3A/LigpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB9O1xyXG4gICAgICBzdG9wUmluZyh0aGlzLmRldmljZSk7XHJcbiAgICAgIHN0b3BSaW5nKHRoaXMuc3BhcmVEZXZpY2UpO1xyXG4gICAgICB0aGlzLmV4dHJhRGV2aWNlcy5mb3JFYWNoKChkZXY6IGFueSkgPT4gc3RvcFJpbmcoZGV2KSk7XHJcbiAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5mb3JFYWNoKChkZXY6IGFueSkgPT4gc3RvcFJpbmcoZGV2KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRJbmNvbWluZ1BhcnRpY2lwYW50KHBhcnRpY2lwYW50SWQ6IHN0cmluZywgY29uZmVyZW5jZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKX0pLFxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFtdPihgJHtlbnZpcm9ubWVudC5hcGlVcmx9L3V0aWxpdGllcy9leHQvYWRkL2luY29taW5nL3BhcnRpY2lwYW50LyR7cGFydGljaXBhbnRJZH0vJHtjb25mZXJlbmNlSWR9YCxodHRwT3B0aW9ucyk7XHJcbiAgfSBcclxuICBjb25uZWN0KGRhdGE/OiBhbnkpe1xyXG4gICAgaWYgKHRoaXMuZGV2aWNlLl9hY3RpdmVDYWxsKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCcyNDQtdGVzdCcpXHJcbiAgICAgIHRoaXMuZGV2aWNlLmRpc2Nvbm5lY3RBbGwoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmRldmljZS5jb25uZWN0KHtcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgVG9rZW46IHRoaXMuY29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlSWQgfHwgZGF0YS5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgQ29uZmVyZW5jZU5hbWU6IHRoaXMuY29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlTmFtZSB8fCBkYXRhLmNvbmZlcmVuY2VOYW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHJ0Y0NvbnN0cmFpbnRzOiB7IGF1ZGlvOiB7IGRldmljZUlkOiAnZGVmYXVsdCcgfSB9LFxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIl19
583
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdpbGlvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvc2VydmljZS90d2lsaW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7O0FBYzNELE1BQU0sT0FBTyxhQUFhO0lBaUR4QixZQUNVLElBQWdCLEVBQ2hCLGdCQUFrQztRQURsQyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFqRDVDLDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzVELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLENBQUM7UUFDckQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7UUFHdEYsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBRTVCLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBUyxLQUFLLENBQUMsQ0FBQztRQUU5QyxVQUFLLEdBQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QyxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxL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YyxJQUFJLElBQUksQ0FBQyxjQUFjO2FBQy9FO1lBQ0QsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFO1NBQ25ELENBQUMsQ0FBQTtJQUNKLENBQUM7OzJHQXZsQlUsYUFBYTsrR0FBYixhQUFhLGNBRlosTUFBTTs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzaGFyZVJlcGxheSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEZXZpY2UsIENhbGwgfSBmcm9tICdAdHdpbGlvL3ZvaWNlLXNkayc7XHJcbmltcG9ydCB7IEV4dGVuc2lvblNlcnZpY2UgfSBmcm9tICcuL2V4dGVuc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnRzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlhbFBheWxvYWQge1xyXG4gIG51bWJlcjogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBpbWc6IHN0cmluZztcclxuICBjYWxsZXJJZDpzdHJpbmc7XHJcbiAgaXNEaWFsRnJvbUhpc3Rvcnk6Ym9vbGVhbjtcclxuICBmcm9tOnN0cmluZztcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyAgXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUd2lsaW9TZXJ2aWNlIHtcclxuICBcclxuICBvcGVuSW5Qcm9ncmVzc0RpYWxwYWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjdXJyZW50Q2FsbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FsbCB8IG51bGw+KG51bGwpO1xyXG4gIGN1cnJlbnRDYWxsU3RhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oJ25vbmUnKTsgLy9pbi1wcm9ncmVzcywgb3V0LXByb2dyZXNzLCBub25lXHJcbiAgZGV2aWNlOmFueTtcclxuICBjYWxsITogQ2FsbDtcclxuICBpbmNvbWluZ0NhbGxUb2tlbjpzdHJpbmc9Jyc7XHJcbiAgb3V0Z29pbmdDYWxsVG9rZW4/OnN0cmluZztcclxuICBjYWxsVHlwZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignTklMJyk7XHJcbiAgaW5jb21pbmdDYWxsRGV0YWlsOiBhbnk7IC8vIGZvciBib3RoIGluY29taW5nIGFuZCBvdXRnb2luZ1xyXG4gIHRva2VuOmFueSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKTtcclxuICBpc05ld0NvbnRhY3RBZGRlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHVwZGF0ZVJlY2VudENhbGwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjYWxsaGFuZGxlRnJvbU5vdGlmaWNhdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XHJcblxyXG4gIGVuZENhbGwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBkaWFsTnVtYmVyRnJvbU90aGVyTW9kdWxlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEaWFsUGF5bG9hZD4oeyBudW1iZXI6ICcnLCBuYW1lOiAnJywgaW1nOiAnJywgY2FsbGVySWQ6ICcnLCBpc0RpYWxGcm9tSGlzdG9yeTogZmFsc2UsIGZyb206ICcnIH0pO1xyXG5cclxuICB0b2dnbGVDYWxsZXJJZEFsZXJ0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcclxuICBpc1RyaWFsT3ZlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzUGF5bWVudER1ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzQXZhaWxhYmxlTnVtYmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FsbGVySWRMaXN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xyXG4gIHRyaWdnZXJTTVNSZWxvYWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0Nvbm5lY3RpbmdJbmNvbWluZ0NhbGxJZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcblxyXG4gIHRva2VuSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIHRva2VuSW5pdGlhbGl6YXRpb24kOiBPYnNlcnZhYmxlPGFueT4gfCBudWxsID0gbnVsbDtcclxuICBkZXZpY2VJZDogYW55O1xyXG4gIGNvbmZlcmVuY2VDYWxsSW5mbzogYW55O1xyXG4gIGlzU2hvd0luY29taW5nQ2FsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBDUklUSUNBTDogVHJhY2sgYWxsIGFjY2VwdGVkIENhbGwgb2JqZWN0cyAobWlycm9ycyBpT1MgYWNjZXB0ZWRDYWxsTGlzdClcclxuICAvLyBVc2VkIHRvIGd1YXJkIGRldmljZSByZS1pbml0aWFsaXphdGlvbiBzbyBhY3RpdmUgY2FsbHMgYXJlIG5ldmVyIHRvcm4gZG93blxyXG4gIGFjY2VwdGVkQ2FsbExpc3Q6IENhbGxbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIHByaW1hcnlIYXNDYWxsID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzcGFyZURldmljZTogYW55ID0gbnVsbDtcclxuICBzcGFyZURldmljZVJlYWR5ID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBwZW5kaW5nSW5jb21pbmdEZXZpY2VzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcclxuICBwcml2YXRlIGV4dHJhRGV2aWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XHJcbiAgaW5jb21pbmdDYWxsc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XHJcblxyXG4gIHByaXZhdGUgdG9rZW5SZWZyZXNoSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcmVjb3ZlcnlBdHRlbXB0cyA9IDA7XHJcbiAgcHJpdmF0ZSByZWNvdmVyeVRpbWVyOiBhbnkgPSBudWxsO1xyXG4gIGluY29taW5nQ2FsbE5vdGlmaWNhdGlvbj0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgZXh0ZW5zaW9uU2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcclxuICApIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVRva2VuKCk7XHJcbiAgICAvLyBTYWZldHkgbmV0IGZvciBsb25nIGlkbGUvc2xlZXAgcGVyaW9kczogdGhlIHNpZ25hbGluZyBzb2NrZXQgY2FuIGRpZSBzaWxlbnRseVxyXG4gICAgLy8gKE9TIHN1c3BlbmRzIHRpbWVycywgdGFiIGlzIGJhY2tncm91bmRlZCkgd2l0aG91dCBldmVyIGZpcmluZyAnZXJyb3InLyd1bnJlZ2lzdGVyZWQnLlxyXG4gICAgLy8gUmUtY2hlY2sgZGV2aWNlIGhlYWx0aCB3aGVuZXZlciB0aGUgYXBwIGJlY29tZXMgYWN0aXZlL29ubGluZSBhZ2Fpbi5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykge1xyXG4gICAgICAgIHRoaXMuZW5zdXJlRGV2aWNlSGVhbHRoeSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCAoKSA9PiB0aGlzLmVuc3VyZURldmljZUhlYWx0aHkoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVUb2tlbigpIHtcclxuICAgIGlmICh0aGlzLnRva2VuSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQgfHwgb2YobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50b2tlbkluaXRpYWxpemF0aW9uJCA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRJbmNvbWluZ0NhbGxUb2tlbih0aGlzLmRldmljZUlkKS5waXBlKFxyXG4gICAgICB0YXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsVG9rZW4gPSBkYXRhLnRva2VuO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdpbi10b2tlbicsIGRhdGEudG9rZW4pO1xyXG4gICAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RmZGZkc2Zkc2ZkcycpXHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRGV2aWNlKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgVHdpbGlvIHRva2VuOicsIGVycm9yKTtcclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XHJcbiAgICAgIH0pLFxyXG4gICAgICBzaGFyZVJlcGxheSgxKSAvLyBDYWNoZSB0aGUgcmVzdWx0IGZvciBzdWJzZXF1ZW50IHN1YnNjcmliZXJzXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGluaXRpYWxpemVUd2lsaW9EZXZpY2UoZGV2aWNlSWQ6IGFueSkge1xyXG4gICAgdGhpcy5kZXZpY2VJZCA9IGRldmljZUlkO1xyXG4gICAgaWYgKHRoaXMudG9rZW5Jbml0aWFsaXplZCAmJiB0aGlzLmluY29taW5nQ2FsbFRva2VuKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZURldmljZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplVG9rZW4oKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZURldmljZSgpIHtcclxuICAgIGlmICh0aGlzLmRldmljZSkge1xyXG4gICAgICBpZiAodGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ1NraXBwaW5nIGRldmljZSByZS1pbml0OiBhY3RpdmUgYWNjZXB0ZWQgY2FsbHMgZXhpc3Q6JywgdGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGV2aWNlLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaW5jb21pbmdDYWxsVG9rZW4pIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTm8gVHdpbGlvIHRva2VuIGF2YWlsYWJsZScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kZXZpY2UgPSBuZXcgRGV2aWNlKHRoaXMuaW5jb21pbmdDYWxsVG9rZW4sIHsgYWxsb3dJbmNvbWluZ1doaWxlQnVzeTogdHJ1ZSB9KTtcclxuXHJcbiAgICB0aGlzLmRldmljZS5vbigncmVnaXN0ZXJlZCcsICgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ1R3aWxpbyBEZXZpY2UgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgdGhpcy5yZWNvdmVyeUF0dGVtcHRzID0gMDtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFR3aWxpbyBmaXJlcyB0aGlzIH4zIG1pbnV0ZXMgYmVmb3JlIHRoZSBhY2Nlc3MgdG9rZW4gZXhwaXJlcy4gU3dhcCBpbiBhXHJcbiAgICAvLyBmcmVzaCBvbmUgdmlhIHVwZGF0ZVRva2VuKCkgc28gdGhlIHNpZ25hbGluZyBjb25uZWN0aW9uIG5ldmVyIGhhcyB0byBkcm9wXHJcbiAgICAvLyBpbiB0aGUgZmlyc3QgcGxhY2UgKHRoaXMgaXMgdGhlIG1haW4gY2F1c2Ugb2YgXCJpZGxlIGZvciBhIHdoaWxlLCBCRSBzdGlsbFxyXG4gICAgLy8gbm90aWZpZXMgYnV0IFR3aWxpbyBpbmNvbWluZyBldmVudCBuZXZlciBmaXJlc1wiKS5cclxuICAgIHRoaXMuZGV2aWNlLm9uKCd0b2tlbldpbGxFeHBpcmUnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVmcmVzaERldmljZVRva2VuKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRldmljZS5vbignaW5jb21pbmcnLCAoY2FsbDogQ2FsbCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygnVHdpbGlvIERldmljZSBpbmNvbWluZyBjYWxsIGV2ZW50OicsIGNhbGwpO1xyXG4gICAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLmJ1aWxkSW5jb21pbmdOb3RpZmljYXRpb24oY2FsbCk7XHJcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsTm90aWZpY2F0aW9uLm5leHQobm90aWZpY2F0aW9uKTtcclxuICAgICAgaWYgKHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGggPiAwIHx8IHRoaXMucHJpbWFyeUhhc0NhbGwpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygncHJpbWFyeSBkZXZpY2U6IGNvbmN1cnJlbnQgY2FsbCBhcnJpdmluZyDigJMgc3BhcmUgZGV2aWNlIHdpbGwgaGFuZGxlIGl0Jyk7XHJcbiAgICAgICAgdGhpcy5pc1Nob3dJbmNvbWluZ0NhbGwgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5wcmltYXJ5SGFzQ2FsbCA9IHRydWU7XHJcbiAgICAgIC8vIEFybSBhIHNwYXJlIGRldmljZSByaWdodCBub3cgKGJlZm9yZSB0aGUgdXNlciBldmVuIGFjY2VwdHMpIHNvIGl0IGNhblxyXG4gICAgICAvLyByZWdpc3RlciBpbiB0aW1lIGZvciBhbnkgY2FsbCB0aGF0IGFycml2ZXMgc2Vjb25kcyBsYXRlci5cclxuICAgICAgdGhpcy5wcmVwYXJlRGV2aWNlMkZvckluY29taW5nQ2FsbCgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNJbmNvbWluZ011dGVkKSB7XHJcbiAgICAgICAgdHJ5IHsgdGhpcy5kZXZpY2UuYXVkaW8/LmluY29taW5nKGZhbHNlKTsgfSBjYXRjaCAoXykge31cclxuICAgICAgfVxyXG4gICAgICBjYWxsLm9uKCdhY2NlcHQnLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0luY29taW5nIGNhbGwgYW5zd2VyZWQvYWNjZXB0ZWQnKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjYWxsLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYWxsIGRpc2Nvbm5lY3RlZCcpO1xyXG4gICAgICAgIHRoaXMucHJpbWFyeUhhc0NhbGwgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjYWxsLm9uKCdjYW5jZWwnLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NhbGxlciBodW5nIHVwIGJlZm9yZSBhbnN3ZXInKTtcclxuICAgICAgICB0aGlzLnByaW1hcnlIYXNDYWxsID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY2FsbC5vbigncmVqZWN0JywgKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYWxsIHJlamVjdGVkJyk7XHJcbiAgICAgICAgdGhpcy5wcmltYXJ5SGFzQ2FsbCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy50cmFja0luY29taW5nQ2FsbChjYWxsKTtcclxuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEZXRhaWwgPSBjYWxsO1xyXG4gICAgICB0aGlzLmlzU2hvd0luY29taW5nQ2FsbCA9IHRydWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRldmljZS5vbignZXJyb3InLCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUd2lsaW8gRGV2aWNlIEVycm9yOicsIGVycm9yKTtcclxuICAgICAgdGhpcy5pc1Nob3dJbmNvbWluZ0NhbGwgPSBmYWxzZTtcclxuICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2NoZWR1bGVEZXZpY2VSZWNvdmVyeSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5kZXZpY2Uub24oJ3VucmVnaXN0ZXJlZCcsICgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ1R3aWxpbyBEZXZpY2UgdW5yZWdpc3RlcmVkJyk7XHJcbiAgICAgIHRoaXMuaXNTaG93SW5jb21pbmdDYWxsID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNjaGVkdWxlRGV2aWNlUmVjb3ZlcnkoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFJlZ2lzdGVyIEFGVEVSIGF0dGFjaGluZyBhbGwgbGlzdGVuZXJzXHJcbiAgICB0aGlzLmRldmljZS5yZWdpc3RlcigpO1xyXG4gICAgY29uc29sZS5sb2coJ2RldmljZSBjcmVhdGVkJywgdGhpcy5kZXZpY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8gUHJvYWN0aXZlbHkgc3dhcCBpbiBhIGZyZXNoIGFjY2VzcyB0b2tlbiBhaGVhZCBvZiBleHBpcnkgKHNlZSAndG9rZW5XaWxsRXhwaXJlJ1xyXG4gIC8vIGFib3ZlKSBzbyB0aGUgRGV2aWNlJ3Mgc2lnbmFsaW5nIGNvbm5lY3Rpb24gc3Vydml2ZXMgbG9uZyBpZGxlIHBlcmlvZHMuXHJcbiAgcHJpdmF0ZSByZWZyZXNoRGV2aWNlVG9rZW4oKSB7XHJcbiAgICBpZiAodGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudG9rZW5SZWZyZXNoSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0SW5jb21pbmdDYWxsVG9rZW4odGhpcy5kZXZpY2VJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9rZW5SZWZyZXNoSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsVG9rZW4gPSBkYXRhLnRva2VuO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdpbi10b2tlbicsIGRhdGEudG9rZW4pO1xyXG4gICAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMuZGV2aWNlPy51cGRhdGVUb2tlbih0aGlzLmluY29taW5nQ2FsbFRva2VuKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBhcHBseSByZWZyZXNoZWQgVHdpbGlvIHRva2VuOicsIGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMudG9rZW5SZWZyZXNoSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZWZyZXNoIFR3aWxpbyB0b2tlbiBhaGVhZCBvZiBleHBpcnk6JywgZXJyKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBTZWxmLWhlYWwgYWZ0ZXIgdGhlIERldmljZSBkaWVzIChleHBpcmVkIHRva2VuLCBkcm9wcGVkIHNpZ25hbGluZyBzb2NrZXQgd2hpbGVcclxuICAvLyBpZGxlL2FzbGVlcCwgZXRjKS4gTmV2ZXIgcnVucyB3aGlsZSBhIGNhbGwgaXMgYWN0dWFsbHkgYWN0aXZlLCBhbmQgYmFja3Mgb2ZmIHNvIGFcclxuICAvLyBnZW51aW5lbHkgbG9nZ2VkLW91dC9vZmZsaW5lIHVzZXIgZG9lc24ndCByZXRyeSBmb3JldmVyLlxyXG4gIHByaXZhdGUgc2NoZWR1bGVEZXZpY2VSZWNvdmVyeSgpIHtcclxuICAgIGlmICh0aGlzLmFjY2VwdGVkQ2FsbExpc3QubGVuZ3RoID4gMCB8fCB0aGlzLnJlY292ZXJ5VGltZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGVsYXkgPSBNYXRoLm1pbigzMDAwMCwgMjAwMCAqIE1hdGgucG93KDIsIHRoaXMucmVjb3ZlcnlBdHRlbXB0cykpO1xyXG4gICAgdGhpcy5yZWNvdmVyeUF0dGVtcHRzKys7XHJcbiAgICB0aGlzLnJlY292ZXJ5VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZWNvdmVyeVRpbWVyID0gbnVsbDtcclxuICAgICAgY29uc3QgYXV0aFRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpO1xyXG4gICAgICBpZiAoIWF1dGhUb2tlbiB8fCBhdXRoVG9rZW4gPT09ICdsb2dvdXQnKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvdmVyeUF0dGVtcHRzID0gMDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVRva2VuKCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcignVHdpbGlvIGRldmljZSByZWNvdmVyeSBhdHRlbXB0IGZhaWxlZDonLCBlcnIpXHJcbiAgICAgIH0pO1xyXG4gICAgfSwgZGVsYXkpO1xyXG4gIH1cclxuXHJcbiAgLy8gQnVpbGQgdGhlIGZ1bGwgaW5jb21pbmctY2FsbCBub3RpZmljYXRpb24gcGF5bG9hZCAobWF0Y2hlcyB0aGUgc2hhcGUgdGhlIEJFIHVzZWQgdG9cclxuICAvLyBwdXNoIG92ZXIgdGhlIHNvY2tldCkgZnJvbSB0aGUgcmF3IFR3aWxpbyAnaW5jb21pbmcnIENhbGw6IHBhcnNlZCBQYXJhbXMgZmllbGRzIHBsdXNcclxuICAvLyB0aGUgZGVyaXZlZCBjbGllbnRTaWQvcGFydGljaXBhbnRTaWQvbm90aWZpY2F0aW9uVHlwZS90aXRsZS9tc2dCb2R5LlxyXG4gIGJ1aWxkSW5jb21pbmdOb3RpZmljYXRpb24oY2FsbDogQ2FsbCk6IGFueSB7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLmNvbnZlcnRUb0pzb24oY2FsbD8ucGFyYW1ldGVycz8uWydQYXJhbXMnXSB8fCAne30nKTtcclxuICAgIGNvbnN0IGNhbGxTaWQgPSBjYWxsPy5wYXJhbWV0ZXJzPy5bJ0NhbGxTaWQnXTtcclxuICAgIG5vdGlmaWNhdGlvbi5jbGllbnRTaWQgPSBjYWxsU2lkO1xyXG4gICAgLy8gT25seSByZWFsIFR3aWxpbyBTSUQgZXhwb3NlZCBjbGllbnQtc2lkZSBmb3IgdGhpcyBsZWc7IG5vIHNlcGFyYXRlIHBhcnRpY2lwYW50IFNJRFxyXG4gICAgLy8gaXMgYXZhaWxhYmxlLCBzbyBpdCBtaXJyb3JzIGNsaWVudFNpZC5cclxuICAgIG5vdGlmaWNhdGlvbi5wYXJ0aWNpcGFudFNpZCA9IGNhbGxTaWQ7XHJcbiAgICBub3RpZmljYXRpb24ubm90aWZpY2F0aW9uVHlwZSA9ICdpbmNvbWluZ2NhbGwnO1xyXG4gICAgbm90aWZpY2F0aW9uLnRpdGxlID0gJ0luY29taW5nIENhbGwnO1xyXG4gICAgbm90aWZpY2F0aW9uLm1zZ0JvZHkgPSBgeW91IGhhdmUgaW5jb21pbmcgY2FsbCAke25vdGlmaWNhdGlvbi5mcm9tTmFtZSB8fCAnJ31gO1xyXG4gICAgcmV0dXJuIG5vdGlmaWNhdGlvbjtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb0pzb24oZGF0YTogc3RyaW5nKTogYW55IHtcclxuICAgIGNvbnN0IG9iajogYW55ID0ge307XHJcblxyXG4gICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRm9ybWF0OiBrZXk9dmFsdWUma2V5PXZhbHVlXHJcbiAgICBpZiAoZGF0YS5pbmNsdWRlcygnJicpKSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoZGF0YSk7XHJcblxyXG4gICAgICBwYXJhbXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgIG9ialtrZXldID0gdmFsdWUgPT09ICd0cnVlJ1xyXG4gICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICA6IHZhbHVlID09PSAnZmFsc2UnXHJcbiAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICA6IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRm9ybWF0OiB7a2V5PXZhbHVlLCBrZXk9dmFsdWV9XHJcbiAgICAgIGNvbnN0IHRleHQgPSBkYXRhLnRyaW0oKS5yZXBsYWNlKC9eXFx7fFxcfSQvZywgJycpO1xyXG5cclxuICAgICAgdGV4dC5zcGxpdCgnLCcpLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtLmluZGV4T2YoJz0nKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIGNvbnN0IGtleSA9IGl0ZW0uc3Vic3RyaW5nKDAsIGluZGV4KS50cmltKCk7XHJcbiAgICAgICAgICBsZXQgdmFsdWU6IGFueSA9IGl0ZW0uc3Vic3RyaW5nKGluZGV4ICsgMSkudHJpbSgpO1xyXG5cclxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB2YWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykgdmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb2JqLnJlYWQgPSBmYWxzZTtcclxuICAgIG9iai5zYXZlID0gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcbiAgLy8gU2FmZXR5IG5ldCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVuZGVybHlpbmcgc29ja2V0IGRpZXMgc2lsZW50bHkgZHVyaW5nIGEgbG9uZ1xyXG4gIC8vIHNsZWVwL2lkbGUgcGVyaW9kIHdpdGhvdXQgZXZlciBmaXJpbmcgJ2Vycm9yJy8ndW5yZWdpc3RlcmVkJyAodGhlIE9TIGNhbiBzdXNwZW5kXHJcbiAgLy8gdGltZXJzL3NvY2tldHMgb3V0cmlnaHQpIOKAlCByZS1jaGVjayBkZXZpY2UgaGVhbHRoIHdoZW5ldmVyIHRoZSBhcHAgd2FrZXMgdXAuXHJcbiAgcHJpdmF0ZSBlbnN1cmVEZXZpY2VIZWFsdGh5KCkge1xyXG4gICAgaWYgKHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5kZXZpY2UgfHwgdGhpcy5kZXZpY2Uuc3RhdGUgIT09ICdyZWdpc3RlcmVkJykge1xyXG4gICAgICBjb25zb2xlLmxvZygnVHdpbGlvIGRldmljZSB1bmhlYWx0aHkgYWZ0ZXIgd2FrZS92aXNpYmlsaXR5IGNoYW5nZSwgcmUtaW5pdGlhbGl6aW5nJyk7XHJcbiAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVUb2tlbigpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IGNvbnNvbGUuZXJyb3IoJ1R3aWxpbyBkZXZpY2UgcmVjb3ZlcnkgZmFpbGVkOicsIGVycilcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlQ29udGFjdChwYXlsb2FkOiBhbnkpOiBPYnNlcnZhYmxlPFtdPiB7XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJyl9KSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svYWRkL2NvbnRhY3RzL21hbnVhbGx5JywgcGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ29udGFjdChwYXlsb2FkOmFueSl7XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyB0aGlzLnRva2VufSkgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL3VwZGF0ZS9jb250YWN0JywgcGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuICBcclxuICBkZWxldGVDb250YWN0KGlkOnN0cmluZyl7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgcGhvbmVib29raWQ6IGlkXHJcbiAgICB9XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL2RlbGV0ZS9jb250YWN0LycraWQscGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuICBnZXRDb250YWN0TGlzdCgpe1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL3JlYWQvY29udGFjdHMnLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBhZGRDb250YWN0VG9GYXZvdXJpdGUocGF5bG9hZDogYW55KXtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svdXBkYXRlL2Zhdm91cml0ZScsIHBheWxvYWQsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldEZhdm91cml0Q29udGFjdHMoKXtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9mYXZvdXJpdGUvY29udGFjdHMnLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBnZXRSZWNlbnRDYWxscyhwYWdlSW5kZXg/OiBzdHJpbmcsIHBhZ2VTaXplPzogc3RyaW5nLCl7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gIHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfTtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID17aGVhZGVyc31cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svcmVjZW50L2NhbGxzJywgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuICBkZWxldGVSZWNlbnRDYWxsTG9nKGlkOnN0cmluZ3wgc3RyaW5nW10pe1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIHJlY29yZElkOiBpZFxyXG4gICAgfVxyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9kZWxldGUvY2FsbHMvJytpZCxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRQaG90byhwYXlsb2FkOiBhbnkpe1xyXG4gICAgbGV0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpXHJcbiAgICAgIH0pXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svdXBsb2FkL3Bob3RvJyxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVQaG90byhpZDpzdHJpbmcpe1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIHBob25lYm9va2lkOiBpZFxyXG4gICAgfVxyXG4gICAgbGV0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpXHJcbiAgICAgIH0pXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svZGVsZXRlL3Bob3RvLycraWQscGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQ291dHJ5Q29kZVRvYXN0KHZhbDphbnkpe1xyXG4gICAgbGV0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpXHJcbiAgICAgIH0pXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3NvZnRwaG9uZS9jb3VudHJ5Y29kZS9hbGVydC8nICsgdmFsLCB7fSwgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuICBnZXRUb051bWJlcihkaWFsbGVkTm86IHN0cmluZywgaXNvQ29kZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHtcclxuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSksXHJcbiAgICAgIHBhcmFtczogbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ2lzb0NvZGUnLCBpc29Db2RlKVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdpc29Db2RlJywgaXNvQ29kZSlcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9zb2Z0cGhvbmUvY2hlY2svY291bnRyeUNvZGUvJyArIGRpYWxsZWRObywgaHR0cE9wdGlvbnMpO1xyXG4gIH0gXHJcbiAgXHJcbiAgLy8gUmVjb3JkIGEgcmluZ2luZyBpbmNvbWluZyBDYWxsIHNvIGl0IGNhbiBsYXRlciBiZSBhY2NlcHRlZCBieSBpdHMgc3BlY2lmaWMgaWQuXHJcbiAgLy8gVGhlIG1hcCBpcyBjbGVhbmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY2FsbCBpcyBjYW5jZWxsZWQvZGlzY29ubmVjdGVkL3JlamVjdGVkLlxyXG4gIHByaXZhdGUgdHJhY2tJbmNvbWluZ0NhbGwoY2FsbDogYW55KSB7XHJcbiAgICBjb25zdCBjYWxsU2lkID0gY2FsbD8ucGFyYW1ldGVycz8uWydDYWxsU2lkJ107XHJcbiAgICBpZiAoY2FsbFNpZCkge1xyXG4gICAgICB0aGlzLmluY29taW5nQ2FsbHNNYXAuc2V0KGNhbGxTaWQsIGNhbGwpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcclxuICAgICAgaWYgKCFjYWxsU2lkKSByZXR1cm47XHJcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsc01hcC5kZWxldGUoY2FsbFNpZCk7XHJcbiAgICAgIC8vIElmIHRoZSBjYWxsIGVuZGVkIGJlZm9yZSB0aGUgdXNlciBhY2NlcHRlZCBpdCwgZGVzdHJveSB0aGUgcGVuZGluZyBzcGFyZVxyXG4gICAgICAvLyBkZXZpY2UgdGhhdCB3YXMgaG9sZGluZyBpdCBzbyB3ZSBkb24ndCBsZWFrIGRldmljZSByZWdpc3RyYXRpb25zLlxyXG4gICAgICBjb25zdCBkZXYgPSB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZ2V0KGNhbGxTaWQpO1xyXG4gICAgICBpZiAoZGV2ICYmICFkZXYuX293bnNBY2NlcHRlZENhbGwpIHtcclxuICAgICAgICB0cnkgeyBkZXYuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5kZWxldGUoY2FsbFNpZCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBjYWxsLm9uKCdjYW5jZWwnLCBjbGVhbnVwKTtcclxuICAgIGNhbGwub24oJ2Rpc2Nvbm5lY3QnLCBjbGVhbnVwKTtcclxuICAgIGNhbGwub24oJ3JlamVjdCcsIGNsZWFudXApO1xyXG4gIH1cclxuXHJcbiAgLy8gUmVzb2x2ZSB0aGUgRVhBQ1QgcmluZ2luZyBDYWxsIGZvciBhIGdpdmVuIFVJIGVudHJ5IGlkIChwYXJ0aWNpcGFudC9yZWNvcmQgaWQpLlxyXG4gIC8vIEZhbGxzIGJhY2sgdG8gdGhlIG1vc3QgcmVjZW50IGluY29taW5nIGNhbGwgc28gb2xkZXIgc2luZ2xlLWNhbGwgZmxvd3Mgc3RpbGwgd29yay5cclxuICBnZXRJbmNvbWluZ0NhbGxCeUlkKGlkOiBhbnkpIHtcclxuICAgIGlmIChpZCAhPSBudWxsICYmIHRoaXMuaW5jb21pbmdDYWxsc01hcC5oYXMoaWQpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmluY29taW5nQ2FsbHNNYXAuZ2V0KGlkKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmluY29taW5nQ2FsbERldGFpbC5wYXJhbWV0ZXJzPy5bJ0NhbGxTaWQnXSA9PSBpZCA/IHRoaXMuaW5jb21pbmdDYWxsRGV0YWlsIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHByZXBhcmVEZXZpY2UyRm9ySW5jb21pbmdDYWxsKCkge1xyXG4gICAgaWYgKHRoaXMuc3BhcmVEZXZpY2UpIHtcclxuICAgICAgcmV0dXJuOyAvLyBhIGZyZWUgc3BhcmUgaXMgYWxyZWFkeSB3YWl0aW5nXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuaW5jb21pbmdDYWxsVG9rZW4pIHtcclxuICAgICAgY29uc29sZS53YXJuKCdwcmVwYXJlU3BhcmVEZXZpY2U6IG5vIHRva2VuIGF2YWlsYWJsZScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzcGFyZTogYW55ID0gbmV3IERldmljZSh0aGlzLmluY29taW5nQ2FsbFRva2VuLCB7IGFsbG93SW5jb21pbmdXaGlsZUJ1c3k6IHRydWUgfSk7XHJcbiAgICBzcGFyZS5fb3duc0FjY2VwdGVkQ2FsbCA9IGZhbHNlO1xyXG5cclxuICAgIHNwYXJlLm9uKCdyZWdpc3RlcmVkJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLnNwYXJlRGV2aWNlUmVhZHkgPSB0cnVlO1xyXG4gICAgICAvLyBBcHBseSB0aGUgbXV0ZSBwcmVmZXJlbmNlIGhlcmUg4oCUIGBzcGFyZS5hdWRpb2AgaXMgb25seSByZWFkeSBhZnRlciByZWdpc3RyYXRpb24sXHJcbiAgICAgIC8vIHNvIHRoZSBjYWxsIGFib3ZlIChiZWZvcmUgcmVnaXN0ZXIoKSkgd2FzIGFsd2F5cyBhIG5vLW9wLlxyXG4gICAgICB0cnkgeyBzcGFyZS5hdWRpbz8uaW5jb21pbmcoIXRoaXMuaXNJbmNvbWluZ011dGVkKTsgfSBjYXRjaCAoXykge31cclxuICAgICAgY29uc29sZS5sb2coJ1NwYXJlIGRldmljZSByZWdpc3RlcmVkIOKAkyByZWFkeSBmb3IgdGhlIG5leHQgY29uY3VycmVudCBjYWxsJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBzcGFyZS5vbignaW5jb21pbmcnLCAoY2FsbDogQ2FsbCkgPT4ge1xyXG4gICAgICAvLyBHdWFyZDogb25jZSB0aGlzIHNwYXJlIGlzIGFscmVhZHkgaGFuZGxpbmcgYSBjYWxsIChwZW5kaW5nIG9yIGFjY2VwdGVkKSxcclxuICAgICAgLy8gaWdub3JlIGFueSBmdXJ0aGVyIGluY29taW5nIGV2ZW50cyBzbyBhbm90aGVyIHNwYXJlIGNhbiB0YWtlIHRoZSBuZXh0IGNhbGwuXHJcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsTm90aWZpY2F0aW9uLm5leHQodGhpcy5idWlsZEluY29taW5nTm90aWZpY2F0aW9uKGNhbGwpKTtcclxuICAgICAgaWYgKHNwYXJlLl9vd25zQWNjZXB0ZWRDYWxsIHx8IHNwYXJlLl9wZW5kaW5nSW5jb21pbmdDYWxsKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHNwYXJlLl9wZW5kaW5nSW5jb21pbmdDYWxsID0gY2FsbDtcclxuICAgICAgY29uc3QgY2FsbFNpZCA9IGNhbGw/LnBhcmFtZXRlcnM/LlsnQ2FsbFNpZCddO1xyXG5cclxuICAgICAgLy8gVHJhbnNpdGlvbiB0aGlzIHNwYXJlIGZyb20gXCJmcmVlXCIg4oaSIFwicGVuZGluZ1wiOiByZW1vdmUgaXQgYXMgdGhlIGFjdGl2ZVxyXG4gICAgICAvLyBzcGFyZURldmljZSBhbmQgdHJhY2sgaXQgYnkgQ2FsbFNpZCBzbyBvbkNvbmN1cnJlbnRDYWxsQWNjZXB0ZWQgY2FuIGZpbmQgaXQuXHJcbiAgICAgIGlmICh0aGlzLnNwYXJlRGV2aWNlID09PSBzcGFyZSkge1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2VSZWFkeSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjYWxsU2lkKSB7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLnNldChjYWxsU2lkLCBzcGFyZSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSW1tZWRpYXRlbHkgYXJtIHRoZSBORVhUIGZyZWUgc3BhcmUgc28gaXQgaXMgcmVhZHkgZm9yIGNhbGwgTisyIHdpdGhvdXRcclxuICAgICAgLy8gd2FpdGluZyBmb3IgdGhlIHVzZXIgdG8gYWNjZXB0IHRoaXMgY2FsbCBmaXJzdC5cclxuICAgICAgdGhpcy5wcmVwYXJlRGV2aWNlMkZvckluY29taW5nQ2FsbCgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNJbmNvbWluZ011dGVkKSB7XHJcbiAgICAgICAgdHJ5IHsgc3BhcmUuYXVkaW8/LmluY29taW5nKGZhbHNlKTsgfSBjYXRjaCAoXykge31cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyYWNrSW5jb21pbmdDYWxsKGNhbGwpO1xyXG4gICAgICB0aGlzLmluY29taW5nQ2FsbERldGFpbCA9IGNhbGw7XHJcbiAgICAgIHRoaXMuaXNTaG93SW5jb21pbmdDYWxsID0gdHJ1ZTtcclxuICAgICAgY29uc29sZS5sb2coJ3NwYXJlIGRldmljZTogaW5jb21pbmcgY2FsbCcsIGNhbGwpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgc3BhcmUub24oJ2Vycm9yJywgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignU3BhcmUgZGV2aWNlIGVycm9yOicsIGVycm9yKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHNwYXJlLnJlZ2lzdGVyKCk7XHJcbiAgICB0aGlzLnNwYXJlRGV2aWNlID0gc3BhcmU7XHJcbiAgICBjb25zb2xlLmxvZygnc3BhcmUgZGV2aWNlIGNyZWF0ZWQgYW5kIHJlZ2lzdGVyaW5nJyk7XHJcbiAgfVxyXG5cclxuICBvbkNvbmN1cnJlbnRDYWxsQWNjZXB0ZWQoYWNjZXB0ZWRDYWxsOiBhbnkpIHtcclxuICAgIGNvbnN0IHNpZCA9IGFjY2VwdGVkQ2FsbD8ucGFyYW1ldGVycz8uWydDYWxsU2lkJ107XHJcbiAgICBpZiAoc2lkKSB7XHJcbiAgICAgIC8vIFByaW1hcnkgcGF0aDogdGhlIGFjY2VwdGVkIGNhbGwgd2FzIGhlbGQgYnkgYSBwZW5kaW5nIHNwYXJlIGRldmljZS5cclxuICAgICAgY29uc3QgZGV2ID0gdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmdldChzaWQpO1xyXG4gICAgICBpZiAoZGV2KSB7XHJcbiAgICAgICAgZGV2Ll9vd25zQWNjZXB0ZWRDYWxsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmV4dHJhRGV2aWNlcy5zZXQoc2lkLCBkZXYpO1xyXG4gICAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5kZWxldGUoc2lkKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBMZWdhY3kgZmFsbGJhY2s6IG9sZCBzaW5nbGUtc3BhcmUgcGF0aCAoc3BhcmUgc3RpbGwgaG9sZHMgdGhlIGNhbGwpLlxyXG4gICAgICBlbHNlIGlmICh0aGlzLnNwYXJlRGV2aWNlICYmIHRoaXMuc3BhcmVEZXZpY2UuX3BlbmRpbmdJbmNvbWluZ0NhbGwgPT09IGFjY2VwdGVkQ2FsbCkge1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2UuX293bnNBY2NlcHRlZENhbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZXh0cmFEZXZpY2VzLnNldChzaWQsIHRoaXMuc3BhcmVEZXZpY2UpO1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2VSZWFkeSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBFbnN1cmUgYSBmcmVlIHNwYXJlIGlzIGFsd2F5cyByZWFkeSBmb3IgdGhlIG5leHQgY29uY3VycmVudCBjYWxsLlxyXG4gICAgdGhpcy5wcmVwYXJlRGV2aWNlMkZvckluY29taW5nQ2FsbCgpO1xyXG4gIH1cclxuXHJcbiAgcmVsZWFzZUNvbmN1cnJlbnRDYWxsRGV2aWNlKGNhbGxTaWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGV2ID0gdGhpcy5leHRyYURldmljZXMuZ2V0KGNhbGxTaWQpO1xyXG4gICAgaWYgKGRldikge1xyXG4gICAgICB0cnkgeyBkZXYuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB0aGlzLmV4dHJhRGV2aWNlcy5kZWxldGUoY2FsbFNpZCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdyZWxlYXNlZCBjb25jdXJyZW50LWNhbGwgZGV2aWNlIGZvcicsIGNhbGxTaWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBBbHNvIHJlbGVhc2UgcGVuZGluZyBkZXZpY2VzIHRoYXQgd2VyZSBjYW5jZWxsZWQgYmVmb3JlIGFjY2VwdGFuY2UuXHJcbiAgICBjb25zdCBwZW5kaW5nRGV2ID0gdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmdldChjYWxsU2lkKTtcclxuICAgIGlmIChwZW5kaW5nRGV2KSB7XHJcbiAgICAgIHRyeSB7IHBlbmRpbmdEZXYuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZGVsZXRlKGNhbGxTaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gV2hlbiBubyBhY2NlcHRlZCBjYWxscyByZW1haW4sIHRlYXIgZG93biBhbGwgc3BhcmUvcGVuZGluZy9leHRyYSBkZXZpY2VzIHNvXHJcbiAgLy8gdGhlIHByaW1hcnkgZGV2aWNlIGNsZWFubHkgaGFuZGxlcyB0aGUgbmV4dCBmcmVzaCBpbmNvbWluZyBjYWxsLlxyXG4gIHRlYXJkb3duU3BhcmVEZXZpY2VzSWZJZGxlKCkge1xyXG4gICAgaWYgKHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZXh0cmFEZXZpY2VzLmZvckVhY2goKGQpID0+IHsgdHJ5IHsgZC5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9IH0pO1xyXG4gICAgdGhpcy5leHRyYURldmljZXMuY2xlYXIoKTtcclxuICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5mb3JFYWNoKChkKSA9PiB7IHRyeSB7IGQuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fSB9KTtcclxuICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMuc3BhcmVEZXZpY2UpIHtcclxuICAgICAgdHJ5IHsgdGhpcy5zcGFyZURldmljZS5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBudWxsO1xyXG4gICAgICB0aGlzLnNwYXJlRGV2aWNlUmVhZHkgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMucHJpbWFyeUhhc0NhbGwgPSBmYWxzZTtcclxuICAgIGNvbnNvbGUubG9nKCdzcGFyZS9leHRyYSBkZXZpY2VzIHRvcm4gZG93biAoaWRsZSknKTtcclxuICB9XHJcblxyXG4gIC8vIEJhY2t3YXJkcy1jb21wYXRpYmxlIGFsaWFzIGtlcHQgZm9yIGV4aXN0aW5nIGNhbGwgc2l0ZXMuXHJcbiAgZGVzdHJveURldmljZTIoKSB7XHJcbiAgICB0aGlzLnRlYXJkb3duU3BhcmVEZXZpY2VzSWZJZGxlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBVc2VyLWNvbnRyb2xsZWQgc3dpdGNoIChpbiB0aGUgY2FsbC1wcm9ncmVzcyBVSSkuIFdoZW4gT04sIGEgbmV3IGluY29taW5nXHJcbiAgLy8gY2FsbCdzIGJ1aWx0LWluIFR3aWxpbyByaW5ndG9uZSBpcyBzaWxlbmNlZCBzbyBpdCBkb2VzIG5vdCBkaXN0dXJiIHRoZVxyXG4gIC8vIG9uZ29pbmcgY2FsbC4gU291cmNlIG9mIHRydXRoIHNvIG5ld2x5IGNyZWF0ZWQgKHNwYXJlKSBkZXZpY2VzIGluaGVyaXQgaXQuXHJcbiAgaXNJbmNvbWluZ011dGVkID0gZmFsc2U7XHJcblxyXG4gIC8vIEFwcGx5IHRoZSBjdXJyZW50IG11dGUgcHJlZmVyZW5jZSB0byBldmVyeSBsaXZlIERldmljZSAocHJpbWFyeSArIHNwYXJlICtcclxuICAvLyBhbnkgY29uY3VycmVudC1jYWxsIGRldmljZXMpIHZpYSBUd2lsaW8ncyBvd24gZGV2aWNlLmF1ZGlvLmluY29taW5nKCkuXHJcbiAgYXBwbHlJbmNvbWluZ011dGUoKSB7XHJcbiAgICBjb25zdCBlbmFibGVkID0gIXRoaXMuaXNJbmNvbWluZ011dGVkOyAvLyByaW5ndG9uZSBlbmFibGVkID0gTk9UIG11dGVkXHJcbiAgICBjb25zdCBhcHBseSA9IChkZXY6IGFueSkgPT4ge1xyXG4gICAgICB0cnkgeyBkZXY/LmF1ZGlvPy5pbmNvbWluZz8uKGVuYWJsZWQpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgfTtcclxuICAgIGFwcGx5KHRoaXMuZGV2aWNlKTtcclxuICAgIGFwcGx5KHRoaXMuc3BhcmVEZXZpY2UpO1xyXG4gICAgdGhpcy5leHRyYURldmljZXMuZm9yRWFjaChhcHBseSk7XHJcbiAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZm9yRWFjaChhcHBseSk7XHJcbiAgfVxyXG5cclxuICAvLyBUb2dnbGUvc2V0IHRoZSBtdXRlIHN3aXRjaCBhbmQgaW1tZWRpYXRlbHkgYXBwbHkgaXQuXHJcbiAgc2V0SW5jb21pbmdNdXRlZChtdXRlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0luY29taW5nTXV0ZWQgPSBtdXRlZDtcclxuICAgIHRoaXMuYXBwbHlJbmNvbWluZ011dGUoKTtcclxuICAgIGlmIChtdXRlZCkge1xyXG4gICAgICAvLyBkZXZpY2UuYXVkaW8uaW5jb21pbmcoZmFsc2UpIG9ubHkgcHJldmVudHMgZnV0dXJlIHJpbmdzIOKAlCBpdCBkb2VzIE5PVCBzdG9wXHJcbiAgICAgIC8vIGEgY2FsbCB0aGF0IGlzIGFscmVhZHkgcmluZ2luZy4gU3RvcCB0aGUgYWN0aXZlIHJpbmcgZGlyZWN0bHkgdmlhIHNvdW5kY2FjaGUuXHJcbiAgICAgIGNvbnN0IHN0b3BSaW5nID0gKGRldjogYW55KSA9PiB7XHJcbiAgICAgICAgdHJ5IHsgZGV2Py5fc291bmRjYWNoZT8uZ2V0Py4oJ2luY29taW5nJyk/LnN0b3A/LigpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB9O1xyXG4gICAgICBzdG9wUmluZyh0aGlzLmRldmljZSk7XHJcbiAgICAgIHN0b3BSaW5nKHRoaXMuc3BhcmVEZXZpY2UpO1xyXG4gICAgICB0aGlzLmV4dHJhRGV2aWNlcy5mb3JFYWNoKChkZXY6IGFueSkgPT4gc3RvcFJpbmcoZGV2KSk7XHJcbiAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5mb3JFYWNoKChkZXY6IGFueSkgPT4gc3RvcFJpbmcoZGV2KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRJbmNvbWluZ1BhcnRpY2lwYW50KHBhcnRpY2lwYW50SWQ6IHN0cmluZywgY29uZmVyZW5jZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKX0pLFxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFtdPihgJHtlbnZpcm9ubWVudC5hcGlVcmx9L3V0aWxpdGllcy9leHQvYWRkL2luY29taW5nL3BhcnRpY2lwYW50LyR7cGFydGljaXBhbnRJZH0vJHtjb25mZXJlbmNlSWR9YCxodHRwT3B0aW9ucyk7XHJcbiAgfSBcclxuICBjb25uZWN0KGRhdGE/OiBhbnkpe1xyXG4gICAgaWYgKHRoaXMuZGV2aWNlLl9hY3RpdmVDYWxsKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCcyNDQtdGVzdCcpXHJcbiAgICAgIHRoaXMuZGV2aWNlLmRpc2Nvbm5lY3RBbGwoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmRldmljZS5jb25uZWN0KHtcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgVG9rZW46IHRoaXMuY29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlSWQgfHwgZGF0YS5jb25mZXJlbmNlSWQsXHJcbiAgICAgICAgQ29uZmVyZW5jZU5hbWU6IHRoaXMuY29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlTmFtZSB8fCBkYXRhLmNvbmZlcmVuY2VOYW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIHJ0Y0NvbnN0cmFpbnRzOiB7IGF1ZGlvOiB7IGRldmljZUlkOiAnZGVmYXVsdCcgfSB9LFxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIl19