@agilemotion/oui-react-js 2.0.19 → 2.0.21

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.
@@ -10,7 +10,7 @@ var _Utils = _interopRequireDefault(require("../../Utils"));
10
10
  var _VCEventType = require("./VCEventType");
11
11
  var _VCEventManager = _interopRequireDefault(require("./VCEventManager"));
12
12
  var _VCRoomRecorder = _interopRequireDefault(require("./VCRoomRecorder"));
13
- var _MediaSoupHelper = _interopRequireDefault(require("./MediaSoupHelper"));
13
+ var _MediaSoupHelper = _interopRequireWildcard(require("./MediaSoupHelper"));
14
14
  var _Tracks = _interopRequireDefault(require("./Tracks"));
15
15
  var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
16
16
  var _Icon = _interopRequireDefault(require("../Icon"));
@@ -84,7 +84,6 @@ const VCRoomParticipant = props => {
84
84
  const unmountedRef = (0, _react.useRef)(false);
85
85
  const showVideo = true;
86
86
  const {
87
- consumerTransport,
88
87
  device,
89
88
  participants
90
89
  } = props;
@@ -177,24 +176,26 @@ const VCRoomParticipant = props => {
177
176
  const onAVSettingsChange = payload => {
178
177
  if (props.data.userId === payload.userId) {
179
178
  if (props.isCurrentUser) {
179
+ // The icon must reflect the ACTUAL producer, not the requested state:
180
+ // - mute: flip the icon only once stopProducing confirms the producer is
181
+ // closed and the track stopped (its success callback) — so we never show
182
+ // "muted" while audio is still going out.
183
+ // - unmute: produce() flips the icon off only after the producer is created.
180
184
  if (payload.audioMuted) {
181
- stopProducing('audio');
182
- } else {
183
- if (device) {
184
- produce('audio');
185
- }
185
+ stopProducing('audio', () => setAudioMuted(true));
186
+ } else if (device) {
187
+ produce('audio');
186
188
  }
187
189
  if (payload.videoMuted) {
188
- stopProducing('video');
189
- } else {
190
- if (device) {
191
- produce('video');
192
- }
190
+ stopProducing('video', () => setVideoMuted(true));
191
+ } else if (device) {
192
+ produce('video');
193
193
  }
194
+ } else {
195
+ setAudioMuted(payload.audioMuted);
196
+ setVideoMuted(payload.videoMuted);
194
197
  }
195
- setAudioMuted(payload.audioMuted);
196
- setVideoMuted(payload.videoMuted);
197
- } else if (props.isCurrentUser) {}
198
+ }
198
199
  };
199
200
  (0, _react.useEffect)(() => {
200
201
  if (props.data && !_Utils.default.isNull(props.data.avatarId) && props.data.avatarId !== 'undefined' && props.data.avatarId !== 'null') {
@@ -202,10 +203,18 @@ const VCRoomParticipant = props => {
202
203
  }
203
204
  }, [props.data]);
204
205
  (0, _react.useEffect)(() => {
205
- setAudioMuted(props.audioMuted);
206
+ // Remote tiles reflect the peer's reported state. The CURRENT user's icon is NOT
207
+ // synced from props — it is driven only by the actual producer (mute shows once the
208
+ // producer is confirmed stopped; unmute once produce() succeeds), so the icon can
209
+ // never claim "muted" while audio is still being produced.
210
+ if (!props.isCurrentUser) {
211
+ setAudioMuted(props.audioMuted);
212
+ }
206
213
  }, [props.audioMuted]);
207
214
  (0, _react.useEffect)(() => {
208
- setVideoMuted(props.videoMuted);
215
+ if (!props.isCurrentUser) {
216
+ setVideoMuted(props.videoMuted);
217
+ }
209
218
  }, [props.videoMuted]);
210
219
  (0, _react.useEffect)(() => {
211
220
  if (producerTransport) {
@@ -241,26 +250,19 @@ const VCRoomParticipant = props => {
241
250
  }
242
251
  }, [selectedAudioDevice]);
243
252
  (0, _react.useEffect)(() => {
244
- if (consumerTransport) {
245
- console.log('TRANSI ARRIVED WITH PRODUCERS : ', props.data.producers);
253
+ // Once the Device is ready, consume the producers we already know about
254
+ // and replay any that arrived before we were ready. Recv transports
255
+ // themselves are created just-in-time inside consume() (per kind), so the
256
+ // trigger here is the Device, not a transport.
257
+ if (device) {
258
+ console.log('DEVICE READY WITH PRODUCERS : ', props.data.producers);
246
259
  if (props.data.producers) {
247
260
  onNewProducers(props.data.producers, true);
248
261
  }
249
262
  onNewProducers(failedProducersDueToNullTransport, true);
250
263
  failedProducersDueToNullTransport.splice(0, failedProducersDueToNullTransport.length);
251
- if (producers) {
252
- console.log('RE-INSTATING CONSUMERS');
253
- for (let [key, value] of producers) {
254
- console.log('PROCESSING PRODUCER OF TYPE : ' + key + ' : ' + value.id);
255
- if (!(props.data.producers && (void 0).props.data.producers.find(p => p.producerId === value.id))) {
256
- consume(value.id, key, true, value.userId);
257
- } else {
258
- console.log('PRODUCER ALREADY PROCESSED');
259
- }
260
- }
261
- }
262
264
  }
263
- }, [consumerTransport]);
265
+ }, [device]);
264
266
  const createProducerTransport = async () => {
265
267
  setProducerTransport(await _MediaSoupHelper.default.initProducerTransport(props.device, props.meetingId, _ApplicationManager.default.getUserDetails().username));
266
268
  };
@@ -395,8 +397,28 @@ const VCRoomParticipant = props => {
395
397
  producer = await producerTransport.produce(params);
396
398
  } catch (e) {
397
399
  console.log(e);
400
+ // Stop the just-captured track so the mic/cam isn't left live after a failed produce.
401
+ track.stop();
402
+ // A fatal RTP-extension collision on createOffer can't be recovered in-place;
403
+ // ask the user to rejoin. The icon is NOT flipped to unmuted (produce failed).
404
+ if ((0, _MediaSoupHelper.isRtpCollisionError)(e)) {
405
+ _VCEventManager.default.fireEvent(_VCEventType.VCEventType.SYSTEM_ALERT, {
406
+ payload: {
407
+ message: _MediaSoupHelper.REJOIN_ALERT_MESSAGE
408
+ }
409
+ });
410
+ }
411
+ return;
398
412
  }
399
413
  if (producer) {
414
+ // Producing is confirmed — now (and only now) clear the muted icon for this kind.
415
+ if (props.isCurrentUser) {
416
+ if (type === 'audio') {
417
+ setAudioMuted(false);
418
+ } else if (type === 'video') {
419
+ setVideoMuted(false);
420
+ }
421
+ }
400
422
  producerTransport.getStats().then(data => console.log(data));
401
423
  producers.set(type, producer);
402
424
  if (type === 'video') {
@@ -422,7 +444,7 @@ const VCRoomParticipant = props => {
422
444
  const consumeFailedProducers = () => {
423
445
  setTimeout(function () {
424
446
  if (unmountedRef.current) return;
425
- if (consumerTransport) {
447
+ if (device) {
426
448
  onNewProducers(failedProducersDueToNullTransport, true);
427
449
  failedProducersDueToNullTransport.splice(0, failedProducersDueToNullTransport.length);
428
450
  consumeFailedProducers();
@@ -432,6 +454,11 @@ const VCRoomParticipant = props => {
432
454
  const stopProducing = (type, callback) => {
433
455
  if (!producers.has(type)) {
434
456
  console.log('There is no producer for this type ' + type);
457
+ // Nothing is being produced, so the stop is trivially satisfied — let the
458
+ // caller (e.g. the mute toggle) treat this as a confirmed "stopped".
459
+ if (callback) {
460
+ callback();
461
+ }
435
462
  return;
436
463
  }
437
464
  let producerId = producers.get(type).id;
@@ -458,7 +485,7 @@ const VCRoomParticipant = props => {
458
485
  let loading = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
459
486
  console.log("====== PRODUCERS RECEIVED : [ " + JSON.stringify(producers) + " ] =======");
460
487
  for (const producer of producers) {
461
- if (consumerTransport) {
488
+ if (device) {
462
489
  if (producer.userId === props.data.userId) {
463
490
  if (producer.kind === 'video' && !producer.screenSharing) {
464
491
  console.log('CALLING CONSUME FROM ON NEW PRODUCERS FOR : ' + props.data.userId + ' - ' + producer.producerId);
@@ -521,7 +548,16 @@ const VCRoomParticipant = props => {
521
548
  }
522
549
  const consume = async function (producerId, kind, loading, userId) {
523
550
  let retries = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
524
- _MediaSoupHelper.default.getConsumeStream(producerId, device.rtpCapabilities, consumerTransport, props.meetingId, _ApplicationManager.default.getUserDetails().username, kind).then(_ref => {
551
+ // Get (and lazily create) the recv transport for this kind. audio and
552
+ // video ride separate transports, so a closed consumer's m-section is
553
+ // never recycled across kinds — which is what triggered the RTP
554
+ // extension-id collision.
555
+ const transport = await props.getRecvTransport(kind);
556
+ if (!transport) {
557
+ retryConsume(kind, userId, new Error('recv transport unavailable for ' + kind), retries, producerId, loading);
558
+ return;
559
+ }
560
+ _MediaSoupHelper.default.getConsumeStream(producerId, device.rtpCapabilities, transport, props.meetingId, _ApplicationManager.default.getUserDetails().username, kind).then(_ref => {
525
561
  let {
526
562
  consumer,
527
563
  stream,
@@ -819,4 +855,4 @@ const VCRoomParticipant = props => {
819
855
  })));
820
856
  };
821
857
  var _default = exports.default = VCRoomParticipant;
822
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX1ZDRXZlbnRUeXBlIiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX1ZDUm9vbVJlY29yZGVyIiwiX01lZGlhU291cEhlbHBlciIsIl9UcmFja3MiLCJfSWNvbkJ1dHRvbiIsIl9JY29uIiwiX2ljb25zTWF0ZXJpYWwiLCJfVG9vbHRpcCIsIl9tYXRlcmlhbCIsIl9Tb2NrZXRNYW5hZ2VyIiwiX0J1dHRvbiIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfYXVkaW9MZXZlbE1ldGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidCIsIldlYWtNYXAiLCJyIiwibiIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiU1BFQUtJTkdfTEVWRUwiLCJWSURFT19DT0RFQ19PUFRJT05TIiwiZXhwb3J0cyIsInZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlIiwiVklERU9fQ09OU1RSQUlOVFMiLCJhdWRpbyIsInZpZGVvIiwid2lkdGgiLCJtaW4iLCJpZGVhbCIsImhlaWdodCIsIlZJREVPX0VOQ09ESU5HUyIsInJpZCIsIm1heEJpdHJhdGUiLCJzY2FsYWJpbGl0eU1vZGUiLCJsb2NhdGlvbiIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJWQ1Jvb21QYXJ0aWNpcGFudCIsInByb3BzIiwiaGFuZFJhaXNlZCIsInNldEhhbmRSYWlzZWQiLCJSZWFjdCIsInVzZVN0YXRlIiwidmlkZW9NdXRlZCIsInNldFZpZGVvTXV0ZWQiLCJhdWRpb011dGVkIiwic2V0QXVkaW9NdXRlZCIsInByb2R1Y2VyVHJhbnNwb3J0Iiwic2V0UHJvZHVjZXJUcmFuc3BvcnQiLCJ2aWRlb1JlZnJlc2hlciIsInNldFZpZGVvUmVmcmVzaGVyIiwicHJvZHVjZXJzIiwiTWFwIiwiZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0IiwiYXVkaW9EZXZpY2VzIiwic2V0QXVkaW9EZXZpY2VzIiwic2VsZWN0ZWRBdWRpb0RldmljZSIsInNldFNlbGVjdGVkQXVkaW9EZXZpY2UiLCJjb25zdW1lcnMiLCJzb3VuZExldmVsIiwic2V0U291bmRMZXZlbCIsImV2ZW50SGFuZGxlciIsInZpZGVvUmVmIiwidXNlUmVmIiwidmlkZW9TdHJlYW0iLCJhdWRpb1JlZiIsInRyYWNrcyIsIlRyYWNrcyIsInNvdW5kTGV2ZWxDb3VudGVyIiwibWV0ZXJzIiwidW5tb3VudGVkUmVmIiwic2hvd1ZpZGVvIiwiY29uc3VtZXJUcmFuc3BvcnQiLCJkZXZpY2UiLCJwYXJ0aWNpcGFudHMiLCJudW1iZXJPZkluVmlld1BhcnRpY2lwYW50cyIsImFuY2hvckVsIiwic2V0QW5jaG9yRWwiLCJvcGVuTW9yZUFjdGlvbnMiLCJCb29sZWFuIiwiZG93bmxvYWRVcmwiLCJzZXREb3dubG9hZFVybCIsImhhbmRsZXIiLCJpZCIsImRhdGEiLCJ1c2VySWQiLCJvbiIsImV2ZW50VHlwZSIsImJlIiwiVkNFdmVudFR5cGUiLCJBVURJT19WSVNVQUxfU0VUVElOR1NfQ0hBTkdFRCIsIm9uQVZTZXR0aW5nc0NoYW5nZSIsInBheWxvYWQiLCJSQUlTRV9IQU5EIiwib25SYWlzZUhhbmQiLCJMT1dFUl9IQU5EIiwib25Mb3dlckhhbmQiLCJORVdfUFJPRFVDRVJTIiwib25OZXdQcm9kdWNlcnMiLCJDT05TVU1FUl9DTE9TRUQiLCJjb25zdW1lcklkIiwicmVtb3ZlQ29uc3VtZXIiLCJraW5kIiwiQVVESU9fTEVWRUwiLCJsZXZlbCIsImhhbmRsZUNsaWNrRGV2aWNlc0ljb24iLCJldmVudCIsImN1cnJlbnRUYXJnZXQiLCJjaGFuZ2VBdWRpb0RldmljZSIsInVzZUVmZmVjdCIsImFwaSIsImN1cnJlbnQiLCJzcmNPYmplY3QiLCJzb3VuZE1vbml0b3IiLCJpblZpZXciLCJoYW5kbGVDbG9zZURldmljZU1lbnUiLCJpc0N1cnJlbnRVc2VyIiwic3RvcFByb2R1Y2luZyIsInByb2R1Y2UiLCJVdGlscyIsImlzTnVsbCIsImF2YXRhcklkIiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiZ2V0Q29udGV4dFJvb3QiLCJzZXNzaW9uU3RvcmFnZSIsImdldEl0ZW0iLCJvbkF1ZGlvRGV2aWNlQ2hhbmdlIiwiY3JlYXRlUHJvZHVjZXJUcmFuc3BvcnQiLCJjb25zb2xlIiwibG9nIiwic3BsaWNlIiwibGVuZ3RoIiwia2V5IiwidmFsdWUiLCJmaW5kIiwicCIsInByb2R1Y2VySWQiLCJjb25zdW1lIiwibWVkaWFTb3VwSGVscGVyIiwiaW5pdFByb2R1Y2VyVHJhbnNwb3J0IiwibWVldGluZ0lkIiwiZ2V0VXNlckRldGFpbHMiLCJ1c2VybmFtZSIsImhhbmRsZURldmljZXNDaGFuZ2VkIiwiZGV2aWNlcyIsImF1ZGlvRGV2aWNlTGlzdCIsImZvckVhY2giLCJwdXNoIiwiZGV2aWNlSWQiLCJsYWJlbCIsInZjRXZlbnRNYW5hZ2VyIiwicmVtb3ZlU3Vic2NyaXB0aW9ucyIsImFkZFN1YnNjcmlwdGlvbnMiLCJuYXZpZ2F0b3IiLCJtZWRpYURldmljZXMiLCJvbmRldmljZWNoYW5nZSIsImVudW1lcmF0ZURldmljZXMiLCJ0aGVuIiwiY29uc3VtZUZhaWxlZFByb2R1Y2VycyIsInN0b3AiLCJjbGVhciIsInN0YXJ0TWV0ZXIiLCJzdHJlYW0iLCJzdG9wTWV0ZXIiLCJzdGFydEF1ZGlvTGV2ZWxNZXRlciIsImZpcmVFdmVudCIsImRlbGV0ZSIsInR5cGUiLCJlcnJvciIsImNhblByb2R1Y2UiLCJtZWRpYUNvbnN0cmFpbnRzIiwiZ2V0VXNlck1lZGlhIiwidHJhY2siLCJnZXRBdWRpb1RyYWNrcyIsImdldFZpZGVvVHJhY2tzIiwicGFyYW1zIiwiaXNIb3N0IiwibWVkaWFSZWNvcmRlciIsImFkZFRyYWNrIiwic2V0QXVkaW9UcmFjayIsImVuY29kaW5ncyIsImNvZGVjT3B0aW9ucyIsInNldFZpZGVvVHJhY2siLCJwcm9kdWNlciIsImdldFN0YXRzIiwiZ2V0VHJhY2tzIiwic2V0VGltZW91dCIsImNhbGxiYWNrIiwiY2xvc2UiLCJzdG9wVmlkZW9UcmFjayIsInN0b3BBdWRpb1RyYWNrIiwic29ja2V0TWFuYWdlciIsImVtaXRFdmVudCIsIlBST0RVQ0VSX0NMT1NFRCIsInJvb21JZCIsImNhdGNoIiwibG9hZGluZyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzY3JlZW5TaGFyaW5nIiwiYXVkaW9FbGVtZW50IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInJlbW92ZVRyYWNrIiwiZWxlbWVudEJ5SWQiLCJyZW1vdmVDaGlsZCIsInJldHJ5Q29uc3VtZSIsInJldHJpZXMiLCJnZXRDb25zdW1lU3RyZWFtIiwicnRwQ2FwYWJpbGl0aWVzIiwiX3JlZiIsImNvbnN1bWVyIiwiY3JlYXRlRWxlbWVudCIsInBsYXlzaW5saW5lIiwiYXV0b3BsYXkiLCJhcHBlbmRDaGlsZCIsInRyYWNrRW5kZWRQYXJ0aWNpcGFudCIsIkVycm9yIiwiZ2V0UGFydGljaXBhbnROYW1lIiwibmFtZSIsImNvbmNhdCIsIkZyYWdtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJwYWRkaW5nIiwicG9zaXRpb24iLCJib3JkZXJSYWRpdXMiLCJvdmVyZmxvdyIsImJveFNpemluZyIsImJhY2tncm91bmRDb2xvciIsImJvcmRlciIsImdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yIiwiYm94U2hhZG93IiwidHJhbnNpdGlvbiIsIm1hcmdpbkJvdHRvbSIsInNpemluZyIsImNvbG9yIiwiZm9udFNpemUiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kSW1hZ2UiLCJnZXRJbml0aWFscyIsImF1dG9QbGF5IiwicmVmIiwibXV0ZWQiLCJvYmplY3RGaXQiLCJ0cmFuc2Zvcm0iLCJ6SW5kZXgiLCJkaXNwbGF5IiwibGVmdCIsImJvdHRvbSIsImFsaWduSXRlbXMiLCJnYXAiLCJtYXhXaWR0aCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Iiwid2hpdGVTcGFjZSIsInRleHRPdmVyZmxvdyIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsImp1c3RpZnlDb250ZW50Iiwib25DbGljayIsIm9uSG9zdEF1ZGlvTXV0ZSIsIm9uSG9zdFZpZGVvTXV0ZSIsInRpdGxlIiwiUGFuVG9vbCIsIk1lbnUiLCJvcGVuIiwib25DbG9zZSIsIlBhcGVyUHJvcHMiLCJlbGV2YXRpb24iLCJzeCIsImZpbHRlciIsIm10IiwibWwiLCJtciIsImNvbnRlbnQiLCJ0b3AiLCJyaWdodCIsImJnY29sb3IiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJhbmNob3JPcmlnaW4iLCJtYXAiLCJpbmRleCIsIk1lbnVJdGVtIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbWVkaWEvVkNSb29tUGFydGljaXBhbnQuanN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xuaW1wb3J0IFJlYWN0LCB7dXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgJy4vVkNSb29tUGFydGljaXBhbnQuY3NzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5pbXBvcnQge1ZDRXZlbnRUeXBlfSBmcm9tICcuL1ZDRXZlbnRUeXBlJztcbmltcG9ydCB2Y0V2ZW50TWFuYWdlciBmcm9tICcuL1ZDRXZlbnRNYW5hZ2VyJztcbmltcG9ydCBtZWRpYVJlY29yZGVyIGZyb20gJy4vVkNSb29tUmVjb3JkZXInO1xuaW1wb3J0IG1lZGlhU291cEhlbHBlciBmcm9tICcuL01lZGlhU291cEhlbHBlcic7XG5pbXBvcnQgVHJhY2tzIGZyb20gJy4vVHJhY2tzJztcbmltcG9ydCBJY29uQnV0dG9uIGZyb20gJ0BtdWkvbWF0ZXJpYWwvSWNvbkJ1dHRvbic7XG5pbXBvcnQgSWNvbiBmcm9tICcuLi9JY29uJztcbmltcG9ydCB7UGFuVG9vbH0gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbCc7XG5pbXBvcnQgVG9vbHRpcCBmcm9tICdAbXVpL21hdGVyaWFsL1Rvb2x0aXAnO1xuaW1wb3J0IHtNZW51LCBNZW51SXRlbX0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgc29ja2V0TWFuYWdlciBmcm9tICcuLi9Tb2NrZXRNYW5hZ2VyJztcbmltcG9ydCBCdXR0b24gZnJvbSAnQG11aS9tYXRlcmlhbC9CdXR0b24nO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IHtzdGFydEF1ZGlvTGV2ZWxNZXRlcn0gZnJvbSAnLi9hdWRpb0xldmVsTWV0ZXInO1xuXG5jb25zdCBTUEVBS0lOR19MRVZFTCA9IDY7XG5cbmV4cG9ydCBjb25zdCBWSURFT19DT0RFQ19PUFRJT05TID0ge1xuICAgIHZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlOiAxMDAwXG59O1xuXG5leHBvcnQgY29uc3QgVklERU9fQ09OU1RSQUlOVFMgPSB7XG4gICAgYXVkaW86IGZhbHNlLFxuICAgIHZpZGVvOiB7XG4gICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgICBtaW46IDY0MCxcbiAgICAgICAgICAgIGlkZWFsOiAxOTIwXG4gICAgICAgIH0sXG4gICAgICAgIGhlaWdodDoge1xuICAgICAgICAgICAgbWluOiA0MDAsXG4gICAgICAgICAgICBpZGVhbDogMTA4MFxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IFZJREVPX0VOQ09ESU5HUyA9IFtcbiAgICB7XG4gICAgICAgIHJpZDogJ3IwJyxcbiAgICAgICAgbWF4Qml0cmF0ZTogMjAwMDAsXG4gICAgICAgIC8vc2NhbGVSZXNvbHV0aW9uRG93bkJ5OiAxMC4wLFxuICAgICAgICBzY2FsYWJpbGl0eU1vZGU6ICdTMVQzJ1xuICAgIH0sXG4gICAge1xuICAgICAgICByaWQ6ICdyMScsXG4gICAgICAgIG1heEJpdHJhdGU6IDE1MDAwMCxcbiAgICAgICAgc2NhbGFiaWxpdHlNb2RlOiAnUzFUMydcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcmlkOiAncjInLFxuICAgICAgICBtYXhCaXRyYXRlOiA0NTAwMDAsXG4gICAgICAgIHNjYWxhYmlsaXR5TW9kZTogJ1MxVDMnXG4gICAgfVxuXTtcblxuY29uc3QgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuY29uc3QgVkNSb29tUGFydGljaXBhbnQgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCBbaGFuZFJhaXNlZCwgc2V0SGFuZFJhaXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3ZpZGVvTXV0ZWQsIHNldFZpZGVvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMudmlkZW9NdXRlZCk7XG4gICAgY29uc3QgW2F1ZGlvTXV0ZWQsIHNldEF1ZGlvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMuYXVkaW9NdXRlZCk7XG4gICAgY29uc3QgW3Byb2R1Y2VyVHJhbnNwb3J0LCBzZXRQcm9kdWNlclRyYW5zcG9ydF0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5wcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgY29uc3QgW3ZpZGVvUmVmcmVzaGVyLCBzZXRWaWRlb1JlZnJlc2hlcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3Byb2R1Y2Vyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnRdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFthdWRpb0RldmljZXMsIHNldEF1ZGlvRGV2aWNlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3NlbGVjdGVkQXVkaW9EZXZpY2UsIHNldFNlbGVjdGVkQXVkaW9EZXZpY2VdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2NvbnN1bWVyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtzb3VuZExldmVsLCBzZXRTb3VuZExldmVsXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtldmVudEhhbmRsZXJdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IHZpZGVvUmVmID0gdXNlUmVmKCk7XG4gICAgY29uc3QgdmlkZW9TdHJlYW0gPSB1c2VSZWYoKTtcbiAgICBjb25zdCBhdWRpb1JlZiA9IHVzZVJlZigpO1xuICAgIGNvbnN0IHRyYWNrcyA9IHVzZVJlZihuZXcgVHJhY2tzKCkpO1xuICAgIGNvbnN0IHNvdW5kTGV2ZWxDb3VudGVyID0gdXNlUmVmKDApO1xuICAgIC8vIEFjdGl2ZS1zcGVha2VyIG1ldGVyczogdGhpcyAoc2VsZikgdGlsZSBpcyB0aGUgYXVkaW8gaHViIOKAlCBpdCBjb25zdW1lc1xuICAgIC8vIGV2ZXJ5IHBhcnRpY2lwYW50J3MgYXVkaW8gKyBwcm9kdWNlcyB0aGUgbG9jYWwgbWljIOKAlCBzbyBpdCBydW5zIHRoZSBsZXZlbFxuICAgIC8vIG1ldGVycyBhbmQgYnJvYWRjYXN0cyB7dXNlcklkLCBsZXZlbH0gZm9yIGVhY2ggdGlsZSB0byBoaWdobGlnaHQgaXRzZWxmLlxuICAgIGNvbnN0IG1ldGVycyA9IHVzZVJlZihuZXcgTWFwKCkpO1xuICAgIC8vIFNldCBvbiB1bm1vdW50IHNvIHRoZSByZWN1cnNpdmUgY29uc3VtZS9yZXRyeSBzZXRUaW1lb3V0IGxvb3BzIHN0b3BcbiAgICAvLyByZS1zY2hlZHVsaW5nIChvdGhlcndpc2UgdGhleSBwb2xsL3JldHJ5IGZvcmV2ZXIgYWZ0ZXIgdGhlIHRpbGUgaXMgZ29uZSkuXG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzaG93VmlkZW8gPSB0cnVlO1xuICAgIGNvbnN0IHtcbiAgICAgICAgY29uc3VtZXJUcmFuc3BvcnQsXG4gICAgICAgIGRldmljZSxcbiAgICAgICAgcGFydGljaXBhbnRzXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHtudW1iZXJPZkluVmlld1BhcnRpY2lwYW50c30gPSBwcm9wcztcbiAgICBjb25zdCBbYW5jaG9yRWwsIHNldEFuY2hvckVsXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IG9wZW5Nb3JlQWN0aW9ucyA9IEJvb2xlYW4oYW5jaG9yRWwpO1xuXG4gICAgY29uc3QgW2Rvd25sb2FkVXJsLCBzZXREb3dubG9hZFVybF0gPSB1c2VTdGF0ZShudWxsKTtcblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXQgaWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtZWV0aW5nLXBhcnRpY2lwYW50LScgKyBwcm9wcy5kYXRhLnVzZXJJZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjogKGV2ZW50VHlwZSwgYmUpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkFVRElPX1ZJU1VBTF9TRVRUSU5HU19DSEFOR0VEOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25BVlNldHRpbmdzQ2hhbmdlKGJlLnBheWxvYWQgPyBiZS5wYXlsb2FkIDogYmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuUkFJU0VfSEFORDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUmFpc2VIYW5kKGJlLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuTE9XRVJfSEFORDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTG93ZXJIYW5kKGJlLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuTkVXX1BST0RVQ0VSUzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTmV3UHJvZHVjZXJzKGJlLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuQ09OU1VNRVJfQ0xPU0VEOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVycy5oYXMoYmUucGF5bG9hZC5jb25zdW1lcklkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGJlLnBheWxvYWQuY29uc3VtZXJJZCwgYmUucGF5bG9hZC5raW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkFVRElPX0xFVkVMOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJlLnBheWxvYWQgJiYgYmUucGF5bG9hZC51c2VySWQgPT09IHByb3BzLmRhdGEudXNlcklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U291bmRMZXZlbChiZS5wYXlsb2FkLmxldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlQ2xpY2tEZXZpY2VzSWNvbiA9IChldmVudCkgPT4ge1xuICAgICAgICBzZXRBbmNob3JFbChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hhbmdlQXVkaW9EZXZpY2UgPSAoZGV2aWNlKSA9PiB7XG4gICAgICAgIHNldFNlbGVjdGVkQXVkaW9EZXZpY2UoZGV2aWNlKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25SYWlzZUhhbmQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgIHNldEhhbmRSYWlzZWQodHJ1ZSk7XG4gICAgICAgICAgICBwcm9wcy5kYXRhLmhhbmRSYWlzZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTG93ZXJIYW5kID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC51c2VySWQgPT09IHByb3BzLmRhdGEudXNlcklkKSB7XG4gICAgICAgICAgICBzZXRIYW5kUmFpc2VkKGZhbHNlKTtcbiAgICAgICAgICAgIHByb3BzLmRhdGEuaGFuZFJhaXNlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGV2ZW50SGFuZGxlci5hcGkgPSBoYW5kbGVyKCk7XG4gICAgfSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAodmlkZW9SZWYuY3VycmVudCAmJiB2aWRlb1N0cmVhbS5jdXJyZW50KSB7XG4gICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHZpZGVvU3RyZWFtLmN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICB9LCBbdmlkZW9SZWYuY3VycmVudF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLnNvdW5kTW9uaXRvciAmJiAhcHJvcHMuaW5WaWV3KSB7XG4gICAgICAgICAgICBpZiAoc291bmRMZXZlbCA+IDMpIHtcbiAgICAgICAgICAgICAgICBzb3VuZExldmVsQ291bnRlci5jdXJyZW50ID0gMTA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNvdW5kTGV2ZWxDb3VudGVyLmN1cnJlbnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgc291bmRMZXZlbENvdW50ZXIuY3VycmVudC0tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9wcy5zb3VuZE1vbml0b3IocHJvcHMuZGF0YS51c2VySWQsIHNvdW5kTGV2ZWxDb3VudGVyLmN1cnJlbnQgPT09IDAgfHwgYXVkaW9NdXRlZCk7XG4gICAgICAgIH1cbiAgICB9LCBbc291bmRMZXZlbF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGF1ZGlvTXV0ZWQpIHtcbiAgICAgICAgICAgIHNldFNvdW5kTGV2ZWwoMCk7XG4gICAgICAgICAgICBpZiAocHJvcHMuc291bmRNb25pdG9yICYmICFwcm9wcy5pblZpZXcpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5zb3VuZE1vbml0b3IocHJvcHMuZGF0YS51c2VySWQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW2F1ZGlvTXV0ZWRdKTtcblxuICAgIGNvbnN0IGhhbmRsZUNsb3NlRGV2aWNlTWVudSA9ICgpID0+IHtcbiAgICAgICAgc2V0QW5jaG9yRWwobnVsbCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQVZTZXR0aW5nc0NoYW5nZSA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5kYXRhLnVzZXJJZCA9PT0gcGF5bG9hZC51c2VySWQpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCdhdWRpbycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC52aWRlb011dGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ3ZpZGVvJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRldmljZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZSgndmlkZW8nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0QXVkaW9NdXRlZChwYXlsb2FkLmF1ZGlvTXV0ZWQpO1xuICAgICAgICAgICAgc2V0VmlkZW9NdXRlZChwYXlsb2FkLnZpZGVvTXV0ZWQpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLmRhdGEgJiYgIVV0aWxzLmlzTnVsbChwcm9wcy5kYXRhLmF2YXRhcklkKVxuICAgICAgICAgICAgJiYgcHJvcHMuZGF0YS5hdmF0YXJJZCAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvcHMuZGF0YS5hdmF0YXJJZCAhPT0gJ251bGwnKSB7XG4gICAgICAgICAgICBzZXREb3dubG9hZFVybChsb2NhdGlvbiArIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgJy9kb2NzL2FwaS92MS9tYW5hZ2VyL2Rvd25sb2FkLycgKyBwcm9wcy5kYXRhLmF2YXRhcklkICtcbiAgICAgICAgICAgICAgICAnP2FjY2Vzc190b2tlbj0nICsgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWNjZXNzVG9rZW4nKSArICcmaWRUb2tlbj0nICsgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaWRUb2tlbicpKTtcbiAgICAgICAgfVxuICAgIH0sIFtwcm9wcy5kYXRhXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRBdWRpb011dGVkKHByb3BzLmF1ZGlvTXV0ZWQpO1xuICAgIH0sIFtwcm9wcy5hdWRpb011dGVkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRWaWRlb011dGVkKHByb3BzLnZpZGVvTXV0ZWQpO1xuICAgIH0sIFtwcm9wcy52aWRlb011dGVkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocHJvZHVjZXJUcmFuc3BvcnQpIHtcbiAgICAgICAgICAgIC8vIEEgKHJlKWFzc2lnbmVkIHRyYW5zcG9ydCBtZWFucyBleGlzdGluZyBwcm9kdWNlcnMgbGl2ZWQgb24gdGhlIG9sZFxuICAgICAgICAgICAgLy8gKG5vdy1jbG9zZWQpIHRyYW5zcG9ydC4gVGVhciB0aGVtIGRvd24gcHJvcGVybHkg4oCUIGNsb3NlICsgc3RvcCB0aGVcbiAgICAgICAgICAgIC8vIGxvY2FsIHRyYWNrcyArIG5vdGlmeSB0aGUgc2VydmVyIOKAlCBzbyBwcm9kdWNlKCkgcmVjcmVhdGVzIHRoZW0gb24gdGhlXG4gICAgICAgICAgICAvLyBuZXcgdHJhbnNwb3J0IGluc3RlYWQgb2YgZWFybHktcmV0dXJuaW5nLiBOby1vcCBvbiBmaXJzdCBtb3VudC5cbiAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCdhdWRpbycpO1xuXG4gICAgICAgICAgICBpZiAoIXByb3BzLnZpZGVvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICBwcm9kdWNlKCd2aWRlbycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFwcm9wcy5hdWRpb011dGVkKSB7XG4gICAgICAgICAgICAgICAgcHJvZHVjZSgnYXVkaW8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtwcm9kdWNlclRyYW5zcG9ydF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0UHJvZHVjZXJUcmFuc3BvcnQocHJvcHMucHJvZHVjZXJUcmFuc3BvcnQpO1xuICAgIH0sIFtwcm9wcy5wcm9kdWNlclRyYW5zcG9ydF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgIHByb3BzLm9uQXVkaW9EZXZpY2VDaGFuZ2Uoc2VsZWN0ZWRBdWRpb0RldmljZSk7XG4gICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCdhdWRpbycsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRBdWRpb0RldmljZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2R1Y2VyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVQcm9kdWNlclRyYW5zcG9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFhdWRpb011dGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlKCdhdWRpbycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbc2VsZWN0ZWRBdWRpb0RldmljZV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGNvbnN1bWVyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVFJBTlNJIEFSUklWRUQgV0lUSCBQUk9EVUNFUlMgOiAnLCBwcm9wcy5kYXRhLnByb2R1Y2Vycyk7XG4gICAgICAgICAgICBpZiAocHJvcHMuZGF0YS5wcm9kdWNlcnMpIHtcbiAgICAgICAgICAgICAgICBvbk5ld1Byb2R1Y2Vycyhwcm9wcy5kYXRhLnByb2R1Y2VycywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9uTmV3UHJvZHVjZXJzKGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydCwgdHJ1ZSk7XG4gICAgICAgICAgICBmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQuc3BsaWNlKDAsIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5sZW5ndGgpO1xuXG4gICAgICAgICAgICBpZiAocHJvZHVjZXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JFLUlOU1RBVElORyBDT05TVU1FUlMnKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgcHJvZHVjZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQUk9DRVNTSU5HIFBST0RVQ0VSIE9GIFRZUEUgOiAnICsga2V5ICsgJyA6ICcgKyB2YWx1ZS5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHByb3BzLmRhdGEucHJvZHVjZXJzICYmIHRoaXMucHJvcHMuZGF0YS5wcm9kdWNlcnMuZmluZCgocCkgPT4gcC5wcm9kdWNlcklkID09PSB2YWx1ZS5pZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKHZhbHVlLmlkLCBrZXksIHRydWUsIHZhbHVlLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUFJPRFVDRVIgQUxSRUFEWSBQUk9DRVNTRUQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtjb25zdW1lclRyYW5zcG9ydF0pO1xuXG4gICAgY29uc3QgY3JlYXRlUHJvZHVjZXJUcmFuc3BvcnQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIHNldFByb2R1Y2VyVHJhbnNwb3J0KGF3YWl0IG1lZGlhU291cEhlbHBlci5pbml0UHJvZHVjZXJUcmFuc3BvcnQocHJvcHMuZGV2aWNlLCBwcm9wcy5tZWV0aW5nSWQsXG4gICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVEZXZpY2VzQ2hhbmdlZCA9IChkZXZpY2VzKSA9PiB7XG4gICAgICAgIGxldCBhdWRpb0RldmljZUxpc3QgPSBbXTtcbiAgICAgICAgZGV2aWNlcy5mb3JFYWNoKChkZXZpY2UpID0+IHtcbiAgICAgICAgICAgIGlmICgnYXVkaW9pbnB1dCcgPT09IGRldmljZS5raW5kKSB7XG4gICAgICAgICAgICAgICAgYXVkaW9EZXZpY2VMaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBpZDogZGV2aWNlLmRldmljZUlkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZGV2aWNlLmxhYmVsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNldEF1ZGlvRGV2aWNlcyhhdWRpb0RldmljZUxpc3QpO1xuXG4gICAgICAgIGlmIChhdWRpb0RldmljZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRBdWRpb0RldmljZShhdWRpb0RldmljZUxpc3RbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRBdWRpb0RldmljZShudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2Y0V2ZW50TWFuYWdlci5yZW1vdmVTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHZjRXZlbnRNYW5hZ2VyLmFkZFN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyLCBWQ0V2ZW50VHlwZS5BVURJT19WSVNVQUxfU0VUVElOR1NfQ0hBTkdFRCxcbiAgICAgICAgICAgIFZDRXZlbnRUeXBlLlJBSVNFX0hBTkQsIFZDRXZlbnRUeXBlLkxPV0VSX0hBTkQsIFZDRXZlbnRUeXBlLk5FV19QUk9EVUNFUlMsIFZDRXZlbnRUeXBlLkNPTlNVTUVSX0NMT1NFRCxcbiAgICAgICAgICAgIFZDRXZlbnRUeXBlLkFVRElPX0xFVkVMKTtcblxuICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5vbmRldmljZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoZGV2aWNlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURldmljZXNDaGFuZ2VkKGRldmljZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKClcbiAgICAgICAgICAgICAgICAudGhlbigoZGV2aWNlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRGV2aWNlc0NoYW5nZWQoZGV2aWNlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgIGNvbnN1bWVGYWlsZWRQcm9kdWNlcnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnPT09PT09PT09PT09PT09PT09PT09PURFU1RST1lJTkcgUEFSVElDSVBBTlQ9PT09PT09PT09PT09PT09PT09PT09PT09IDogJyArIHByb3BzLmRhdGEudXNlcklkKTtcbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBnbG9iYWwgZGV2aWNlY2hhbmdlIGhhbmRsZXIgdGhpcyBjb21wb25lbnQgaW5zdGFsbGVkIOKAlFxuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdCBzdXJ2aXZlcyB1bm1vdW50IGFuZCBmaXJlcyBpbnRvIHN0YWxlIGNvbXBvbmVudCBzdGF0ZS5cbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLm9uZGV2aWNlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCdhdWRpbycpO1xuICAgICAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ3ZpZGVvJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBjb25zdW1lcnMpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVDb25zdW1lcihrZXksICd2aWRlbycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTdG9wIGV2ZXJ5IGF1ZGlvLWxldmVsIG1ldGVyIChzZWxmIG1pYyArIGFsbCBjb25zdW1lZCBzdHJlYW1zKS5cbiAgICAgICAgICAgIG1ldGVycy5jdXJyZW50LmZvckVhY2goKHN0b3ApID0+IHN0b3AoKSk7XG4gICAgICAgICAgICBtZXRlcnMuY3VycmVudC5jbGVhcigpO1xuXG4gICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5yZW1vdmVTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgLy8gTWV0ZXIgYSBzdHJlYW0gYW5kIGJyb2FkY2FzdCBpdHMgbGV2ZWwgdW5kZXIgYHVzZXJJZGAuIEtleWVkIHNvIHdlIGNhblxuICAgIC8vIHN0b3AvcmVwbGFjZSBpdCB3aGVuIHRoZSBjb25zdW1lciBjbG9zZXMgb3IgdGhlIHByb2R1Y2VyIHJlc3RhcnRzLlxuICAgIGNvbnN0IHN0YXJ0TWV0ZXIgPSAoa2V5LCBzdHJlYW0sIHVzZXJJZCkgPT4ge1xuICAgICAgICBzdG9wTWV0ZXIoa2V5KTtcbiAgICAgICAgY29uc3Qgc3RvcCA9IHN0YXJ0QXVkaW9MZXZlbE1ldGVyKHN0cmVhbSwgKGxldmVsKSA9PiB7XG4gICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5maXJlRXZlbnQoVkNFdmVudFR5cGUuQVVESU9fTEVWRUwsIHtwYXlsb2FkOiB7dXNlcklkLCBsZXZlbH19KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1ldGVycy5jdXJyZW50LnNldChrZXksIHN0b3ApO1xuICAgIH07XG5cbiAgICBjb25zdCBzdG9wTWV0ZXIgPSAoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3AgPSBtZXRlcnMuY3VycmVudC5nZXQoa2V5KTtcbiAgICAgICAgaWYgKHN0b3ApIHtcbiAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgIG1ldGVycy5jdXJyZW50LmRlbGV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHByb2R1Y2UgPSBhc3luYyAodHlwZSkgPT4ge1xuICAgICAgICBpZiAoIWRldmljZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTm8gYXZhaWxhYmxlIGRldmljZScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkZXZpY2UuY2FuUHJvZHVjZSgndmlkZW8nKSAmJiB0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgcHJvZHVjZSB2aWRlbycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzZWxlY3RlZEF1ZGlvRGV2aWNlICYmIHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGF1ZGlvIGRldmljZSBzZWxlY3RlZCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2R1Y2Vycy5oYXModHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQcm9kdWNlciBhbHJlYWR5IGV4aXN0cyBmb3IgdGhpcyB0eXBlICcgKyB0eXBlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtZWRpYUNvbnN0cmFpbnRzO1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgICAgICAgICBtZWRpYUNvbnN0cmFpbnRzID0ge1xuICAgICAgICAgICAgICAgICAgICBkZXZpY2VJZDogc2VsZWN0ZWRBdWRpb0RldmljZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgYXVkaW86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvOiBmYWxzZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgICAgICAgICBtZWRpYUNvbnN0cmFpbnRzID0gVklERU9fQ09OU1RSQUlOVFM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYShtZWRpYUNvbnN0cmFpbnRzKTtcbiAgICAgICAgY29uc3QgdHJhY2sgPSB0eXBlID09PSAnYXVkaW8nID8gc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0gOiBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgdHJhY2tcbiAgICAgICAgfTtcblxuICAgICAgICBhdWRpb1JlZi5jdXJyZW50ID0gc3RyZWFtO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgLy8gTWV0ZXIgdGhlIGxvY2FsIG1pYyBzbyB0aGUgc2VsZiB0aWxlIGhpZ2hsaWdodHMgd2hlbiB5b3Ugc3BlYWsuXG4gICAgICAgICAgICBzdGFydE1ldGVyKCdzZWxmLWF1ZGlvJywgc3RyZWFtLCBwcm9wcy5kYXRhLnVzZXJJZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmlzSG9zdCAmJiB0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICBtZWRpYVJlY29yZGVyLmFkZFRyYWNrKHByb3BzLmRhdGEudXNlcklkLCB0cmFjayk7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zZXRBdWRpb1RyYWNrKHRyYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICBwYXJhbXMuZW5jb2RpbmdzID0gVklERU9fRU5DT0RJTkdTO1xuICAgICAgICAgICAgcGFyYW1zLmNvZGVjT3B0aW9ucyA9IFZJREVPX0NPREVDX09QVElPTlM7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zZXRWaWRlb1RyYWNrKHRyYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcm9kdWNlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb2R1Y2VyID0gYXdhaXQgcHJvZHVjZXJUcmFuc3BvcnQucHJvZHVjZShwYXJhbXMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9kdWNlcikge1xuICAgICAgICAgICAgcHJvZHVjZXJUcmFuc3BvcnQuZ2V0U3RhdHMoKVxuICAgICAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiBjb25zb2xlLmxvZyhkYXRhKSk7XG4gICAgICAgICAgICBwcm9kdWNlcnMuc2V0KHR5cGUsIHByb2R1Y2VyKTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50ID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgIHNldFZpZGVvUmVmcmVzaGVyKCF2aWRlb1JlZnJlc2hlcik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coc3RyZWFtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvZHVjZXIub24oJ3RyYW5zcG9ydGNsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5zcmNPYmplY3QuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcHJvZHVjZXJzLmRlbGV0ZSh0eXBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBwcm9kdWNlci5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBwcm9kdWNlcnMuZGVsZXRlKHR5cGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY29uc3VtZUZhaWxlZFByb2R1Y2VycyA9ICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodW5tb3VudGVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChjb25zdW1lclRyYW5zcG9ydCkge1xuICAgICAgICAgICAgICAgIG9uTmV3UHJvZHVjZXJzKGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LnNwbGljZSgwLCBmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBjb25zdW1lRmFpbGVkUHJvZHVjZXJzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMDApO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3BQcm9kdWNpbmcgPSAodHlwZSwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKCFwcm9kdWNlcnMuaGFzKHR5cGUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVGhlcmUgaXMgbm8gcHJvZHVjZXIgZm9yIHRoaXMgdHlwZSAnICsgdHlwZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvZHVjZXJJZCA9IHByb2R1Y2Vycy5nZXQodHlwZSkuaWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDbG9zZSBwcm9kdWNlcicsIHByb2R1Y2VySWQpO1xuXG4gICAgICAgIHByb2R1Y2Vycy5nZXQodHlwZSlcbiAgICAgICAgICAgIC5jbG9zZSgpO1xuICAgICAgICBwcm9kdWNlcnMuZGVsZXRlKHR5cGUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc3RvcFZpZGVvVHJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zdG9wQXVkaW9UcmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ0NMT1NJTkcgUFJPRFVDRVIgT0YgSUQgOiAnICsgcHJvZHVjZXJJZCk7XG4gICAgICAgIHNvY2tldE1hbmFnZXIuZW1pdEV2ZW50KFZDRXZlbnRUeXBlLlBST0RVQ0VSX0NMT1NFRCwge1xuICAgICAgICAgICAgdXNlcklkOiBwcm9wcy5kYXRhLnVzZXJJZCxcbiAgICAgICAgICAgIHByb2R1Y2VySWQsXG4gICAgICAgICAgICByb29tSWQ6IHByb3BzLm1lZXRpbmdJZFxuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGNvbnNvbGUubG9nKCdQUk9EVUNFUl9DTE9TRUQgRVJST1IgOiAnLCBlKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTmV3UHJvZHVjZXJzID0gKHByb2R1Y2VycywgbG9hZGluZyA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPT09PT09IFBST0RVQ0VSUyBSRUNFSVZFRCA6IFsgXCIgKyBKU09OLnN0cmluZ2lmeShwcm9kdWNlcnMpICsgXCIgXSA9PT09PT09XCIpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb2R1Y2VyIG9mIHByb2R1Y2Vycykge1xuICAgICAgICAgICAgaWYgKGNvbnN1bWVyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLmtpbmQgPT09ICd2aWRlbycgJiYgIXByb2R1Y2VyLnNjcmVlblNoYXJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDQUxMSU5HIENPTlNVTUUgRlJPTSBPTiBORVcgUFJPRFVDRVJTIEZPUiA6ICcgKyBwcm9wcy5kYXRhLnVzZXJJZCArICcgLSAnICsgcHJvZHVjZXIucHJvZHVjZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKHByb2R1Y2VyLnByb2R1Y2VySWQsIHByb2R1Y2VyLmtpbmQsIGxvYWRpbmcsIHByb2R1Y2VyLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlciB8fCBsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzbWFsbCBwYXJ0aWNpcGFudCBib3ggYXQgdGhlIGJvdHRvbSBiZWxvbmdpbmcgdG8gdGhlIGN1cnJlbnQgdXNlciBtdXN0IGNvbnN1bWUgYWxsIGF1ZGlvXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBkaXN0dXJiIHRoZSBhdWRpbyBkdWUgdG8gYW55IHJlbmRlcmluZyBzdWNoIGFzIEJyaW5nIHRvIHZpZXdcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLmtpbmQgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUocHJvZHVjZXIucHJvZHVjZXJJZCwgcHJvZHVjZXIua2luZCwgbG9hZGluZywgcHJvZHVjZXIudXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LnB1c2gocHJvZHVjZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPT09PT09IFBST0RVQ0VSUyBUSEFUIENPVUxEIE5PVCBCRSBDT05TVU1FUyA6IFsgXCIgKyBKU09OLnN0cmluZ2lmeShmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQpICsgXCIgXSA9PT09PT09XCIpO1xuICAgIH07XG5cbiAgICBjb25zdCByZW1vdmVDb25zdW1lciA9IChjb25zdW1lcklkLCBraW5kLCB1c2VySWQpID0+IHtcbiAgICAgICAgLy8gU3RvcCBhbnkgYWN0aXZlLXNwZWFrZXIgbWV0ZXIgYXR0YWNoZWQgdG8gdGhpcyBjb25zdW1lcidzIHN0cmVhbS5cbiAgICAgICAgc3RvcE1ldGVyKGNvbnN1bWVySWQpO1xuICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgaWYgKHZpZGVvU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodmlkZW9TdHJlYW0uY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50LmdldFRyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgbGV0IGF1ZGlvRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnN1bWVySWQpO1xuICAgICAgICAgICAgaWYgKGF1ZGlvRWxlbWVudCAmJiBhdWRpb0VsZW1lbnQuc3JjT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodXNlcklkICYmIG1lZGlhUmVjb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5yZW1vdmVUcmFjayh1c2VySWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudEJ5SWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5kYXRhLnVzZXJJZCArICctYXVkaW8tZWwtY29udGFpbmVyJyk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRCeUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRCeUlkLnJlbW92ZUNoaWxkKGF1ZGlvRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3VtZXJzLmRlbGV0ZShjb25zdW1lcklkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgZSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZykge1xuICAgICAgICBjb25zb2xlLmxvZygnRkFJTEVEIFRPIENPTlNVTUUgJyArIGtpbmQgKyAnIEZST00gJyArIHVzZXJJZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuXG4gICAgICAgIGlmIChyZXRyaWVzIDwgMTApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSRS1UUllJTkcgWycgKyByZXRyaWVzICsgJ10nKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh1bm1vdW50ZWRSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN1bWUocHJvZHVjZXJJZCwga2luZCwgbG9hZGluZywgdXNlcklkLCByZXRyaWVzKTtcbiAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0NPTVBMRVRFTFkgRkFJTEVEIFRPIENPTlNVTUUgJyArIGtpbmQgKyAnIEZST00gJyArIHVzZXJJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb25zdW1lID0gYXN5bmMgKHByb2R1Y2VySWQsIGtpbmQsIGxvYWRpbmcsIHVzZXJJZCwgcmV0cmllcyA9IDApID0+IHtcbiAgICAgICAgbWVkaWFTb3VwSGVscGVyLmdldENvbnN1bWVTdHJlYW0ocHJvZHVjZXJJZCwgZGV2aWNlLnJ0cENhcGFiaWxpdGllcywgY29uc3VtZXJUcmFuc3BvcnQsIHByb3BzLm1lZXRpbmdJZCxcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lLCBraW5kKVxuICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLFxuICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAga2luZFxuICAgICAgICAgICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25zdW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJzLnNldChjb25zdW1lci5pZCwgY29uc3VtZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PUNPTlNVTUU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IDogJyArIGtpbmQgKyAnIEZPUiA6ICcgKyB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9SZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50ID0gc3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlkZW9NdXRlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlkZW9SZWZyZXNoZXIoIXZpZGVvUmVmcmVzaGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja3MuY3VycmVudC5zZXRWaWRlb1RyYWNrKHN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIgfHwgbG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXVkaW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LmlkID0gY29uc3VtZXIuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5wbGF5c2lubGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0VsZW1lbnQuYXV0b3BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVldGluZy1hdWRpby1lbC1jb250YWluZXInKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZENoaWxkKGF1ZGlvRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWV0ZXIgdGhpcyBwYXJ0aWNpcGFudCdzIGF1ZGlvIGZvciBhY3RpdmUtc3BlYWtlciBoaWdobGlnaHQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TWV0ZXIoY29uc3VtZXIuaWQsIHN0cmVhbSwgdXNlcklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMuaXNIb3N0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVJlY29yZGVyLmFkZFRyYWNrKHVzZXJJZCwgc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lci5vbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhY2tlbmRlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhraW5kICsgXCIgQ09OU1VNRVIgVFJBQ0sgRU5ERUQgRk9SIFwiICsgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoY29uc3VtZXIuaWQsIGtpbmQsIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEd1YXJkOiB0aGUgcGFydGljaXBhbnQgbWF5IGhhdmUgbGVmdCwgc28gZmluZCgpIGNhbiBiZSB1bmRlZmluZWQg4oCUXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlYWRpbmcgLnZpZGVvTXV0ZWQvLmF1ZGlvTXV0ZWQgb24gaXQgdGhyZXcuIE5vIHBhcnRpY2lwYW50IOKGkiBubyByZXRyeS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhY2tFbmRlZFBhcnRpY2lwYW50ID0gcGFydGljaXBhbnRzLmZpbmQoKHApID0+IHAudXNlcklkID09PSB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhY2tFbmRlZFBhcnRpY2lwYW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKGtpbmQgPT09ICd2aWRlbycgJiYgIXRyYWNrRW5kZWRQYXJ0aWNpcGFudC52aWRlb011dGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChraW5kID09PSAnYXVkaW8nICYmICF0cmFja0VuZGVkUGFydGljaXBhbnQuYXVkaW9NdXRlZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvbnN1bWUoa2luZCwgdXNlcklkLCBuZXcgRXJyb3IoJ3RyYWNrZW5kZWQgd2hpbGUgJyArIGtpbmQgKyAnIGlzIE5PVCBtdXRlZCcpLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc3BvcnRjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhraW5kICsgXCIgQ09OU1VNRVIgQ0xPU0VEIEZPUiBcIiArIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGNvbnN1bWVyLmlkLCBraW5kLCB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICByZXRyeUNvbnN1bWUoa2luZCwgdXNlcklkLCBlLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldFBhcnRpY2lwYW50TmFtZSA9ICgpID0+IHtcbiAgICAgICAgbGV0IG5hbWUgPSBwcm9wcy5kYXRhLm5hbWU7XG5cbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChwcm9wcy5kYXRhLnVzZXJJZCkpIHtcbiAgICAgICAgICAgIG5hbWUgPSBgJHtuYW1lfSAoR3Vlc3QpYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHsnY29sLSotKiAnICsgKHByb3BzLmlzQ3VycmVudFVzZXIgPyAnbWVldGluZy1wYXJ0aWNpcGFudC1jb250YWluZXItY3VycmVudC11c2VyJyA6ICdtZWV0aW5nLXBhcnRpY2lwYW50LWNvbnRhaW5lcicpfWB9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBwcm9wcy5wYWRkaW5nID8gcHJvcHMucGFkZGluZyA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHByb3BzLmhlaWdodCA/IHByb3BzLmhlaWdodCA6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHByb3BzLmlzQ3VycmVudFVzZXIgPyAnIzFmMjkzNycgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBwcm9wcy5pc0N1cnJlbnRVc2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnMnB4IHNvbGlkICcgKyAoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yKCkgfHwgJyMxYTNjNWUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjdGl2ZS1zcGVha2VyIGhpZ2hsaWdodDogYW4gaW5zZXQgcmluZyAodGhlIHRpbGUgY2xpcHNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJmbG93LCBzbyBhbiBvdXRzZXQgc2hhZG93IHdvdWxkIGJlIGN1dCBvZmYpLlxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAoIWF1ZGlvTXV0ZWQgJiYgc291bmRMZXZlbCA+IFNQRUFLSU5HX0xFVkVMKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2luc2V0IDAgMCAwIDNweCAnICsgKGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpIHx8ICcjMjJjNTVlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdib3gtc2hhZG93IDEyMG1zIGVhc2Utb3V0J1xuICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2aWRlb011dGVkIHx8ICF2aWRlb1JlZi5jdXJyZW50IHx8ICF2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjZW50ZXJlZC1mbGV4LWJveCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzhweCcgOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb3BzLnNpemluZyA9PT0gJ3NtJyA/ICdhdmF0YXItd3JhcHBlci1zbScgOiAnYXZhdGFyLXdyYXBwZXInfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogKHByb3BzLnNpemluZyA9PT0gJ3NtJyA/IDcyIDogMTEyKSArICdweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAocHJvcHMuc2l6aW5nID09PSAnc20nID8gNzIgOiAxMTIpICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICFhdWRpb011dGVkICYmIHNvdW5kTGV2ZWwgPiAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzAgMCAwICcgKyAoMyArIHNvdW5kTGV2ZWwgLyAxMikgKyAncHggJyArIChhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IoKSB8fCAnIzAwNDc2YScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdib3gtc2hhZG93IDkwbXMgbGluZWFyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjM2E0NjU0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5zaXppbmcgPT09ICdtZCcgPyAnYXZhdGFyIGF2YXRhci1tZCcgOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnYXZhdGFyIGF2YXRhci1zbScgOiAnYXZhdGFyJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnMjBweCcgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkVXJsID8gPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFJlcGVhdDogJ25vLXJlcGVhdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFNpemU6ICdjb3ZlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHtkb3dubG9hZFVybH0pYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+IDogVXRpbHMuZ2V0SW5pdGlhbHMocHJvcHMuZGF0YS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3Byb3BzLmRhdGEudXNlcklkICsgJy12aWRlbyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17NjQwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXszMjB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUGxheSByZWY9e3ZpZGVvUmVmfSBtdXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHByb3BzLmlzQ3VycmVudFVzZXIgPyAnc2NhbGVYKC0xKScgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogKHZpZGVvTXV0ZWQgfHwgIXZpZGVvUmVmLmN1cnJlbnQgfHwgIXZpZGVvUmVmLmN1cnJlbnQuc3JjT2JqZWN0KSA/ICdub25lJyA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypXZSBuZWVkIHRoaXMgZWxlbWVudCB0byBjYXB0dXJlIHJlY29yZGluZyBzb3VuZCovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXVkaW9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtwcm9wcy5kYXRhLnVzZXJJZCArICctYXVkaW8nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgcmVmPXthdWRpb1JlZn0gbXV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ25vbmUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cHJvcHMuc2l6aW5nID09PSAnc20nID8gJ25hbWUtbGFiZWwtc20nIDogJ25hbWUtbGFiZWwnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICc2cHgnIDogJzhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnZmxleC1lbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXA6ICc0cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6ICc3MCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzFweCA4cHgnIDogJzJweCAxMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzExcHgnIDogJzEzcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogMS40LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICdhdXRvJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshcHJvcHMuaXNDdXJyZW50VXNlciAmJiBnZXRQYXJ0aWNpcGFudE5hbWUoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy5pc0N1cnJlbnRVc2VyICYmICdZb3UnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXByb3BzLmlzQ3VycmVudFVzZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5MZWZ0OiAnNHB4JywgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsIGdhcDogJzRweCd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJiAhYXVkaW9NdXRlZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLm9uSG9zdEF1ZGlvTXV0ZShwcm9wcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydNSUMnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGF1ZGlvTXV0ZWQgPyAnaW5saW5lLWZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydNSUNfT0ZGJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJiAhdmlkZW9NdXRlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbkhvc3RWaWRlb011dGUocHJvcHMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydDQU1FUkEnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7ZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT1cIk15IGRldmljZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrRGV2aWNlc0ljb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPXtvcGVuTW9yZUFjdGlvbnMgPyAnZGV2aWNlLW1lbnUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17b3Blbk1vcmVBY3Rpb25zID8gJ3RydWUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydTRVRUSU5HUyd9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e21hcmdpbkxlZnQ6ICc0cHgnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtoYW5kUmFpc2VkICYmIDxQYW5Ub29sIGZvbnRTaXplPXsnc21hbGwnfSBzdHlsZT17e2NvbG9yOiAnI2UyYjAzMCd9fS8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9eydtZWV0aW5nLWF1ZGlvLWVsLWNvbnRhaW5lcid9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgICAgICBhbmNob3JFbD17YW5jaG9yRWx9XG4gICAgICAgICAgICAgICAgaWQ9XCJkZXZpY2VzLW1lbnVcIlxuICAgICAgICAgICAgICAgIG9wZW49e29wZW5Nb3JlQWN0aW9uc31cbiAgICAgICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZURldmljZU1lbnV9XG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xvc2VEZXZpY2VNZW51fVxuICAgICAgICAgICAgICAgIFBhcGVyUHJvcHM9e3tcbiAgICAgICAgICAgICAgICAgICAgZWxldmF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICBzeDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogJ2Ryb3Atc2hhZG93KDBweCAycHggOHB4IHJnYmEoMCwwLDAsMC4zMikpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG10OiAxLjUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnJiAuTXVpTGlzdC1yb290Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTFlMWUxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJyYgLk11aUF2YXRhci1yb290Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1sOiAtMC41LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1yOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcmOmJlZm9yZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpIHJvdGF0ZSg0NWRlZyknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3tcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogMjAsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsOiAxMzZcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGFuY2hvck9yaWdpbj17e1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogJ3RvcCdcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9EZXZpY2VzLm1hcCgoZGV2aWNlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxNZW51SXRlbSBvbkNsaWNrPXsoKSA9PiBjaGFuZ2VBdWRpb0RldmljZShkZXZpY2UpfSBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e2NvbG9yOiBzZWxlY3RlZEF1ZGlvRGV2aWNlICYmIHNlbGVjdGVkQXVkaW9EZXZpY2UuaWQgPT09IGRldmljZS5pZCA/ICcjMTk4NzU0JyA6IG51bGx9fT5cbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UubGFiZWxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9NZW51SXRlbT47XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9NZW51PlxuICAgICAgICA8Lz5cbiAgICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVkNSb29tUGFydGljaXBhbnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksZUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssZUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sZ0JBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLFdBQUEsR0FBQU4sc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFTLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFVLGNBQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLFFB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
858
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX1ZDRXZlbnRUeXBlIiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX1ZDUm9vbVJlY29yZGVyIiwiX01lZGlhU291cEhlbHBlciIsIl9UcmFja3MiLCJfSWNvbkJ1dHRvbiIsIl9JY29uIiwiX2ljb25zTWF0ZXJpYWwiLCJfVG9vbHRpcCIsIl9tYXRlcmlhbCIsIl9Tb2NrZXRNYW5hZ2VyIiwiX0J1dHRvbiIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfYXVkaW9MZXZlbE1ldGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidCIsIldlYWtNYXAiLCJyIiwibiIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiU1BFQUtJTkdfTEVWRUwiLCJWSURFT19DT0RFQ19PUFRJT05TIiwiZXhwb3J0cyIsInZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlIiwiVklERU9fQ09OU1RSQUlOVFMiLCJhdWRpbyIsInZpZGVvIiwid2lkdGgiLCJtaW4iLCJpZGVhbCIsImhlaWdodCIsIlZJREVPX0VOQ09ESU5HUyIsInJpZCIsIm1heEJpdHJhdGUiLCJzY2FsYWJpbGl0eU1vZGUiLCJsb2NhdGlvbiIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJWQ1Jvb21QYXJ0aWNpcGFudCIsInByb3BzIiwiaGFuZFJhaXNlZCIsInNldEhhbmRSYWlzZWQiLCJSZWFjdCIsInVzZVN0YXRlIiwidmlkZW9NdXRlZCIsInNldFZpZGVvTXV0ZWQiLCJhdWRpb011dGVkIiwic2V0QXVkaW9NdXRlZCIsInByb2R1Y2VyVHJhbnNwb3J0Iiwic2V0UHJvZHVjZXJUcmFuc3BvcnQiLCJ2aWRlb1JlZnJlc2hlciIsInNldFZpZGVvUmVmcmVzaGVyIiwicHJvZHVjZXJzIiwiTWFwIiwiZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0IiwiYXVkaW9EZXZpY2VzIiwic2V0QXVkaW9EZXZpY2VzIiwic2VsZWN0ZWRBdWRpb0RldmljZSIsInNldFNlbGVjdGVkQXVkaW9EZXZpY2UiLCJjb25zdW1lcnMiLCJzb3VuZExldmVsIiwic2V0U291bmRMZXZlbCIsImV2ZW50SGFuZGxlciIsInZpZGVvUmVmIiwidXNlUmVmIiwidmlkZW9TdHJlYW0iLCJhdWRpb1JlZiIsInRyYWNrcyIsIlRyYWNrcyIsInNvdW5kTGV2ZWxDb3VudGVyIiwibWV0ZXJzIiwidW5tb3VudGVkUmVmIiwic2hvd1ZpZGVvIiwiZGV2aWNlIiwicGFydGljaXBhbnRzIiwibnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHMiLCJhbmNob3JFbCIsInNldEFuY2hvckVsIiwib3Blbk1vcmVBY3Rpb25zIiwiQm9vbGVhbiIsImRvd25sb2FkVXJsIiwic2V0RG93bmxvYWRVcmwiLCJoYW5kbGVyIiwiaWQiLCJkYXRhIiwidXNlcklkIiwib24iLCJldmVudFR5cGUiLCJiZSIsIlZDRXZlbnRUeXBlIiwiQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQiLCJvbkFWU2V0dGluZ3NDaGFuZ2UiLCJwYXlsb2FkIiwiUkFJU0VfSEFORCIsIm9uUmFpc2VIYW5kIiwiTE9XRVJfSEFORCIsIm9uTG93ZXJIYW5kIiwiTkVXX1BST0RVQ0VSUyIsIm9uTmV3UHJvZHVjZXJzIiwiQ09OU1VNRVJfQ0xPU0VEIiwiY29uc3VtZXJJZCIsInJlbW92ZUNvbnN1bWVyIiwia2luZCIsIkFVRElPX0xFVkVMIiwibGV2ZWwiLCJoYW5kbGVDbGlja0RldmljZXNJY29uIiwiZXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwiY2hhbmdlQXVkaW9EZXZpY2UiLCJ1c2VFZmZlY3QiLCJhcGkiLCJjdXJyZW50Iiwic3JjT2JqZWN0Iiwic291bmRNb25pdG9yIiwiaW5WaWV3IiwiaGFuZGxlQ2xvc2VEZXZpY2VNZW51IiwiaXNDdXJyZW50VXNlciIsInN0b3BQcm9kdWNpbmciLCJwcm9kdWNlIiwiVXRpbHMiLCJpc051bGwiLCJhdmF0YXJJZCIsImFwcGxpY2F0aW9uTWFuYWdlciIsImdldENvbnRleHRSb290Iiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwib25BdWRpb0RldmljZUNoYW5nZSIsImNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0IiwiY29uc29sZSIsImxvZyIsInNwbGljZSIsImxlbmd0aCIsIm1lZGlhU291cEhlbHBlciIsImluaXRQcm9kdWNlclRyYW5zcG9ydCIsIm1lZXRpbmdJZCIsImdldFVzZXJEZXRhaWxzIiwidXNlcm5hbWUiLCJoYW5kbGVEZXZpY2VzQ2hhbmdlZCIsImRldmljZXMiLCJhdWRpb0RldmljZUxpc3QiLCJmb3JFYWNoIiwicHVzaCIsImRldmljZUlkIiwibGFiZWwiLCJ2Y0V2ZW50TWFuYWdlciIsInJlbW92ZVN1YnNjcmlwdGlvbnMiLCJhZGRTdWJzY3JpcHRpb25zIiwibmF2aWdhdG9yIiwibWVkaWFEZXZpY2VzIiwib25kZXZpY2VjaGFuZ2UiLCJlbnVtZXJhdGVEZXZpY2VzIiwidGhlbiIsImNvbnN1bWVGYWlsZWRQcm9kdWNlcnMiLCJrZXkiLCJ2YWx1ZSIsInN0b3AiLCJjbGVhciIsInN0YXJ0TWV0ZXIiLCJzdHJlYW0iLCJzdG9wTWV0ZXIiLCJzdGFydEF1ZGlvTGV2ZWxNZXRlciIsImZpcmVFdmVudCIsImRlbGV0ZSIsInR5cGUiLCJlcnJvciIsImNhblByb2R1Y2UiLCJtZWRpYUNvbnN0cmFpbnRzIiwiZ2V0VXNlck1lZGlhIiwidHJhY2siLCJnZXRBdWRpb1RyYWNrcyIsImdldFZpZGVvVHJhY2tzIiwicGFyYW1zIiwiaXNIb3N0IiwibWVkaWFSZWNvcmRlciIsImFkZFRyYWNrIiwic2V0QXVkaW9UcmFjayIsImVuY29kaW5ncyIsImNvZGVjT3B0aW9ucyIsInNldFZpZGVvVHJhY2siLCJwcm9kdWNlciIsImlzUnRwQ29sbGlzaW9uRXJyb3IiLCJTWVNURU1fQUxFUlQiLCJtZXNzYWdlIiwiUkVKT0lOX0FMRVJUX01FU1NBR0UiLCJnZXRTdGF0cyIsImdldFRyYWNrcyIsInNldFRpbWVvdXQiLCJjYWxsYmFjayIsInByb2R1Y2VySWQiLCJjbG9zZSIsInN0b3BWaWRlb1RyYWNrIiwic3RvcEF1ZGlvVHJhY2siLCJzb2NrZXRNYW5hZ2VyIiwiZW1pdEV2ZW50IiwiUFJPRFVDRVJfQ0xPU0VEIiwicm9vbUlkIiwiY2F0Y2giLCJsb2FkaW5nIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiSlNPTiIsInN0cmluZ2lmeSIsInNjcmVlblNoYXJpbmciLCJjb25zdW1lIiwiYXVkaW9FbGVtZW50IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInJlbW92ZVRyYWNrIiwiZWxlbWVudEJ5SWQiLCJyZW1vdmVDaGlsZCIsInJldHJ5Q29uc3VtZSIsInJldHJpZXMiLCJ0cmFuc3BvcnQiLCJnZXRSZWN2VHJhbnNwb3J0IiwiRXJyb3IiLCJnZXRDb25zdW1lU3RyZWFtIiwicnRwQ2FwYWJpbGl0aWVzIiwiX3JlZiIsImNvbnN1bWVyIiwiY3JlYXRlRWxlbWVudCIsInBsYXlzaW5saW5lIiwiYXV0b3BsYXkiLCJhcHBlbmRDaGlsZCIsInRyYWNrRW5kZWRQYXJ0aWNpcGFudCIsImZpbmQiLCJwIiwiZ2V0UGFydGljaXBhbnROYW1lIiwibmFtZSIsImNvbmNhdCIsIkZyYWdtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJwYWRkaW5nIiwicG9zaXRpb24iLCJib3JkZXJSYWRpdXMiLCJvdmVyZmxvdyIsImJveFNpemluZyIsImJhY2tncm91bmRDb2xvciIsImJvcmRlciIsImdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yIiwiYm94U2hhZG93IiwidHJhbnNpdGlvbiIsIm1hcmdpbkJvdHRvbSIsInNpemluZyIsImNvbG9yIiwiZm9udFNpemUiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kSW1hZ2UiLCJnZXRJbml0aWFscyIsImF1dG9QbGF5IiwicmVmIiwibXV0ZWQiLCJvYmplY3RGaXQiLCJ0cmFuc2Zvcm0iLCJ6SW5kZXgiLCJkaXNwbGF5IiwibGVmdCIsImJvdHRvbSIsImFsaWduSXRlbXMiLCJnYXAiLCJtYXhXaWR0aCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Iiwid2hpdGVTcGFjZSIsInRleHRPdmVyZmxvdyIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsImp1c3RpZnlDb250ZW50Iiwib25DbGljayIsIm9uSG9zdEF1ZGlvTXV0ZSIsIm9uSG9zdFZpZGVvTXV0ZSIsInRpdGxlIiwiUGFuVG9vbCIsIk1lbnUiLCJvcGVuIiwib25DbG9zZSIsIlBhcGVyUHJvcHMiLCJlbGV2YXRpb24iLCJzeCIsImZpbHRlciIsIm10IiwibWwiLCJtciIsImNvbnRlbnQiLCJ0b3AiLCJyaWdodCIsImJnY29sb3IiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJhbmNob3JPcmlnaW4iLCJtYXAiLCJpbmRleCIsIk1lbnVJdGVtIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbWVkaWEvVkNSb29tUGFydGljaXBhbnQuanN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xuaW1wb3J0IFJlYWN0LCB7dXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgJy4vVkNSb29tUGFydGljaXBhbnQuY3NzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5pbXBvcnQge1ZDRXZlbnRUeXBlfSBmcm9tICcuL1ZDRXZlbnRUeXBlJztcbmltcG9ydCB2Y0V2ZW50TWFuYWdlciBmcm9tICcuL1ZDRXZlbnRNYW5hZ2VyJztcbmltcG9ydCBtZWRpYVJlY29yZGVyIGZyb20gJy4vVkNSb29tUmVjb3JkZXInO1xuaW1wb3J0IG1lZGlhU291cEhlbHBlciwge2lzUnRwQ29sbGlzaW9uRXJyb3IsIFJFSk9JTl9BTEVSVF9NRVNTQUdFfSBmcm9tICcuL01lZGlhU291cEhlbHBlcic7XG5pbXBvcnQgVHJhY2tzIGZyb20gJy4vVHJhY2tzJztcbmltcG9ydCBJY29uQnV0dG9uIGZyb20gJ0BtdWkvbWF0ZXJpYWwvSWNvbkJ1dHRvbic7XG5pbXBvcnQgSWNvbiBmcm9tICcuLi9JY29uJztcbmltcG9ydCB7UGFuVG9vbH0gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbCc7XG5pbXBvcnQgVG9vbHRpcCBmcm9tICdAbXVpL21hdGVyaWFsL1Rvb2x0aXAnO1xuaW1wb3J0IHtNZW51LCBNZW51SXRlbX0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgc29ja2V0TWFuYWdlciBmcm9tICcuLi9Tb2NrZXRNYW5hZ2VyJztcbmltcG9ydCBCdXR0b24gZnJvbSAnQG11aS9tYXRlcmlhbC9CdXR0b24nO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IHtzdGFydEF1ZGlvTGV2ZWxNZXRlcn0gZnJvbSAnLi9hdWRpb0xldmVsTWV0ZXInO1xuXG5jb25zdCBTUEVBS0lOR19MRVZFTCA9IDY7XG5cbmV4cG9ydCBjb25zdCBWSURFT19DT0RFQ19PUFRJT05TID0ge1xuICAgIHZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlOiAxMDAwXG59O1xuXG5leHBvcnQgY29uc3QgVklERU9fQ09OU1RSQUlOVFMgPSB7XG4gICAgYXVkaW86IGZhbHNlLFxuICAgIHZpZGVvOiB7XG4gICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgICBtaW46IDY0MCxcbiAgICAgICAgICAgIGlkZWFsOiAxOTIwXG4gICAgICAgIH0sXG4gICAgICAgIGhlaWdodDoge1xuICAgICAgICAgICAgbWluOiA0MDAsXG4gICAgICAgICAgICBpZGVhbDogMTA4MFxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IFZJREVPX0VOQ09ESU5HUyA9IFtcbiAgICB7XG4gICAgICAgIHJpZDogJ3IwJyxcbiAgICAgICAgbWF4Qml0cmF0ZTogMjAwMDAsXG4gICAgICAgIC8vc2NhbGVSZXNvbHV0aW9uRG93bkJ5OiAxMC4wLFxuICAgICAgICBzY2FsYWJpbGl0eU1vZGU6ICdTMVQzJ1xuICAgIH0sXG4gICAge1xuICAgICAgICByaWQ6ICdyMScsXG4gICAgICAgIG1heEJpdHJhdGU6IDE1MDAwMCxcbiAgICAgICAgc2NhbGFiaWxpdHlNb2RlOiAnUzFUMydcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcmlkOiAncjInLFxuICAgICAgICBtYXhCaXRyYXRlOiA0NTAwMDAsXG4gICAgICAgIHNjYWxhYmlsaXR5TW9kZTogJ1MxVDMnXG4gICAgfVxuXTtcblxuY29uc3QgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuY29uc3QgVkNSb29tUGFydGljaXBhbnQgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCBbaGFuZFJhaXNlZCwgc2V0SGFuZFJhaXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3ZpZGVvTXV0ZWQsIHNldFZpZGVvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMudmlkZW9NdXRlZCk7XG4gICAgY29uc3QgW2F1ZGlvTXV0ZWQsIHNldEF1ZGlvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMuYXVkaW9NdXRlZCk7XG4gICAgY29uc3QgW3Byb2R1Y2VyVHJhbnNwb3J0LCBzZXRQcm9kdWNlclRyYW5zcG9ydF0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5wcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgY29uc3QgW3ZpZGVvUmVmcmVzaGVyLCBzZXRWaWRlb1JlZnJlc2hlcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3Byb2R1Y2Vyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnRdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFthdWRpb0RldmljZXMsIHNldEF1ZGlvRGV2aWNlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3NlbGVjdGVkQXVkaW9EZXZpY2UsIHNldFNlbGVjdGVkQXVkaW9EZXZpY2VdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2NvbnN1bWVyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtzb3VuZExldmVsLCBzZXRTb3VuZExldmVsXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtldmVudEhhbmRsZXJdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IHZpZGVvUmVmID0gdXNlUmVmKCk7XG4gICAgY29uc3QgdmlkZW9TdHJlYW0gPSB1c2VSZWYoKTtcbiAgICBjb25zdCBhdWRpb1JlZiA9IHVzZVJlZigpO1xuICAgIGNvbnN0IHRyYWNrcyA9IHVzZVJlZihuZXcgVHJhY2tzKCkpO1xuICAgIGNvbnN0IHNvdW5kTGV2ZWxDb3VudGVyID0gdXNlUmVmKDApO1xuICAgIC8vIEFjdGl2ZS1zcGVha2VyIG1ldGVyczogdGhpcyAoc2VsZikgdGlsZSBpcyB0aGUgYXVkaW8gaHViIOKAlCBpdCBjb25zdW1lc1xuICAgIC8vIGV2ZXJ5IHBhcnRpY2lwYW50J3MgYXVkaW8gKyBwcm9kdWNlcyB0aGUgbG9jYWwgbWljIOKAlCBzbyBpdCBydW5zIHRoZSBsZXZlbFxuICAgIC8vIG1ldGVycyBhbmQgYnJvYWRjYXN0cyB7dXNlcklkLCBsZXZlbH0gZm9yIGVhY2ggdGlsZSB0byBoaWdobGlnaHQgaXRzZWxmLlxuICAgIGNvbnN0IG1ldGVycyA9IHVzZVJlZihuZXcgTWFwKCkpO1xuICAgIC8vIFNldCBvbiB1bm1vdW50IHNvIHRoZSByZWN1cnNpdmUgY29uc3VtZS9yZXRyeSBzZXRUaW1lb3V0IGxvb3BzIHN0b3BcbiAgICAvLyByZS1zY2hlZHVsaW5nIChvdGhlcndpc2UgdGhleSBwb2xsL3JldHJ5IGZvcmV2ZXIgYWZ0ZXIgdGhlIHRpbGUgaXMgZ29uZSkuXG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzaG93VmlkZW8gPSB0cnVlO1xuICAgIGNvbnN0IHtcbiAgICAgICAgZGV2aWNlLFxuICAgICAgICBwYXJ0aWNpcGFudHNcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qge251bWJlck9mSW5WaWV3UGFydGljaXBhbnRzfSA9IHByb3BzO1xuICAgIGNvbnN0IFthbmNob3JFbCwgc2V0QW5jaG9yRWxdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3Qgb3Blbk1vcmVBY3Rpb25zID0gQm9vbGVhbihhbmNob3JFbCk7XG5cbiAgICBjb25zdCBbZG93bmxvYWRVcmwsIHNldERvd25sb2FkVXJsXSA9IHVzZVN0YXRlKG51bGwpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21lZXRpbmctcGFydGljaXBhbnQtJyArIHByb3BzLmRhdGEudXNlcklkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiAoZXZlbnRUeXBlLCBiZSkgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkFWU2V0dGluZ3NDaGFuZ2UoYmUucGF5bG9hZCA/IGJlLnBheWxvYWQgOiBiZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5SQUlTRV9IQU5EOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25SYWlzZUhhbmQoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5MT1dFUl9IQU5EOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25Mb3dlckhhbmQoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5ORVdfUFJPRFVDRVJTOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5DT05TVU1FUl9DTE9TRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3VtZXJzLmhhcyhiZS5wYXlsb2FkLmNvbnN1bWVySWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoYmUucGF5bG9hZC5jb25zdW1lcklkLCBiZS5wYXlsb2FkLmtpbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuQVVESU9fTEVWRUw6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmUucGF5bG9hZCAmJiBiZS5wYXlsb2FkLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTb3VuZExldmVsKGJlLnBheWxvYWQubGV2ZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVDbGlja0RldmljZXNJY29uID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHNldEFuY2hvckVsKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGFuZ2VBdWRpb0RldmljZSA9IChkZXZpY2UpID0+IHtcbiAgICAgICAgc2V0U2VsZWN0ZWRBdWRpb0RldmljZShkZXZpY2UpO1xuICAgIH07XG5cbiAgICBjb25zdCBvblJhaXNlSGFuZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWQudXNlcklkID09PSBwcm9wcy5kYXRhLnVzZXJJZCkge1xuICAgICAgICAgICAgc2V0SGFuZFJhaXNlZCh0cnVlKTtcbiAgICAgICAgICAgIHByb3BzLmRhdGEuaGFuZFJhaXNlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25Mb3dlckhhbmQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgIHNldEhhbmRSYWlzZWQoZmFsc2UpO1xuICAgICAgICAgICAgcHJvcHMuZGF0YS5oYW5kUmFpc2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZXZlbnRIYW5kbGVyLmFwaSA9IGhhbmRsZXIoKTtcbiAgICB9KTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICh2aWRlb1JlZi5jdXJyZW50ICYmIHZpZGVvU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHZpZGVvUmVmLmN1cnJlbnQuc3JjT2JqZWN0ID0gdmlkZW9TdHJlYW0uY3VycmVudDtcbiAgICAgICAgfVxuICAgIH0sIFt2aWRlb1JlZi5jdXJyZW50XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuc291bmRNb25pdG9yICYmICFwcm9wcy5pblZpZXcpIHtcbiAgICAgICAgICAgIGlmIChzb3VuZExldmVsID4gMykge1xuICAgICAgICAgICAgICAgIHNvdW5kTGV2ZWxDb3VudGVyLmN1cnJlbnQgPSAxMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc291bmRMZXZlbENvdW50ZXIuY3VycmVudCA+IDApIHtcbiAgICAgICAgICAgICAgICBzb3VuZExldmVsQ291bnRlci5jdXJyZW50LS07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb3BzLnNvdW5kTW9uaXRvcihwcm9wcy5kYXRhLnVzZXJJZCwgc291bmRMZXZlbENvdW50ZXIuY3VycmVudCA9PT0gMCB8fCBhdWRpb011dGVkKTtcbiAgICAgICAgfVxuICAgIH0sIFtzb3VuZExldmVsXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgc2V0U291bmRMZXZlbCgwKTtcbiAgICAgICAgICAgIGlmIChwcm9wcy5zb3VuZE1vbml0b3IgJiYgIXByb3BzLmluVmlldykge1xuICAgICAgICAgICAgICAgIHByb3BzLnNvdW5kTW9uaXRvcihwcm9wcy5kYXRhLnVzZXJJZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbYXVkaW9NdXRlZF0pO1xuXG4gICAgY29uc3QgaGFuZGxlQ2xvc2VEZXZpY2VNZW51ID0gKCkgPT4ge1xuICAgICAgICBzZXRBbmNob3JFbChudWxsKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25BVlNldHRpbmdzQ2hhbmdlID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLmRhdGEudXNlcklkID09PSBwYXlsb2FkLnVzZXJJZCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgaWNvbiBtdXN0IHJlZmxlY3QgdGhlIEFDVFVBTCBwcm9kdWNlciwgbm90IHRoZSByZXF1ZXN0ZWQgc3RhdGU6XG4gICAgICAgICAgICAgICAgLy8gLSBtdXRlOiBmbGlwIHRoZSBpY29uIG9ubHkgb25jZSBzdG9wUHJvZHVjaW5nIGNvbmZpcm1zIHRoZSBwcm9kdWNlciBpc1xuICAgICAgICAgICAgICAgIC8vICAgY2xvc2VkIGFuZCB0aGUgdHJhY2sgc3RvcHBlZCAoaXRzIHN1Y2Nlc3MgY2FsbGJhY2spIOKAlCBzbyB3ZSBuZXZlciBzaG93XG4gICAgICAgICAgICAgICAgLy8gICBcIm11dGVkXCIgd2hpbGUgYXVkaW8gaXMgc3RpbGwgZ29pbmcgb3V0LlxuICAgICAgICAgICAgICAgIC8vIC0gdW5tdXRlOiBwcm9kdWNlKCkgZmxpcHMgdGhlIGljb24gb2ZmIG9ubHkgYWZ0ZXIgdGhlIHByb2R1Y2VyIGlzIGNyZWF0ZWQuXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCdhdWRpbycsICgpID0+IHNldEF1ZGlvTXV0ZWQodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQudmlkZW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCd2aWRlbycsICgpID0+IHNldFZpZGVvTXV0ZWQodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ3ZpZGVvJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRBdWRpb011dGVkKHBheWxvYWQuYXVkaW9NdXRlZCk7XG4gICAgICAgICAgICAgICAgc2V0VmlkZW9NdXRlZChwYXlsb2FkLnZpZGVvTXV0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5kYXRhICYmICFVdGlscy5pc051bGwocHJvcHMuZGF0YS5hdmF0YXJJZClcbiAgICAgICAgICAgICYmIHByb3BzLmRhdGEuYXZhdGFySWQgIT09ICd1bmRlZmluZWQnICYmIHByb3BzLmRhdGEuYXZhdGFySWQgIT09ICdudWxsJykge1xuICAgICAgICAgICAgc2V0RG93bmxvYWRVcmwobG9jYXRpb24gKyBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0Q29udGV4dFJvb3QoKSArICcvZG9jcy9hcGkvdjEvbWFuYWdlci9kb3dubG9hZC8nICsgcHJvcHMuZGF0YS5hdmF0YXJJZCArXG4gICAgICAgICAgICAgICAgJz9hY2Nlc3NfdG9rZW49JyArIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FjY2Vzc1Rva2VuJykgKyAnJmlkVG9rZW49JyArIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lkVG9rZW4nKSk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMuZGF0YV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgLy8gUmVtb3RlIHRpbGVzIHJlZmxlY3QgdGhlIHBlZXIncyByZXBvcnRlZCBzdGF0ZS4gVGhlIENVUlJFTlQgdXNlcidzIGljb24gaXMgTk9UXG4gICAgICAgIC8vIHN5bmNlZCBmcm9tIHByb3BzIOKAlCBpdCBpcyBkcml2ZW4gb25seSBieSB0aGUgYWN0dWFsIHByb2R1Y2VyIChtdXRlIHNob3dzIG9uY2UgdGhlXG4gICAgICAgIC8vIHByb2R1Y2VyIGlzIGNvbmZpcm1lZCBzdG9wcGVkOyB1bm11dGUgb25jZSBwcm9kdWNlKCkgc3VjY2VlZHMpLCBzbyB0aGUgaWNvbiBjYW5cbiAgICAgICAgLy8gbmV2ZXIgY2xhaW0gXCJtdXRlZFwiIHdoaWxlIGF1ZGlvIGlzIHN0aWxsIGJlaW5nIHByb2R1Y2VkLlxuICAgICAgICBpZiAoIXByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgIHNldEF1ZGlvTXV0ZWQocHJvcHMuYXVkaW9NdXRlZCk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMuYXVkaW9NdXRlZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBzZXRWaWRlb011dGVkKHByb3BzLnZpZGVvTXV0ZWQpO1xuICAgICAgICB9XG4gICAgfSwgW3Byb3BzLnZpZGVvTXV0ZWRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9kdWNlclRyYW5zcG9ydCkge1xuICAgICAgICAgICAgLy8gQSAocmUpYXNzaWduZWQgdHJhbnNwb3J0IG1lYW5zIGV4aXN0aW5nIHByb2R1Y2VycyBsaXZlZCBvbiB0aGUgb2xkXG4gICAgICAgICAgICAvLyAobm93LWNsb3NlZCkgdHJhbnNwb3J0LiBUZWFyIHRoZW0gZG93biBwcm9wZXJseSDigJQgY2xvc2UgKyBzdG9wIHRoZVxuICAgICAgICAgICAgLy8gbG9jYWwgdHJhY2tzICsgbm90aWZ5IHRoZSBzZXJ2ZXIg4oCUIHNvIHByb2R1Y2UoKSByZWNyZWF0ZXMgdGhlbSBvbiB0aGVcbiAgICAgICAgICAgIC8vIG5ldyB0cmFuc3BvcnQgaW5zdGVhZCBvZiBlYXJseS1yZXR1cm5pbmcuIE5vLW9wIG9uIGZpcnN0IG1vdW50LlxuICAgICAgICAgICAgc3RvcFByb2R1Y2luZygndmlkZW8nKTtcbiAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ2F1ZGlvJyk7XG5cbiAgICAgICAgICAgIGlmICghcHJvcHMudmlkZW9NdXRlZCkge1xuICAgICAgICAgICAgICAgIHByb2R1Y2UoJ3ZpZGVvJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXByb3BzLmF1ZGlvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICBwcm9kdWNlKCdhdWRpbycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW3Byb2R1Y2VyVHJhbnNwb3J0XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRQcm9kdWNlclRyYW5zcG9ydChwcm9wcy5wcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgfSwgW3Byb3BzLnByb2R1Y2VyVHJhbnNwb3J0XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgcHJvcHMub25BdWRpb0RldmljZUNoYW5nZShzZWxlY3RlZEF1ZGlvRGV2aWNlKTtcbiAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ2F1ZGlvJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEF1ZGlvRGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvZHVjZXJUcmFuc3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWF1ZGlvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtzZWxlY3RlZEF1ZGlvRGV2aWNlXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAvLyBPbmNlIHRoZSBEZXZpY2UgaXMgcmVhZHksIGNvbnN1bWUgdGhlIHByb2R1Y2VycyB3ZSBhbHJlYWR5IGtub3cgYWJvdXRcbiAgICAgICAgLy8gYW5kIHJlcGxheSBhbnkgdGhhdCBhcnJpdmVkIGJlZm9yZSB3ZSB3ZXJlIHJlYWR5LiBSZWN2IHRyYW5zcG9ydHNcbiAgICAgICAgLy8gdGhlbXNlbHZlcyBhcmUgY3JlYXRlZCBqdXN0LWluLXRpbWUgaW5zaWRlIGNvbnN1bWUoKSAocGVyIGtpbmQpLCBzbyB0aGVcbiAgICAgICAgLy8gdHJpZ2dlciBoZXJlIGlzIHRoZSBEZXZpY2UsIG5vdCBhIHRyYW5zcG9ydC5cbiAgICAgICAgaWYgKGRldmljZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0RFVklDRSBSRUFEWSBXSVRIIFBST0RVQ0VSUyA6ICcsIHByb3BzLmRhdGEucHJvZHVjZXJzKTtcbiAgICAgICAgICAgIGlmIChwcm9wcy5kYXRhLnByb2R1Y2Vycykge1xuICAgICAgICAgICAgICAgIG9uTmV3UHJvZHVjZXJzKHByb3BzLmRhdGEucHJvZHVjZXJzLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMoZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LCB0cnVlKTtcbiAgICAgICAgICAgIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5zcGxpY2UoMCwgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9LCBbZGV2aWNlXSk7XG5cbiAgICBjb25zdCBjcmVhdGVQcm9kdWNlclRyYW5zcG9ydCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgc2V0UHJvZHVjZXJUcmFuc3BvcnQoYXdhaXQgbWVkaWFTb3VwSGVscGVyLmluaXRQcm9kdWNlclRyYW5zcG9ydChwcm9wcy5kZXZpY2UsIHByb3BzLm1lZXRpbmdJZCxcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZURldmljZXNDaGFuZ2VkID0gKGRldmljZXMpID0+IHtcbiAgICAgICAgbGV0IGF1ZGlvRGV2aWNlTGlzdCA9IFtdO1xuICAgICAgICBkZXZpY2VzLmZvckVhY2goKGRldmljZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCdhdWRpb2lucHV0JyA9PT0gZGV2aWNlLmtpbmQpIHtcbiAgICAgICAgICAgICAgICBhdWRpb0RldmljZUxpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBkZXZpY2UuZGV2aWNlSWQsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBkZXZpY2UubGFiZWxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2V0QXVkaW9EZXZpY2VzKGF1ZGlvRGV2aWNlTGlzdCk7XG5cbiAgICAgICAgaWYgKGF1ZGlvRGV2aWNlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEF1ZGlvRGV2aWNlKGF1ZGlvRGV2aWNlTGlzdFswXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEF1ZGlvRGV2aWNlKG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHZjRXZlbnRNYW5hZ2VyLnJlbW92ZVN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgdmNFdmVudE1hbmFnZXIuYWRkU3Vic2NyaXB0aW9ucyhldmVudEhhbmRsZXIsIFZDRXZlbnRUeXBlLkFVRElPX1ZJU1VBTF9TRVRUSU5HU19DSEFOR0VELFxuICAgICAgICAgICAgVkNFdmVudFR5cGUuUkFJU0VfSEFORCwgVkNFdmVudFR5cGUuTE9XRVJfSEFORCwgVkNFdmVudFR5cGUuTkVXX1BST0RVQ0VSUywgVkNFdmVudFR5cGUuQ09OU1VNRVJfQ0xPU0VELFxuICAgICAgICAgICAgVkNFdmVudFR5cGUuQVVESU9fTEVWRUwpO1xuXG4gICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLm9uZGV2aWNlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChkZXZpY2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRGV2aWNlc0NoYW5nZWQoZGV2aWNlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKVxuICAgICAgICAgICAgICAgIC50aGVuKChkZXZpY2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEZXZpY2VzQ2hhbmdlZChkZXZpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgY29uc3VtZUZhaWxlZFByb2R1Y2VycygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCc9PT09PT09PT09PT09PT09PT09PT09REVTVFJPWUlORyBQQVJUSUNJUEFOVD09PT09PT09PT09PT09PT09PT09PT09PT0gOiAnICsgcHJvcHMuZGF0YS51c2VySWQpO1xuICAgICAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIGdsb2JhbCBkZXZpY2VjaGFuZ2UgaGFuZGxlciB0aGlzIGNvbXBvbmVudCBpbnN0YWxsZWQg4oCUXG4gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IHN1cnZpdmVzIHVubW91bnQgYW5kIGZpcmVzIGludG8gc3RhbGUgY29tcG9uZW50IHN0YXRlLlxuICAgICAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMub25kZXZpY2VjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgc3RvcFByb2R1Y2luZygndmlkZW8nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIGNvbnN1bWVycykge1xuICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGtleSwgJ3ZpZGVvJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFN0b3AgZXZlcnkgYXVkaW8tbGV2ZWwgbWV0ZXIgKHNlbGYgbWljICsgYWxsIGNvbnN1bWVkIHN0cmVhbXMpLlxuICAgICAgICAgICAgbWV0ZXJzLmN1cnJlbnQuZm9yRWFjaCgoc3RvcCkgPT4gc3RvcCgpKTtcbiAgICAgICAgICAgIG1ldGVycy5jdXJyZW50LmNsZWFyKCk7XG5cbiAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLnJlbW92ZVN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG5cbiAgICAvLyBNZXRlciBhIHN0cmVhbSBhbmQgYnJvYWRjYXN0IGl0cyBsZXZlbCB1bmRlciBgdXNlcklkYC4gS2V5ZWQgc28gd2UgY2FuXG4gICAgLy8gc3RvcC9yZXBsYWNlIGl0IHdoZW4gdGhlIGNvbnN1bWVyIGNsb3NlcyBvciB0aGUgcHJvZHVjZXIgcmVzdGFydHMuXG4gICAgY29uc3Qgc3RhcnRNZXRlciA9IChrZXksIHN0cmVhbSwgdXNlcklkKSA9PiB7XG4gICAgICAgIHN0b3BNZXRlcihrZXkpO1xuICAgICAgICBjb25zdCBzdG9wID0gc3RhcnRBdWRpb0xldmVsTWV0ZXIoc3RyZWFtLCAobGV2ZWwpID0+IHtcbiAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLmZpcmVFdmVudChWQ0V2ZW50VHlwZS5BVURJT19MRVZFTCwge3BheWxvYWQ6IHt1c2VySWQsIGxldmVsfX0pO1xuICAgICAgICB9KTtcbiAgICAgICAgbWV0ZXJzLmN1cnJlbnQuc2V0KGtleSwgc3RvcCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHN0b3BNZXRlciA9IChrZXkpID0+IHtcbiAgICAgICAgY29uc3Qgc3RvcCA9IG1ldGVycy5jdXJyZW50LmdldChrZXkpO1xuICAgICAgICBpZiAoc3RvcCkge1xuICAgICAgICAgICAgc3RvcCgpO1xuICAgICAgICAgICAgbWV0ZXJzLmN1cnJlbnQuZGVsZXRlKGtleSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcHJvZHVjZSA9IGFzeW5jICh0eXBlKSA9PiB7XG4gICAgICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBhdmFpbGFibGUgZGV2aWNlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRldmljZS5jYW5Qcm9kdWNlKCd2aWRlbycpICYmIHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBwcm9kdWNlIHZpZGVvJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNlbGVjdGVkQXVkaW9EZXZpY2UgJiYgdHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTm8gYXVkaW8gZGV2aWNlIHNlbGVjdGVkJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvZHVjZXJzLmhhcyh0eXBlKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y2VyIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIHR5cGUgJyArIHR5cGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1lZGlhQ29uc3RyYWludHM7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnYXVkaW8nOlxuICAgICAgICAgICAgICAgIG1lZGlhQ29uc3RyYWludHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRldmljZUlkOiBzZWxlY3RlZEF1ZGlvRGV2aWNlLmlkLFxuICAgICAgICAgICAgICAgICAgICBhdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlkZW86IGZhbHNlXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICAgICAgICAgIG1lZGlhQ29uc3RyYWludHMgPSBWSURFT19DT05TVFJBSU5UUztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKG1lZGlhQ29uc3RyYWludHMpO1xuICAgICAgICBjb25zdCB0cmFjayA9IHR5cGUgPT09ICdhdWRpbycgPyBzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKVswXSA6IHN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICB0cmFja1xuICAgICAgICB9O1xuXG4gICAgICAgIGF1ZGlvUmVmLmN1cnJlbnQgPSBzdHJlYW07XG4gICAgICAgIGlmICh0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICAvLyBNZXRlciB0aGUgbG9jYWwgbWljIHNvIHRoZSBzZWxmIHRpbGUgaGlnaGxpZ2h0cyB3aGVuIHlvdSBzcGVhay5cbiAgICAgICAgICAgIHN0YXJ0TWV0ZXIoJ3NlbGYtYXVkaW8nLCBzdHJlYW0sIHByb3BzLmRhdGEudXNlcklkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMuaXNIb3N0ICYmIHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIuYWRkVHJhY2socHJvcHMuZGF0YS51c2VySWQsIHRyYWNrKTtcbiAgICAgICAgICAgIHRyYWNrcy5jdXJyZW50LnNldEF1ZGlvVHJhY2sodHJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgIHBhcmFtcy5lbmNvZGluZ3MgPSBWSURFT19FTkNPRElOR1M7XG4gICAgICAgICAgICBwYXJhbXMuY29kZWNPcHRpb25zID0gVklERU9fQ09ERUNfT1BUSU9OUztcbiAgICAgICAgICAgIHRyYWNrcy5jdXJyZW50LnNldFZpZGVvVHJhY2sodHJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb2R1Y2VyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvZHVjZXIgPSBhd2FpdCBwcm9kdWNlclRyYW5zcG9ydC5wcm9kdWNlKHBhcmFtcyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgLy8gU3RvcCB0aGUganVzdC1jYXB0dXJlZCB0cmFjayBzbyB0aGUgbWljL2NhbSBpc24ndCBsZWZ0IGxpdmUgYWZ0ZXIgYSBmYWlsZWQgcHJvZHVjZS5cbiAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgIC8vIEEgZmF0YWwgUlRQLWV4dGVuc2lvbiBjb2xsaXNpb24gb24gY3JlYXRlT2ZmZXIgY2FuJ3QgYmUgcmVjb3ZlcmVkIGluLXBsYWNlO1xuICAgICAgICAgICAgLy8gYXNrIHRoZSB1c2VyIHRvIHJlam9pbi4gVGhlIGljb24gaXMgTk9UIGZsaXBwZWQgdG8gdW5tdXRlZCAocHJvZHVjZSBmYWlsZWQpLlxuICAgICAgICAgICAgaWYgKGlzUnRwQ29sbGlzaW9uRXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5maXJlRXZlbnQoVkNFdmVudFR5cGUuU1lTVEVNX0FMRVJULCB7cGF5bG9hZDoge21lc3NhZ2U6IFJFSk9JTl9BTEVSVF9NRVNTQUdFfX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2R1Y2VyKSB7XG4gICAgICAgICAgICAvLyBQcm9kdWNpbmcgaXMgY29uZmlybWVkIOKAlCBub3cgKGFuZCBvbmx5IG5vdykgY2xlYXIgdGhlIG11dGVkIGljb24gZm9yIHRoaXMga2luZC5cbiAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0QXVkaW9NdXRlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZpZGVvTXV0ZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvZHVjZXJUcmFuc3BvcnQuZ2V0U3RhdHMoKVxuICAgICAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiBjb25zb2xlLmxvZyhkYXRhKSk7XG4gICAgICAgICAgICBwcm9kdWNlcnMuc2V0KHR5cGUsIHByb2R1Y2VyKTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50ID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgIHNldFZpZGVvUmVmcmVzaGVyKCF2aWRlb1JlZnJlc2hlcik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coc3RyZWFtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvZHVjZXIub24oJ3RyYW5zcG9ydGNsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5zcmNPYmplY3QuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcHJvZHVjZXJzLmRlbGV0ZSh0eXBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBwcm9kdWNlci5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBwcm9kdWNlcnMuZGVsZXRlKHR5cGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY29uc3VtZUZhaWxlZFByb2R1Y2VycyA9ICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodW5tb3VudGVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChkZXZpY2UpIHtcbiAgICAgICAgICAgICAgICBvbk5ld1Byb2R1Y2VycyhmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5zcGxpY2UoMCwgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgY29uc3VtZUZhaWxlZFByb2R1Y2VycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCA1MDAwKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9wUHJvZHVjaW5nID0gKHR5cGUsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmICghcHJvZHVjZXJzLmhhcyh0eXBlKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RoZXJlIGlzIG5vIHByb2R1Y2VyIGZvciB0aGlzIHR5cGUgJyArIHR5cGUpO1xuICAgICAgICAgICAgLy8gTm90aGluZyBpcyBiZWluZyBwcm9kdWNlZCwgc28gdGhlIHN0b3AgaXMgdHJpdmlhbGx5IHNhdGlzZmllZCDigJQgbGV0IHRoZVxuICAgICAgICAgICAgLy8gY2FsbGVyIChlLmcuIHRoZSBtdXRlIHRvZ2dsZSkgdHJlYXQgdGhpcyBhcyBhIGNvbmZpcm1lZCBcInN0b3BwZWRcIi5cbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvZHVjZXJJZCA9IHByb2R1Y2Vycy5nZXQodHlwZSkuaWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDbG9zZSBwcm9kdWNlcicsIHByb2R1Y2VySWQpO1xuXG4gICAgICAgIHByb2R1Y2Vycy5nZXQodHlwZSlcbiAgICAgICAgICAgIC5jbG9zZSgpO1xuICAgICAgICBwcm9kdWNlcnMuZGVsZXRlKHR5cGUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc3RvcFZpZGVvVHJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zdG9wQXVkaW9UcmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ0NMT1NJTkcgUFJPRFVDRVIgT0YgSUQgOiAnICsgcHJvZHVjZXJJZCk7XG4gICAgICAgIHNvY2tldE1hbmFnZXIuZW1pdEV2ZW50KFZDRXZlbnRUeXBlLlBST0RVQ0VSX0NMT1NFRCwge1xuICAgICAgICAgICAgdXNlcklkOiBwcm9wcy5kYXRhLnVzZXJJZCxcbiAgICAgICAgICAgIHByb2R1Y2VySWQsXG4gICAgICAgICAgICByb29tSWQ6IHByb3BzLm1lZXRpbmdJZFxuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGNvbnNvbGUubG9nKCdQUk9EVUNFUl9DTE9TRUQgRVJST1IgOiAnLCBlKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTmV3UHJvZHVjZXJzID0gKHByb2R1Y2VycywgbG9hZGluZyA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPT09PT09IFBST0RVQ0VSUyBSRUNFSVZFRCA6IFsgXCIgKyBKU09OLnN0cmluZ2lmeShwcm9kdWNlcnMpICsgXCIgXSA9PT09PT09XCIpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb2R1Y2VyIG9mIHByb2R1Y2Vycykge1xuICAgICAgICAgICAgaWYgKGRldmljZSkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9kdWNlci51c2VySWQgPT09IHByb3BzLmRhdGEudXNlcklkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWNlci5raW5kID09PSAndmlkZW8nICYmICFwcm9kdWNlci5zY3JlZW5TaGFyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ0FMTElORyBDT05TVU1FIEZST00gT04gTkVXIFBST0RVQ0VSUyBGT1IgOiAnICsgcHJvcHMuZGF0YS51c2VySWQgKyAnIC0gJyArIHByb2R1Y2VyLnByb2R1Y2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZShwcm9kdWNlci5wcm9kdWNlcklkLCBwcm9kdWNlci5raW5kLCBsb2FkaW5nLCBwcm9kdWNlci51c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIgfHwgbG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc21hbGwgcGFydGljaXBhbnQgYm94IGF0IHRoZSBib3R0b20gYmVsb25naW5nIHRvIHRoZSBjdXJyZW50IHVzZXIgbXVzdCBjb25zdW1lIGFsbCBhdWRpb1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGJlY2F1c2Ugd2UgZG8gbm90IHdhbnQgdG8gZGlzdHVyYiB0aGUgYXVkaW8gZHVlIHRvIGFueSByZW5kZXJpbmcgc3VjaCBhcyBCcmluZyB0byB2aWV3XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWNlci5raW5kID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKHByb2R1Y2VyLnByb2R1Y2VySWQsIHByb2R1Y2VyLmtpbmQsIGxvYWRpbmcsIHByb2R1Y2VyLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5wdXNoKHByb2R1Y2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhcIj09PT09PSBQUk9EVUNFUlMgVEhBVCBDT1VMRCBOT1QgQkUgQ09OU1VNRVMgOiBbIFwiICsgSlNPTi5zdHJpbmdpZnkoZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0KSArIFwiIF0gPT09PT09PVwiKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlQ29uc3VtZXIgPSAoY29uc3VtZXJJZCwga2luZCwgdXNlcklkKSA9PiB7XG4gICAgICAgIC8vIFN0b3AgYW55IGFjdGl2ZS1zcGVha2VyIG1ldGVyIGF0dGFjaGVkIHRvIHRoaXMgY29uc3VtZXIncyBzdHJlYW0uXG4gICAgICAgIHN0b3BNZXRlcihjb25zdW1lcklkKTtcbiAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgIGlmICh2aWRlb1N0cmVhbS5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKHZpZGVvU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9TdHJlYW0uY3VycmVudC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIGxldCBhdWRpb0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb25zdW1lcklkKTtcbiAgICAgICAgICAgIGlmIChhdWRpb0VsZW1lbnQgJiYgYXVkaW9FbGVtZW50LnNyY09iamVjdCkge1xuICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5zcmNPYmplY3QuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJJZCAmJiBtZWRpYVJlY29yZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIucmVtb3ZlVHJhY2sodXNlcklkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnRCeUlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuZGF0YS51c2VySWQgKyAnLWF1ZGlvLWVsLWNvbnRhaW5lcicpO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50QnlJZCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50QnlJZC5yZW1vdmVDaGlsZChhdWRpb0VsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN1bWVycy5kZWxldGUoY29uc3VtZXJJZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJldHJ5Q29uc3VtZShraW5kLCB1c2VySWQsIGUsIHJldHJpZXMsIHByb2R1Y2VySWQsIGxvYWRpbmcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0ZBSUxFRCBUTyBDT05TVU1FICcgKyBraW5kICsgJyBGUk9NICcgKyB1c2VySWQpO1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcblxuICAgICAgICBpZiAocmV0cmllcyA8IDEwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUkUtVFJZSU5HIFsnICsgcmV0cmllcyArICddJyk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodW5tb3VudGVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdW1lKHByb2R1Y2VySWQsIGtpbmQsIGxvYWRpbmcsIHVzZXJJZCwgcmV0cmllcyk7XG4gICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDT01QTEVURUxZIEZBSUxFRCBUTyBDT05TVU1FICcgKyBraW5kICsgJyBGUk9NICcgKyB1c2VySWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29uc3VtZSA9IGFzeW5jIChwcm9kdWNlcklkLCBraW5kLCBsb2FkaW5nLCB1c2VySWQsIHJldHJpZXMgPSAwKSA9PiB7XG4gICAgICAgIC8vIEdldCAoYW5kIGxhemlseSBjcmVhdGUpIHRoZSByZWN2IHRyYW5zcG9ydCBmb3IgdGhpcyBraW5kLiBhdWRpbyBhbmRcbiAgICAgICAgLy8gdmlkZW8gcmlkZSBzZXBhcmF0ZSB0cmFuc3BvcnRzLCBzbyBhIGNsb3NlZCBjb25zdW1lcidzIG0tc2VjdGlvbiBpc1xuICAgICAgICAvLyBuZXZlciByZWN5Y2xlZCBhY3Jvc3Mga2luZHMg4oCUIHdoaWNoIGlzIHdoYXQgdHJpZ2dlcmVkIHRoZSBSVFBcbiAgICAgICAgLy8gZXh0ZW5zaW9uLWlkIGNvbGxpc2lvbi5cbiAgICAgICAgY29uc3QgdHJhbnNwb3J0ID0gYXdhaXQgcHJvcHMuZ2V0UmVjdlRyYW5zcG9ydChraW5kKTtcbiAgICAgICAgaWYgKCF0cmFuc3BvcnQpIHtcbiAgICAgICAgICAgIHJldHJ5Q29uc3VtZShraW5kLCB1c2VySWQsIG5ldyBFcnJvcigncmVjdiB0cmFuc3BvcnQgdW5hdmFpbGFibGUgZm9yICcgKyBraW5kKSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbWVkaWFTb3VwSGVscGVyLmdldENvbnN1bWVTdHJlYW0ocHJvZHVjZXJJZCwgZGV2aWNlLnJ0cENhcGFiaWxpdGllcywgdHJhbnNwb3J0LCBwcm9wcy5tZWV0aW5nSWQsXG4gICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSwga2luZClcbiAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICBjb25zdW1lcixcbiAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgIGtpbmRcbiAgICAgICAgICAgICAgICAgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3VtZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVycy5zZXQoY29uc3VtZXIuaWQsIGNvbnN1bWVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1DT05TVU1FPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA6ICcgKyBraW5kICsgJyBGT1IgOiAnICsgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9TdHJlYW0uY3VycmVudCA9IHN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZpZGVvTXV0ZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZpZGVvUmVmcmVzaGVyKCF2aWRlb1JlZnJlc2hlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc2V0VmlkZW9UcmFjayhzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyIHx8IGxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGF1ZGlvRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5pZCA9IGNvbnN1bWVyLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0VsZW1lbnQucGxheXNpbmxpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LmF1dG9wbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lZXRpbmctYXVkaW8tZWwtY29udGFpbmVyJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmRDaGlsZChhdWRpb0VsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ldGVyIHRoaXMgcGFydGljaXBhbnQncyBhdWRpbyBmb3IgYWN0aXZlLXNwZWFrZXIgaGlnaGxpZ2h0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE1ldGVyKGNvbnN1bWVyLmlkLCBzdHJlYW0sIHVzZXJJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzLmlzSG9zdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5hZGRUcmFjayh1c2VySWQsIHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIub24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYWNrZW5kZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coa2luZCArIFwiIENPTlNVTUVSIFRSQUNLIEVOREVEIEZPUiBcIiArIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGNvbnN1bWVyLmlkLCBraW5kLCB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHdWFyZDogdGhlIHBhcnRpY2lwYW50IG1heSBoYXZlIGxlZnQsIHNvIGZpbmQoKSBjYW4gYmUgdW5kZWZpbmVkIOKAlFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWFkaW5nIC52aWRlb011dGVkLy5hdWRpb011dGVkIG9uIGl0IHRocmV3LiBObyBwYXJ0aWNpcGFudCDihpIgbm8gcmV0cnkuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYWNrRW5kZWRQYXJ0aWNpcGFudCA9IHBhcnRpY2lwYW50cy5maW5kKChwKSA9PiBwLnVzZXJJZCA9PT0gdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYWNrRW5kZWRQYXJ0aWNpcGFudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChraW5kID09PSAndmlkZW8nICYmICF0cmFja0VuZGVkUGFydGljaXBhbnQudmlkZW9NdXRlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoa2luZCA9PT0gJ2F1ZGlvJyAmJiAhdHJhY2tFbmRlZFBhcnRpY2lwYW50LmF1ZGlvTXV0ZWQpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgbmV3IEVycm9yKCd0cmFja2VuZGVkIHdoaWxlICcgKyBraW5kICsgJyBpcyBOT1QgbXV0ZWQnKSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lci5vbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNwb3J0Y2xvc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coa2luZCArIFwiIENPTlNVTUVSIENMT1NFRCBGT1IgXCIgKyB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDb25zdW1lcihjb25zdW1lci5pZCwga2luZCwgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgZSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRQYXJ0aWNpcGFudE5hbWUgPSAoKSA9PiB7XG4gICAgICAgIGxldCBuYW1lID0gcHJvcHMuZGF0YS5uYW1lO1xuXG4gICAgICAgIGlmIChVdGlscy5pc051bGwocHJvcHMuZGF0YS51c2VySWQpKSB7XG4gICAgICAgICAgICBuYW1lID0gYCR7bmFtZX0gKEd1ZXN0KWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7J2NvbC0qLSogJyArIChwcm9wcy5pc0N1cnJlbnRVc2VyID8gJ21lZXRpbmctcGFydGljaXBhbnQtY29udGFpbmVyLWN1cnJlbnQtdXNlcicgOiAnbWVldGluZy1wYXJ0aWNpcGFudC1jb250YWluZXInKX1gfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogcHJvcHMucGFkZGluZyA/IHByb3BzLnBhZGRpbmcgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBwcm9wcy5oZWlnaHQgPyBwcm9wcy5oZWlnaHQgOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxMnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBwcm9wcy5pc0N1cnJlbnRVc2VyID8gJyMxZjI5MzcnIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogcHJvcHMuaXNDdXJyZW50VXNlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzJweCBzb2xpZCAnICsgKGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpIHx8ICcjMWEzYzVlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA2KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBY3RpdmUtc3BlYWtlciBoaWdobGlnaHQ6IGFuIGluc2V0IHJpbmcgKHRoZSB0aWxlIGNsaXBzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvdmVyZmxvdywgc28gYW4gb3V0c2V0IHNoYWRvdyB3b3VsZCBiZSBjdXQgb2ZmKS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogKCFhdWRpb011dGVkICYmIHNvdW5kTGV2ZWwgPiBTUEVBS0lOR19MRVZFTClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdpbnNldCAwIDAgMCAzcHggJyArIChhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IoKSB8fCAnIzIyYzU1ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYm94LXNoYWRvdyAxMjBtcyBlYXNlLW91dCdcbiAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmlkZW9NdXRlZCB8fCAhdmlkZW9SZWYuY3VycmVudCB8fCAhdmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnY2VudGVyZWQtZmxleC1ib3gnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Cb3R0b206IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICc4cHgnIDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnYXZhdGFyLXdyYXBwZXItc20nIDogJ2F2YXRhci13cmFwcGVyJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IChwcm9wcy5zaXppbmcgPT09ICdzbScgPyA3MiA6IDExMikgKyAncHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogKHByb3BzLnNpemluZyA9PT0gJ3NtJyA/IDcyIDogMTEyKSArICdweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAhYXVkaW9NdXRlZCAmJiBzb3VuZExldmVsID4gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcwIDAgMCAnICsgKDMgKyBzb3VuZExldmVsIC8gMTIpICsgJ3B4ICcgKyAoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yKCkgfHwgJyMwMDQ3NmEnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYm94LXNoYWRvdyA5MG1zIGxpbmVhcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzNhNDY1NCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17cHJvcHMuc2l6aW5nID09PSAnbWQnID8gJ2F2YXRhciBhdmF0YXItbWQnIDogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJ2F2YXRhciBhdmF0YXItc20nIDogJ2F2YXRhcid9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzIwcHgnIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZFVybCA/IDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRSZXBlYXQ6ICduby1yZXBlYXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRTaXplOiAnY292ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCR7ZG93bmxvYWRVcmx9KWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPiA6IFV0aWxzLmdldEluaXRpYWxzKHByb3BzLmRhdGEubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtwcm9wcy5kYXRhLnVzZXJJZCArICctdmlkZW8nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezY0MH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MzIwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgcmVmPXt2aWRlb1JlZn0gbXV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RGaXQ6ICdjb3ZlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBwcm9wcy5pc0N1cnJlbnRVc2VyID8gJ3NjYWxlWCgtMSknIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICh2aWRlb011dGVkIHx8ICF2aWRlb1JlZi5jdXJyZW50IHx8ICF2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCkgPyAnbm9uZScgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qV2UgbmVlZCB0aGlzIGVsZW1lbnQgdG8gY2FwdHVyZSByZWNvcmRpbmcgc291bmQqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0hvc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF1ZGlvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17cHJvcHMuZGF0YS51c2VySWQgKyAnLWF1ZGlvJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5IHJlZj17YXVkaW9SZWZ9IG11dGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdub25lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb3BzLnNpemluZyA9PT0gJ3NtJyA/ICduYW1lLWxhYmVsLXNtJyA6ICduYW1lLWxhYmVsJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbTogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnNnB4JyA6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2ZsZXgtZW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FwOiAnNHB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnNzAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICcxcHggOHB4JyA6ICcycHggMTBweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc2cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICcxMXB4JyA6ICcxM3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IDEuNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAnYXV0bydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IXByb3BzLmlzQ3VycmVudFVzZXIgJiYgZ2V0UGFydGljaXBhbnROYW1lKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJvcHMuaXNDdXJyZW50VXNlciAmJiAnWW91J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7bWFyZ2luTGVmdDogJzRweCcsIGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnLCBnYXA6ICc0cHgnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0hvc3QgJiYgIWF1ZGlvTXV0ZWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbkhvc3RBdWRpb011dGUocHJvcHMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnTUlDJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhdWRpb011dGVkID8gJ2lubGluZS1mbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC41NSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzJweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnTUlDX09GRid9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0hvc3QgJiYgIXZpZGVvTXV0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMub25Ib3N0VmlkZW9NdXRlKHByb3BzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC41NSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnQ0FNRVJBJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuaXNDdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e2Rpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9XCJNeSBkZXZpY2VzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja0RldmljZXNJY29ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz17b3Blbk1vcmVBY3Rpb25zID8gJ2RldmljZS1tZW51JyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9e29wZW5Nb3JlQWN0aW9ucyA/ICd0cnVlJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC41NSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnU0VUVElOR1MnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvcHMuaXNDdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3ttYXJnaW5MZWZ0OiAnNHB4J319PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7aGFuZFJhaXNlZCAmJiA8UGFuVG9vbCBmb250U2l6ZT17J3NtYWxsJ30gc3R5bGU9e3tjb2xvcjogJyNlMmIwMzAnfX0vPn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuaXNDdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPXsnbWVldGluZy1hdWRpby1lbC1jb250YWluZXInfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICAgICAgYW5jaG9yRWw9e2FuY2hvckVsfVxuICAgICAgICAgICAgICAgIGlkPVwiZGV2aWNlcy1tZW51XCJcbiAgICAgICAgICAgICAgICBvcGVuPXtvcGVuTW9yZUFjdGlvbnN9XG4gICAgICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VEZXZpY2VNZW51fVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsb3NlRGV2aWNlTWVudX1cbiAgICAgICAgICAgICAgICBQYXBlclByb3BzPXt7XG4gICAgICAgICAgICAgICAgICAgIGVsZXZhdGlvbjogMCxcbiAgICAgICAgICAgICAgICAgICAgc3g6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6ICdkcm9wLXNoYWRvdygwcHggMnB4IDhweCByZ2JhKDAsMCwwLDAuMzIpKScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtdDogMS41LFxuICAgICAgICAgICAgICAgICAgICAgICAgJyYgLk11aUxpc3Qtcm9vdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2UxZTFlMScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcmIC5NdWlBdmF0YXItcm9vdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbDogLTAuNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnJjpiZWZvcmUnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAxNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yOiAncHJpbWFyeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoNDVkZWcpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luPXt7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWw6IDIwLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogMTM2XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBhbmNob3JPcmlnaW49e3tcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWw6ICd0b3AnXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvRGV2aWNlcy5tYXAoKGRldmljZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TWVudUl0ZW0gb25DbGljaz17KCkgPT4gY2hhbmdlQXVkaW9EZXZpY2UoZGV2aWNlKX0ga2V5PXtpbmRleH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tjb2xvcjogc2VsZWN0ZWRBdWRpb0RldmljZSAmJiBzZWxlY3RlZEF1ZGlvRGV2aWNlLmlkID09PSBkZXZpY2UuaWQgPyAnIzE5ODc1NCcgOiBudWxsfX0+XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLmxhYmVsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTWVudUl0ZW0+O1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvTWVudT5cbiAgICAgICAgPC8+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFZDUm9vbVBhcnRpY2lwYW50O1xuIl0sIm1h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