@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.
|
@@ -73,7 +73,6 @@ const meetingViewConfig2 = {
|
|
|
73
73
|
const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
74
74
|
const [currentUserParticipant, setCurrentUserParticipant] = _react.default.useState(null);
|
|
75
75
|
const [inViewParticipants, setInViewParticipants] = _react.default.useState([]);
|
|
76
|
-
const [consumerTransport, setConsumerTransport] = _react.default.useState(null);
|
|
77
76
|
//const [videoRefresher, setVideoRefresher] = React.useState(false);
|
|
78
77
|
const [device, setDevice] = _react.default.useState(null);
|
|
79
78
|
const [shareScreenProducer, setShareScreenProducer] = _react.default.useState(null);
|
|
@@ -101,6 +100,20 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
101
100
|
}, []);
|
|
102
101
|
const wordEditorValueHandler = (0, _react.useRef)({});
|
|
103
102
|
const transports = (0, _react.useRef)(new _Transports.default());
|
|
103
|
+
// Recv transports are split by kind and created just-in-time so a single
|
|
104
|
+
// closed consumer can never recycle its m-section across kinds (the cause of
|
|
105
|
+
// the "RTP extension ID reassignment" collision). deviceRef lets the factory
|
|
106
|
+
// read the loaded Device without a stale closure; the promise cache dedupes
|
|
107
|
+
// concurrent first-consumes of the same kind into ONE transport.
|
|
108
|
+
const deviceRef = (0, _react.useRef)(null);
|
|
109
|
+
const recvTransports = (0, _react.useRef)({
|
|
110
|
+
audio: null,
|
|
111
|
+
video: null
|
|
112
|
+
});
|
|
113
|
+
const recvTransportPromises = (0, _react.useRef)({
|
|
114
|
+
audio: null,
|
|
115
|
+
video: null
|
|
116
|
+
});
|
|
104
117
|
const shareScreenVideoRef = (0, _react.useRef)();
|
|
105
118
|
const shareScreenStream = (0, _react.useRef)();
|
|
106
119
|
// Producer-transport recovery guards: prevent overlapping recreations and
|
|
@@ -346,7 +359,11 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
346
359
|
}
|
|
347
360
|
};
|
|
348
361
|
const consume = async producer => {
|
|
349
|
-
|
|
362
|
+
const videoConsumerTransport = await getRecvTransport('video');
|
|
363
|
+
if (!videoConsumerTransport) {
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
_MediaSoupHelper.default.getConsumeStream(producer.producerId, device.rtpCapabilities, videoConsumerTransport, meetingId, _ApplicationManager.default.getUserDetails().username, 'video').then(_ref => {
|
|
350
367
|
let {
|
|
351
368
|
consumer,
|
|
352
369
|
stream,
|
|
@@ -429,13 +446,51 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
429
446
|
};
|
|
430
447
|
const setupSelfDevices = async () => {
|
|
431
448
|
let device = await _MediaSoupHelper.default.getParticipantDevice(rtpCapabilities);
|
|
449
|
+
deviceRef.current = device;
|
|
432
450
|
setDevice(device);
|
|
433
|
-
let consumerTransport = await _MediaSoupHelper.default.initConsumerTransport(device, meetingId, _ApplicationManager.default.getUserDetails().username);
|
|
434
451
|
let producerTransport = await _MediaSoupHelper.default.initProducerTransport(device, meetingId, _ApplicationManager.default.getUserDetails().username);
|
|
435
|
-
setConsumerTransport(consumerTransport);
|
|
436
452
|
setProducerTransport(producerTransport);
|
|
437
|
-
transports.current.setConsumerTransport(consumerTransport);
|
|
438
453
|
transports.current.setProducerTransport(producerTransport);
|
|
454
|
+
// Recv transports are created just-in-time, per kind, on first consume (getRecvTransport).
|
|
455
|
+
};
|
|
456
|
+
|
|
457
|
+
// Lazily create (and cache) one recv transport per kind. Audio and video each
|
|
458
|
+
// get their own transport; screen-share rides the video transport. Concurrent
|
|
459
|
+
// first-consumes of a kind share a single in-flight creation, so we never build
|
|
460
|
+
// duplicate transports. A session that never receives a kind never builds it.
|
|
461
|
+
const getRecvTransport = async kind => {
|
|
462
|
+
const device = deviceRef.current;
|
|
463
|
+
if (!device) {
|
|
464
|
+
return null;
|
|
465
|
+
}
|
|
466
|
+
const key = kind === 'audio' ? 'audio' : 'video';
|
|
467
|
+
if (recvTransports.current[key]) {
|
|
468
|
+
return recvTransports.current[key];
|
|
469
|
+
}
|
|
470
|
+
if (recvTransportPromises.current[key]) {
|
|
471
|
+
return recvTransportPromises.current[key];
|
|
472
|
+
}
|
|
473
|
+
const username = _ApplicationManager.default.getUserDetails().username;
|
|
474
|
+
const promise = _MediaSoupHelper.default.initConsumerTransport(device, meetingId, username, key).then(transport => {
|
|
475
|
+
if (!transport) {
|
|
476
|
+
// creation failed — clear the cache so a later consume can retry
|
|
477
|
+
recvTransportPromises.current[key] = null;
|
|
478
|
+
return null;
|
|
479
|
+
}
|
|
480
|
+
recvTransports.current[key] = transport;
|
|
481
|
+
if (key === 'audio') {
|
|
482
|
+
transports.current.setAudioConsumerTransport(transport);
|
|
483
|
+
} else {
|
|
484
|
+
transports.current.setVideoConsumerTransport(transport);
|
|
485
|
+
}
|
|
486
|
+
return transport;
|
|
487
|
+
}).catch(e => {
|
|
488
|
+
console.error('FAILED TO CREATE ' + key + ' RECV TRANSPORT', e);
|
|
489
|
+
recvTransportPromises.current[key] = null;
|
|
490
|
+
return null;
|
|
491
|
+
});
|
|
492
|
+
recvTransportPromises.current[key] = promise;
|
|
493
|
+
return promise;
|
|
439
494
|
};
|
|
440
495
|
|
|
441
496
|
// Recover from a producer-transport failure by recreating it. Unlike a
|
|
@@ -566,10 +621,10 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
566
621
|
}
|
|
567
622
|
}, [minutesDocumentId, meetingViewConfig2, meetingViewHandler, showMinutes]);
|
|
568
623
|
(0, _react.useEffect)(() => {
|
|
569
|
-
if (onloadScreenShareData && device
|
|
624
|
+
if (onloadScreenShareData && device) {
|
|
570
625
|
consume(onloadScreenShareData);
|
|
571
626
|
}
|
|
572
|
-
}, [onloadScreenShareData, device
|
|
627
|
+
}, [onloadScreenShareData, device]);
|
|
573
628
|
(0, _react.useEffect)(() => {
|
|
574
629
|
setScreenShared(props.screenShared);
|
|
575
630
|
if (props.screenShared) {
|
|
@@ -583,7 +638,7 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
583
638
|
setupSelfDevices();
|
|
584
639
|
return () => {
|
|
585
640
|
_VCEventManager.default.removeSubscriptions(eventHandler);
|
|
586
|
-
transports.current.
|
|
641
|
+
transports.current.closeRecvTransports();
|
|
587
642
|
transports.current.closeProducerTransport();
|
|
588
643
|
};
|
|
589
644
|
}, []);
|
|
@@ -661,7 +716,7 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
661
716
|
audioMuted: participant.audioMuted,
|
|
662
717
|
videoMuted: participant.videoMuted,
|
|
663
718
|
onRemoveFromView: participant => removeFromView(participant),
|
|
664
|
-
|
|
719
|
+
getRecvTransport: getRecvTransport,
|
|
665
720
|
rtpCapabilities: rtpCapabilities,
|
|
666
721
|
numberOfInViewParticipants: inViewParticipants.length,
|
|
667
722
|
participants: participants,
|
|
@@ -705,7 +760,7 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
705
760
|
audioMuted: participant.audioMuted,
|
|
706
761
|
videoMuted: participant.videoMuted,
|
|
707
762
|
onRemoveFromView: participant => removeFromView(participant),
|
|
708
|
-
|
|
763
|
+
getRecvTransport: getRecvTransport,
|
|
709
764
|
numberOfInViewParticipants: inViewParticipants.length,
|
|
710
765
|
participants: participants,
|
|
711
766
|
rtpCapabilities: rtpCapabilities,
|
|
@@ -724,7 +779,7 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
724
779
|
rtpCapabilities: rtpCapabilities,
|
|
725
780
|
isCurrentUser: true,
|
|
726
781
|
onAudioDeviceChange: props.onAudioDeviceChange,
|
|
727
|
-
|
|
782
|
+
getRecvTransport: getRecvTransport,
|
|
728
783
|
producerTransport: producerTransport,
|
|
729
784
|
audioMuted: audioMuted,
|
|
730
785
|
videoMuted: videoMuted,
|
|
@@ -836,7 +891,7 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
836
891
|
audioMuted: participant.audioMuted,
|
|
837
892
|
videoMuted: participant.videoMuted,
|
|
838
893
|
onRemoveFromView: participant => removeFromView(participant),
|
|
839
|
-
|
|
894
|
+
getRecvTransport: getRecvTransport,
|
|
840
895
|
numberOfInViewParticipants: inViewParticipants.length,
|
|
841
896
|
participants: participants,
|
|
842
897
|
rtpCapabilities: rtpCapabilities,
|
|
@@ -972,4 +1027,4 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
972
1027
|
}))) : null;
|
|
973
1028
|
});
|
|
974
1029
|
var _default = exports.default = VCRoomWorkspace;
|
|
975
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfR3JpZCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfVkNSb29tUGFydGljaXBhbnQiLCJfQm94IiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX01lZGlhU291cEhlbHBlciIsIl9UcmFuc3BvcnRzIiwiX1ZDRXZlbnRUeXBlIiwiX0ljb24iLCJfU29ja2V0TWFuYWdlciIsIl9Mb2JieVdhaXRpbmdMaXN0IiwiX1ZDUm9vbSIsIl9TaWRlQmFyQ29udGVudCIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfV29yZERvY3VtZW50Vmlld2VyIiwiX1V0aWxzIiwiX0RvY3VtZW50Vmlld2VyIiwiX0V2ZW50IiwiX09ic2VydmFibGUiLCJfRXZlbnRUeXBlIiwiX3V1aWQiLCJfdXNlQ29udGFpbmVyV2lkdGgiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJNQVhfQ09MUyIsIk1BWF9ST1dTIiwibWVldGluZ1ZpZXdDb25maWcyIiwiVkNSb29tV29ya3NwYWNlIiwiUmVhY3QiLCJmb3J3YXJkUmVmIiwicHJvcHMiLCJyZWYiLCJjdXJyZW50VXNlclBhcnRpY2lwYW50Iiwic2V0Q3VycmVudFVzZXJQYXJ0aWNpcGFudCIsInVzZVN0YXRlIiwiaW5WaWV3UGFydGljaXBhbnRzIiwic2V0SW5WaWV3UGFydGljaXBhbnRzIiwiY29uc3VtZXJUcmFuc3BvcnQiLCJzZXRDb25zdW1lclRyYW5zcG9ydCIsImRldmljZSIsInNldERldmljZSIsInNoYXJlU2NyZWVuUHJvZHVjZXIiLCJzZXRTaGFyZVNjcmVlblByb2R1Y2VyIiwicHJvZHVjZXJUcmFuc3BvcnQiLCJzZXRQcm9kdWNlclRyYW5zcG9ydCIsInNjcmVlblNoYXJlZCIsInNldFNjcmVlblNoYXJlZCIsInNvbWVvbmVTaGFyaW5nIiwic2V0U29tZW9uZVNoYXJpbmciLCJzaG93U2hhcmVkU2NyZWVuIiwic2V0U2hvd1NoYXJlZFNjcmVlbiIsIm1lc3NhZ2UiLCJzZXRNZXNzYWdlIiwic2hhcmVTY3JlZW5Db25zdW1lciIsInNldFNoYXJlU2NyZWVuQ29uc3VtZXIiLCJncmlkIiwic2V0R3JpZCIsImV2ZW50SGFuZGxlciIsImdhbGxlcnlSZWYiLCJnYWxsZXJ5V2lkdGgiLCJnYWxsZXJ5SGVpZ2h0IiwidXNlQ29udGFpbmVyV2lkdGgiLCJtaW51dGVzU2hvd24iLCJzZXRNaW51dGVzU2hvd24iLCJzaG93TWludXRlcyIsInNldFNob3dNaW51dGVzIiwibWVldGluZ1ZpZXdIYW5kbGVyIiwic2V0TWVldGluZ1ZpZXdIYW5kbGVyIiwibWludXRlc0RvY3VtZW50Iiwic2V0TWludXRlc0RvY3VtZW50IiwibWVldGluZ1ZpZXdDb25maWciLCJzZXRNZWV0aW5nVmlld0NvbmZpZyIsImhhc0xvYWRlZE1pbnV0ZXMiLCJzZXRIYXNMb2FkZWRNaW51dGVzIiwidXNlRWZmZWN0Iiwid29yZEVkaXRvclZhbHVlSGFuZGxlciIsInVzZVJlZiIsInRyYW5zcG9ydHMiLCJUcmFuc3BvcnRzIiwic2hhcmVTY3JlZW5WaWRlb1JlZiIsInNoYXJlU2NyZWVuU3RyZWFtIiwicHJvZHVjZXJSZWNvdmVyaW5nIiwicHJvZHVjZXJSZWNvdmVyeUF0dGVtcHRzIiwicHJvZHVjZXJSZWNvdmVyeUZhaWxlZCIsIndhaXRpbmdMaXN0Iiwicm9vbVN0YXR1cyIsIm1lZXRpbmdJZCIsIm1pbnV0ZXNEb2N1bWVudElkIiwiZXZlbnRLZXkiLCJtZWV0aW5nQ2hhdCIsInNpZGVCYXJUYWIiLCJtZWV0aW5nVGl0bGUiLCJ3aGl0ZUJvYXJkU2hvd24iLCJ2aWRlb011dGVkIiwiYXVkaW9NdXRlZCIsImlzSG9zdCIsImlzQ2hhaXJQZXJzb24iLCJydHBDYXBhYmlsaXRpZXMiLCJvbmxvYWRTY3JlZW5TaGFyZURhdGEiLCJkaXNwbGF5U3RhdGUiLCJzdGFydFNjcmVlblNoYXJpbmciLCJwYXJ0aWNpcGFudHMiLCJzdGFydFNob3dpbmdNaW51dGVzIiwib25TdGFydFNob3dpbmdNaW51dGVzIiwib25TdG9wU2hvd2luZ01pbnV0ZXMiLCJtaW51dGVzU2hvd25Qcm9wIiwic2F2ZU1pbnV0ZXMiLCJhcGkiLCJjb25zb2xlIiwiZXJyb3IiLCJmaWxlIiwiZ2V0RG9jdW1lbnRWYWx1ZSIsIm5ld0RvY3VtZW50SWQiLCJ1dWlkdjQiLCJtZXRhZGF0YSIsImRvY3VtZW50UmVwb3NpdG9yeUNhY2hlSWQiLCJjb3JyZWxhdGlvbklkIiwidmlld0lkIiwibmFtZSIsInR5cGUiLCJhY2Nlc3NUb2tlbiIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsImlkVG9rZW4iLCJsb2NhdGlvbiIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJkYXRhIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJKU09OIiwic3RyaW5naWZ5IiwiZmV0Y2hDb25maWciLCJtZXRob2QiLCJoZWFkZXJzIiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiZ2V0QWN0aXZlVGVuYW50IiwiYm9keSIsInVwbG9hZFVybCIsImdldENvbnRleHRSb290IiwidXBsb2FkUmVzcG9uc2UiLCJmZXRjaCIsImVuY29kZVVSSSIsIm9rIiwiRXJyb3IiLCJ1cGRhdGVQYXlsb2FkIiwiaWQiLCJ1cGRhdGVGZXRjaENvbmZpZyIsInVwZGF0ZVVybCIsInVwZGF0ZVJlc3BvbnNlIiwibG9nIiwibWVzc2FnZVR5cGUiLCJldmVudCIsIkV2ZW50IiwiZXZlbnRNYW5hZ2VyIiwiZmlyZUV2ZW50IiwiRXZlbnRUeXBlIiwiTUVTU0FHRV9BUlJJVkVEIiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInN0YXJ0U2hhcmVTY3JlZW4iLCJwcm9kdWNlU2NyZWVuU2hhcmUiLCJzdG9wU2hhcmVTY3JlZW4iLCJjdXJyZW50IiwidHJhY2siLCJnZXRUcmFja3MiLCJzdG9wIiwicmVtb3ZlU2hhcmVTY3JlZW5FbGVtZW50Iiwib25TdG9wU2hhcmluZyIsImNhblByb2R1Y2UiLCJ2aWRlb0NvbnN0cmFpbnRzIiwiY3Vyc29yIiwiYXVkaW8iLCJ2aWRlbyIsIm1hbmRhdG9yeSIsIndpZHRoIiwibWluIiwiaWRlYWwiLCJtYXgiLCJoZWlnaHQiLCJmcmFtZVJhdGUiLCJnb29nQ3B1T3ZlcnVzZURldGVjdGlvbiIsImdvb2dDcHVPdmVydXNlRW5jb2RlVXNhZ2UiLCJnb29nQ3B1T3ZlcnVzZVRocmVzaG9sZCIsInByZWZlckN1cnJlbnRUYWIiLCJzZWxmQnJvd3NlclN1cmZhY2UiLCJzeXN0ZW1BdWRpbyIsInN1cmZhY2VTd2l0Y2hpbmciLCJtb25pdG9yVHlwZVN1cmZhY2VzIiwic29ja2V0TWFuYWdlciIsImVtaXRFdmVudCIsIlZDRXZlbnRUeXBlIiwiQ0FOQ0VMX1NDUkVFTl9TSEFSRSIsInJvb21JZCIsInRoZW4iLCJyZXN1bHQiLCJuYXZpZ2F0b3IiLCJtZWRpYURldmljZXMiLCJnZXREaXNwbGF5TWVkaWEiLCJzdHJlYW0iLCJnZXRWaWRlb1RyYWNrcyIsIm9uZW5kZWQiLCJwYXJhbXMiLCJhcHBEYXRhIiwic2NyZWVuU2hhcmluZyIsInByb2R1Y2VyIiwicHJvZHVjZSIsInNyY09iamVjdCIsIm9uIiwiZm9yRWFjaCIsIm9uU3RhcnRTaGFyaW5nIiwiY2F0Y2giLCJzdG9wUHJvZHVjaW5nU2NyZWVuU2hhcmUiLCJwcm9kdWNlcklkIiwiUFJPRFVDRVJfQ0xPU0VEIiwidXNlcklkIiwiZ2V0VXNlckRldGFpbHMiLCJ1c2VybmFtZSIsImNsb3NlIiwib25OZXdQcm9kdWNlcnMiLCJwcm9kdWNlcnMiLCJzY3JlZW5TaGFyZVByb2R1Y2VyIiwiZmluZCIsInAiLCJjb25zdW1lIiwiZWwiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwibWVkaWFTb3VwSGVscGVyIiwiZ2V0Q29uc3VtZVN0cmVhbSIsIl9yZWYiLCJjb25zdW1lciIsImtpbmQiLCJzaGFyaW5nSGFuZGxlciIsImhhbmRsZXIiLCJldmVudFR5cGUiLCJiZSIsIlBBUlRJQ0lQQU5UX0lOX1ZJRVciLCJvbkJyaW5nVG9WaWV3IiwiTkVXX1BST0RVQ0VSUyIsInBheWxvYWQiLCJDT05TVU1FUl9DTE9TRUQiLCJjb25zdW1lcklkIiwiUFJPRFVDRVJfVFJBTlNQT1JUX0ZBSUxFRCIsInJlY3JlYXRlUHJvZHVjZXJUcmFuc3BvcnQiLCJsZW5ndGgiLCJvZmZWaWV3UGFydGljaXBhbnQiLCJ2Y0V2ZW50TWFuYWdlciIsIlBBUlRJQ0lQQU5UX09GRl9WSUVXIiwic3BsaWNlIiwiaW5WaWV3IiwicGFydGljaXBhbnQiLCJwdXNoIiwiY29uY2F0IiwicmVtb3ZlRnJvbVZpZXciLCJmaWx0ZXIiLCJzZXR1cFNlbGZEZXZpY2VzIiwiZ2V0UGFydGljaXBhbnREZXZpY2UiLCJpbml0Q29uc3VtZXJUcmFuc3BvcnQiLCJpbml0UHJvZHVjZXJUcmFuc3BvcnQiLCJTWVNURU1fQUxFUlQiLCJuZXdQcm9kdWNlclRyYW5zcG9ydCIsInNldHVwR3JpZCIsIm5ld0NvbmZpZyIsImxvYWREYXRhIiwicmVmcmVzaCIsImFkZFN1YnNjcmlwdGlvbnMiLCJyZW1vdmVTdWJzY3JpcHRpb25zIiwiY2xvc2VDb25zdW1lclRyYW5zcG9ydCIsImNsb3NlUHJvZHVjZXJUcmFuc3BvcnQiLCJvbkdyaWRTZXR1cCIsImN1cnJlbnRVc2VyRnVsbE5hbWUiLCJpc0N1cnJlbnRVc2VyIiwicGVlciIsImF2YXRhcklkIiwiY291bnRlciIsImluVmlld0dyaWQiLCJudW1Sb3dzIiwicm93cyIsImN1cnJlbnRSb3dJbmRleCIsInJlbmRlclN0cmlwIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwib3ZlcmZsb3dYIiwibWF4V2lkdGgiLCJib3JkZXJSYWRpdXMiLCJvdmVyZmxvd1kiLCJhbGlnbkl0ZW1zIiwiY2xhc3NOYW1lIiwibWFwIiwiaW5kZXgiLCJrZXkiLCJtaW5XaWR0aCIsInBhZGRpbmciLCJvblJlbW92ZUZyb21WaWV3IiwibnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHMiLCJzaXppbmciLCJvbkhvc3RBdWRpb011dGUiLCJvbkhvc3RWaWRlb011dGUiLCJyZW5kZXJSb3ciLCJyb3ciLCJqdXN0aWZ5Q29udGVudCIsImRpcmVjdGlvbiIsImNvbnRhaW5lciIsIml0ZW0iLCJzcGFjaW5nIiwiRnJhZ21lbnQiLCJmbGV4QmFzaXMiLCJyZW5kZXJDdXJyZW50UGFydGljaXBhbnQiLCJvbkF1ZGlvRGV2aWNlQ2hhbmdlIiwiZ2V0TWVldGluZ0RvY3VtZW50IiwidmFsdWUiLCJHQUxMRVJZX0dBUCIsImNvbXB1dGVSb3dTcGxpdCIsImNvdW50IiwidyIsImgiLCJjb250YWluZXJBc3BlY3QiLCJiZXN0Um93cyIsImJlc3RNaW4iLCJiZXN0UGVuYWx0eSIsIkluZmluaXR5IiwiY29scyIsIk1hdGgiLCJjZWlsIiwiY2VsbFciLCJjZWxsSCIsIm1pbkRpbSIsInBlbmFsdHkiLCJhYnMiLCJiYXNlIiwiZmxvb3IiLCJleHRyYSIsInBlclJvdyIsInJlbmRlclBhcnRpY2lwYW50R3JpZCIsImlkeCIsInNsaWNlIiwibWF4Q29scyIsInRpbGVXaWR0aCIsImZsZXhHcm93IiwiZGlzcGxheSIsImJveFNpemluZyIsImZsZXhEaXJlY3Rpb24iLCJnYXAiLCJtaW5IZWlnaHQiLCJyb3dQYXJ0aWNpcGFudHMiLCJmbGV4IiwiYWxsVXNlclBhcnRpY2lwYW50c0xlZnQiLCJmb250U2l6ZSIsInRleHRBbGlnbiIsIldBSVRJTkdfRk9SX09USEVSU19UT19KT0lOX01FU1NBR0UiLCJ0YWIiLCJtYXhIZWlnaHQiLCJhdXRvUGxheSIsIm11dGVkIiwiekluZGV4IiwiYmFja2dyb3VuZENvbG9yIiwib3ZlcmZsb3ciLCJjb25maWciLCJoYW5kbGUiLCJtYXJnaW5SaWdodCIsInZlcnRpY2FsQWxpZ24iLCJib3R0b20iLCJyaWdodCIsInBhZGRpbmdMZWZ0IiwibWFyZ2luTGVmdCIsInBvc2l0aW9uIiwidG9wIiwiYXV0b0hlaWdodCIsInJlamVjdFVzZXJIYW5kbGVyIiwiYWNjZXB0VXNlckhhbmRsZXIiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbWVkaWEvVkNSb29tV29ya3NwYWNlLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbmltcG9ydCBSZWFjdCwge0ZyYWdtZW50LCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCAnLi9WQ1Jvb21Xb3Jrc3BhY2UuY3NzJztcbmltcG9ydCBHcmlkIGZyb20gJ0BtdWkvbWF0ZXJpYWwvR3JpZCc7XG5pbXBvcnQgVkNSb29tUGFydGljaXBhbnQgZnJvbSAnLi9WQ1Jvb21QYXJ0aWNpcGFudCc7XG5pbXBvcnQgQm94IGZyb20gJ0BtdWkvbWF0ZXJpYWwvQm94JztcbmltcG9ydCB2Y0V2ZW50TWFuYWdlciBmcm9tICcuL1ZDRXZlbnRNYW5hZ2VyJztcbmltcG9ydCBtZWRpYVNvdXBIZWxwZXIgZnJvbSAnLi9NZWRpYVNvdXBIZWxwZXInO1xuaW1wb3J0IFRyYW5zcG9ydHMgZnJvbSAnLi9UcmFuc3BvcnRzJztcbmltcG9ydCB7VkNFdmVudFR5cGV9IGZyb20gJy4vVkNFdmVudFR5cGUnO1xuaW1wb3J0IEljb24gZnJvbSAnLi4vSWNvbic7XG5pbXBvcnQgc29ja2V0TWFuYWdlciBmcm9tICcuLi9Tb2NrZXRNYW5hZ2VyJztcbmltcG9ydCBMb2JieVdhaXRpbmdMaXN0IGZyb20gJy4vTG9iYnlXYWl0aW5nTGlzdCc7XG5pbXBvcnQge1dBSVRJTkdfRk9SX09USEVSU19UT19KT0lOX01FU1NBR0V9IGZyb20gJy4vVkNSb29tJztcbmltcG9ydCBTaWRlQmFyQ29udGVudCBmcm9tIFwiLi9TaWRlQmFyQ29udGVudFwiO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tIFwiLi4vLi4vQXBwbGljYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgV29yZERvY3VtZW50Vmlld2VyIGZyb20gJy4uL1dvcmREb2N1bWVudFZpZXdlcic7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uLy4uL1V0aWxzXCI7XG5pbXBvcnQgRG9jdW1lbnRWaWV3ZXIgZnJvbSBcIi4uL0RvY3VtZW50Vmlld2VyXCI7XG5pbXBvcnQgRXZlbnQgZnJvbSBcIi4uLy4uL2V2ZW50L0V2ZW50XCI7XG5pbXBvcnQgZXZlbnRNYW5hZ2VyIGZyb20gXCIuLi8uLi9ldmVudC9PYnNlcnZhYmxlXCI7XG5pbXBvcnQgRXZlbnRUeXBlIGZyb20gXCIuLi8uLi9ldmVudC9FdmVudFR5cGVcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgdXNlQ29udGFpbmVyV2lkdGggZnJvbSAnLi4vLi4vaG9va3MvdXNlQ29udGFpbmVyV2lkdGgnO1xuXG5jb25zdCBNQVhfQ09MUyA9IDM7XG5jb25zdCBNQVhfUk9XUyA9IDI7XG5cbmNvbnN0IG1lZXRpbmdWaWV3Q29uZmlnMiA9IHtcbiAgICBcInR5cGVcIjogXCJkb2N1bWVudFZpZXdlclwiLFxuICAgIFwiaWRcIjogXCJtZWV0aW5nTWludXRlXCIsXG4gICAgXCJmaWxlVHlwZVwiOiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50XCIsXG4gICAgXCJhdHRyaWJ1dGVzXCI6IHtcbiAgICAgICAgXCJzdHlsZVwiOiB7XG4gICAgICAgICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogXCIxMDAlXCIsXG4gICAgICAgICAgICBcImhlaWdodFwiOiBcIjEwMCVcIixcbiAgICAgICAgICAgIFwicGFkZGluZ1wiOiBcIjI0cHhcIlxuICAgICAgICB9XG4gICAgfSxcbiAgICBcInRyYWNrQ2hhbmdlc1wiOiBmYWxzZSxcbiAgICBcInJlYWRPbmx5XCI6IGZhbHNlLFxuICAgIFwiY29tbWVudHNPbmx5XCI6IGZhbHNlLFxuICAgIFwiZXZlbnRIYW5kbGluZ0NvbmZpZ1wiOiB7XG4gICAgICAgIFwic3Vic2NyaXB0aW9uc1wiOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJwdWJsaXNoZXJcIjogXCJ2Y1Jvb21cIixcbiAgICAgICAgICAgICAgICBcImV2ZW50VHlwZVwiOiBcIkRBVEFfQVJSSVZFRFwiLFxuICAgICAgICAgICAgICAgIFwiYWN0aW9uc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uVHlwZVwiOiBcImxvYWREYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH0sXG4gICAgXCJkYXRhU2VydmljZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcInJlc3RcIixcbiAgICAgICAgXCJ1cmxcIjogXCIvZG9jcy9hcGkvdjEvbWFuYWdlci9maW5kXCIsXG4gICAgICAgIFwibWV0aG9kXCI6IFwiR0VUXCIsXG4gICAgICAgIFwicGFyYW1ldGVyc1wiOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiZG9jdW1lbnRJZFwiLFxuICAgICAgICAgICAgICAgIFwiaHR0cFBhcmFtZXRlclR5cGVcIjogXCJQQVRIX1ZBUklBQkxFXCIsXG4gICAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcImMyOGE0YTU2LTZmYzAtNDg4Ny1iY2EwLTI5ZjQzZGEwYjNiMlwiXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9XG59XG5cbi8vIFRPRE8gOiBDbGVhbi11cCBhbGwgdHJhY2tzIGFuZCBwcm9kdWNlcnMgYW5kIGNvbnN1bWVycyB3aGVuIHRoZSBjb21wb25lbnQgY2xvc2VzXG5jb25zdCBWQ1Jvb21Xb3Jrc3BhY2UgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XG4gICAgY29uc3QgW2N1cnJlbnRVc2VyUGFydGljaXBhbnQsIHNldEN1cnJlbnRVc2VyUGFydGljaXBhbnRdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2luVmlld1BhcnRpY2lwYW50cywgc2V0SW5WaWV3UGFydGljaXBhbnRzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbY29uc3VtZXJUcmFuc3BvcnQsIHNldENvbnN1bWVyVHJhbnNwb3J0XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIC8vY29uc3QgW3ZpZGVvUmVmcmVzaGVyLCBzZXRWaWRlb1JlZnJlc2hlcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2RldmljZSwgc2V0RGV2aWNlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtzaGFyZVNjcmVlblByb2R1Y2VyLCBzZXRTaGFyZVNjcmVlblByb2R1Y2VyXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtwcm9kdWNlclRyYW5zcG9ydCwgc2V0UHJvZHVjZXJUcmFuc3BvcnRdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW3NjcmVlblNoYXJlZCwgc2V0U2NyZWVuU2hhcmVkXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtzb21lb25lU2hhcmluZywgc2V0U29tZW9uZVNoYXJpbmddID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW3Nob3dTaGFyZWRTY3JlZW4sIHNldFNob3dTaGFyZWRTY3JlZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFttZXNzYWdlLCBzZXRNZXNzYWdlXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbc2hhcmVTY3JlZW5Db25zdW1lciwgc2V0U2hhcmVTY3JlZW5Db25zdW1lcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbZ3JpZCwgc2V0R3JpZF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbZXZlbnRIYW5kbGVyXSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBbZ2FsbGVyeVJlZiwgZ2FsbGVyeVdpZHRoLCBnYWxsZXJ5SGVpZ2h0XSA9IHVzZUNvbnRhaW5lcldpZHRoKCk7XG4gICAgY29uc3QgW21pbnV0ZXNTaG93biwgc2V0TWludXRlc1Nob3duXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbc2hvd01pbnV0ZXMsIHNldFNob3dNaW51dGVzXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbbWVldGluZ1ZpZXdIYW5kbGVyLCBzZXRNZWV0aW5nVmlld0hhbmRsZXJdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW21pbnV0ZXNEb2N1bWVudCwgc2V0TWludXRlc0RvY3VtZW50XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFttZWV0aW5nVmlld0NvbmZpZywgc2V0TWVldGluZ1ZpZXdDb25maWddID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2hhc0xvYWRlZE1pbnV0ZXMsIHNldEhhc0xvYWRlZE1pbnV0ZXNdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgLy8gQ3JlYXRlIGhhbmRsZXIgb25jZSBvbiBtb3VudFxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghbWVldGluZ1ZpZXdIYW5kbGVyKSB7XG4gICAgICAgICAgICBzZXRNZWV0aW5nVmlld0hhbmRsZXIoe30pO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3Qgd29yZEVkaXRvclZhbHVlSGFuZGxlciA9IHVzZVJlZih7fSk7XG4gICAgY29uc3QgdHJhbnNwb3J0cyA9IHVzZVJlZihuZXcgVHJhbnNwb3J0cygpKTtcbiAgICBjb25zdCBzaGFyZVNjcmVlblZpZGVvUmVmID0gdXNlUmVmKCk7XG4gICAgY29uc3Qgc2hhcmVTY3JlZW5TdHJlYW0gPSB1c2VSZWYoKTtcbiAgICAvLyBQcm9kdWNlci10cmFuc3BvcnQgcmVjb3ZlcnkgZ3VhcmRzOiBwcmV2ZW50IG92ZXJsYXBwaW5nIHJlY3JlYXRpb25zIGFuZFxuICAgIC8vIGdpdmUgdXAgYWZ0ZXIgYSBmZXcgYXR0ZW1wdHMgc28gYSBwZXJtYW5lbnRseS1kb3duIG5ldHdvcmsgY2FuJ3Qgc3Bpbi5cbiAgICBjb25zdCBwcm9kdWNlclJlY292ZXJpbmcgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IHByb2R1Y2VyUmVjb3ZlcnlBdHRlbXB0cyA9IHVzZVJlZigwKTtcbiAgICBjb25zdCBwcm9kdWNlclJlY292ZXJ5RmFpbGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCB7XG4gICAgICAgIHdhaXRpbmdMaXN0LFxuICAgICAgICByb29tU3RhdHVzLFxuICAgICAgICBtZWV0aW5nSWQsXG4gICAgICAgIG1pbnV0ZXNEb2N1bWVudElkLFxuICAgICAgICBldmVudEtleSxcbiAgICAgICAgbWVldGluZ0NoYXQsXG4gICAgICAgIHNpZGVCYXJUYWIsXG4gICAgICAgIG1lZXRpbmdUaXRsZSxcbiAgICAgICAgd2hpdGVCb2FyZFNob3duLFxuICAgICAgICB2aWRlb011dGVkLFxuICAgICAgICBhdWRpb011dGVkLFxuICAgICAgICBpc0hvc3QsXG4gICAgICAgIGlzQ2hhaXJQZXJzb24sXG4gICAgICAgIHJ0cENhcGFiaWxpdGllcyxcbiAgICAgICAgb25sb2FkU2NyZWVuU2hhcmVEYXRhLFxuICAgICAgICBkaXNwbGF5U3RhdGUsXG4gICAgICAgIHN0YXJ0U2NyZWVuU2hhcmluZyxcbiAgICAgICAgcGFydGljaXBhbnRzLFxuICAgICAgICBzdGFydFNob3dpbmdNaW51dGVzLFxuICAgICAgICBvblN0YXJ0U2hvd2luZ01pbnV0ZXMsXG4gICAgICAgIG9uU3RvcFNob3dpbmdNaW51dGVzLFxuICAgICAgICBtaW51dGVzU2hvd246IG1pbnV0ZXNTaG93blByb3BcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBzYXZlTWludXRlcyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICghbWVldGluZ1ZpZXdIYW5kbGVyIHx8ICFtZWV0aW5nVmlld0hhbmRsZXIuYXBpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk1lZXRpbmcgdmlldyBoYW5kbGVyIG5vdCBhdmFpbGFibGVcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgbWVldGluZ1ZpZXdIYW5kbGVyLmFwaS5nZXREb2N1bWVudFZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTm8gZG9jdW1lbnQgdG8gc2F2ZVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0RvY3VtZW50SWQgPSB1dWlkdjQoKTtcblxuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRSZXBvc2l0b3J5Q2FjaGVJZDogbmV3RG9jdW1lbnRJZCxcbiAgICAgICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBwcm9wcy52aWV3SWQgKyBcIi5taW51dGVzRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJhY2Nlc3NUb2tlblwiKTtcbiAgICAgICAgICAgIGNvbnN0IGlkVG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiaWRUb2tlblwiKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gICAgICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgZGF0YS5hcHBlbmQoXCJtZXRhZGF0YVwiLCBKU09OLnN0cmluZ2lmeShtZXRhZGF0YSkpO1xuICAgICAgICAgICAgZGF0YS5hcHBlbmQoXCJmaWxlXCIsIGZpbGUpO1xuXG4gICAgICAgICAgICBsZXQgZmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAnaWRUb2tlbic6IGlkVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICd0ZW5hbnQnOiBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QWN0aXZlVGVuYW50KClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCB1cGxvYWRVcmwgPSBsb2NhdGlvbiArIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgXCIvZG9jcy9hcGkvdjEvbWFuYWdlci91cGxvYWQvc2F2ZVwiO1xuXG4gICAgICAgICAgICBjb25zdCB1cGxvYWRSZXNwb25zZSA9IGF3YWl0IGZldGNoKGVuY29kZVVSSSh1cGxvYWRVcmwpLCBmZXRjaENvbmZpZyk7XG4gICAgICAgICAgICBpZiAoIXVwbG9hZFJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IGV2ZW50S2V5LFxuICAgICAgICAgICAgICAgIG1pbnV0ZXNEb2N1bWVudElkOiBuZXdEb2N1bWVudElkXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgdXBkYXRlRmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAnaWRUb2tlbic6IGlkVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICd0ZW5hbnQnOiBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QWN0aXZlVGVuYW50KClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHVwZGF0ZVBheWxvYWQpXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgdXBkYXRlVXJsID0gbG9jYXRpb24gKyBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0Q29udGV4dFJvb3QoKSArIFwiL3RlbmRlci9hcGkvdjEvZXZhbHVhdGlvbi9tZWV0aW5nL21pbnV0ZURvY3VtZW50XCI7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVSZXNwb25zZSA9IGF3YWl0IGZldGNoKGVuY29kZVVSSSh1cGRhdGVVcmwpLCB1cGRhdGVGZXRjaENvbmZpZyk7XG5cbiAgICAgICAgICAgIGlmICghdXBkYXRlUmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byB1cGRhdGUgbWVldGluZyBtaW51dGVzIGRvY3VtZW50Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTWludXRlcyBzYXZlZCBzdWNjZXNzZnVsbHlcIik7XG5cbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlOiAnU1VDQ0VTUycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ01lZXRpbmcgbWludXRlcyBzYXZlZCBzdWNjZXNzZnVsbHknXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KG1lZXRpbmdWaWV3SGFuZGxlciwgcHJvcHMudmlld0lkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzYXZpbmcgbWludXRlczpcIiwgZSk7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogJ0VSUk9SJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRmFpbGVkIHRvIHNhdmUgbWVldGluZyBtaW51dGVzJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChtZWV0aW5nVmlld0hhbmRsZXIsIHByb3BzLnZpZXdJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICAgICAgc2F2ZU1pbnV0ZXNcbiAgICB9KSk7XG5cbiAgICBjb25zdCBzdGFydFNoYXJlU2NyZWVuID0gKCkgPT4ge1xuICAgICAgICBwcm9kdWNlU2NyZWVuU2hhcmUoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RvcFNoYXJlU2NyZWVuID0gKCkgPT4ge1xuICAgICAgICBpZiAoc2hhcmVTY3JlZW5TdHJlYW0uY3VycmVudCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB0cmFjayBvZiBzaGFyZVNjcmVlblN0cmVhbS5jdXJyZW50LmdldFRyYWNrcygpKSB7XG4gICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzaGFyZVNjcmVlblN0cmVhbS5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHJlbW92ZVNoYXJlU2NyZWVuRWxlbWVudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvcHMub25TdG9wU2hhcmluZygpO1xuICAgIH07XG5cbiAgICBjb25zdCBwcm9kdWNlU2NyZWVuU2hhcmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBhdmFpbGFibGUgZGV2aWNlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXByb2R1Y2VyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBwcm9kdWNlciB0cmFuc3BvcnQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGV2aWNlLmNhblByb2R1Y2UoJ3ZpZGVvJykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBwcm9kdWNlIHNjcmVlbiBzaGFyZScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNoYXJlU2NyZWVuUHJvZHVjZXIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTaGFyZSBzY3JlZW4gcHJvZHVjZXIgYWxyZWFkeSBleGlzdCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmlkZW9Db25zdHJhaW50cyA9IHtcbiAgICAgICAgICAgIGN1cnNvcjogdHJ1ZSxcbiAgICAgICAgICAgIGF1ZGlvOiBmYWxzZSxcbiAgICAgICAgICAgIHZpZGVvOiB7XG4gICAgICAgICAgICAgICAgbWFuZGF0b3J5OiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDE2MCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZWFsOiAzMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg6IDY0MFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMTIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWRlYWw6IDI0MCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heDogNDgwXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZyYW1lUmF0ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heDogMTVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZ29vZ0NwdU92ZXJ1c2VEZXRlY3Rpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGdvb2dDcHVPdmVydXNlRW5jb2RlVXNhZ2U6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGdvb2dDcHVPdmVydXNlVGhyZXNob2xkOiA3MFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmVmZXJDdXJyZW50VGFiOiBmYWxzZSxcbiAgICAgICAgICAgIHNlbGZCcm93c2VyU3VyZmFjZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgc3lzdGVtQXVkaW86ICdleGNsdWRlJyxcbiAgICAgICAgICAgIHN1cmZhY2VTd2l0Y2hpbmc6ICdleGNsdWRlJyxcbiAgICAgICAgICAgIG1vbml0b3JUeXBlU3VyZmFjZXM6ICdpbmNsdWRlJ1xuXG4gICAgICAgIH07XG5cbiAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuQ0FOQ0VMX1NDUkVFTl9TSEFSRSwge1xuICAgICAgICAgICAgcm9vbUlkOiBtZWV0aW5nSWRcbiAgICAgICAgfSkudGhlbihhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldERpc3BsYXlNZWRpYSh2aWRlb0NvbnN0cmFpbnRzKVxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIChzdHJlYW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhY2sgPSBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2sub25lbmRlZCA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFNoYXJlU2NyZWVuKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuU2hhcmluZzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9kdWNlciA9IGF3YWl0IHByb2R1Y2VyVHJhbnNwb3J0LnByb2R1Y2UocGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2hhcmVTY3JlZW5Qcm9kdWNlcihwcm9kdWNlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgc2hhcmVTY3JlZW5TdHJlYW0uY3VycmVudCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dTaGFyZWRTY3JlZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlU2NyZWVuVmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwcm9kdWNlci5vbigndHJhbnNwb3J0Y2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc3JjT2JqZWN0LmdldFRyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hhcmVTY3JlZW5Qcm9kdWNlcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXIub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNoYXJlU2NyZWVuUHJvZHVjZXIobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm9uU3RhcnRTaGFyaW5nKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMub25TdG9wU2hhcmluZygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS5jYXRjaCgoZSkgPT4gY29uc29sZS5sb2coJ0VSUk9SIENBTkNFTExJTkcgU0NSRUVOIFNIQVJFIDogJywgZSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBzdG9wUHJvZHVjaW5nU2NyZWVuU2hhcmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghc2hhcmVTY3JlZW5Qcm9kdWNlcikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RoZXJlIGlzIG5vIHNoYXJlIHNjcmVlbiBwcm9kdWNlcicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb2R1Y2VySWQgPSBzaGFyZVNjcmVlblByb2R1Y2VyLmlkO1xuICAgICAgICBjb25zb2xlLmxvZygnQ2xvc2UgcHJvZHVjZXInLCBwcm9kdWNlcklkKTtcbiAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuUFJPRFVDRVJfQ0xPU0VELCB7XG4gICAgICAgICAgICB1c2VySWQ6IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lLFxuICAgICAgICAgICAgcHJvZHVjZXJJZCxcbiAgICAgICAgICAgIHJvb21JZDogbWVldGluZ0lkXG4gICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGNvbnNvbGUubG9nKCdQUk9EVUNFUl9DTE9TRUQgRVJST1IgOiAnLCBlKSk7XG5cbiAgICAgICAgc2hhcmVTY3JlZW5Qcm9kdWNlci5jbG9zZSgpO1xuICAgICAgICBzdG9wU2hhcmVTY3JlZW4oKTtcbiAgICAgICAgc2V0U2hhcmVTY3JlZW5Qcm9kdWNlcihudWxsKTtcbiAgICAgICAgLy9zZXRTb21lb25lU2hhcmluZyhmYWxzZSk7XG4gICAgICAgIHNldFNjcmVlblNoYXJlZChmYWxzZSk7XG5cbiAgICAgICAgaWYgKHNoYXJlU2NyZWVuU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdHJhY2sgb2Ygc2hhcmVTY3JlZW5TdHJlYW0uY3VycmVudC5nZXRUcmFja3MoKSkge1xuICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvbk5ld1Byb2R1Y2VycyA9IChwcm9kdWNlcnMpID0+IHtcbiAgICAgICAgbGV0IHNjcmVlblNoYXJlUHJvZHVjZXIgPSBwcm9kdWNlcnMuZmluZCgocCkgPT4gcC5zY3JlZW5TaGFyaW5nKTtcbiAgICAgICAgaWYgKHNjcmVlblNoYXJlUHJvZHVjZXIpIHtcbiAgICAgICAgICAgIGNvbnN1bWUoc2NyZWVuU2hhcmVQcm9kdWNlcik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlU2hhcmVTY3JlZW5FbGVtZW50ID0gKCkgPT4ge1xuICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hhcmUtc2NyZWVuLXZpZGVvJyk7XG4gICAgICAgIGlmIChlbCkge1xuICAgICAgICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY29uc3VtZSA9IGFzeW5jIChwcm9kdWNlcikgPT4ge1xuICAgICAgICBtZWRpYVNvdXBIZWxwZXIuZ2V0Q29uc3VtZVN0cmVhbShwcm9kdWNlci5wcm9kdWNlcklkLCBkZXZpY2UucnRwQ2FwYWJpbGl0aWVzLCBjb25zdW1lclRyYW5zcG9ydCxcbiAgICAgICAgICAgIG1lZXRpbmdJZCwgYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUsICd2aWRlbycpXG4gICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIsXG4gICAgICAgICAgICAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICBraW5kXG4gICAgICAgICAgICAgICAgIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTaGFyZVNjcmVlbkNvbnN1bWVyKGNvbnN1bWVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1TSEFSSU5HIENPTlNVTUU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5zaGFyaW5nSGFuZGxlcih0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNjcmVlblNoYXJlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNvbWVvbmVTaGFyaW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9zZXRTaG93U2hhcmVkU2NyZWVuKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWVzc2FnZShwcm9kdWNlci51c2VybmFtZSArICcgaXMgc2hhcmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVTY3JlZW5WaWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlU2NyZWVuU3RyZWFtLmN1cnJlbnQgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAvL3NldFZpZGVvUmVmcmVzaGVyKCF2aWRlb1JlZnJlc2hlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFja2VuZGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNoYXJlU2NyZWVuRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc3BvcnRjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTaGFyZVNjcmVlbkVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21lZXRpbmctcGFydGljaXBhbnQtZ3JpZCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IChldmVudFR5cGUsIGJlKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5QQVJUSUNJUEFOVF9JTl9WSUVXOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25CcmluZ1RvVmlldyhiZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5ORVdfUFJPRFVDRVJTOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5DT05TVU1FUl9DTE9TRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hhcmVTY3JlZW5Db25zdW1lciAmJiBzaGFyZVNjcmVlbkNvbnN1bWVyLmlkID09PSBiZS5wYXlsb2FkLmNvbnN1bWVySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTaGFyZVNjcmVlbkVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNZXNzYWdlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLnNoYXJpbmdIYW5kbGVyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTb21lb25lU2hhcmluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2NyZWVuU2hhcmVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93U2hhcmVkU2NyZWVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLlBST0RVQ0VSX1RSQU5TUE9SVF9GQUlMRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQnJpbmdUb1ZpZXcgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAoIWluVmlld1BhcnRpY2lwYW50cy5maW5kKCgocCkgPT4gcC51c2VySWQgPT09IHBheWxvYWQudXNlcklkKSkpIHtcbiAgICAgICAgICAgIGlmIChpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoID09PSBNQVhfQ09MUyAqIE1BWF9ST1dTKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9mZlZpZXdQYXJ0aWNpcGFudCA9IGluVmlld1BhcnRpY2lwYW50c1tpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLlBBUlRJQ0lQQU5UX09GRl9WSUVXLCBvZmZWaWV3UGFydGljaXBhbnQpO1xuXG4gICAgICAgICAgICAgICAgaW5WaWV3UGFydGljaXBhbnRzLnNwbGljZShpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgICAgICAgICAgb2ZmVmlld1BhcnRpY2lwYW50LmluVmlldyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IHB1c2hpbmcgdW5kZWZpbmVkIChwYXJ0aWNpcGFudCBub3QgaW4gdGhlIGxpc3QpIOKAlCBhXG4gICAgICAgICAgICAvLyBzdHJheSBQQVJUSUNJUEFOVF9JTl9WSUVXIGZvciBhbiB1bmtub3duIHVzZXIgb3RoZXJ3aXNlIGNyYXNoZWQgdGhlIGdyaWQgcmVuZGVyLlxuICAgICAgICAgICAgbGV0IHBhcnRpY2lwYW50ID0gcHJvcHMucGFydGljaXBhbnRzLmZpbmQoKHApID0+IHAudXNlcklkID09PSBwYXlsb2FkLnVzZXJJZCk7XG4gICAgICAgICAgICBpZiAocGFydGljaXBhbnQpIHtcbiAgICAgICAgICAgICAgICBpblZpZXdQYXJ0aWNpcGFudHMucHVzaChwYXJ0aWNpcGFudCk7XG4gICAgICAgICAgICAgICAgLy8gUmVmcmVzaCB0aGUgbGlzdFxuICAgICAgICAgICAgICAgIHNldEluVmlld1BhcnRpY2lwYW50cyhbXS5jb25jYXQoaW5WaWV3UGFydGljaXBhbnRzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlRnJvbVZpZXcgPSAocGFydGljaXBhbnQpID0+IHtcbiAgICAgICAgcGFydGljaXBhbnQuaW5WaWV3ID0gZmFsc2U7XG4gICAgICAgIHNldEluVmlld1BhcnRpY2lwYW50cyhpblZpZXdQYXJ0aWNpcGFudHMuZmlsdGVyKChwKSA9PiBwLnVzZXJJZCAhPT0gcGFydGljaXBhbnQudXNlcklkKSk7XG4gICAgICAgIHZjRXZlbnRNYW5hZ2VyLmZpcmVFdmVudChWQ0V2ZW50VHlwZS5QQVJUSUNJUEFOVF9PRkZfVklFVywgcGFydGljaXBhbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cFNlbGZEZXZpY2VzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgZGV2aWNlID0gYXdhaXQgbWVkaWFTb3VwSGVscGVyLmdldFBhcnRpY2lwYW50RGV2aWNlKHJ0cENhcGFiaWxpdGllcyk7XG4gICAgICAgIHNldERldmljZShkZXZpY2UpO1xuXG4gICAgICAgIGxldCBjb25zdW1lclRyYW5zcG9ydCA9IGF3YWl0IG1lZGlhU291cEhlbHBlci5pbml0Q29uc3VtZXJUcmFuc3BvcnQoZGV2aWNlLCBtZWV0aW5nSWQsIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lKTtcbiAgICAgICAgbGV0IHByb2R1Y2VyVHJhbnNwb3J0ID0gYXdhaXQgbWVkaWFTb3VwSGVscGVyLmluaXRQcm9kdWNlclRyYW5zcG9ydChkZXZpY2UsIG1lZXRpbmdJZCwgYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUpO1xuXG4gICAgICAgIHNldENvbnN1bWVyVHJhbnNwb3J0KGNvbnN1bWVyVHJhbnNwb3J0KTtcbiAgICAgICAgc2V0UHJvZHVjZXJUcmFuc3BvcnQocHJvZHVjZXJUcmFuc3BvcnQpO1xuXG4gICAgICAgIHRyYW5zcG9ydHMuY3VycmVudC5zZXRDb25zdW1lclRyYW5zcG9ydChjb25zdW1lclRyYW5zcG9ydCk7XG4gICAgICAgIHRyYW5zcG9ydHMuY3VycmVudC5zZXRQcm9kdWNlclRyYW5zcG9ydChwcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgfTtcblxuICAgIC8vIFJlY292ZXIgZnJvbSBhIHByb2R1Y2VyLXRyYW5zcG9ydCBmYWlsdXJlIGJ5IHJlY3JlYXRpbmcgaXQuIFVubGlrZSBhXG4gICAgLy8gY29uc3VtZXIgZmFpbHVyZSAod2hpY2ggaGFuZ3MgdXAg4oCUIHlvdSBjYW4ndCBzZWUvaGVhciBhbnlvbmUpLCBsb3NpbmcgdGhlXG4gICAgLy8gcHJvZHVjZXIgb25seSBzdG9wcyBZT1VSIG1lZGlhLCBzbyB3ZSByZWJ1aWxkIGl0IGFuZCBsZXQgdGhlIHNlbGYgdGlsZVxuICAgIC8vIHJlLXByb2R1Y2Ugb24gdGhlIG5ldyB0cmFuc3BvcnQgKGl0IHN5bmNzIHByb2R1Y2VyVHJhbnNwb3J0IHZpYSBwcm9wcykuXG4gICAgY29uc3QgcmVjcmVhdGVQcm9kdWNlclRyYW5zcG9ydCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKHByb2R1Y2VyUmVjb3ZlcmluZy5jdXJyZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZXZpY2UpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCByZWNvdmVyIHByb2R1Y2VyIHRyYW5zcG9ydDogbm8gZGV2aWNlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2R1Y2VyUmVjb3ZlcnlBdHRlbXB0cy5jdXJyZW50ID49IDMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Byb2R1Y2VyIHRyYW5zcG9ydCByZWNvdmVyeSBnYXZlIHVwIGFmdGVyIDMgYXR0ZW1wdHMnKTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgb25jZSDigJQgdGhlaXIgb3V0Z29pbmcgbWVkaWEgY2FuJ3QgYmUgcmVzdG9yZWQuXG4gICAgICAgICAgICBpZiAoIXByb2R1Y2VyUmVjb3ZlcnlGYWlsZWQuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIHByb2R1Y2VyUmVjb3ZlcnlGYWlsZWQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLlNZU1RFTV9BTEVSVCwge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIkNvdWxkbid0IHJlY29ubmVjdCB5b3VyIGF1ZGlvL3ZpZGVvLiBQbGVhc2UgbGVhdmUgYW5kIHJlam9pbiB0aGUgbWVldGluZy5cIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcm9kdWNlclJlY292ZXJpbmcuY3VycmVudCA9IHRydWU7XG4gICAgICAgIHByb2R1Y2VyUmVjb3ZlcnlBdHRlbXB0cy5jdXJyZW50ICs9IDE7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUmVjcmVhdGluZyBwcm9kdWNlciB0cmFuc3BvcnQgKGF0dGVtcHQgJyArIHByb2R1Y2VyUmVjb3ZlcnlBdHRlbXB0cy5jdXJyZW50ICsgJyknKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1Byb2R1Y2VyVHJhbnNwb3J0ID0gYXdhaXQgbWVkaWFTb3VwSGVscGVyLmluaXRQcm9kdWNlclRyYW5zcG9ydChcbiAgICAgICAgICAgICAgICBkZXZpY2UsIG1lZXRpbmdJZCwgYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUpO1xuICAgICAgICAgICAgaWYgKG5ld1Byb2R1Y2VyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHNjcmVlbi1zaGFyZSBwcm9kdWNlciAoaWYgYW55KSB3YXMgb24gdGhlIGRlYWQgdHJhbnNwb3J0LlxuICAgICAgICAgICAgICAgIHNldFNoYXJlU2NyZWVuUHJvZHVjZXIobnVsbCk7XG4gICAgICAgICAgICAgICAgc2V0UHJvZHVjZXJUcmFuc3BvcnQobmV3UHJvZHVjZXJUcmFuc3BvcnQpO1xuICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuY3VycmVudC5zZXRQcm9kdWNlclRyYW5zcG9ydChuZXdQcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgICAgICAgICAgICAgcHJvZHVjZXJSZWNvdmVyeUF0dGVtcHRzLmN1cnJlbnQgPSAwOyAvLyBzdWNjZXNzIHJlc2V0cyB0aGUgY291bnRlclxuICAgICAgICAgICAgICAgIHByb2R1Y2VyUmVjb3ZlcnlGYWlsZWQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcmVjcmVhdGUgcHJvZHVjZXIgdHJhbnNwb3J0JywgZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBwcm9kdWNlclJlY292ZXJpbmcuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGV2ZW50SGFuZGxlci5hcGkgPSBoYW5kbGVyKCk7XG4gICAgfSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuXG4gICAgfSwgW3Byb3BzLmF1ZGlvTXV0ZWRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldHVwR3JpZCgpO1xuICAgIH0sIFtpblZpZXdQYXJ0aWNpcGFudHNdKTtcblxuICAgIC8qdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmKGdyaWQgPT09IG51bGwpIHtcbiAgICAgICAgc2V0dXBHcmlkKCk7XG4gICAgICB9XG4gICAgfSwgW2dyaWRdKTsqL1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFzY3JlZW5TaGFyZWQpIHtcbiAgICAgICAgICAgIHN0b3BQcm9kdWNpbmdTY3JlZW5TaGFyZSgpO1xuICAgICAgICB9XG4gICAgfSwgW3NjcmVlblNoYXJlZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHN0YXJ0U2NyZWVuU2hhcmluZykge1xuICAgICAgICAgICAgcHJvZHVjZVNjcmVlblNoYXJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBbc3RhcnRTY3JlZW5TaGFyaW5nXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoc3RhcnRTaG93aW5nTWludXRlcykge1xuICAgICAgICAgICAgc2V0U2hvd01pbnV0ZXModHJ1ZSk7XG4gICAgICAgICAgICBzZXRNaW51dGVzU2hvd24odHJ1ZSk7XG4gICAgICAgICAgICBvblN0YXJ0U2hvd2luZ01pbnV0ZXMoKTtcbiAgICAgICAgfVxuICAgIH0sIFtzdGFydFNob3dpbmdNaW51dGVzXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAvLyBTeW5jIHdpdGggcGFyZW50J3MgbWludXRlc1Nob3duIHN0YXRlXG4gICAgICAgIGlmIChtaW51dGVzU2hvd25Qcm9wID09PSBmYWxzZSAmJiBtaW51dGVzU2hvd24gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHNldFNob3dNaW51dGVzKGZhbHNlKTtcbiAgICAgICAgICAgIHNldE1pbnV0ZXNTaG93bihmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9LCBbbWludXRlc1Nob3duUHJvcF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKG1pbnV0ZXNEb2N1bWVudElkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiZG9jdW1lbnRWaWV3ZXJcIixcbiAgICAgICAgICAgICAgICBcImlkXCI6IFwibWVldGluZ01pbnV0ZVwiLFxuICAgICAgICAgICAgICAgIFwiZmlsZVR5cGVcIjogXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudFwiLFxuICAgICAgICAgICAgICAgIFwiYXR0cmlidXRlc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiBcImNhbGMoMTAwJSAtIDQzNnB4KVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogXCIxMDAlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhlaWdodFwiOiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGFkZGluZ1wiOiBcIjI0cHhcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcImxhYmVsXCI6IFwiTWVldGluZyBNaW51dGVzXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwidHJhY2tDaGFuZ2VzXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgXCJyZWFkT25seVwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBcImNvbW1lbnRzT25seVwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBcImV2ZW50SGFuZGxpbmdDb25maWdcIjoge1xuICAgICAgICAgICAgICAgICAgICBcInN1YnNjcmlwdGlvbnNcIjogW11cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiZGF0YVNlcnZpY2VcIjoge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJyZXN0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwidXJsXCI6IFwiL2RvY3MvYXBpL3YxL21hbmFnZXIvZmluZFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm1ldGhvZFwiOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICBcInBhcmFtZXRlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImRvY3VtZW50SWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0dHBQYXJhbWV0ZXJUeXBlXCI6IFwiUEFUSF9WQVJJQUJMRVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsdWVcIjogbWludXRlc0RvY3VtZW50SWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZXRNZWV0aW5nVmlld0NvbmZpZyhuZXdDb25maWcpO1xuICAgICAgICB9XG4gICAgfSwgW21pbnV0ZXNEb2N1bWVudElkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAobWVldGluZ1ZpZXdIYW5kbGVyICYmIG1lZXRpbmdWaWV3SGFuZGxlci5hcGkpIHtcbiAgICAgICAgICAgIG1lZXRpbmdWaWV3SGFuZGxlci5hcGkubG9hZERhdGEoKTtcbiAgICAgICAgfVxuICAgIH0sIFttZWV0aW5nVmlld0hhbmRsZXJdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChtZWV0aW5nVmlld0NvbmZpZzIgJiYgbWludXRlc0RvY3VtZW50SWQgJiYgbWVldGluZ1ZpZXdIYW5kbGVyICYmIG1lZXRpbmdWaWV3SGFuZGxlci5hcGkgJiYgc2hvd01pbnV0ZXMpIHtcbiAgICAgICAgICAgIG1lZXRpbmdWaWV3SGFuZGxlci5hcGkucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgfSwgW21pbnV0ZXNEb2N1bWVudElkLCBtZWV0aW5nVmlld0NvbmZpZzIsIG1lZXRpbmdWaWV3SGFuZGxlciwgc2hvd01pbnV0ZXNdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChvbmxvYWRTY3JlZW5TaGFyZURhdGEgJiYgZGV2aWNlICYmIGNvbnN1bWVyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICBjb25zdW1lKG9ubG9hZFNjcmVlblNoYXJlRGF0YSk7XG4gICAgICAgIH1cbiAgICB9LCBbb25sb2FkU2NyZWVuU2hhcmVEYXRhLCBkZXZpY2UsIGNvbnN1bWVyVHJhbnNwb3J0XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRTY3JlZW5TaGFyZWQocHJvcHMuc2NyZWVuU2hhcmVkKTtcbiAgICAgICAgaWYgKHByb3BzLnNjcmVlblNoYXJlZCkge1xuICAgICAgICAgICAgc3RhcnRTaGFyZVNjcmVlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RvcFNoYXJlU2NyZWVuKCk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMuc2NyZWVuU2hhcmVkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2Y0V2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlciwgVkNFdmVudFR5cGUuTkVXX1BST0RVQ0VSUywgVkNFdmVudFR5cGUuQ09OU1VNRVJfQ0xPU0VELFxuICAgICAgICAgICAgVkNFdmVudFR5cGUuUEFSVElDSVBBTlRfSU5fVklFVywgVkNFdmVudFR5cGUuUFJPRFVDRVJfVFJBTlNQT1JUX0ZBSUxFRCk7XG4gICAgICAgIHNldHVwU2VsZkRldmljZXMoKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLnJlbW92ZVN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgICAgIHRyYW5zcG9ydHMuY3VycmVudC5jbG9zZUNvbnN1bWVyVHJhbnNwb3J0KCk7XG4gICAgICAgICAgICB0cmFuc3BvcnRzLmN1cnJlbnQuY2xvc2VQcm9kdWNlclRyYW5zcG9ydCgpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChncmlkKSB7XG4gICAgICAgICAgICBwcm9wcy5vbkdyaWRTZXR1cCgpO1xuICAgICAgICB9XG4gICAgfSwgW2dyaWRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5wYXJ0aWNpcGFudHMgJiYgcHJvcHMuY3VycmVudFVzZXJGdWxsTmFtZSkge1xuICAgICAgICAgICAgc2V0Q3VycmVudFVzZXJQYXJ0aWNpcGFudCh7XG4gICAgICAgICAgICAgICAgaXNDdXJyZW50VXNlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB1c2VySWQ6IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgIHBlZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgbmFtZTogcHJvcHMuY3VycmVudFVzZXJGdWxsTmFtZSxcbiAgICAgICAgICAgICAgICBhdmF0YXJJZDogc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlckF2YXRhcklkJyksXG4gICAgICAgICAgICAgICAgdmlkZW9NdXRlZCxcbiAgICAgICAgICAgICAgICBhdWRpb011dGVkXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgaW5WaWV3UGFydGljaXBhbnRzLnNwbGljZSgwLCBpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFydGljaXBhbnQgb2YgcHJvcHMucGFydGljaXBhbnRzKSB7XG4gICAgICAgICAgICAgICAgcGFydGljaXBhbnQuaW5WaWV3ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpblZpZXdQYXJ0aWNpcGFudHMucHVzaChwYXJ0aWNpcGFudCk7XG4gICAgICAgICAgICAgICAgaWYgKCsrY291bnRlciA+PSBNQVhfUk9XUyAqIE1BWF9DT0xTKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0dXBHcmlkKGluVmlld1BhcnRpY2lwYW50cyk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMucGFydGljaXBhbnRzLCBwcm9wcy5jdXJyZW50VXNlckZ1bGxOYW1lLCBwcm9wcy5kaXNwbGF5U3RhdGVdKTtcblxuICAgIGNvbnN0IHNldHVwR3JpZCA9ICgpID0+IHtcbiAgICAgICAgbGV0IGluVmlld0dyaWQgPSBbXTtcbiAgICAgICAgbGV0IG51bVJvd3MgPSBpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoIDwgTUFYX1JPV1MgPyBpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoIDogTUFYX1JPV1M7XG4gICAgICAgIGxldCByb3dzID0gaW5WaWV3UGFydGljaXBhbnRzLmxlbmd0aCA9PT0gMiA/IDEgOiBudW1Sb3dzO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBpblZpZXdHcmlkLnB1c2goW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGN1cnJlbnRSb3dJbmRleCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5WaWV3UGFydGljaXBhbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpblZpZXdHcmlkW2N1cnJlbnRSb3dJbmRleF0ucHVzaChpblZpZXdQYXJ0aWNpcGFudHNbaV0pO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRSb3dJbmRleCsrID09PSByb3dzIC0gMSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRSb3dJbmRleCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzZXRHcmlkKGluVmlld0dyaWQpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZW5kZXJTdHJpcCgpIHtcbiAgICAgICAgcmV0dXJuIGluVmlld1BhcnRpY2lwYW50cyAmJiBpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93WDogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxNDhweCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93WTogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3cgZmxleC1yb3cgZmxleC1ub3dyYXAgbm8tbWFyZ2luIG5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICB7aW5WaWV3UGFydGljaXBhbnRzLm1hcCgocGFydGljaXBhbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17J2NvbC0qLSonfSBrZXk9e2luZGV4ICsgJy0nICsgcGFydGljaXBhbnQudXNlcklkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxNDhweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VkNSb29tUGFydGljaXBhbnQgZGF0YT17cGFydGljaXBhbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlPXtkZXZpY2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVldGluZ0lkPXttZWV0aW5nSWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheVN0YXRlPXtkaXNwbGF5U3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9NdXRlZD17cGFydGljaXBhbnQuYXVkaW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb011dGVkPXtwYXJ0aWNpcGFudC52aWRlb011dGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlRnJvbVZpZXc9eyhwYXJ0aWNpcGFudCkgPT4gcmVtb3ZlRnJvbVZpZXcocGFydGljaXBhbnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyVHJhbnNwb3J0PXtjb25zdW1lclRyYW5zcG9ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydHBDYXBhYmlsaXRpZXM9e3J0cENhcGFiaWxpdGllc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkluVmlld1BhcnRpY2lwYW50cz17aW5WaWV3UGFydGljaXBhbnRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudHM9e3BhcnRpY2lwYW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXppbmc9eydzbSd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0QXVkaW9NdXRlPXsoKSA9PiBwcm9wcy5vbkhvc3RBdWRpb011dGUocGFydGljaXBhbnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSG9zdFZpZGVvTXV0ZT17KCkgPT4gcHJvcHMub25Ib3N0VmlkZW9NdXRlKHBhcnRpY2lwYW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hvc3Q9e2lzSG9zdH0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj47XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj47XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyUm93ID0gKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxHcmlkXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcidcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uPVwicm93XCJcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudD1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiIGNvbnRhaW5lciBpdGVtIHNwYWNpbmc9ezJ9PlxuICAgICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAge3Jvdy5tYXAoKHBhcnRpY2lwYW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxHcmlkIGl0ZW0ga2V5PXtpbmRleCArICctJyArIHBhcnRpY2lwYW50LnVzZXJJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9eydtZWV0aW5nUGFydGljaXBhbnRDb250YWluZXInfSBzdHlsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleEJhc2lzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VkNSb29tUGFydGljaXBhbnQgZGF0YT17cGFydGljaXBhbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZT17ZGV2aWNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWV0aW5nSWQ9e21lZXRpbmdJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6aW5nPXtkaXNwbGF5U3RhdGUgPT09ICdNSU5JTUlaRUQnID8gJ3NtJyA6ICdtZCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvTXV0ZWQ9e3BhcnRpY2lwYW50LmF1ZGlvTXV0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvTXV0ZWQ9e3BhcnRpY2lwYW50LnZpZGVvTXV0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlRnJvbVZpZXc9eyhwYXJ0aWNpcGFudCkgPT4gcmVtb3ZlRnJvbVZpZXcocGFydGljaXBhbnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lclRyYW5zcG9ydD17Y29uc3VtZXJUcmFuc3BvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mSW5WaWV3UGFydGljaXBhbnRzPXtpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudHM9e3BhcnRpY2lwYW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRwQ2FwYWJpbGl0aWVzPXtydHBDYXBhYmlsaXRpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSG9zdEF1ZGlvTXV0ZT17KCkgPT4gcHJvcHMub25Ib3N0QXVkaW9NdXRlKHBhcnRpY2lwYW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0VmlkZW9NdXRlPXsoKSA9PiBwcm9wcy5vbkhvc3RWaWRlb011dGUocGFydGljaXBhbnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hvc3Q9e2lzSG9zdH0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9HcmlkPjtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVuZGVyQ3VycmVudFBhcnRpY2lwYW50KCkge1xuICAgICAgICByZXR1cm4gPD5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50VXNlclBhcnRpY2lwYW50ICYmXG4gICAgICAgICAgICAgICAgPFZDUm9vbVBhcnRpY2lwYW50IGRhdGE9e2N1cnJlbnRVc2VyUGFydGljaXBhbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZT17ZGV2aWNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWV0aW5nSWQ9e21lZXRpbmdJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVldGluZ1RpdGxlPXttZWV0aW5nVGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0cENhcGFiaWxpdGllcz17cnRwQ2FwYWJpbGl0aWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkF1ZGlvRGV2aWNlQ2hhbmdlPXtwcm9wcy5vbkF1ZGlvRGV2aWNlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lclRyYW5zcG9ydD17Y29uc3VtZXJUcmFuc3BvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyVHJhbnNwb3J0PXtwcm9kdWNlclRyYW5zcG9ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9NdXRlZD17YXVkaW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9NdXRlZD17dmlkZW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHM9e2luVmlld1BhcnRpY2lwYW50cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50cz17cGFydGljaXBhbnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkhvc3RBdWRpb011dGU9eygpID0+IHByb3BzLm9uSG9zdEF1ZGlvTXV0ZShjdXJyZW50VXNlclBhcnRpY2lwYW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0VmlkZW9NdXRlPXsoKSA9PiBwcm9wcy5vbkhvc3RWaWRlb011dGUoY3VycmVudFVzZXJQYXJ0aWNpcGFudCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSG9zdD17aXNIb3N0fS8+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvPjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRNZWV0aW5nRG9jdW1lbnQoKSB7XG4gICAgICAgIHJldHVybiBtZWV0aW5nVmlld0hhbmRsZXIudmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgR0FMTEVSWV9HQVAgPSA4O1xuXG4gICAgLy8gUHJvcG9ydGlvbmFsIGZpbGwgbGF5b3V0OiAxIHBlcnNvbiBmaWxscyB0aGUgd2hvbGUgYXJlYTsgZWFjaCBqb2luXG4gICAgLy8gc3ViZGl2aWRlcyB0aGUgc3BhY2UuIFBpY2sgdGhlIHJvdyBzcGxpdCB0aGF0IG1heGltaXNlcyB0aGUgc21hbGxlciB0aWxlXG4gICAgLy8gZGltZW5zaW9uIChzbyBmYWNlcyBzdGF5IGJpZyksIHRpZS1icmVha2luZyB0b3dhcmQgY2VsbHMgc2hhcGVkIGxpa2UgdGhlXG4gICAgLy8gY29udGFpbmVyIOKAlCB3aGljaCBuYXR1cmFsbHkgc3BsaXRzIGFsb25nIHRoZSBsb25nZXIgYXhpcy4gUmV0dXJucyB0aGVcbiAgICAvLyBwYXJ0aWNpcGFudCBjb3VudCBwZXIgcm93IChleHRyYXMgbGFuZCBvbiB0aGUgdG9wIHJvd3MpLlxuICAgIGZ1bmN0aW9uIGNvbXB1dGVSb3dTcGxpdChjb3VudCwgd2lkdGgsIGhlaWdodCkge1xuICAgICAgICBpZiAoY291bnQgPD0gMSkgcmV0dXJuIFtjb3VudCB8fCAxXTtcbiAgICAgICAgY29uc3QgdyA9IHdpZHRoID4gMCA/IHdpZHRoIDogMTY7XG4gICAgICAgIGNvbnN0IGggPSBoZWlnaHQgPiAwID8gaGVpZ2h0IDogOTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyQXNwZWN0ID0gdyAvIGg7XG4gICAgICAgIGxldCBiZXN0Um93cyA9IDEsIGJlc3RNaW4gPSAtMSwgYmVzdFBlbmFsdHkgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChsZXQgcm93cyA9IDE7IHJvd3MgPD0gY291bnQ7IHJvd3MrKykge1xuICAgICAgICAgICAgY29uc3QgY29scyA9IE1hdGguY2VpbChjb3VudCAvIHJvd3MpO1xuICAgICAgICAgICAgY29uc3QgY2VsbFcgPSB3IC8gY29scztcbiAgICAgICAgICAgIGNvbnN0IGNlbGxIID0gaCAvIHJvd3M7XG4gICAgICAgICAgICBjb25zdCBtaW5EaW0gPSBNYXRoLm1pbihjZWxsVywgY2VsbEgpO1xuICAgICAgICAgICAgY29uc3QgcGVuYWx0eSA9IE1hdGguYWJzKChjZWxsVyAvIGNlbGxIKSAtIGNvbnRhaW5lckFzcGVjdCk7XG4gICAgICAgICAgICBpZiAobWluRGltID4gYmVzdE1pbiArIDEgfHwgKE1hdGguYWJzKG1pbkRpbSAtIGJlc3RNaW4pIDw9IDEgJiYgcGVuYWx0eSA8IGJlc3RQZW5hbHR5KSkge1xuICAgICAgICAgICAgICAgIGJlc3RSb3dzID0gcm93cztcbiAgICAgICAgICAgICAgICBiZXN0TWluID0gbWluRGltO1xuICAgICAgICAgICAgICAgIGJlc3RQZW5hbHR5ID0gcGVuYWx0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiYXNlID0gTWF0aC5mbG9vcihjb3VudCAvIGJlc3RSb3dzKTtcbiAgICAgICAgbGV0IGV4dHJhID0gY291bnQgJSBiZXN0Um93cztcbiAgICAgICAgY29uc3QgcGVyUm93ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmVzdFJvd3M7IGkrKykge1xuICAgICAgICAgICAgcGVyUm93LnB1c2goYmFzZSArIChleHRyYS0tID4gMCA/IDEgOiAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBlclJvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW5kZXJQYXJ0aWNpcGFudEdyaWQoKSB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gaW5WaWV3UGFydGljaXBhbnRzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcGVyUm93ID0gY29tcHV0ZVJvd1NwbGl0KGNvdW50LCBnYWxsZXJ5V2lkdGgsIGdhbGxlcnlIZWlnaHQpO1xuICAgICAgICAvLyBQcmUtc2xpY2UgcGFydGljaXBhbnRzIGludG8gdGhlaXIgcm93cy5cbiAgICAgICAgY29uc3Qgcm93cyA9IFtdO1xuICAgICAgICBsZXQgaWR4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIHBlclJvdykge1xuICAgICAgICAgICAgcm93cy5wdXNoKGluVmlld1BhcnRpY2lwYW50cy5zbGljZShpZHgsIGlkeCArIG4pKTtcbiAgICAgICAgICAgIGlkeCArPSBuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV2ZXJ5IHRpbGUgaXMgdGhlIHNhbWUgd2lkdGggKGEgMS9tYXhDb2xzIHNsaWNlKS4gQSBzaG9ydCBsYXN0IHJvdyBrZWVwc1xuICAgICAgICAvLyB0aGF0IHdpZHRoIGFuZCBjZW50cmVzLCBpbnN0ZWFkIG9mIG9uZSBsb25lIHRpbGUgc3RyZXRjaGluZyBmdWxsLXdpZHRoLlxuICAgICAgICBjb25zdCBtYXhDb2xzID0gcGVyUm93Lmxlbmd0aCA/IE1hdGgubWF4KC4uLnBlclJvdykgOiAxO1xuICAgICAgICBjb25zdCB0aWxlV2lkdGggPSAnY2FsYygoMTAwJSAtICcgKyAoKG1heENvbHMgLSAxKSAqIEdBTExFUllfR0FQKSArICdweCkgLyAnICsgbWF4Q29scyArICcpJztcbiAgICAgICAgcmV0dXJuICghc2NyZWVuU2hhcmVkICYmICF3aGl0ZUJvYXJkU2hvd24gJiYgIW1pbnV0ZXNTaG93biB8fCAoc2NyZWVuU2hhcmVkICYmICFzaG93U2hhcmVkU2NyZWVuKSAmJiAhc29tZW9uZVNoYXJpbmcgJiYgIW1pbnV0ZXNTaG93bikgJiZcbiAgICAgICAgICAgIDxCb3ggc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBmbGV4R3JvdzogMSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGRpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgPyAnY2FsYygxMDAlIC0gMjMycHgpJyA6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBHQUxMRVJZX0dBUCArICdweCdcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgcmVmPXtnYWxsZXJ5UmVmfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICBnYXA6IEdBTExFUllfR0FQICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiAwXG4gICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICB7cm93cy5tYXAoKHJvd1BhcnRpY2lwYW50cywgcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYga2V5PXtyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleDogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXA6IEdBTExFUllfR0FQICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cm93UGFydGljaXBhbnRzLm1hcCgocGFydGljaXBhbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYga2V5PXtwYXJ0aWNpcGFudC51c2VySWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7ZmxleDogJzAgMCBhdXRvJywgd2lkdGg6IHRpbGVXaWR0aCwgbWluV2lkdGg6IDAsIG1pbkhlaWdodDogMH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZDUm9vbVBhcnRpY2lwYW50IGRhdGE9e3BhcnRpY2lwYW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZT17ZGV2aWNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZXRpbmdJZD17bWVldGluZ0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemluZz17ZGlzcGxheVN0YXRlID09PSAnTUlOSU1JWkVEJyA/ICdzbScgOiAnbWQnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvTXV0ZWQ9e3BhcnRpY2lwYW50LmF1ZGlvTXV0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9NdXRlZD17cGFydGljaXBhbnQudmlkZW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblJlbW92ZUZyb21WaWV3PXsocGFydGljaXBhbnQpID0+IHJlbW92ZUZyb21WaWV3KHBhcnRpY2lwYW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lclRyYW5zcG9ydD17Y29uc3VtZXJUcmFuc3BvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHM9e2luVmlld1BhcnRpY2lwYW50cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRzPXtwYXJ0aWNpcGFudHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRwQ2FwYWJpbGl0aWVzPXtydHBDYXBhYmlsaXRpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0QXVkaW9NdXRlPXsoKSA9PiBwcm9wcy5vbkhvc3RBdWRpb011dGUocGFydGljaXBhbnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSG9zdFZpZGVvTXV0ZT17KCkgPT4gcHJvcHMub25Ib3N0VmlkZW9NdXRlKHBhcnRpY2lwYW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hvc3Q9e2lzSG9zdH0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj47XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9Cb3g+O1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIGRldmljZSA/XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J3Jvdy0qLSogZ3JpZCd9XG4gICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGRpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgPyAnMTAwJScgOiBkaXNwbGF5U3RhdGUgPT09ICdNSU5JTUlaRUQnID8gJ2NhbGMoMTAwJSAtIDEwMHB4KScgOiAnY2FsYygxMDAlIC0gMjAwcHgpJyxcbiAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnID8gbnVsbCA6ICd0YWJsZScsXG4gICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgKHJvb21TdGF0dXMgPT09ICdMT0JCWScgfHwgcHJvcHMuYWxsVXNlclBhcnRpY2lwYW50c0xlZnQpICYmXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogZGlzcGxheVN0YXRlID09PSAnTUFYSU1JWkVEJyA/ICdjYWxjKDEwMCUgLSAyMzJweCknIDogJ2NhbGMoMTAwJSAtIDEyMHB4KScsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzI4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJ1xuICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQUlUSU5HX0ZPUl9PVEhFUlNfVE9fSk9JTl9NRVNTQUdFXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdyaWQgJiYgcm9vbVN0YXR1cyAhPT0gJ0xPQkJZJyAmJlxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJQYXJ0aWNpcGFudEdyaWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheVN0YXRlID09PSAnTUlOSU1JWkVEJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICdjYWxjKDEwMCUgLSAyMDBweCknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAndGFibGUtY2VsbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyUGFydGljaXBhbnRHcmlkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTdGF0ZSA9PT0gJ1BJTk5FRCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNpZGVCYXJDb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWV0aW5nQ2hhdD17bWVldGluZ0NoYXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hvc3Q9e2lzSG9zdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hhaXJQZXJzb249e2lzQ2hhaXJQZXJzb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWI9eydQZW9wbGUnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVldGluZ0lkPXttZWV0aW5nSWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudHM9e3Byb3BzLnBhcnRpY2lwYW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSG9zdEF1ZGlvTXV0ZT17cHJvcHMub25Ib3N0QXVkaW9NdXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0VmlkZW9NdXRlPXtwcm9wcy5vbkhvc3RWaWRlb011dGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjb250ZW50LWJveCd9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICghKChzY3JlZW5TaGFyZWQgJiYgc2hvd1NoYXJlZFNjcmVlbikgfHwgc29tZW9uZVNoYXJpbmcpKSA/ICdub25lJyA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogJzEwMCUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9eydzY3JlZW4tc2hhcmUtdmlkZW8nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5IHJlZj17c2hhcmVTY3JlZW5WaWRlb1JlZn0gbXV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAnMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjb250ZW50LWJveCd9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICghKG1pbnV0ZXNTaG93biAmJiBzaG93TWludXRlcykpID8gJ25vbmUnIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogJzEwMCUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERvY3VtZW50Vmlld2VyIGNvbmZpZz17bWVldGluZ1ZpZXdDb25maWcyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZT17bWVldGluZ1ZpZXdIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZD17cHJvcHMudmlld0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7ZGlzcGxheVN0YXRlID09PSAnTUFYSU1JWkVEJyA/ICdyb3ctKi0qJyA6ICcnfWB9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnID8gJzEwMCUnIDogJzIwMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnID8gJzE1MnB4JyA6IGRpc3BsYXlTdGF0ZSA9PT0gJ01JTklNSVpFRCcgPyAnMTAwJScgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogJzAnLFxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAoKHNjcmVlblNoYXJlZCAmJiBzaG93U2hhcmVkU2NyZWVuKSB8fCBzb21lb25lU2hhcmluZyB8fCAobWludXRlc1Nob3duICYmIHNob3dNaW51dGVzKSkgPyAnbm9uZScgOiBkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnID8gJ2ZsZXgnIDogZGlzcGxheVN0YXRlID09PSAnTUlOSU1JWkVEJyA/ICd0YWJsZS1jZWxsJyA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogJ3RvcCcsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogJzhweCcsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnOHB4J1xuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17JyBzdHJpcC1wYXJ0aWNpcGFudHMnfSBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGRpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgPyAnY2FsYygxMDAlIC0gMjMycHgpJyA6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzE0OHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogJzE2cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcxNnB4J1xuICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHdoaXRlQm9hcmRTaG93biB8fCByb29tU3RhdHVzID09PSAnTE9CQlknKSAmJiBncmlkKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3RyaXAoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7KGRpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgPyAnY29sICcgOiAnJyl9YH0gc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTQ4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICcxNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAnMCcsXG4gICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlckN1cnJlbnRQYXJ0aWNpcGFudCgpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICgod2FpdGluZ0xpc3QgJiYgd2FpdGluZ0xpc3QubGVuZ3RoID4gMCkpICYmXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnbm8tc2lkZS1tYXJnaW4gbm8tc2lkZS1wYWRkaW5nIGdyaWQtc2lkZS1iYXInfSBzdHlsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnMTZweCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0aW5nTGlzdCAmJiB3YWl0aW5nTGlzdC5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExvYmJ5V2FpdGluZ0xpc3Qgd2FpdGluZ0xpc3Q9e3dhaXRpbmdMaXN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9IZWlnaHQ9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0VXNlckhhbmRsZXI9e3Byb3BzLnJlamVjdFVzZXJIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdFVzZXJIYW5kbGVyPXtwcm9wcy5hY2NlcHRVc2VySGFuZGxlcn0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDpcbiAgICAgICAgICAgIG51bGxcbiAgICApO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFZDUm9vbVdvcmtzcGFjZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0FBLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxrQkFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksSUFBQSxHQUFB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
|
|
1030
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfR3JpZCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfVkNSb29tUGFydGljaXBhbnQiLCJfQm94IiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX01lZGlhU291cEhlbHBlciIsIl9UcmFuc3BvcnRzIiwiX1ZDRXZlbnRUeXBlIiwiX0ljb24iLCJfU29ja2V0TWFuYWdlciIsIl9Mb2JieVdhaXRpbmdMaXN0IiwiX1ZDUm9vbSIsIl9TaWRlQmFyQ29udGVudCIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfV29yZERvY3VtZW50Vmlld2VyIiwiX1V0aWxzIiwiX0RvY3VtZW50Vmlld2VyIiwiX0V2ZW50IiwiX09ic2VydmFibGUiLCJfRXZlbnRUeXBlIiwiX3V1aWQiLCJfdXNlQ29udGFpbmVyV2lkdGgiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJNQVhfQ09MUyIsIk1BWF9ST1dTIiwibWVldGluZ1ZpZXdDb25maWcyIiwiVkNSb29tV29ya3NwYWNlIiwiUmVhY3QiLCJmb3J3YXJkUmVmIiwicHJvcHMiLCJyZWYiLCJjdXJyZW50VXNlclBhcnRpY2lwYW50Iiwic2V0Q3VycmVudFVzZXJQYXJ0aWNpcGFudCIsInVzZVN0YXRlIiwiaW5WaWV3UGFydGljaXBhbnRzIiwic2V0SW5WaWV3UGFydGljaXBhbnRzIiwiZGV2aWNlIiwic2V0RGV2aWNlIiwic2hhcmVTY3JlZW5Qcm9kdWNlciIsInNldFNoYXJlU2NyZWVuUHJvZHVjZXIiLCJwcm9kdWNlclRyYW5zcG9ydCIsInNldFByb2R1Y2VyVHJhbnNwb3J0Iiwic2NyZWVuU2hhcmVkIiwic2V0U2NyZWVuU2hhcmVkIiwic29tZW9uZVNoYXJpbmciLCJzZXRTb21lb25lU2hhcmluZyIsInNob3dTaGFyZWRTY3JlZW4iLCJzZXRTaG93U2hhcmVkU2NyZWVuIiwibWVzc2FnZSIsInNldE1lc3NhZ2UiLCJzaGFyZVNjcmVlbkNvbnN1bWVyIiwic2V0U2hhcmVTY3JlZW5Db25zdW1lciIsImdyaWQiLCJzZXRHcmlkIiwiZXZlbnRIYW5kbGVyIiwiZ2FsbGVyeVJlZiIsImdhbGxlcnlXaWR0aCIsImdhbGxlcnlIZWlnaHQiLCJ1c2VDb250YWluZXJXaWR0aCIsIm1pbnV0ZXNTaG93biIsInNldE1pbnV0ZXNTaG93biIsInNob3dNaW51dGVzIiwic2V0U2hvd01pbnV0ZXMiLCJtZWV0aW5nVmlld0hhbmRsZXIiLCJzZXRNZWV0aW5nVmlld0hhbmRsZXIiLCJtaW51dGVzRG9jdW1lbnQiLCJzZXRNaW51dGVzRG9jdW1lbnQiLCJtZWV0aW5nVmlld0NvbmZpZyIsInNldE1lZXRpbmdWaWV3Q29uZmlnIiwiaGFzTG9hZGVkTWludXRlcyIsInNldEhhc0xvYWRlZE1pbnV0ZXMiLCJ1c2VFZmZlY3QiLCJ3b3JkRWRpdG9yVmFsdWVIYW5kbGVyIiwidXNlUmVmIiwidHJhbnNwb3J0cyIsIlRyYW5zcG9ydHMiLCJkZXZpY2VSZWYiLCJyZWN2VHJhbnNwb3J0cyIsImF1ZGlvIiwidmlkZW8iLCJyZWN2VHJhbnNwb3J0UHJvbWlzZXMiLCJzaGFyZVNjcmVlblZpZGVvUmVmIiwic2hhcmVTY3JlZW5TdHJlYW0iLCJwcm9kdWNlclJlY292ZXJpbmciLCJwcm9kdWNlclJlY292ZXJ5QXR0ZW1wdHMiLCJwcm9kdWNlclJlY292ZXJ5RmFpbGVkIiwid2FpdGluZ0xpc3QiLCJyb29tU3RhdHVzIiwibWVldGluZ0lkIiwibWludXRlc0RvY3VtZW50SWQiLCJldmVudEtleSIsIm1lZXRpbmdDaGF0Iiwic2lkZUJhclRhYiIsIm1lZXRpbmdUaXRsZSIsIndoaXRlQm9hcmRTaG93biIsInZpZGVvTXV0ZWQiLCJhdWRpb011dGVkIiwiaXNIb3N0IiwiaXNDaGFpclBlcnNvbiIsInJ0cENhcGFiaWxpdGllcyIsIm9ubG9hZFNjcmVlblNoYXJlRGF0YSIsImRpc3BsYXlTdGF0ZSIsInN0YXJ0U2NyZWVuU2hhcmluZyIsInBhcnRpY2lwYW50cyIsInN0YXJ0U2hvd2luZ01pbnV0ZXMiLCJvblN0YXJ0U2hvd2luZ01pbnV0ZXMiLCJvblN0b3BTaG93aW5nTWludXRlcyIsIm1pbnV0ZXNTaG93blByb3AiLCJzYXZlTWludXRlcyIsImFwaSIsImNvbnNvbGUiLCJlcnJvciIsImZpbGUiLCJnZXREb2N1bWVudFZhbHVlIiwibmV3RG9jdW1lbnRJZCIsInV1aWR2NCIsIm1ldGFkYXRhIiwiZG9jdW1lbnRSZXBvc2l0b3J5Q2FjaGVJZCIsImNvcnJlbGF0aW9uSWQiLCJ2aWV3SWQiLCJuYW1lIiwidHlwZSIsImFjY2Vzc1Rva2VuIiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwiaWRUb2tlbiIsImxvY2F0aW9uIiwid2luZG93IiwicHJvdG9jb2wiLCJob3N0bmFtZSIsImRhdGEiLCJGb3JtRGF0YSIsImFwcGVuZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJmZXRjaENvbmZpZyIsIm1ldGhvZCIsImhlYWRlcnMiLCJhcHBsaWNhdGlvbk1hbmFnZXIiLCJnZXRBY3RpdmVUZW5hbnQiLCJib2R5IiwidXBsb2FkVXJsIiwiZ2V0Q29udGV4dFJvb3QiLCJ1cGxvYWRSZXNwb25zZSIsImZldGNoIiwiZW5jb2RlVVJJIiwib2siLCJFcnJvciIsInVwZGF0ZVBheWxvYWQiLCJpZCIsInVwZGF0ZUZldGNoQ29uZmlnIiwidXBkYXRlVXJsIiwidXBkYXRlUmVzcG9uc2UiLCJsb2ciLCJtZXNzYWdlVHlwZSIsImV2ZW50IiwiRXZlbnQiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJNRVNTQUdFX0FSUklWRUQiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwic3RhcnRTaGFyZVNjcmVlbiIsInByb2R1Y2VTY3JlZW5TaGFyZSIsInN0b3BTaGFyZVNjcmVlbiIsImN1cnJlbnQiLCJ0cmFjayIsImdldFRyYWNrcyIsInN0b3AiLCJyZW1vdmVTaGFyZVNjcmVlbkVsZW1lbnQiLCJvblN0b3BTaGFyaW5nIiwiY2FuUHJvZHVjZSIsInZpZGVvQ29uc3RyYWludHMiLCJjdXJzb3IiLCJtYW5kYXRvcnkiLCJ3aWR0aCIsIm1pbiIsImlkZWFsIiwibWF4IiwiaGVpZ2h0IiwiZnJhbWVSYXRlIiwiZ29vZ0NwdU92ZXJ1c2VEZXRlY3Rpb24iLCJnb29nQ3B1T3ZlcnVzZUVuY29kZVVzYWdlIiwiZ29vZ0NwdU92ZXJ1c2VUaHJlc2hvbGQiLCJwcmVmZXJDdXJyZW50VGFiIiwic2VsZkJyb3dzZXJTdXJmYWNlIiwic3lzdGVtQXVkaW8iLCJzdXJmYWNlU3dpdGNoaW5nIiwibW9uaXRvclR5cGVTdXJmYWNlcyIsInNvY2tldE1hbmFnZXIiLCJlbWl0RXZlbnQiLCJWQ0V2ZW50VHlwZSIsIkNBTkNFTF9TQ1JFRU5fU0hBUkUiLCJyb29tSWQiLCJ0aGVuIiwicmVzdWx0IiwibmF2aWdhdG9yIiwibWVkaWFEZXZpY2VzIiwiZ2V0RGlzcGxheU1lZGlhIiwic3RyZWFtIiwiZ2V0VmlkZW9UcmFja3MiLCJvbmVuZGVkIiwicGFyYW1zIiwiYXBwRGF0YSIsInNjcmVlblNoYXJpbmciLCJwcm9kdWNlciIsInByb2R1Y2UiLCJzcmNPYmplY3QiLCJvbiIsImZvckVhY2giLCJvblN0YXJ0U2hhcmluZyIsImNhdGNoIiwic3RvcFByb2R1Y2luZ1NjcmVlblNoYXJlIiwicHJvZHVjZXJJZCIsIlBST0RVQ0VSX0NMT1NFRCIsInVzZXJJZCIsImdldFVzZXJEZXRhaWxzIiwidXNlcm5hbWUiLCJjbG9zZSIsIm9uTmV3UHJvZHVjZXJzIiwicHJvZHVjZXJzIiwic2NyZWVuU2hhcmVQcm9kdWNlciIsImZpbmQiLCJwIiwiY29uc3VtZSIsImVsIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInZpZGVvQ29uc3VtZXJUcmFuc3BvcnQiLCJnZXRSZWN2VHJhbnNwb3J0IiwibWVkaWFTb3VwSGVscGVyIiwiZ2V0Q29uc3VtZVN0cmVhbSIsIl9yZWYiLCJjb25zdW1lciIsImtpbmQiLCJzaGFyaW5nSGFuZGxlciIsImhhbmRsZXIiLCJldmVudFR5cGUiLCJiZSIsIlBBUlRJQ0lQQU5UX0lOX1ZJRVciLCJvbkJyaW5nVG9WaWV3IiwiTkVXX1BST0RVQ0VSUyIsInBheWxvYWQiLCJDT05TVU1FUl9DTE9TRUQiLCJjb25zdW1lcklkIiwiUFJPRFVDRVJfVFJBTlNQT1JUX0ZBSUxFRCIsInJlY3JlYXRlUHJvZHVjZXJUcmFuc3BvcnQiLCJsZW5ndGgiLCJvZmZWaWV3UGFydGljaXBhbnQiLCJ2Y0V2ZW50TWFuYWdlciIsIlBBUlRJQ0lQQU5UX09GRl9WSUVXIiwic3BsaWNlIiwiaW5WaWV3IiwicGFydGljaXBhbnQiLCJwdXNoIiwiY29uY2F0IiwicmVtb3ZlRnJvbVZpZXciLCJmaWx0ZXIiLCJzZXR1cFNlbGZEZXZpY2VzIiwiZ2V0UGFydGljaXBhbnREZXZpY2UiLCJpbml0UHJvZHVjZXJUcmFuc3BvcnQiLCJrZXkiLCJwcm9taXNlIiwiaW5pdENvbnN1bWVyVHJhbnNwb3J0IiwidHJhbnNwb3J0Iiwic2V0QXVkaW9Db25zdW1lclRyYW5zcG9ydCIsInNldFZpZGVvQ29uc3VtZXJUcmFuc3BvcnQiLCJTWVNURU1fQUxFUlQiLCJuZXdQcm9kdWNlclRyYW5zcG9ydCIsInNldHVwR3JpZCIsIm5ld0NvbmZpZyIsImxvYWREYXRhIiwicmVmcmVzaCIsImFkZFN1YnNjcmlwdGlvbnMiLCJyZW1vdmVTdWJzY3JpcHRpb25zIiwiY2xvc2VSZWN2VHJhbnNwb3J0cyIsImNsb3NlUHJvZHVjZXJUcmFuc3BvcnQiLCJvbkdyaWRTZXR1cCIsImN1cnJlbnRVc2VyRnVsbE5hbWUiLCJpc0N1cnJlbnRVc2VyIiwicGVlciIsImF2YXRhcklkIiwiY291bnRlciIsImluVmlld0dyaWQiLCJudW1Sb3dzIiwicm93cyIsImN1cnJlbnRSb3dJbmRleCIsInJlbmRlclN0cmlwIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwib3ZlcmZsb3dYIiwibWF4V2lkdGgiLCJib3JkZXJSYWRpdXMiLCJvdmVyZmxvd1kiLCJhbGlnbkl0ZW1zIiwiY2xhc3NOYW1lIiwibWFwIiwiaW5kZXgiLCJtaW5XaWR0aCIsInBhZGRpbmciLCJvblJlbW92ZUZyb21WaWV3IiwibnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHMiLCJzaXppbmciLCJvbkhvc3RBdWRpb011dGUiLCJvbkhvc3RWaWRlb011dGUiLCJyZW5kZXJSb3ciLCJyb3ciLCJqdXN0aWZ5Q29udGVudCIsImRpcmVjdGlvbiIsImNvbnRhaW5lciIsIml0ZW0iLCJzcGFjaW5nIiwiRnJhZ21lbnQiLCJmbGV4QmFzaXMiLCJyZW5kZXJDdXJyZW50UGFydGljaXBhbnQiLCJvbkF1ZGlvRGV2aWNlQ2hhbmdlIiwiZ2V0TWVldGluZ0RvY3VtZW50IiwidmFsdWUiLCJHQUxMRVJZX0dBUCIsImNvbXB1dGVSb3dTcGxpdCIsImNvdW50IiwidyIsImgiLCJjb250YWluZXJBc3BlY3QiLCJiZXN0Um93cyIsImJlc3RNaW4iLCJiZXN0UGVuYWx0eSIsIkluZmluaXR5IiwiY29scyIsIk1hdGgiLCJjZWlsIiwiY2VsbFciLCJjZWxsSCIsIm1pbkRpbSIsInBlbmFsdHkiLCJhYnMiLCJiYXNlIiwiZmxvb3IiLCJleHRyYSIsInBlclJvdyIsInJlbmRlclBhcnRpY2lwYW50R3JpZCIsImlkeCIsInNsaWNlIiwibWF4Q29scyIsInRpbGVXaWR0aCIsImZsZXhHcm93IiwiZGlzcGxheSIsImJveFNpemluZyIsImZsZXhEaXJlY3Rpb24iLCJnYXAiLCJtaW5IZWlnaHQiLCJyb3dQYXJ0aWNpcGFudHMiLCJmbGV4IiwiYWxsVXNlclBhcnRpY2lwYW50c0xlZnQiLCJmb250U2l6ZSIsInRleHRBbGlnbiIsIldBSVRJTkdfRk9SX09USEVSU19UT19KT0lOX01FU1NBR0UiLCJ0YWIiLCJtYXhIZWlnaHQiLCJhdXRvUGxheSIsIm11dGVkIiwiekluZGV4IiwiYmFja2dyb3VuZENvbG9yIiwib3ZlcmZsb3ciLCJjb25maWciLCJoYW5kbGUiLCJtYXJnaW5SaWdodCIsInZlcnRpY2FsQWxpZ24iLCJib3R0b20iLCJyaWdodCIsInBhZGRpbmdMZWZ0IiwibWFyZ2luTGVmdCIsInBvc2l0aW9uIiwidG9wIiwiYXV0b0hlaWdodCIsInJlamVjdFVzZXJIYW5kbGVyIiwiYWNjZXB0VXNlckhhbmRsZXIiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbWVkaWEvVkNSb29tV29ya3NwYWNlLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbmltcG9ydCBSZWFjdCwge0ZyYWdtZW50LCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCAnLi9WQ1Jvb21Xb3Jrc3BhY2UuY3NzJztcbmltcG9ydCBHcmlkIGZyb20gJ0BtdWkvbWF0ZXJpYWwvR3JpZCc7XG5pbXBvcnQgVkNSb29tUGFydGljaXBhbnQgZnJvbSAnLi9WQ1Jvb21QYXJ0aWNpcGFudCc7XG5pbXBvcnQgQm94IGZyb20gJ0BtdWkvbWF0ZXJpYWwvQm94JztcbmltcG9ydCB2Y0V2ZW50TWFuYWdlciBmcm9tICcuL1ZDRXZlbnRNYW5hZ2VyJztcbmltcG9ydCBtZWRpYVNvdXBIZWxwZXIgZnJvbSAnLi9NZWRpYVNvdXBIZWxwZXInO1xuaW1wb3J0IFRyYW5zcG9ydHMgZnJvbSAnLi9UcmFuc3BvcnRzJztcbmltcG9ydCB7VkNFdmVudFR5cGV9IGZyb20gJy4vVkNFdmVudFR5cGUnO1xuaW1wb3J0IEljb24gZnJvbSAnLi4vSWNvbic7XG5pbXBvcnQgc29ja2V0TWFuYWdlciBmcm9tICcuLi9Tb2NrZXRNYW5hZ2VyJztcbmltcG9ydCBMb2JieVdhaXRpbmdMaXN0IGZyb20gJy4vTG9iYnlXYWl0aW5nTGlzdCc7XG5pbXBvcnQge1dBSVRJTkdfRk9SX09USEVSU19UT19KT0lOX01FU1NBR0V9IGZyb20gJy4vVkNSb29tJztcbmltcG9ydCBTaWRlQmFyQ29udGVudCBmcm9tIFwiLi9TaWRlQmFyQ29udGVudFwiO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tIFwiLi4vLi4vQXBwbGljYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgV29yZERvY3VtZW50Vmlld2VyIGZyb20gJy4uL1dvcmREb2N1bWVudFZpZXdlcic7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uLy4uL1V0aWxzXCI7XG5pbXBvcnQgRG9jdW1lbnRWaWV3ZXIgZnJvbSBcIi4uL0RvY3VtZW50Vmlld2VyXCI7XG5pbXBvcnQgRXZlbnQgZnJvbSBcIi4uLy4uL2V2ZW50L0V2ZW50XCI7XG5pbXBvcnQgZXZlbnRNYW5hZ2VyIGZyb20gXCIuLi8uLi9ldmVudC9PYnNlcnZhYmxlXCI7XG5pbXBvcnQgRXZlbnRUeXBlIGZyb20gXCIuLi8uLi9ldmVudC9FdmVudFR5cGVcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgdXNlQ29udGFpbmVyV2lkdGggZnJvbSAnLi4vLi4vaG9va3MvdXNlQ29udGFpbmVyV2lkdGgnO1xuXG5jb25zdCBNQVhfQ09MUyA9IDM7XG5jb25zdCBNQVhfUk9XUyA9IDI7XG5cbmNvbnN0IG1lZXRpbmdWaWV3Q29uZmlnMiA9IHtcbiAgICBcInR5cGVcIjogXCJkb2N1bWVudFZpZXdlclwiLFxuICAgIFwiaWRcIjogXCJtZWV0aW5nTWludXRlXCIsXG4gICAgXCJmaWxlVHlwZVwiOiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50XCIsXG4gICAgXCJhdHRyaWJ1dGVzXCI6IHtcbiAgICAgICAgXCJzdHlsZVwiOiB7XG4gICAgICAgICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogXCIxMDAlXCIsXG4gICAgICAgICAgICBcImhlaWdodFwiOiBcIjEwMCVcIixcbiAgICAgICAgICAgIFwicGFkZGluZ1wiOiBcIjI0cHhcIlxuICAgICAgICB9XG4gICAgfSxcbiAgICBcInRyYWNrQ2hhbmdlc1wiOiBmYWxzZSxcbiAgICBcInJlYWRPbmx5XCI6IGZhbHNlLFxuICAgIFwiY29tbWVudHNPbmx5XCI6IGZhbHNlLFxuICAgIFwiZXZlbnRIYW5kbGluZ0NvbmZpZ1wiOiB7XG4gICAgICAgIFwic3Vic2NyaXB0aW9uc1wiOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJwdWJsaXNoZXJcIjogXCJ2Y1Jvb21cIixcbiAgICAgICAgICAgICAgICBcImV2ZW50VHlwZVwiOiBcIkRBVEFfQVJSSVZFRFwiLFxuICAgICAgICAgICAgICAgIFwiYWN0aW9uc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uVHlwZVwiOiBcImxvYWREYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH0sXG4gICAgXCJkYXRhU2VydmljZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcInJlc3RcIixcbiAgICAgICAgXCJ1cmxcIjogXCIvZG9jcy9hcGkvdjEvbWFuYWdlci9maW5kXCIsXG4gICAgICAgIFwibWV0aG9kXCI6IFwiR0VUXCIsXG4gICAgICAgIFwicGFyYW1ldGVyc1wiOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiZG9jdW1lbnRJZFwiLFxuICAgICAgICAgICAgICAgIFwiaHR0cFBhcmFtZXRlclR5cGVcIjogXCJQQVRIX1ZBUklBQkxFXCIsXG4gICAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcImMyOGE0YTU2LTZmYzAtNDg4Ny1iY2EwLTI5ZjQzZGEwYjNiMlwiXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9XG59XG5cbi8vIFRPRE8gOiBDbGVhbi11cCBhbGwgdHJhY2tzIGFuZCBwcm9kdWNlcnMgYW5kIGNvbnN1bWVycyB3aGVuIHRoZSBjb21wb25lbnQgY2xvc2VzXG5jb25zdCBWQ1Jvb21Xb3Jrc3BhY2UgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XG4gICAgY29uc3QgW2N1cnJlbnRVc2VyUGFydGljaXBhbnQsIHNldEN1cnJlbnRVc2VyUGFydGljaXBhbnRdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2luVmlld1BhcnRpY2lwYW50cywgc2V0SW5WaWV3UGFydGljaXBhbnRzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICAvL2NvbnN0IFt2aWRlb1JlZnJlc2hlciwgc2V0VmlkZW9SZWZyZXNoZXJdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtkZXZpY2UsIHNldERldmljZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbc2hhcmVTY3JlZW5Qcm9kdWNlciwgc2V0U2hhcmVTY3JlZW5Qcm9kdWNlcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbcHJvZHVjZXJUcmFuc3BvcnQsIHNldFByb2R1Y2VyVHJhbnNwb3J0XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtzY3JlZW5TaGFyZWQsIHNldFNjcmVlblNoYXJlZF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbc29tZW9uZVNoYXJpbmcsIHNldFNvbWVvbmVTaGFyaW5nXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtzaG93U2hhcmVkU2NyZWVuLCBzZXRTaG93U2hhcmVkU2NyZWVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbbWVzc2FnZSwgc2V0TWVzc2FnZV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gICAgY29uc3QgW3NoYXJlU2NyZWVuQ29uc3VtZXIsIHNldFNoYXJlU2NyZWVuQ29uc3VtZXJdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2dyaWQsIHNldEdyaWRdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2V2ZW50SGFuZGxlcl0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2dhbGxlcnlSZWYsIGdhbGxlcnlXaWR0aCwgZ2FsbGVyeUhlaWdodF0gPSB1c2VDb250YWluZXJXaWR0aCgpO1xuICAgIGNvbnN0IFttaW51dGVzU2hvd24sIHNldE1pbnV0ZXNTaG93bl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3Nob3dNaW51dGVzLCBzZXRTaG93TWludXRlc10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW21lZXRpbmdWaWV3SGFuZGxlciwgc2V0TWVldGluZ1ZpZXdIYW5kbGVyXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFttaW51dGVzRG9jdW1lbnQsIHNldE1pbnV0ZXNEb2N1bWVudF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbbWVldGluZ1ZpZXdDb25maWcsIHNldE1lZXRpbmdWaWV3Q29uZmlnXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtoYXNMb2FkZWRNaW51dGVzLCBzZXRIYXNMb2FkZWRNaW51dGVzXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICAgIC8vIENyZWF0ZSBoYW5kbGVyIG9uY2Ugb24gbW91bnRcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIW1lZXRpbmdWaWV3SGFuZGxlcikge1xuICAgICAgICAgICAgc2V0TWVldGluZ1ZpZXdIYW5kbGVyKHt9KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IHdvcmRFZGl0b3JWYWx1ZUhhbmRsZXIgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IHRyYW5zcG9ydHMgPSB1c2VSZWYobmV3IFRyYW5zcG9ydHMoKSk7XG4gICAgLy8gUmVjdiB0cmFuc3BvcnRzIGFyZSBzcGxpdCBieSBraW5kIGFuZCBjcmVhdGVkIGp1c3QtaW4tdGltZSBzbyBhIHNpbmdsZVxuICAgIC8vIGNsb3NlZCBjb25zdW1lciBjYW4gbmV2ZXIgcmVjeWNsZSBpdHMgbS1zZWN0aW9uIGFjcm9zcyBraW5kcyAodGhlIGNhdXNlIG9mXG4gICAgLy8gdGhlIFwiUlRQIGV4dGVuc2lvbiBJRCByZWFzc2lnbm1lbnRcIiBjb2xsaXNpb24pLiBkZXZpY2VSZWYgbGV0cyB0aGUgZmFjdG9yeVxuICAgIC8vIHJlYWQgdGhlIGxvYWRlZCBEZXZpY2Ugd2l0aG91dCBhIHN0YWxlIGNsb3N1cmU7IHRoZSBwcm9taXNlIGNhY2hlIGRlZHVwZXNcbiAgICAvLyBjb25jdXJyZW50IGZpcnN0LWNvbnN1bWVzIG9mIHRoZSBzYW1lIGtpbmQgaW50byBPTkUgdHJhbnNwb3J0LlxuICAgIGNvbnN0IGRldmljZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCByZWN2VHJhbnNwb3J0cyA9IHVzZVJlZih7YXVkaW86IG51bGwsIHZpZGVvOiBudWxsfSk7XG4gICAgY29uc3QgcmVjdlRyYW5zcG9ydFByb21pc2VzID0gdXNlUmVmKHthdWRpbzogbnVsbCwgdmlkZW86IG51bGx9KTtcbiAgICBjb25zdCBzaGFyZVNjcmVlblZpZGVvUmVmID0gdXNlUmVmKCk7XG4gICAgY29uc3Qgc2hhcmVTY3JlZW5TdHJlYW0gPSB1c2VSZWYoKTtcbiAgICAvLyBQcm9kdWNlci10cmFuc3BvcnQgcmVjb3ZlcnkgZ3VhcmRzOiBwcmV2ZW50IG92ZXJsYXBwaW5nIHJlY3JlYXRpb25zIGFuZFxuICAgIC8vIGdpdmUgdXAgYWZ0ZXIgYSBmZXcgYXR0ZW1wdHMgc28gYSBwZXJtYW5lbnRseS1kb3duIG5ldHdvcmsgY2FuJ3Qgc3Bpbi5cbiAgICBjb25zdCBwcm9kdWNlclJlY292ZXJpbmcgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IHByb2R1Y2VyUmVjb3ZlcnlBdHRlbXB0cyA9IHVzZVJlZigwKTtcbiAgICBjb25zdCBwcm9kdWNlclJlY292ZXJ5RmFpbGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCB7XG4gICAgICAgIHdhaXRpbmdMaXN0LFxuICAgICAgICByb29tU3RhdHVzLFxuICAgICAgICBtZWV0aW5nSWQsXG4gICAgICAgIG1pbnV0ZXNEb2N1bWVudElkLFxuICAgICAgICBldmVudEtleSxcbiAgICAgICAgbWVldGluZ0NoYXQsXG4gICAgICAgIHNpZGVCYXJUYWIsXG4gICAgICAgIG1lZXRpbmdUaXRsZSxcbiAgICAgICAgd2hpdGVCb2FyZFNob3duLFxuICAgICAgICB2aWRlb011dGVkLFxuICAgICAgICBhdWRpb011dGVkLFxuICAgICAgICBpc0hvc3QsXG4gICAgICAgIGlzQ2hhaXJQZXJzb24sXG4gICAgICAgIHJ0cENhcGFiaWxpdGllcyxcbiAgICAgICAgb25sb2FkU2NyZWVuU2hhcmVEYXRhLFxuICAgICAgICBkaXNwbGF5U3RhdGUsXG4gICAgICAgIHN0YXJ0U2NyZWVuU2hhcmluZyxcbiAgICAgICAgcGFydGljaXBhbnRzLFxuICAgICAgICBzdGFydFNob3dpbmdNaW51dGVzLFxuICAgICAgICBvblN0YXJ0U2hvd2luZ01pbnV0ZXMsXG4gICAgICAgIG9uU3RvcFNob3dpbmdNaW51dGVzLFxuICAgICAgICBtaW51dGVzU2hvd246IG1pbnV0ZXNTaG93blByb3BcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBzYXZlTWludXRlcyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICghbWVldGluZ1ZpZXdIYW5kbGVyIHx8ICFtZWV0aW5nVmlld0hhbmRsZXIuYXBpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk1lZXRpbmcgdmlldyBoYW5kbGVyIG5vdCBhdmFpbGFibGVcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgbWVldGluZ1ZpZXdIYW5kbGVyLmFwaS5nZXREb2N1bWVudFZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTm8gZG9jdW1lbnQgdG8gc2F2ZVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0RvY3VtZW50SWQgPSB1dWlkdjQoKTtcblxuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRSZXBvc2l0b3J5Q2FjaGVJZDogbmV3RG9jdW1lbnRJZCxcbiAgICAgICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBwcm9wcy52aWV3SWQgKyBcIi5taW51dGVzRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJhY2Nlc3NUb2tlblwiKTtcbiAgICAgICAgICAgIGNvbnN0IGlkVG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiaWRUb2tlblwiKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gICAgICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgZGF0YS5hcHBlbmQoXCJtZXRhZGF0YVwiLCBKU09OLnN0cmluZ2lmeShtZXRhZGF0YSkpO1xuICAgICAgICAgICAgZGF0YS5hcHBlbmQoXCJmaWxlXCIsIGZpbGUpO1xuXG4gICAgICAgICAgICBsZXQgZmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAnaWRUb2tlbic6IGlkVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICd0ZW5hbnQnOiBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QWN0aXZlVGVuYW50KClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCB1cGxvYWRVcmwgPSBsb2NhdGlvbiArIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgXCIvZG9jcy9hcGkvdjEvbWFuYWdlci91cGxvYWQvc2F2ZVwiO1xuXG4gICAgICAgICAgICBjb25zdCB1cGxvYWRSZXNwb25zZSA9IGF3YWl0IGZldGNoKGVuY29kZVVSSSh1cGxvYWRVcmwpLCBmZXRjaENvbmZpZyk7XG4gICAgICAgICAgICBpZiAoIXVwbG9hZFJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IGV2ZW50S2V5LFxuICAgICAgICAgICAgICAgIG1pbnV0ZXNEb2N1bWVudElkOiBuZXdEb2N1bWVudElkXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgdXBkYXRlRmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAnaWRUb2tlbic6IGlkVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICd0ZW5hbnQnOiBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QWN0aXZlVGVuYW50KClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHVwZGF0ZVBheWxvYWQpXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgdXBkYXRlVXJsID0gbG9jYXRpb24gKyBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0Q29udGV4dFJvb3QoKSArIFwiL3RlbmRlci9hcGkvdjEvZXZhbHVhdGlvbi9tZWV0aW5nL21pbnV0ZURvY3VtZW50XCI7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVSZXNwb25zZSA9IGF3YWl0IGZldGNoKGVuY29kZVVSSSh1cGRhdGVVcmwpLCB1cGRhdGVGZXRjaENvbmZpZyk7XG5cbiAgICAgICAgICAgIGlmICghdXBkYXRlUmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byB1cGRhdGUgbWVldGluZyBtaW51dGVzIGRvY3VtZW50Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTWludXRlcyBzYXZlZCBzdWNjZXNzZnVsbHlcIik7XG5cbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlOiAnU1VDQ0VTUycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ01lZXRpbmcgbWludXRlcyBzYXZlZCBzdWNjZXNzZnVsbHknXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KG1lZXRpbmdWaWV3SGFuZGxlciwgcHJvcHMudmlld0lkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzYXZpbmcgbWludXRlczpcIiwgZSk7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogJ0VSUk9SJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRmFpbGVkIHRvIHNhdmUgbWVldGluZyBtaW51dGVzJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChtZWV0aW5nVmlld0hhbmRsZXIsIHByb3BzLnZpZXdJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICAgICAgc2F2ZU1pbnV0ZXNcbiAgICB9KSk7XG5cbiAgICBjb25zdCBzdGFydFNoYXJlU2NyZWVuID0gKCkgPT4ge1xuICAgICAgICBwcm9kdWNlU2NyZWVuU2hhcmUoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RvcFNoYXJlU2NyZWVuID0gKCkgPT4ge1xuICAgICAgICBpZiAoc2hhcmVTY3JlZW5TdHJlYW0uY3VycmVudCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB0cmFjayBvZiBzaGFyZVNjcmVlblN0cmVhbS5jdXJyZW50LmdldFRyYWNrcygpKSB7XG4gICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzaGFyZVNjcmVlblN0cmVhbS5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHJlbW92ZVNoYXJlU2NyZWVuRWxlbWVudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvcHMub25TdG9wU2hhcmluZygpO1xuICAgIH07XG5cbiAgICBjb25zdCBwcm9kdWNlU2NyZWVuU2hhcmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBhdmFpbGFibGUgZGV2aWNlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXByb2R1Y2VyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBwcm9kdWNlciB0cmFuc3BvcnQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGV2aWNlLmNhblByb2R1Y2UoJ3ZpZGVvJykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBwcm9kdWNlIHNjcmVlbiBzaGFyZScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNoYXJlU2NyZWVuUHJvZHVjZXIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTaGFyZSBzY3JlZW4gcHJvZHVjZXIgYWxyZWFkeSBleGlzdCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmlkZW9Db25zdHJhaW50cyA9IHtcbiAgICAgICAgICAgIGN1cnNvcjogdHJ1ZSxcbiAgICAgICAgICAgIGF1ZGlvOiBmYWxzZSxcbiAgICAgICAgICAgIHZpZGVvOiB7XG4gICAgICAgICAgICAgICAgbWFuZGF0b3J5OiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDE2MCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZWFsOiAzMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg6IDY0MFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMTIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWRlYWw6IDI0MCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heDogNDgwXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZyYW1lUmF0ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heDogMTVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZ29vZ0NwdU92ZXJ1c2VEZXRlY3Rpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGdvb2dDcHVPdmVydXNlRW5jb2RlVXNhZ2U6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGdvb2dDcHVPdmVydXNlVGhyZXNob2xkOiA3MFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmVmZXJDdXJyZW50VGFiOiBmYWxzZSxcbiAgICAgICAgICAgIHNlbGZCcm93c2VyU3VyZmFjZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgc3lzdGVtQXVkaW86ICdleGNsdWRlJyxcbiAgICAgICAgICAgIHN1cmZhY2VTd2l0Y2hpbmc6ICdleGNsdWRlJyxcbiAgICAgICAgICAgIG1vbml0b3JUeXBlU3VyZmFjZXM6ICdpbmNsdWRlJ1xuXG4gICAgICAgIH07XG5cbiAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuQ0FOQ0VMX1NDUkVFTl9TSEFSRSwge1xuICAgICAgICAgICAgcm9vbUlkOiBtZWV0aW5nSWRcbiAgICAgICAgfSkudGhlbihhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldERpc3BsYXlNZWRpYSh2aWRlb0NvbnN0cmFpbnRzKVxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIChzdHJlYW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhY2sgPSBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2sub25lbmRlZCA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFNoYXJlU2NyZWVuKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuU2hhcmluZzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9kdWNlciA9IGF3YWl0IHByb2R1Y2VyVHJhbnNwb3J0LnByb2R1Y2UocGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2hhcmVTY3JlZW5Qcm9kdWNlcihwcm9kdWNlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgc2hhcmVTY3JlZW5TdHJlYW0uY3VycmVudCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dTaGFyZWRTY3JlZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlU2NyZWVuVmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwcm9kdWNlci5vbigndHJhbnNwb3J0Y2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc3JjT2JqZWN0LmdldFRyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hhcmVTY3JlZW5Qcm9kdWNlcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXIub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNoYXJlU2NyZWVuUHJvZHVjZXIobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm9uU3RhcnRTaGFyaW5nKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMub25TdG9wU2hhcmluZygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS5jYXRjaCgoZSkgPT4gY29uc29sZS5sb2coJ0VSUk9SIENBTkNFTExJTkcgU0NSRUVOIFNIQVJFIDogJywgZSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBzdG9wUHJvZHVjaW5nU2NyZWVuU2hhcmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghc2hhcmVTY3JlZW5Qcm9kdWNlcikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RoZXJlIGlzIG5vIHNoYXJlIHNjcmVlbiBwcm9kdWNlcicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb2R1Y2VySWQgPSBzaGFyZVNjcmVlblByb2R1Y2VyLmlkO1xuICAgICAgICBjb25zb2xlLmxvZygnQ2xvc2UgcHJvZHVjZXInLCBwcm9kdWNlcklkKTtcbiAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuUFJPRFVDRVJfQ0xPU0VELCB7XG4gICAgICAgICAgICB1c2VySWQ6IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lLFxuICAgICAgICAgICAgcHJvZHVjZXJJZCxcbiAgICAgICAgICAgIHJvb21JZDogbWVldGluZ0lkXG4gICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGNvbnNvbGUubG9nKCdQUk9EVUNFUl9DTE9TRUQgRVJST1IgOiAnLCBlKSk7XG5cbiAgICAgICAgc2hhcmVTY3JlZW5Qcm9kdWNlci5jbG9zZSgpO1xuICAgICAgICBzdG9wU2hhcmVTY3JlZW4oKTtcbiAgICAgICAgc2V0U2hhcmVTY3JlZW5Qcm9kdWNlcihudWxsKTtcbiAgICAgICAgLy9zZXRTb21lb25lU2hhcmluZyhmYWxzZSk7XG4gICAgICAgIHNldFNjcmVlblNoYXJlZChmYWxzZSk7XG5cbiAgICAgICAgaWYgKHNoYXJlU2NyZWVuU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdHJhY2sgb2Ygc2hhcmVTY3JlZW5TdHJlYW0uY3VycmVudC5nZXRUcmFja3MoKSkge1xuICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvbk5ld1Byb2R1Y2VycyA9IChwcm9kdWNlcnMpID0+IHtcbiAgICAgICAgbGV0IHNjcmVlblNoYXJlUHJvZHVjZXIgPSBwcm9kdWNlcnMuZmluZCgocCkgPT4gcC5zY3JlZW5TaGFyaW5nKTtcbiAgICAgICAgaWYgKHNjcmVlblNoYXJlUHJvZHVjZXIpIHtcbiAgICAgICAgICAgIGNvbnN1bWUoc2NyZWVuU2hhcmVQcm9kdWNlcik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlU2hhcmVTY3JlZW5FbGVtZW50ID0gKCkgPT4ge1xuICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hhcmUtc2NyZWVuLXZpZGVvJyk7XG4gICAgICAgIGlmIChlbCkge1xuICAgICAgICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY29uc3VtZSA9IGFzeW5jIChwcm9kdWNlcikgPT4ge1xuICAgICAgICBjb25zdCB2aWRlb0NvbnN1bWVyVHJhbnNwb3J0ID0gYXdhaXQgZ2V0UmVjdlRyYW5zcG9ydCgndmlkZW8nKTtcbiAgICAgICAgaWYgKCF2aWRlb0NvbnN1bWVyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbWVkaWFTb3VwSGVscGVyLmdldENvbnN1bWVTdHJlYW0ocHJvZHVjZXIucHJvZHVjZXJJZCwgZGV2aWNlLnJ0cENhcGFiaWxpdGllcywgdmlkZW9Db25zdW1lclRyYW5zcG9ydCxcbiAgICAgICAgICAgIG1lZXRpbmdJZCwgYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUsICd2aWRlbycpXG4gICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIsXG4gICAgICAgICAgICAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICBraW5kXG4gICAgICAgICAgICAgICAgIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTaGFyZVNjcmVlbkNvbnN1bWVyKGNvbnN1bWVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1TSEFSSU5HIENPTlNVTUU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5zaGFyaW5nSGFuZGxlcih0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNjcmVlblNoYXJlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNvbWVvbmVTaGFyaW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9zZXRTaG93U2hhcmVkU2NyZWVuKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWVzc2FnZShwcm9kdWNlci51c2VybmFtZSArICcgaXMgc2hhcmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVTY3JlZW5WaWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlU2NyZWVuU3RyZWFtLmN1cnJlbnQgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAvL3NldFZpZGVvUmVmcmVzaGVyKCF2aWRlb1JlZnJlc2hlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFja2VuZGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNoYXJlU2NyZWVuRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc3BvcnRjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTaGFyZVNjcmVlbkVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21lZXRpbmctcGFydGljaXBhbnQtZ3JpZCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IChldmVudFR5cGUsIGJlKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5QQVJUSUNJUEFOVF9JTl9WSUVXOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25CcmluZ1RvVmlldyhiZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5ORVdfUFJPRFVDRVJTOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5DT05TVU1FUl9DTE9TRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hhcmVTY3JlZW5Db25zdW1lciAmJiBzaGFyZVNjcmVlbkNvbnN1bWVyLmlkID09PSBiZS5wYXlsb2FkLmNvbnN1bWVySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTaGFyZVNjcmVlbkVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNZXNzYWdlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLnNoYXJpbmdIYW5kbGVyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTb21lb25lU2hhcmluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2NyZWVuU2hhcmVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93U2hhcmVkU2NyZWVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLlBST0RVQ0VSX1RSQU5TUE9SVF9GQUlMRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQnJpbmdUb1ZpZXcgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAoIWluVmlld1BhcnRpY2lwYW50cy5maW5kKCgocCkgPT4gcC51c2VySWQgPT09IHBheWxvYWQudXNlcklkKSkpIHtcbiAgICAgICAgICAgIGlmIChpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoID09PSBNQVhfQ09MUyAqIE1BWF9ST1dTKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9mZlZpZXdQYXJ0aWNpcGFudCA9IGluVmlld1BhcnRpY2lwYW50c1tpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLlBBUlRJQ0lQQU5UX09GRl9WSUVXLCBvZmZWaWV3UGFydGljaXBhbnQpO1xuXG4gICAgICAgICAgICAgICAgaW5WaWV3UGFydGljaXBhbnRzLnNwbGljZShpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgICAgICAgICAgb2ZmVmlld1BhcnRpY2lwYW50LmluVmlldyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IHB1c2hpbmcgdW5kZWZpbmVkIChwYXJ0aWNpcGFudCBub3QgaW4gdGhlIGxpc3QpIOKAlCBhXG4gICAgICAgICAgICAvLyBzdHJheSBQQVJUSUNJUEFOVF9JTl9WSUVXIGZvciBhbiB1bmtub3duIHVzZXIgb3RoZXJ3aXNlIGNyYXNoZWQgdGhlIGdyaWQgcmVuZGVyLlxuICAgICAgICAgICAgbGV0IHBhcnRpY2lwYW50ID0gcHJvcHMucGFydGljaXBhbnRzLmZpbmQoKHApID0+IHAudXNlcklkID09PSBwYXlsb2FkLnVzZXJJZCk7XG4gICAgICAgICAgICBpZiAocGFydGljaXBhbnQpIHtcbiAgICAgICAgICAgICAgICBpblZpZXdQYXJ0aWNpcGFudHMucHVzaChwYXJ0aWNpcGFudCk7XG4gICAgICAgICAgICAgICAgLy8gUmVmcmVzaCB0aGUgbGlzdFxuICAgICAgICAgICAgICAgIHNldEluVmlld1BhcnRpY2lwYW50cyhbXS5jb25jYXQoaW5WaWV3UGFydGljaXBhbnRzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlRnJvbVZpZXcgPSAocGFydGljaXBhbnQpID0+IHtcbiAgICAgICAgcGFydGljaXBhbnQuaW5WaWV3ID0gZmFsc2U7XG4gICAgICAgIHNldEluVmlld1BhcnRpY2lwYW50cyhpblZpZXdQYXJ0aWNpcGFudHMuZmlsdGVyKChwKSA9PiBwLnVzZXJJZCAhPT0gcGFydGljaXBhbnQudXNlcklkKSk7XG4gICAgICAgIHZjRXZlbnRNYW5hZ2VyLmZpcmVFdmVudChWQ0V2ZW50VHlwZS5QQVJUSUNJUEFOVF9PRkZfVklFVywgcGFydGljaXBhbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXR1cFNlbGZEZXZpY2VzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgZGV2aWNlID0gYXdhaXQgbWVkaWFTb3VwSGVscGVyLmdldFBhcnRpY2lwYW50RGV2aWNlKHJ0cENhcGFiaWxpdGllcyk7XG4gICAgICAgIGRldmljZVJlZi5jdXJyZW50ID0gZGV2aWNlO1xuICAgICAgICBzZXREZXZpY2UoZGV2aWNlKTtcblxuICAgICAgICBsZXQgcHJvZHVjZXJUcmFuc3BvcnQgPSBhd2FpdCBtZWRpYVNvdXBIZWxwZXIuaW5pdFByb2R1Y2VyVHJhbnNwb3J0KGRldmljZSwgbWVldGluZ0lkLCBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSk7XG4gICAgICAgIHNldFByb2R1Y2VyVHJhbnNwb3J0KHByb2R1Y2VyVHJhbnNwb3J0KTtcbiAgICAgICAgdHJhbnNwb3J0cy5jdXJyZW50LnNldFByb2R1Y2VyVHJhbnNwb3J0KHByb2R1Y2VyVHJhbnNwb3J0KTtcbiAgICAgICAgLy8gUmVjdiB0cmFuc3BvcnRzIGFyZSBjcmVhdGVkIGp1c3QtaW4tdGltZSwgcGVyIGtpbmQsIG9uIGZpcnN0IGNvbnN1bWUgKGdldFJlY3ZUcmFuc3BvcnQpLlxuICAgIH07XG5cbiAgICAvLyBMYXppbHkgY3JlYXRlIChhbmQgY2FjaGUpIG9uZSByZWN2IHRyYW5zcG9ydCBwZXIga2luZC4gQXVkaW8gYW5kIHZpZGVvIGVhY2hcbiAgICAvLyBnZXQgdGhlaXIgb3duIHRyYW5zcG9ydDsgc2NyZWVuLXNoYXJlIHJpZGVzIHRoZSB2aWRlbyB0cmFuc3BvcnQuIENvbmN1cnJlbnRcbiAgICAvLyBmaXJzdC1jb25zdW1lcyBvZiBhIGtpbmQgc2hhcmUgYSBzaW5nbGUgaW4tZmxpZ2h0IGNyZWF0aW9uLCBzbyB3ZSBuZXZlciBidWlsZFxuICAgIC8vIGR1cGxpY2F0ZSB0cmFuc3BvcnRzLiBBIHNlc3Npb24gdGhhdCBuZXZlciByZWNlaXZlcyBhIGtpbmQgbmV2ZXIgYnVpbGRzIGl0LlxuICAgIGNvbnN0IGdldFJlY3ZUcmFuc3BvcnQgPSBhc3luYyAoa2luZCkgPT4ge1xuICAgICAgICBjb25zdCBkZXZpY2UgPSBkZXZpY2VSZWYuY3VycmVudDtcbiAgICAgICAgaWYgKCFkZXZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5ID0ga2luZCA9PT0gJ2F1ZGlvJyA/ICdhdWRpbycgOiAndmlkZW8nO1xuICAgICAgICBpZiAocmVjdlRyYW5zcG9ydHMuY3VycmVudFtrZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVjdlRyYW5zcG9ydHMuY3VycmVudFtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWN2VHJhbnNwb3J0UHJvbWlzZXMuY3VycmVudFtrZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVjdlRyYW5zcG9ydFByb21pc2VzLmN1cnJlbnRba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVzZXJuYW1lID0gYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWU7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBtZWRpYVNvdXBIZWxwZXIuaW5pdENvbnN1bWVyVHJhbnNwb3J0KGRldmljZSwgbWVldGluZ0lkLCB1c2VybmFtZSwga2V5KVxuICAgICAgICAgICAgLnRoZW4oKHRyYW5zcG9ydCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdHJhbnNwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0aW9uIGZhaWxlZCDigJQgY2xlYXIgdGhlIGNhY2hlIHNvIGEgbGF0ZXIgY29uc3VtZSBjYW4gcmV0cnlcbiAgICAgICAgICAgICAgICAgICAgcmVjdlRyYW5zcG9ydFByb21pc2VzLmN1cnJlbnRba2V5XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZWN2VHJhbnNwb3J0cy5jdXJyZW50W2tleV0gPSB0cmFuc3BvcnQ7XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLmN1cnJlbnQuc2V0QXVkaW9Db25zdW1lclRyYW5zcG9ydCh0cmFuc3BvcnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuY3VycmVudC5zZXRWaWRlb0NvbnN1bWVyVHJhbnNwb3J0KHRyYW5zcG9ydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc3BvcnQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRkFJTEVEIFRPIENSRUFURSAnICsga2V5ICsgJyBSRUNWIFRSQU5TUE9SVCcsIGUpO1xuICAgICAgICAgICAgICAgIHJlY3ZUcmFuc3BvcnRQcm9taXNlcy5jdXJyZW50W2tleV0gPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgcmVjdlRyYW5zcG9ydFByb21pc2VzLmN1cnJlbnRba2V5XSA9IHByb21pc2U7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICAvLyBSZWNvdmVyIGZyb20gYSBwcm9kdWNlci10cmFuc3BvcnQgZmFpbHVyZSBieSByZWNyZWF0aW5nIGl0LiBVbmxpa2UgYVxuICAgIC8vIGNvbnN1bWVyIGZhaWx1cmUgKHdoaWNoIGhhbmdzIHVwIOKAlCB5b3UgY2FuJ3Qgc2VlL2hlYXIgYW55b25lKSwgbG9zaW5nIHRoZVxuICAgIC8vIHByb2R1Y2VyIG9ubHkgc3RvcHMgWU9VUiBtZWRpYSwgc28gd2UgcmVidWlsZCBpdCBhbmQgbGV0IHRoZSBzZWxmIHRpbGVcbiAgICAvLyByZS1wcm9kdWNlIG9uIHRoZSBuZXcgdHJhbnNwb3J0IChpdCBzeW5jcyBwcm9kdWNlclRyYW5zcG9ydCB2aWEgcHJvcHMpLlxuICAgIGNvbnN0IHJlY3JlYXRlUHJvZHVjZXJUcmFuc3BvcnQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChwcm9kdWNlclJlY292ZXJpbmcuY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgcmVjb3ZlciBwcm9kdWNlciB0cmFuc3BvcnQ6IG5vIGRldmljZScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9kdWNlclJlY292ZXJ5QXR0ZW1wdHMuY3VycmVudCA+PSAzKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdQcm9kdWNlciB0cmFuc3BvcnQgcmVjb3ZlcnkgZ2F2ZSB1cCBhZnRlciAzIGF0dGVtcHRzJyk7XG4gICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIG9uY2Ug4oCUIHRoZWlyIG91dGdvaW5nIG1lZGlhIGNhbid0IGJlIHJlc3RvcmVkLlxuICAgICAgICAgICAgaWYgKCFwcm9kdWNlclJlY292ZXJ5RmFpbGVkLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBwcm9kdWNlclJlY292ZXJ5RmFpbGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLmZpcmVFdmVudChWQ0V2ZW50VHlwZS5TWVNURU1fQUxFUlQsIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJDb3VsZG4ndCByZWNvbm5lY3QgeW91ciBhdWRpby92aWRlby4gUGxlYXNlIGxlYXZlIGFuZCByZWpvaW4gdGhlIG1lZXRpbmcuXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvZHVjZXJSZWNvdmVyaW5nLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBwcm9kdWNlclJlY292ZXJ5QXR0ZW1wdHMuY3VycmVudCArPSAxO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlY3JlYXRpbmcgcHJvZHVjZXIgdHJhbnNwb3J0IChhdHRlbXB0ICcgKyBwcm9kdWNlclJlY292ZXJ5QXR0ZW1wdHMuY3VycmVudCArICcpJyk7XG4gICAgICAgICAgICBjb25zdCBuZXdQcm9kdWNlclRyYW5zcG9ydCA9IGF3YWl0IG1lZGlhU291cEhlbHBlci5pbml0UHJvZHVjZXJUcmFuc3BvcnQoXG4gICAgICAgICAgICAgICAgZGV2aWNlLCBtZWV0aW5nSWQsIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lKTtcbiAgICAgICAgICAgIGlmIChuZXdQcm9kdWNlclRyYW5zcG9ydCkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBzY3JlZW4tc2hhcmUgcHJvZHVjZXIgKGlmIGFueSkgd2FzIG9uIHRoZSBkZWFkIHRyYW5zcG9ydC5cbiAgICAgICAgICAgICAgICBzZXRTaGFyZVNjcmVlblByb2R1Y2VyKG51bGwpO1xuICAgICAgICAgICAgICAgIHNldFByb2R1Y2VyVHJhbnNwb3J0KG5ld1Byb2R1Y2VyVHJhbnNwb3J0KTtcbiAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLmN1cnJlbnQuc2V0UHJvZHVjZXJUcmFuc3BvcnQobmV3UHJvZHVjZXJUcmFuc3BvcnQpO1xuICAgICAgICAgICAgICAgIHByb2R1Y2VyUmVjb3ZlcnlBdHRlbXB0cy5jdXJyZW50ID0gMDsgLy8gc3VjY2VzcyByZXNldHMgdGhlIGNvdW50ZXJcbiAgICAgICAgICAgICAgICBwcm9kdWNlclJlY292ZXJ5RmFpbGVkLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHJlY3JlYXRlIHByb2R1Y2VyIHRyYW5zcG9ydCcsIGUpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgcHJvZHVjZXJSZWNvdmVyaW5nLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBldmVudEhhbmRsZXIuYXBpID0gaGFuZGxlcigpO1xuICAgIH0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcblxuICAgIH0sIFtwcm9wcy5hdWRpb011dGVkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXR1cEdyaWQoKTtcbiAgICB9LCBbaW5WaWV3UGFydGljaXBhbnRzXSk7XG5cbiAgICAvKnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZihncmlkID09PSBudWxsKSB7XG4gICAgICAgIHNldHVwR3JpZCgpO1xuICAgICAgfVxuICAgIH0sIFtncmlkXSk7Ki9cblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghc2NyZWVuU2hhcmVkKSB7XG4gICAgICAgICAgICBzdG9wUHJvZHVjaW5nU2NyZWVuU2hhcmUoKTtcbiAgICAgICAgfVxuICAgIH0sIFtzY3JlZW5TaGFyZWRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChzdGFydFNjcmVlblNoYXJpbmcpIHtcbiAgICAgICAgICAgIHByb2R1Y2VTY3JlZW5TaGFyZSgpO1xuICAgICAgICB9XG4gICAgfSwgW3N0YXJ0U2NyZWVuU2hhcmluZ10pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHN0YXJ0U2hvd2luZ01pbnV0ZXMpIHtcbiAgICAgICAgICAgIHNldFNob3dNaW51dGVzKHRydWUpO1xuICAgICAgICAgICAgc2V0TWludXRlc1Nob3duKHRydWUpO1xuICAgICAgICAgICAgb25TdGFydFNob3dpbmdNaW51dGVzKCk7XG4gICAgICAgIH1cbiAgICB9LCBbc3RhcnRTaG93aW5nTWludXRlc10pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgLy8gU3luYyB3aXRoIHBhcmVudCdzIG1pbnV0ZXNTaG93biBzdGF0ZVxuICAgICAgICBpZiAobWludXRlc1Nob3duUHJvcCA9PT0gZmFsc2UgJiYgbWludXRlc1Nob3duID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzZXRTaG93TWludXRlcyhmYWxzZSk7XG4gICAgICAgICAgICBzZXRNaW51dGVzU2hvd24oZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSwgW21pbnV0ZXNTaG93blByb3BdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChtaW51dGVzRG9jdW1lbnRJZCkge1xuICAgICAgICAgICAgY29uc3QgbmV3Q29uZmlnID0ge1xuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImRvY3VtZW50Vmlld2VyXCIsXG4gICAgICAgICAgICAgICAgXCJpZFwiOiBcIm1lZXRpbmdNaW51dGVcIixcbiAgICAgICAgICAgICAgICBcImZpbGVUeXBlXCI6IFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICBcImF0dHJpYnV0ZXNcIjoge1xuICAgICAgICAgICAgICAgICAgICBcInN0eWxlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwid2lkdGhcIjogXCJjYWxjKDEwMCUgLSA0MzZweClcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWluSGVpZ2h0XCI6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJoZWlnaHRcIjogXCIxMDAlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhZGRpbmdcIjogXCIyNHB4XCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiBcIk1lZXRpbmcgTWludXRlc1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcInRyYWNrQ2hhbmdlc1wiOiB0cnVlLFxuICAgICAgICAgICAgICAgIFwicmVhZE9ubHlcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgXCJjb21tZW50c09ubHlcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgXCJldmVudEhhbmRsaW5nQ29uZmlnXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJzdWJzY3JpcHRpb25zXCI6IFtdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcImRhdGFTZXJ2aWNlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwicmVzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcInVybFwiOiBcIi9kb2NzL2FwaS92MS9tYW5hZ2VyL2ZpbmRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJtZXRob2RcIjogXCJHRVRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYXJhbWV0ZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJkb2N1bWVudElkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJodHRwUGFyYW1ldGVyVHlwZVwiOiBcIlBBVEhfVkFSSUFCTEVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IG1pbnV0ZXNEb2N1bWVudElkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2V0TWVldGluZ1ZpZXdDb25maWcobmV3Q29uZmlnKTtcbiAgICAgICAgfVxuICAgIH0sIFttaW51dGVzRG9jdW1lbnRJZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKG1lZXRpbmdWaWV3SGFuZGxlciAmJiBtZWV0aW5nVmlld0hhbmRsZXIuYXBpKSB7XG4gICAgICAgICAgICBtZWV0aW5nVmlld0hhbmRsZXIuYXBpLmxvYWREYXRhKCk7XG4gICAgICAgIH1cbiAgICB9LCBbbWVldGluZ1ZpZXdIYW5kbGVyXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAobWVldGluZ1ZpZXdDb25maWcyICYmIG1pbnV0ZXNEb2N1bWVudElkICYmIG1lZXRpbmdWaWV3SGFuZGxlciAmJiBtZWV0aW5nVmlld0hhbmRsZXIuYXBpICYmIHNob3dNaW51dGVzKSB7XG4gICAgICAgICAgICBtZWV0aW5nVmlld0hhbmRsZXIuYXBpLnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgIH0sIFttaW51dGVzRG9jdW1lbnRJZCwgbWVldGluZ1ZpZXdDb25maWcyLCBtZWV0aW5nVmlld0hhbmRsZXIsIHNob3dNaW51dGVzXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAob25sb2FkU2NyZWVuU2hhcmVEYXRhICYmIGRldmljZSkge1xuICAgICAgICAgICAgY29uc3VtZShvbmxvYWRTY3JlZW5TaGFyZURhdGEpO1xuICAgICAgICB9XG4gICAgfSwgW29ubG9hZFNjcmVlblNoYXJlRGF0YSwgZGV2aWNlXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRTY3JlZW5TaGFyZWQocHJvcHMuc2NyZWVuU2hhcmVkKTtcbiAgICAgICAgaWYgKHByb3BzLnNjcmVlblNoYXJlZCkge1xuICAgICAgICAgICAgc3RhcnRTaGFyZVNjcmVlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RvcFNoYXJlU2NyZWVuKCk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMuc2NyZWVuU2hhcmVkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2Y0V2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlciwgVkNFdmVudFR5cGUuTkVXX1BST0RVQ0VSUywgVkNFdmVudFR5cGUuQ09OU1VNRVJfQ0xPU0VELFxuICAgICAgICAgICAgVkNFdmVudFR5cGUuUEFSVElDSVBBTlRfSU5fVklFVywgVkNFdmVudFR5cGUuUFJPRFVDRVJfVFJBTlNQT1JUX0ZBSUxFRCk7XG4gICAgICAgIHNldHVwU2VsZkRldmljZXMoKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLnJlbW92ZVN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgICAgIHRyYW5zcG9ydHMuY3VycmVudC5jbG9zZVJlY3ZUcmFuc3BvcnRzKCk7XG4gICAgICAgICAgICB0cmFuc3BvcnRzLmN1cnJlbnQuY2xvc2VQcm9kdWNlclRyYW5zcG9ydCgpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChncmlkKSB7XG4gICAgICAgICAgICBwcm9wcy5vbkdyaWRTZXR1cCgpO1xuICAgICAgICB9XG4gICAgfSwgW2dyaWRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5wYXJ0aWNpcGFudHMgJiYgcHJvcHMuY3VycmVudFVzZXJGdWxsTmFtZSkge1xuICAgICAgICAgICAgc2V0Q3VycmVudFVzZXJQYXJ0aWNpcGFudCh7XG4gICAgICAgICAgICAgICAgaXNDdXJyZW50VXNlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB1c2VySWQ6IGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgIHBlZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgbmFtZTogcHJvcHMuY3VycmVudFVzZXJGdWxsTmFtZSxcbiAgICAgICAgICAgICAgICBhdmF0YXJJZDogc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlckF2YXRhcklkJyksXG4gICAgICAgICAgICAgICAgdmlkZW9NdXRlZCxcbiAgICAgICAgICAgICAgICBhdWRpb011dGVkXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgaW5WaWV3UGFydGljaXBhbnRzLnNwbGljZSgwLCBpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFydGljaXBhbnQgb2YgcHJvcHMucGFydGljaXBhbnRzKSB7XG4gICAgICAgICAgICAgICAgcGFydGljaXBhbnQuaW5WaWV3ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpblZpZXdQYXJ0aWNpcGFudHMucHVzaChwYXJ0aWNpcGFudCk7XG4gICAgICAgICAgICAgICAgaWYgKCsrY291bnRlciA+PSBNQVhfUk9XUyAqIE1BWF9DT0xTKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0dXBHcmlkKGluVmlld1BhcnRpY2lwYW50cyk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMucGFydGljaXBhbnRzLCBwcm9wcy5jdXJyZW50VXNlckZ1bGxOYW1lLCBwcm9wcy5kaXNwbGF5U3RhdGVdKTtcblxuICAgIGNvbnN0IHNldHVwR3JpZCA9ICgpID0+IHtcbiAgICAgICAgbGV0IGluVmlld0dyaWQgPSBbXTtcbiAgICAgICAgbGV0IG51bVJvd3MgPSBpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoIDwgTUFYX1JPV1MgPyBpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoIDogTUFYX1JPV1M7XG4gICAgICAgIGxldCByb3dzID0gaW5WaWV3UGFydGljaXBhbnRzLmxlbmd0aCA9PT0gMiA/IDEgOiBudW1Sb3dzO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBpblZpZXdHcmlkLnB1c2goW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGN1cnJlbnRSb3dJbmRleCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5WaWV3UGFydGljaXBhbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpblZpZXdHcmlkW2N1cnJlbnRSb3dJbmRleF0ucHVzaChpblZpZXdQYXJ0aWNpcGFudHNbaV0pO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRSb3dJbmRleCsrID09PSByb3dzIC0gMSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRSb3dJbmRleCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzZXRHcmlkKGluVmlld0dyaWQpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZW5kZXJTdHJpcCgpIHtcbiAgICAgICAgcmV0dXJuIGluVmlld1BhcnRpY2lwYW50cyAmJiBpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93WDogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxNDhweCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93WTogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3cgZmxleC1yb3cgZmxleC1ub3dyYXAgbm8tbWFyZ2luIG5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICB7aW5WaWV3UGFydGljaXBhbnRzLm1hcCgocGFydGljaXBhbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17J2NvbC0qLSonfSBrZXk9e2luZGV4ICsgJy0nICsgcGFydGljaXBhbnQudXNlcklkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxNDhweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VkNSb29tUGFydGljaXBhbnQgZGF0YT17cGFydGljaXBhbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlPXtkZXZpY2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVldGluZ0lkPXttZWV0aW5nSWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheVN0YXRlPXtkaXNwbGF5U3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9NdXRlZD17cGFydGljaXBhbnQuYXVkaW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb011dGVkPXtwYXJ0aWNpcGFudC52aWRlb011dGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlRnJvbVZpZXc9eyhwYXJ0aWNpcGFudCkgPT4gcmVtb3ZlRnJvbVZpZXcocGFydGljaXBhbnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlY3ZUcmFuc3BvcnQ9e2dldFJlY3ZUcmFuc3BvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRwQ2FwYWJpbGl0aWVzPXtydHBDYXBhYmlsaXRpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHM9e2luVmlld1BhcnRpY2lwYW50cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRzPXtwYXJ0aWNpcGFudHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6aW5nPXsnc20nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSG9zdEF1ZGlvTXV0ZT17KCkgPT4gcHJvcHMub25Ib3N0QXVkaW9NdXRlKHBhcnRpY2lwYW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkhvc3RWaWRlb011dGU9eygpID0+IHByb3BzLm9uSG9zdFZpZGVvTXV0ZShwYXJ0aWNpcGFudCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNIb3N0PXtpc0hvc3R9Lz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+O1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9kaXY+O1xuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlclJvdyA9IChyb3csIGluZGV4KSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8R3JpZFxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbj1cInJvd1wiXG4gICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJjZW50ZXJcIlxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIiBjb250YWluZXIgaXRlbSBzcGFjaW5nPXsyfT5cbiAgICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgIHtyb3cubWFwKChwYXJ0aWNpcGFudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8R3JpZCBpdGVtIGtleT17aW5kZXggKyAnLScgKyBwYXJ0aWNpcGFudC51c2VySWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsnbWVldGluZ1BhcnRpY2lwYW50Q29udGFpbmVyJ30gc3R5bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhCYXNpczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZDUm9vbVBhcnRpY2lwYW50IGRhdGE9e3BhcnRpY2lwYW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2U9e2RldmljZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVldGluZ0lkPXttZWV0aW5nSWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemluZz17ZGlzcGxheVN0YXRlID09PSAnTUlOSU1JWkVEJyA/ICdzbScgOiAnbWQnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb011dGVkPXtwYXJ0aWNpcGFudC5hdWRpb011dGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb011dGVkPXtwYXJ0aWNpcGFudC52aWRlb011dGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblJlbW92ZUZyb21WaWV3PXsocGFydGljaXBhbnQpID0+IHJlbW92ZUZyb21WaWV3KHBhcnRpY2lwYW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UmVjdlRyYW5zcG9ydD17Z2V0UmVjdlRyYW5zcG9ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHM9e2luVmlld1BhcnRpY2lwYW50cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50cz17cGFydGljaXBhbnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydHBDYXBhYmlsaXRpZXM9e3J0cENhcGFiaWxpdGllc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0QXVkaW9NdXRlPXsoKSA9PiBwcm9wcy5vbkhvc3RBdWRpb011dGUocGFydGljaXBhbnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkhvc3RWaWRlb011dGU9eygpID0+IHByb3BzLm9uSG9zdFZpZGVvTXV0ZShwYXJ0aWNpcGFudCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSG9zdD17aXNIb3N0fS8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWQ+O1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgPC9HcmlkPlxuICAgICAgICApO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZW5kZXJDdXJyZW50UGFydGljaXBhbnQoKSB7XG4gICAgICAgIHJldHVybiA8PlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRVc2VyUGFydGljaXBhbnQgJiZcbiAgICAgICAgICAgICAgICA8VkNSb29tUGFydGljaXBhbnQgZGF0YT17Y3VycmVudFVzZXJQYXJ0aWNpcGFudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlPXtkZXZpY2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZXRpbmdJZD17bWVldGluZ0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWV0aW5nVGl0bGU9e21lZXRpbmdUaXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRwQ2FwYWJpbGl0aWVzPXtydHBDYXBhYmlsaXRpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQXVkaW9EZXZpY2VDaGFuZ2U9e3Byb3BzLm9uQXVkaW9EZXZpY2VDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlY3ZUcmFuc3BvcnQ9e2dldFJlY3ZUcmFuc3BvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyVHJhbnNwb3J0PXtwcm9kdWNlclRyYW5zcG9ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9NdXRlZD17YXVkaW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9NdXRlZD17dmlkZW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHM9e2luVmlld1BhcnRpY2lwYW50cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50cz17cGFydGljaXBhbnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkhvc3RBdWRpb011dGU9eygpID0+IHByb3BzLm9uSG9zdEF1ZGlvTXV0ZShjdXJyZW50VXNlclBhcnRpY2lwYW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Ib3N0VmlkZW9NdXRlPXsoKSA9PiBwcm9wcy5vbkhvc3RWaWRlb011dGUoY3VycmVudFVzZXJQYXJ0aWNpcGFudCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSG9zdD17aXNIb3N0fS8+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvPjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRNZWV0aW5nRG9jdW1lbnQoKSB7XG4gICAgICAgIHJldHVybiBtZWV0aW5nVmlld0hhbmRsZXIudmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgR0FMTEVSWV9HQVAgPSA4O1xuXG4gICAgLy8gUHJvcG9ydGlvbmFsIGZpbGwgbGF5b3V0OiAxIHBlcnNvbiBmaWxscyB0aGUgd2hvbGUgYXJlYTsgZWFjaCBqb2luXG4gICAgLy8gc3ViZGl2aWRlcyB0aGUgc3BhY2UuIFBpY2sgdGhlIHJvdyBzcGxpdCB0aGF0IG1heGltaXNlcyB0aGUgc21hbGxlciB0aWxlXG4gICAgLy8gZGltZW5zaW9uIChzbyBmYWNlcyBzdGF5IGJpZyksIHRpZS1icmVha2luZyB0b3dhcmQgY2VsbHMgc2hhcGVkIGxpa2UgdGhlXG4gICAgLy8gY29udGFpbmVyIOKAlCB3aGljaCBuYXR1cmFsbHkgc3BsaXRzIGFsb25nIHRoZSBsb25nZXIgYXhpcy4gUmV0dXJucyB0aGVcbiAgICAvLyBwYXJ0aWNpcGFudCBjb3VudCBwZXIgcm93IChleHRyYXMgbGFuZCBvbiB0aGUgdG9wIHJvd3MpLlxuICAgIGZ1bmN0aW9uIGNvbXB1dGVSb3dTcGxpdChjb3VudCwgd2lkdGgsIGhlaWdodCkge1xuICAgICAgICBpZiAoY291bnQgPD0gMSkgcmV0dXJuIFtjb3VudCB8fCAxXTtcbiAgICAgICAgY29uc3QgdyA9IHdpZHRoID4gMCA/IHdpZHRoIDogMTY7XG4gICAgICAgIGNvbnN0IGggPSBoZWlnaHQgPiAwID8gaGVpZ2h0IDogOTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyQXNwZWN0ID0gdyAvIGg7XG4gICAgICAgIGxldCBiZXN0Um93cyA9IDEsIGJlc3RNaW4gPSAtMSwgYmVzdFBlbmFsdHkgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChsZXQgcm93cyA9IDE7IHJvd3MgPD0gY291bnQ7IHJvd3MrKykge1xuICAgICAgICAgICAgY29uc3QgY29scyA9IE1hdGguY2VpbChjb3VudCAvIHJvd3MpO1xuICAgICAgICAgICAgY29uc3QgY2VsbFcgPSB3IC8gY29scztcbiAgICAgICAgICAgIGNvbnN0IGNlbGxIID0gaCAvIHJvd3M7XG4gICAgICAgICAgICBjb25zdCBtaW5EaW0gPSBNYXRoLm1pbihjZWxsVywgY2VsbEgpO1xuICAgICAgICAgICAgY29uc3QgcGVuYWx0eSA9IE1hdGguYWJzKChjZWxsVyAvIGNlbGxIKSAtIGNvbnRhaW5lckFzcGVjdCk7XG4gICAgICAgICAgICBpZiAobWluRGltID4gYmVzdE1pbiArIDEgfHwgKE1hdGguYWJzKG1pbkRpbSAtIGJlc3RNaW4pIDw9IDEgJiYgcGVuYWx0eSA8IGJlc3RQZW5hbHR5KSkge1xuICAgICAgICAgICAgICAgIGJlc3RSb3dzID0gcm93cztcbiAgICAgICAgICAgICAgICBiZXN0TWluID0gbWluRGltO1xuICAgICAgICAgICAgICAgIGJlc3RQZW5hbHR5ID0gcGVuYWx0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiYXNlID0gTWF0aC5mbG9vcihjb3VudCAvIGJlc3RSb3dzKTtcbiAgICAgICAgbGV0IGV4dHJhID0gY291bnQgJSBiZXN0Um93cztcbiAgICAgICAgY29uc3QgcGVyUm93ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmVzdFJvd3M7IGkrKykge1xuICAgICAgICAgICAgcGVyUm93LnB1c2goYmFzZSArIChleHRyYS0tID4gMCA/IDEgOiAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBlclJvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW5kZXJQYXJ0aWNpcGFudEdyaWQoKSB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gaW5WaWV3UGFydGljaXBhbnRzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcGVyUm93ID0gY29tcHV0ZVJvd1NwbGl0KGNvdW50LCBnYWxsZXJ5V2lkdGgsIGdhbGxlcnlIZWlnaHQpO1xuICAgICAgICAvLyBQcmUtc2xpY2UgcGFydGljaXBhbnRzIGludG8gdGhlaXIgcm93cy5cbiAgICAgICAgY29uc3Qgcm93cyA9IFtdO1xuICAgICAgICBsZXQgaWR4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIHBlclJvdykge1xuICAgICAgICAgICAgcm93cy5wdXNoKGluVmlld1BhcnRpY2lwYW50cy5zbGljZShpZHgsIGlkeCArIG4pKTtcbiAgICAgICAgICAgIGlkeCArPSBuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV2ZXJ5IHRpbGUgaXMgdGhlIHNhbWUgd2lkdGggKGEgMS9tYXhDb2xzIHNsaWNlKS4gQSBzaG9ydCBsYXN0IHJvdyBrZWVwc1xuICAgICAgICAvLyB0aGF0IHdpZHRoIGFuZCBjZW50cmVzLCBpbnN0ZWFkIG9mIG9uZSBsb25lIHRpbGUgc3RyZXRjaGluZyBmdWxsLXdpZHRoLlxuICAgICAgICBjb25zdCBtYXhDb2xzID0gcGVyUm93Lmxlbmd0aCA/IE1hdGgubWF4KC4uLnBlclJvdykgOiAxO1xuICAgICAgICBjb25zdCB0aWxlV2lkdGggPSAnY2FsYygoMTAwJSAtICcgKyAoKG1heENvbHMgLSAxKSAqIEdBTExFUllfR0FQKSArICdweCkgLyAnICsgbWF4Q29scyArICcpJztcbiAgICAgICAgcmV0dXJuICghc2NyZWVuU2hhcmVkICYmICF3aGl0ZUJvYXJkU2hvd24gJiYgIW1pbnV0ZXNTaG93biB8fCAoc2NyZWVuU2hhcmVkICYmICFzaG93U2hhcmVkU2NyZWVuKSAmJiAhc29tZW9uZVNoYXJpbmcgJiYgIW1pbnV0ZXNTaG93bikgJiZcbiAgICAgICAgICAgIDxCb3ggc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBmbGV4R3JvdzogMSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGRpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgPyAnY2FsYygxMDAlIC0gMjMycHgpJyA6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBHQUxMRVJZX0dBUCArICdweCdcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgcmVmPXtnYWxsZXJ5UmVmfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICBnYXA6IEdBTExFUllfR0FQICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiAwXG4gICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICB7cm93cy5tYXAoKHJvd1BhcnRpY2lwYW50cywgcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYga2V5PXtyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleDogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXA6IEdBTExFUllfR0FQICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cm93UGFydGljaXBhbnRzLm1hcCgocGFydGljaXBhbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYga2V5PXtwYXJ0aWNpcGFudC51c2VySWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7ZmxleDogJzAgMCBhdXRvJywgd2lkdGg6IHRpbGVXaWR0aCwgbWluV2lkdGg6IDAsIG1pbkhlaWdodDogMH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZDUm9vbVBhcnRpY2lwYW50IGRhdGE9e3BhcnRpY2lwYW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZT17ZGV2aWNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZXRpbmdJZD17bWVldGluZ0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemluZz17ZGlzcGxheVN0YXRlID09PSAnTUlOSU1JWkVEJyA/ICdzbScgOiAnbWQnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvTXV0ZWQ9e3BhcnRpY2lwYW50LmF1ZGlvTXV0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9NdXRlZD17cGFydGljaXBhbnQudmlkZW9NdXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblJlbW92ZUZyb21WaWV3PXsocGFydGljaXBhbnQpID0+IHJlbW92ZUZyb21WaWV3KHBhcnRpY2lwYW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZWN2VHJhbnNwb3J0PXtnZXRSZWN2VHJhbnNwb3J0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mSW5WaWV3UGFydGljaXBhbnRzPXtpblZpZXdQYXJ0aWNpcGFudHMubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50cz17cGFydGljaXBhbnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0cENhcGFiaWxpdGllcz17cnRwQ2FwYWJpbGl0aWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSG9zdEF1ZGlvTXV0ZT17KCkgPT4gcHJvcHMub25Ib3N0QXVkaW9NdXRlKHBhcnRpY2lwYW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkhvc3RWaWRlb011dGU9eygpID0+IHByb3BzLm9uSG9zdFZpZGVvTXV0ZShwYXJ0aWNpcGFudCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNIb3N0PXtpc0hvc3R9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+O1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvQm94PjtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICBkZXZpY2UgP1xuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydyb3ctKi0qIGdyaWQnfVxuICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnID8gJzEwMCUnIDogZGlzcGxheVN0YXRlID09PSAnTUlOSU1JWkVEJyA/ICdjYWxjKDEwMCUgLSAxMDBweCknIDogJ2NhbGMoMTAwJSAtIDIwMHB4KScsXG4gICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZGlzcGxheVN0YXRlID09PSAnTUFYSU1JWkVEJyA/IG51bGwgOiAndGFibGUnLFxuICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIChyb29tU3RhdHVzID09PSAnTE9CQlknIHx8IHByb3BzLmFsbFVzZXJQYXJ0aWNpcGFudHNMZWZ0KSAmJlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGRpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgPyAnY2FsYygxMDAlIC0gMjMycHgpJyA6ICdjYWxjKDEwMCUgLSAxMjBweCknLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcyOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcidcbiAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV0FJVElOR19GT1JfT1RIRVJTX1RPX0pPSU5fTUVTU0FHRVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBncmlkICYmIHJvb21TdGF0dXMgIT09ICdMT0JCWScgJiZcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyUGFydGljaXBhbnRHcmlkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTdGF0ZSA9PT0gJ01JTklNSVpFRCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnY2FsYygxMDAlIC0gMjAwcHgpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ3RhYmxlLWNlbGwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclBhcnRpY2lwYW50R3JpZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5U3RhdGUgPT09ICdQSU5ORUQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTaWRlQmFyQ29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVldGluZ0NoYXQ9e21lZXRpbmdDaGF0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNIb3N0PXtpc0hvc3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NoYWlyUGVyc29uPXtpc0NoYWlyUGVyc29ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiPXsnUGVvcGxlJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZXRpbmdJZD17bWVldGluZ0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRzPXtwcm9wcy5wYXJ0aWNpcGFudHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkhvc3RBdWRpb011dGU9e3Byb3BzLm9uSG9zdEF1ZGlvTXV0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uSG9zdFZpZGVvTXV0ZT17cHJvcHMub25Ib3N0VmlkZW9NdXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnY29udGVudC1ib3gnfSBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAoISgoc2NyZWVuU2hhcmVkICYmIHNob3dTaGFyZWRTY3JlZW4pIHx8IHNvbWVvbmVTaGFyaW5nKSkgPyAnbm9uZScgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6ICcxMDAlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXsnc2NyZWVuLXNoYXJlLXZpZGVvJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUGxheSByZWY9e3NoYXJlU2NyZWVuVmlkZW9SZWZ9IG11dGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogJzAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnY29udGVudC1ib3gnfSBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAoIShtaW51dGVzU2hvd24gJiYgc2hvd01pbnV0ZXMpKSA/ICdub25lJyA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzE2cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6ICcxMDAlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEb2N1bWVudFZpZXdlciBjb25maWc9e21lZXRpbmdWaWV3Q29uZmlnMn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGU9e21lZXRpbmdWaWV3SGFuZGxlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3SWQ9e3Byb3BzLnZpZXdJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Rpc3BsYXlTdGF0ZSA9PT0gJ01BWElNSVpFRCcgPyAncm93LSotKicgOiAnJ31gfSBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogZGlzcGxheVN0YXRlID09PSAnTUFYSU1JWkVEJyA/ICcxMDAlJyA6ICcyMDBweCcsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogZGlzcGxheVN0YXRlID09PSAnTUFYSU1JWkVEJyA/ICcxNTJweCcgOiBkaXNwbGF5U3RhdGUgPT09ICdNSU5JTUlaRUQnID8gJzEwMCUnIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogKChzY3JlZW5TaGFyZWQgJiYgc2hvd1NoYXJlZFNjcmVlbikgfHwgc29tZW9uZVNoYXJpbmcgfHwgKG1pbnV0ZXNTaG93biAmJiBzaG93TWludXRlcykpID8gJ25vbmUnIDogZGlzcGxheVN0YXRlID09PSAnTUFYSU1JWkVEJyA/ICdmbGV4JyA6IGRpc3BsYXlTdGF0ZSA9PT0gJ01JTklNSVpFRCcgPyAndGFibGUtY2VsbCcgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnLFxuICAgICAgICAgICAgICAgICAgICBib3R0b206ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICByaWdodDogJzhweCdcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eycgc3RyaXAtcGFydGljaXBhbnRzJ30gc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnID8gJ2NhbGMoMTAwJSAtIDIzMnB4KScgOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxNDhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICcxNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAnMTZweCdcbiAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh3aGl0ZUJvYXJkU2hvd24gfHwgcm9vbVN0YXR1cyA9PT0gJ0xPQkJZJykgJiYgZ3JpZCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN0cmlwKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2AkeyhkaXNwbGF5U3RhdGUgPT09ICdNQVhJTUlaRUQnID8gJ2NvbCAnIDogJycpfWB9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzIwMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzE0OHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogJzAnLFxuICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJDdXJyZW50UGFydGljaXBhbnQoKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAoKHdhaXRpbmdMaXN0ICYmIHdhaXRpbmdMaXN0Lmxlbmd0aCA+IDApKSAmJlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J25vLXNpZGUtbWFyZ2luIG5vLXNpZGUtcGFkZGluZyBncmlkLXNpZGUtYmFyJ30gc3R5bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodDogJzE2cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGluZ0xpc3QgJiYgd2FpdGluZ0xpc3QubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMb2JieVdhaXRpbmdMaXN0IHdhaXRpbmdMaXN0PXt3YWl0aW5nTGlzdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvSGVpZ2h0PXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdFVzZXJIYW5kbGVyPXtwcm9wcy5yZWplY3RVc2VySGFuZGxlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHRVc2VySGFuZGxlcj17cHJvcHMuYWNjZXB0VXNlckhhbmRsZXJ9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA6XG4gICAgICAgICAgICBudWxsXG4gICAgKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBWQ1Jvb21Xb3Jrc3BhY2U7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsa0JBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLElBQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLGVBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLGdCQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTyxXQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUSxZQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxLQUFBLEdBQUFQLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVSxjQUFBLEdBQUFS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
|