@agilemotion/oui-react-js 2.0.18 → 2.0.20
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.
- package/dist/ApplicationManager.js +25 -8
- package/dist/components/SocketManager.js +6 -3
- package/dist/components/dashboard/FoldingSideTabDashboard.js +4 -2
- package/dist/components/dashboard/components/blackDashboard/sidebar/FoldingTabSidebar.js +18 -2
- package/dist/components/layout/Window.js +2 -2
- package/dist/components/media/MediaSoupHelper.js +3 -2
- package/dist/components/media/Transports.js +18 -7
- package/dist/components/media/VCRoomParticipant.js +20 -19
- package/dist/components/media/VCRoomWorkspace.js +68 -13
- package/dist/view/Dashboard.js +2 -2
- package/package.json +1 -1
|
@@ -84,7 +84,6 @@ const VCRoomParticipant = props => {
|
|
|
84
84
|
const unmountedRef = (0, _react.useRef)(false);
|
|
85
85
|
const showVideo = true;
|
|
86
86
|
const {
|
|
87
|
-
consumerTransport,
|
|
88
87
|
device,
|
|
89
88
|
participants
|
|
90
89
|
} = props;
|
|
@@ -241,26 +240,19 @@ const VCRoomParticipant = props => {
|
|
|
241
240
|
}
|
|
242
241
|
}, [selectedAudioDevice]);
|
|
243
242
|
(0, _react.useEffect)(() => {
|
|
244
|
-
|
|
245
|
-
|
|
243
|
+
// Once the Device is ready, consume the producers we already know about
|
|
244
|
+
// and replay any that arrived before we were ready. Recv transports
|
|
245
|
+
// themselves are created just-in-time inside consume() (per kind), so the
|
|
246
|
+
// trigger here is the Device, not a transport.
|
|
247
|
+
if (device) {
|
|
248
|
+
console.log('DEVICE READY WITH PRODUCERS : ', props.data.producers);
|
|
246
249
|
if (props.data.producers) {
|
|
247
250
|
onNewProducers(props.data.producers, true);
|
|
248
251
|
}
|
|
249
252
|
onNewProducers(failedProducersDueToNullTransport, true);
|
|
250
253
|
failedProducersDueToNullTransport.splice(0, failedProducersDueToNullTransport.length);
|
|
251
|
-
if (producers) {
|
|
252
|
-
console.log('RE-INSTATING CONSUMERS');
|
|
253
|
-
for (let [key, value] of producers) {
|
|
254
|
-
console.log('PROCESSING PRODUCER OF TYPE : ' + key + ' : ' + value.id);
|
|
255
|
-
if (!(props.data.producers && (void 0).props.data.producers.find(p => p.producerId === value.id))) {
|
|
256
|
-
consume(value.id, key, true, value.userId);
|
|
257
|
-
} else {
|
|
258
|
-
console.log('PRODUCER ALREADY PROCESSED');
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
254
|
}
|
|
263
|
-
}, [
|
|
255
|
+
}, [device]);
|
|
264
256
|
const createProducerTransport = async () => {
|
|
265
257
|
setProducerTransport(await _MediaSoupHelper.default.initProducerTransport(props.device, props.meetingId, _ApplicationManager.default.getUserDetails().username));
|
|
266
258
|
};
|
|
@@ -422,7 +414,7 @@ const VCRoomParticipant = props => {
|
|
|
422
414
|
const consumeFailedProducers = () => {
|
|
423
415
|
setTimeout(function () {
|
|
424
416
|
if (unmountedRef.current) return;
|
|
425
|
-
if (
|
|
417
|
+
if (device) {
|
|
426
418
|
onNewProducers(failedProducersDueToNullTransport, true);
|
|
427
419
|
failedProducersDueToNullTransport.splice(0, failedProducersDueToNullTransport.length);
|
|
428
420
|
consumeFailedProducers();
|
|
@@ -458,7 +450,7 @@ const VCRoomParticipant = props => {
|
|
|
458
450
|
let loading = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
459
451
|
console.log("====== PRODUCERS RECEIVED : [ " + JSON.stringify(producers) + " ] =======");
|
|
460
452
|
for (const producer of producers) {
|
|
461
|
-
if (
|
|
453
|
+
if (device) {
|
|
462
454
|
if (producer.userId === props.data.userId) {
|
|
463
455
|
if (producer.kind === 'video' && !producer.screenSharing) {
|
|
464
456
|
console.log('CALLING CONSUME FROM ON NEW PRODUCERS FOR : ' + props.data.userId + ' - ' + producer.producerId);
|
|
@@ -521,7 +513,16 @@ const VCRoomParticipant = props => {
|
|
|
521
513
|
}
|
|
522
514
|
const consume = async function (producerId, kind, loading, userId) {
|
|
523
515
|
let retries = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
|
|
524
|
-
|
|
516
|
+
// Get (and lazily create) the recv transport for this kind. audio and
|
|
517
|
+
// video ride separate transports, so a closed consumer's m-section is
|
|
518
|
+
// never recycled across kinds — which is what triggered the RTP
|
|
519
|
+
// extension-id collision.
|
|
520
|
+
const transport = await props.getRecvTransport(kind);
|
|
521
|
+
if (!transport) {
|
|
522
|
+
retryConsume(kind, userId, new Error('recv transport unavailable for ' + kind), retries, producerId, loading);
|
|
523
|
+
return;
|
|
524
|
+
}
|
|
525
|
+
_MediaSoupHelper.default.getConsumeStream(producerId, device.rtpCapabilities, transport, props.meetingId, _ApplicationManager.default.getUserDetails().username, kind).then(_ref => {
|
|
525
526
|
let {
|
|
526
527
|
consumer,
|
|
527
528
|
stream,
|
|
@@ -819,4 +820,4 @@ const VCRoomParticipant = props => {
|
|
|
819
820
|
})));
|
|
820
821
|
};
|
|
821
822
|
var _default = exports.default = VCRoomParticipant;
|
|
822
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX1ZDRXZlbnRUeXBlIiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX1ZDUm9vbVJlY29yZGVyIiwiX01lZGlhU291cEhlbHBlciIsIl9UcmFja3MiLCJfSWNvbkJ1dHRvbiIsIl9JY29uIiwiX2ljb25zTWF0ZXJpYWwiLCJfVG9vbHRpcCIsIl9tYXRlcmlhbCIsIl9Tb2NrZXRNYW5hZ2VyIiwiX0J1dHRvbiIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfYXVkaW9MZXZlbE1ldGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidCIsIldlYWtNYXAiLCJyIiwibiIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiU1BFQUtJTkdfTEVWRUwiLCJWSURFT19DT0RFQ19PUFRJT05TIiwiZXhwb3J0cyIsInZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlIiwiVklERU9fQ09OU1RSQUlOVFMiLCJhdWRpbyIsInZpZGVvIiwid2lkdGgiLCJtaW4iLCJpZGVhbCIsImhlaWdodCIsIlZJREVPX0VOQ09ESU5HUyIsInJpZCIsIm1heEJpdHJhdGUiLCJzY2FsYWJpbGl0eU1vZGUiLCJsb2NhdGlvbiIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJWQ1Jvb21QYXJ0aWNpcGFudCIsInByb3BzIiwiaGFuZFJhaXNlZCIsInNldEhhbmRSYWlzZWQiLCJSZWFjdCIsInVzZVN0YXRlIiwidmlkZW9NdXRlZCIsInNldFZpZGVvTXV0ZWQiLCJhdWRpb011dGVkIiwic2V0QXVkaW9NdXRlZCIsInByb2R1Y2VyVHJhbnNwb3J0Iiwic2V0UHJvZHVjZXJUcmFuc3BvcnQiLCJ2aWRlb1JlZnJlc2hlciIsInNldFZpZGVvUmVmcmVzaGVyIiwicHJvZHVjZXJzIiwiTWFwIiwiZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0IiwiYXVkaW9EZXZpY2VzIiwic2V0QXVkaW9EZXZpY2VzIiwic2VsZWN0ZWRBdWRpb0RldmljZSIsInNldFNlbGVjdGVkQXVkaW9EZXZpY2UiLCJjb25zdW1lcnMiLCJzb3VuZExldmVsIiwic2V0U291bmRMZXZlbCIsImV2ZW50SGFuZGxlciIsInZpZGVvUmVmIiwidXNlUmVmIiwidmlkZW9TdHJlYW0iLCJhdWRpb1JlZiIsInRyYWNrcyIsIlRyYWNrcyIsInNvdW5kTGV2ZWxDb3VudGVyIiwibWV0ZXJzIiwidW5tb3VudGVkUmVmIiwic2hvd1ZpZGVvIiwiY29uc3VtZXJUcmFuc3BvcnQiLCJkZXZpY2UiLCJwYXJ0aWNpcGFudHMiLCJudW1iZXJPZkluVmlld1BhcnRpY2lwYW50cyIsImFuY2hvckVsIiwic2V0QW5jaG9yRWwiLCJvcGVuTW9yZUFjdGlvbnMiLCJCb29sZWFuIiwiZG93bmxvYWRVcmwiLCJzZXREb3dubG9hZFVybCIsImhhbmRsZXIiLCJpZCIsImRhdGEiLCJ1c2VySWQiLCJvbiIsImV2ZW50VHlwZSIsImJlIiwiVkNFdmVudFR5cGUiLCJBVURJT19WSVNVQUxfU0VUVElOR1NfQ0hBTkdFRCIsIm9uQVZTZXR0aW5nc0NoYW5nZSIsInBheWxvYWQiLCJSQUlTRV9IQU5EIiwib25SYWlzZUhhbmQiLCJMT1dFUl9IQU5EIiwib25Mb3dlckhhbmQiLCJORVdfUFJPRFVDRVJTIiwib25OZXdQcm9kdWNlcnMiLCJDT05TVU1FUl9DTE9TRUQiLCJjb25zdW1lcklkIiwicmVtb3ZlQ29uc3VtZXIiLCJraW5kIiwiQVVESU9fTEVWRUwiLCJsZXZlbCIsImhhbmRsZUNsaWNrRGV2aWNlc0ljb24iLCJldmVudCIsImN1cnJlbnRUYXJnZXQiLCJjaGFuZ2VBdWRpb0RldmljZSIsInVzZUVmZmVjdCIsImFwaSIsImN1cnJlbnQiLCJzcmNPYmplY3QiLCJzb3VuZE1vbml0b3IiLCJpblZpZXciLCJoYW5kbGVDbG9zZURldmljZU1lbnUiLCJpc0N1cnJlbnRVc2VyIiwic3RvcFByb2R1Y2luZyIsInByb2R1Y2UiLCJVdGlscyIsImlzTnVsbCIsImF2YXRhcklkIiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiZ2V0Q29udGV4dFJvb3QiLCJzZXNzaW9uU3RvcmFnZSIsImdldEl0ZW0iLCJvbkF1ZGlvRGV2aWNlQ2hhbmdlIiwiY3JlYXRlUHJvZHVjZXJUcmFuc3BvcnQiLCJjb25zb2xlIiwibG9nIiwic3BsaWNlIiwibGVuZ3RoIiwia2V5IiwidmFsdWUiLCJmaW5kIiwicCIsInByb2R1Y2VySWQiLCJjb25zdW1lIiwibWVkaWFTb3VwSGVscGVyIiwiaW5pdFByb2R1Y2VyVHJhbnNwb3J0IiwibWVldGluZ0lkIiwiZ2V0VXNlckRldGFpbHMiLCJ1c2VybmFtZSIsImhhbmRsZURldmljZXNDaGFuZ2VkIiwiZGV2aWNlcyIsImF1ZGlvRGV2aWNlTGlzdCIsImZvckVhY2giLCJwdXNoIiwiZGV2aWNlSWQiLCJsYWJlbCIsInZjRXZlbnRNYW5hZ2VyIiwicmVtb3ZlU3Vic2NyaXB0aW9ucyIsImFkZFN1YnNjcmlwdGlvbnMiLCJuYXZpZ2F0b3IiLCJtZWRpYURldmljZXMiLCJvbmRldmljZWNoYW5nZSIsImVudW1lcmF0ZURldmljZXMiLCJ0aGVuIiwiY29uc3VtZUZhaWxlZFByb2R1Y2VycyIsInN0b3AiLCJjbGVhciIsInN0YXJ0TWV0ZXIiLCJzdHJlYW0iLCJzdG9wTWV0ZXIiLCJzdGFydEF1ZGlvTGV2ZWxNZXRlciIsImZpcmVFdmVudCIsImRlbGV0ZSIsInR5cGUiLCJlcnJvciIsImNhblByb2R1Y2UiLCJtZWRpYUNvbnN0cmFpbnRzIiwiZ2V0VXNlck1lZGlhIiwidHJhY2siLCJnZXRBdWRpb1RyYWNrcyIsImdldFZpZGVvVHJhY2tzIiwicGFyYW1zIiwiaXNIb3N0IiwibWVkaWFSZWNvcmRlciIsImFkZFRyYWNrIiwic2V0QXVkaW9UcmFjayIsImVuY29kaW5ncyIsImNvZGVjT3B0aW9ucyIsInNldFZpZGVvVHJhY2siLCJwcm9kdWNlciIsImdldFN0YXRzIiwiZ2V0VHJhY2tzIiwic2V0VGltZW91dCIsImNhbGxiYWNrIiwiY2xvc2UiLCJzdG9wVmlkZW9UcmFjayIsInN0b3BBdWRpb1RyYWNrIiwic29ja2V0TWFuYWdlciIsImVtaXRFdmVudCIsIlBST0RVQ0VSX0NMT1NFRCIsInJvb21JZCIsImNhdGNoIiwibG9hZGluZyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzY3JlZW5TaGFyaW5nIiwiYXVkaW9FbGVtZW50IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInJlbW92ZVRyYWNrIiwiZWxlbWVudEJ5SWQiLCJyZW1vdmVDaGlsZCIsInJldHJ5Q29uc3VtZSIsInJldHJpZXMiLCJnZXRDb25zdW1lU3RyZWFtIiwicnRwQ2FwYWJpbGl0aWVzIiwiX3JlZiIsImNvbnN1bWVyIiwiY3JlYXRlRWxlbWVudCIsInBsYXlzaW5saW5lIiwiYXV0b3BsYXkiLCJhcHBlbmRDaGlsZCIsInRyYWNrRW5kZWRQYXJ0aWNpcGFudCIsIkVycm9yIiwiZ2V0UGFydGljaXBhbnROYW1lIiwibmFtZSIsImNvbmNhdCIsIkZyYWdtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJwYWRkaW5nIiwicG9zaXRpb24iLCJib3JkZXJSYWRpdXMiLCJvdmVyZmxvdyIsImJveFNpemluZyIsImJhY2tncm91bmRDb2xvciIsImJvcmRlciIsImdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yIiwiYm94U2hhZG93IiwidHJhbnNpdGlvbiIsIm1hcmdpbkJvdHRvbSIsInNpemluZyIsImNvbG9yIiwiZm9udFNpemUiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kSW1hZ2UiLCJnZXRJbml0aWFscyIsImF1dG9QbGF5IiwicmVmIiwibXV0ZWQiLCJvYmplY3RGaXQiLCJ0cmFuc2Zvcm0iLCJ6SW5kZXgiLCJkaXNwbGF5IiwibGVmdCIsImJvdHRvbSIsImFsaWduSXRlbXMiLCJnYXAiLCJtYXhXaWR0aCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Iiwid2hpdGVTcGFjZSIsInRleHRPdmVyZmxvdyIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsImp1c3RpZnlDb250ZW50Iiwib25DbGljayIsIm9uSG9zdEF1ZGlvTXV0ZSIsIm9uSG9zdFZpZGVvTXV0ZSIsInRpdGxlIiwiUGFuVG9vbCIsIk1lbnUiLCJvcGVuIiwib25DbG9zZSIsIlBhcGVyUHJvcHMiLCJlbGV2YXRpb24iLCJzeCIsImZpbHRlciIsIm10IiwibWwiLCJtciIsImNvbnRlbnQiLCJ0b3AiLCJyaWdodCIsImJnY29sb3IiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJhbmNob3JPcmlnaW4iLCJtYXAiLCJpbmRleCIsIk1lbnVJdGVtIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbWVkaWEvVkNSb29tUGFydGljaXBhbnQuanN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xuaW1wb3J0IFJlYWN0LCB7dXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgJy4vVkNSb29tUGFydGljaXBhbnQuY3NzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5pbXBvcnQge1ZDRXZlbnRUeXBlfSBmcm9tICcuL1ZDRXZlbnRUeXBlJztcbmltcG9ydCB2Y0V2ZW50TWFuYWdlciBmcm9tICcuL1ZDRXZlbnRNYW5hZ2VyJztcbmltcG9ydCBtZWRpYVJlY29yZGVyIGZyb20gJy4vVkNSb29tUmVjb3JkZXInO1xuaW1wb3J0IG1lZGlhU291cEhlbHBlciBmcm9tICcuL01lZGlhU291cEhlbHBlcic7XG5pbXBvcnQgVHJhY2tzIGZyb20gJy4vVHJhY2tzJztcbmltcG9ydCBJY29uQnV0dG9uIGZyb20gJ0BtdWkvbWF0ZXJpYWwvSWNvbkJ1dHRvbic7XG5pbXBvcnQgSWNvbiBmcm9tICcuLi9JY29uJztcbmltcG9ydCB7UGFuVG9vbH0gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbCc7XG5pbXBvcnQgVG9vbHRpcCBmcm9tICdAbXVpL21hdGVyaWFsL1Rvb2x0aXAnO1xuaW1wb3J0IHtNZW51LCBNZW51SXRlbX0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgc29ja2V0TWFuYWdlciBmcm9tICcuLi9Tb2NrZXRNYW5hZ2VyJztcbmltcG9ydCBCdXR0b24gZnJvbSAnQG11aS9tYXRlcmlhbC9CdXR0b24nO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IHtzdGFydEF1ZGlvTGV2ZWxNZXRlcn0gZnJvbSAnLi9hdWRpb0xldmVsTWV0ZXInO1xuXG5jb25zdCBTUEVBS0lOR19MRVZFTCA9IDY7XG5cbmV4cG9ydCBjb25zdCBWSURFT19DT0RFQ19PUFRJT05TID0ge1xuICAgIHZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlOiAxMDAwXG59O1xuXG5leHBvcnQgY29uc3QgVklERU9fQ09OU1RSQUlOVFMgPSB7XG4gICAgYXVkaW86IGZhbHNlLFxuICAgIHZpZGVvOiB7XG4gICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgICBtaW46IDY0MCxcbiAgICAgICAgICAgIGlkZWFsOiAxOTIwXG4gICAgICAgIH0sXG4gICAgICAgIGhlaWdodDoge1xuICAgICAgICAgICAgbWluOiA0MDAsXG4gICAgICAgICAgICBpZGVhbDogMTA4MFxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IFZJREVPX0VOQ09ESU5HUyA9IFtcbiAgICB7XG4gICAgICAgIHJpZDogJ3IwJyxcbiAgICAgICAgbWF4Qml0cmF0ZTogMjAwMDAsXG4gICAgICAgIC8vc2NhbGVSZXNvbHV0aW9uRG93bkJ5OiAxMC4wLFxuICAgICAgICBzY2FsYWJpbGl0eU1vZGU6ICdTMVQzJ1xuICAgIH0sXG4gICAge1xuICAgICAgICByaWQ6ICdyMScsXG4gICAgICAgIG1heEJpdHJhdGU6IDE1MDAwMCxcbiAgICAgICAgc2NhbGFiaWxpdHlNb2RlOiAnUzFUMydcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcmlkOiAncjInLFxuICAgICAgICBtYXhCaXRyYXRlOiA0NTAwMDAsXG4gICAgICAgIHNjYWxhYmlsaXR5TW9kZTogJ1MxVDMnXG4gICAgfVxuXTtcblxuY29uc3QgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuY29uc3QgVkNSb29tUGFydGljaXBhbnQgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCBbaGFuZFJhaXNlZCwgc2V0SGFuZFJhaXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3ZpZGVvTXV0ZWQsIHNldFZpZGVvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMudmlkZW9NdXRlZCk7XG4gICAgY29uc3QgW2F1ZGlvTXV0ZWQsIHNldEF1ZGlvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMuYXVkaW9NdXRlZCk7XG4gICAgY29uc3QgW3Byb2R1Y2VyVHJhbnNwb3J0LCBzZXRQcm9kdWNlclRyYW5zcG9ydF0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5wcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgY29uc3QgW3ZpZGVvUmVmcmVzaGVyLCBzZXRWaWRlb1JlZnJlc2hlcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3Byb2R1Y2Vyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnRdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFthdWRpb0RldmljZXMsIHNldEF1ZGlvRGV2aWNlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3NlbGVjdGVkQXVkaW9EZXZpY2UsIHNldFNlbGVjdGVkQXVkaW9EZXZpY2VdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2NvbnN1bWVyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtzb3VuZExldmVsLCBzZXRTb3VuZExldmVsXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtldmVudEhhbmRsZXJdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IHZpZGVvUmVmID0gdXNlUmVmKCk7XG4gICAgY29uc3QgdmlkZW9TdHJlYW0gPSB1c2VSZWYoKTtcbiAgICBjb25zdCBhdWRpb1JlZiA9IHVzZVJlZigpO1xuICAgIGNvbnN0IHRyYWNrcyA9IHVzZVJlZihuZXcgVHJhY2tzKCkpO1xuICAgIGNvbnN0IHNvdW5kTGV2ZWxDb3VudGVyID0gdXNlUmVmKDApO1xuICAgIC8vIEFjdGl2ZS1zcGVha2VyIG1ldGVyczogdGhpcyAoc2VsZikgdGlsZSBpcyB0aGUgYXVkaW8gaHViIOKAlCBpdCBjb25zdW1lc1xuICAgIC8vIGV2ZXJ5IHBhcnRpY2lwYW50J3MgYXVkaW8gKyBwcm9kdWNlcyB0aGUgbG9jYWwgbWljIOKAlCBzbyBpdCBydW5zIHRoZSBsZXZlbFxuICAgIC8vIG1ldGVycyBhbmQgYnJvYWRjYXN0cyB7dXNlcklkLCBsZXZlbH0gZm9yIGVhY2ggdGlsZSB0byBoaWdobGlnaHQgaXRzZWxmLlxuICAgIGNvbnN0IG1ldGVycyA9IHVzZVJlZihuZXcgTWFwKCkpO1xuICAgIC8vIFNldCBvbiB1bm1vdW50IHNvIHRoZSByZWN1cnNpdmUgY29uc3VtZS9yZXRyeSBzZXRUaW1lb3V0IGxvb3BzIHN0b3BcbiAgICAvLyByZS1zY2hlZHVsaW5nIChvdGhlcndpc2UgdGhleSBwb2xsL3JldHJ5IGZvcmV2ZXIgYWZ0ZXIgdGhlIHRpbGUgaXMgZ29uZSkuXG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzaG93VmlkZW8gPSB0cnVlO1xuICAgIGNvbnN0IHtcbiAgICAgICAgY29uc3VtZXJUcmFuc3BvcnQsXG4gICAgICAgIGRldmljZSxcbiAgICAgICAgcGFydGljaXBhbnRzXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHtudW1iZXJPZkluVmlld1BhcnRpY2lwYW50c30gPSBwcm9wcztcbiAgICBjb25zdCBbYW5jaG9yRWwsIHNldEFuY2hvckVsXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IG9wZW5Nb3JlQWN0aW9ucyA9IEJvb2xlYW4oYW5jaG9yRWwpO1xuXG4gICAgY29uc3QgW2Rvd25sb2FkVXJsLCBzZXREb3dubG9hZFVybF0gPSB1c2VTdGF0ZShudWxsKTtcblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXQgaWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtZWV0aW5nLXBhcnRpY2lwYW50LScgKyBwcm9wcy5kYXRhLnVzZXJJZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjogKGV2ZW50VHlwZSwgYmUpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkFVRElPX1ZJU1VBTF9TRVRUSU5HU19DSEFOR0VEOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25BVlNldHRpbmdzQ2hhbmdlKGJlLnBheWxvYWQgPyBiZS5wYXlsb2FkIDogYmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuUkFJU0VfSEFORDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUmFpc2VIYW5kKGJlLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuTE9XRVJfSEFORDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTG93ZXJIYW5kKGJlLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuTkVXX1BST0RVQ0VSUzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTmV3UHJvZHVjZXJzKGJlLnBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuQ09OU1VNRVJfQ0xPU0VEOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVycy5oYXMoYmUucGF5bG9hZC5jb25zdW1lcklkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGJlLnBheWxvYWQuY29uc3VtZXJJZCwgYmUucGF5bG9hZC5raW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkFVRElPX0xFVkVMOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJlLnBheWxvYWQgJiYgYmUucGF5bG9hZC51c2VySWQgPT09IHByb3BzLmRhdGEudXNlcklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U291bmRMZXZlbChiZS5wYXlsb2FkLmxldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlQ2xpY2tEZXZpY2VzSWNvbiA9IChldmVudCkgPT4ge1xuICAgICAgICBzZXRBbmNob3JFbChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hhbmdlQXVkaW9EZXZpY2UgPSAoZGV2aWNlKSA9PiB7XG4gICAgICAgIHNldFNlbGVjdGVkQXVkaW9EZXZpY2UoZGV2aWNlKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25SYWlzZUhhbmQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgIHNldEhhbmRSYWlzZWQodHJ1ZSk7XG4gICAgICAgICAgICBwcm9wcy5kYXRhLmhhbmRSYWlzZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTG93ZXJIYW5kID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC51c2VySWQgPT09IHByb3BzLmRhdGEudXNlcklkKSB7XG4gICAgICAgICAgICBzZXRIYW5kUmFpc2VkKGZhbHNlKTtcbiAgICAgICAgICAgIHByb3BzLmRhdGEuaGFuZFJhaXNlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGV2ZW50SGFuZGxlci5hcGkgPSBoYW5kbGVyKCk7XG4gICAgfSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAodmlkZW9SZWYuY3VycmVudCAmJiB2aWRlb1N0cmVhbS5jdXJyZW50KSB7XG4gICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHZpZGVvU3RyZWFtLmN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICB9LCBbdmlkZW9SZWYuY3VycmVudF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLnNvdW5kTW9uaXRvciAmJiAhcHJvcHMuaW5WaWV3KSB7XG4gICAgICAgICAgICBpZiAoc291bmRMZXZlbCA+IDMpIHtcbiAgICAgICAgICAgICAgICBzb3VuZExldmVsQ291bnRlci5jdXJyZW50ID0gMTA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNvdW5kTGV2ZWxDb3VudGVyLmN1cnJlbnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgc291bmRMZXZlbENvdW50ZXIuY3VycmVudC0tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9wcy5zb3VuZE1vbml0b3IocHJvcHMuZGF0YS51c2VySWQsIHNvdW5kTGV2ZWxDb3VudGVyLmN1cnJlbnQgPT09IDAgfHwgYXVkaW9NdXRlZCk7XG4gICAgICAgIH1cbiAgICB9LCBbc291bmRMZXZlbF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGF1ZGlvTXV0ZWQpIHtcbiAgICAgICAgICAgIHNldFNvdW5kTGV2ZWwoMCk7XG4gICAgICAgICAgICBpZiAocHJvcHMuc291bmRNb25pdG9yICYmICFwcm9wcy5pblZpZXcpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5zb3VuZE1vbml0b3IocHJvcHMuZGF0YS51c2VySWQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW2F1ZGlvTXV0ZWRdKTtcblxuICAgIGNvbnN0IGhhbmRsZUNsb3NlRGV2aWNlTWVudSA9ICgpID0+IHtcbiAgICAgICAgc2V0QW5jaG9yRWwobnVsbCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQVZTZXR0aW5nc0NoYW5nZSA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5kYXRhLnVzZXJJZCA9PT0gcGF5bG9hZC51c2VySWQpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCdhdWRpbycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC52aWRlb011dGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ3ZpZGVvJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRldmljZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZSgndmlkZW8nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0QXVkaW9NdXRlZChwYXlsb2FkLmF1ZGlvTXV0ZWQpO1xuICAgICAgICAgICAgc2V0VmlkZW9NdXRlZChwYXlsb2FkLnZpZGVvTXV0ZWQpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLmRhdGEgJiYgIVV0aWxzLmlzTnVsbChwcm9wcy5kYXRhLmF2YXRhcklkKVxuICAgICAgICAgICAgJiYgcHJvcHMuZGF0YS5hdmF0YXJJZCAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvcHMuZGF0YS5hdmF0YXJJZCAhPT0gJ251bGwnKSB7XG4gICAgICAgICAgICBzZXREb3dubG9hZFVybChsb2NhdGlvbiArIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgJy9kb2NzL2FwaS92MS9tYW5hZ2VyL2Rvd25sb2FkLycgKyBwcm9wcy5kYXRhLmF2YXRhcklkICtcbiAgICAgICAgICAgICAgICAnP2FjY2Vzc190b2tlbj0nICsgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWNjZXNzVG9rZW4nKSArICcmaWRUb2tlbj0nICsgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaWRUb2tlbicpKTtcbiAgICAgICAgfVxuICAgIH0sIFtwcm9wcy5kYXRhXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRBdWRpb011dGVkKHByb3BzLmF1ZGlvTXV0ZWQpO1xuICAgIH0sIFtwcm9wcy5hdWRpb011dGVkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRWaWRlb011dGVkKHByb3BzLnZpZGVvTXV0ZWQpO1xuICAgIH0sIFtwcm9wcy52aWRlb011dGVkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocHJvZHVjZXJUcmFuc3BvcnQpIHtcbiAgICAgICAgICAgIC8vIEEgKHJlKWFzc2lnbmVkIHRyYW5zcG9ydCBtZWFucyBleGlzdGluZyBwcm9kdWNlcnMgbGl2ZWQgb24gdGhlIG9sZFxuICAgICAgICAgICAgLy8gKG5vdy1jbG9zZWQpIHRyYW5zcG9ydC4gVGVhciB0aGVtIGRvd24gcHJvcGVybHkg4oCUIGNsb3NlICsgc3RvcCB0aGVcbiAgICAgICAgICAgIC8vIGxvY2FsIHRyYWNrcyArIG5vdGlmeSB0aGUgc2VydmVyIOKAlCBzbyBwcm9kdWNlKCkgcmVjcmVhdGVzIHRoZW0gb24gdGhlXG4gICAgICAgICAgICAvLyBuZXcgdHJhbnNwb3J0IGluc3RlYWQgb2YgZWFybHktcmV0dXJuaW5nLiBOby1vcCBvbiBmaXJzdCBtb3VudC5cbiAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ3ZpZGVvJyk7XG4gICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCdhdWRpbycpO1xuXG4gICAgICAgICAgICBpZiAoIXByb3BzLnZpZGVvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICBwcm9kdWNlKCd2aWRlbycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFwcm9wcy5hdWRpb011dGVkKSB7XG4gICAgICAgICAgICAgICAgcHJvZHVjZSgnYXVkaW8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtwcm9kdWNlclRyYW5zcG9ydF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0UHJvZHVjZXJUcmFuc3BvcnQocHJvcHMucHJvZHVjZXJUcmFuc3BvcnQpO1xuICAgIH0sIFtwcm9wcy5wcm9kdWNlclRyYW5zcG9ydF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgIHByb3BzLm9uQXVkaW9EZXZpY2VDaGFuZ2Uoc2VsZWN0ZWRBdWRpb0RldmljZSk7XG4gICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCdhdWRpbycsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRBdWRpb0RldmljZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2R1Y2VyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVQcm9kdWNlclRyYW5zcG9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFhdWRpb011dGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlKCdhdWRpbycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbc2VsZWN0ZWRBdWRpb0RldmljZV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGNvbnN1bWVyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVFJBTlNJIEFSUklWRUQgV0lUSCBQUk9EVUNFUlMgOiAnLCBwcm9wcy5kYXRhLnByb2R1Y2Vycyk7XG4gICAgICAgICAgICBpZiAocHJvcHMuZGF0YS5wcm9kdWNlcnMpIHtcbiAgICAgICAgICAgICAgICBvbk5ld1Byb2R1Y2Vycyhwcm9wcy5kYXRhLnByb2R1Y2VycywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9uTmV3UHJvZHVjZXJzKGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydCwgdHJ1ZSk7XG4gICAgICAgICAgICBmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQuc3BsaWNlKDAsIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5sZW5ndGgpO1xuXG4gICAgICAgICAgICBpZiAocHJvZHVjZXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JFLUlOU1RBVElORyBDT05TVU1FUlMnKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgcHJvZHVjZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQUk9DRVNTSU5HIFBST0RVQ0VSIE9GIFRZUEUgOiAnICsga2V5ICsgJyA6ICcgKyB2YWx1ZS5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHByb3BzLmRhdGEucHJvZHVjZXJzICYmIHRoaXMucHJvcHMuZGF0YS5wcm9kdWNlcnMuZmluZCgocCkgPT4gcC5wcm9kdWNlcklkID09PSB2YWx1ZS5pZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKHZhbHVlLmlkLCBrZXksIHRydWUsIHZhbHVlLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUFJPRFVDRVIgQUxSRUFEWSBQUk9DRVNTRUQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtjb25zdW1lclRyYW5zcG9ydF0pO1xuXG4gICAgY29uc3QgY3JlYXRlUHJvZHVjZXJUcmFuc3BvcnQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIHNldFByb2R1Y2VyVHJhbnNwb3J0KGF3YWl0IG1lZGlhU291cEhlbHBlci5pbml0UHJvZHVjZXJUcmFuc3BvcnQocHJvcHMuZGV2aWNlLCBwcm9wcy5tZWV0aW5nSWQsXG4gICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVEZXZpY2VzQ2hhbmdlZCA9IChkZXZpY2VzKSA9PiB7XG4gICAgICAgIGxldCBhdWRpb0RldmljZUxpc3QgPSBbXTtcbiAgICAgICAgZGV2aWNlcy5mb3JFYWNoKChkZXZpY2UpID0+IHtcbiAgICAgICAgICAgIGlmICgnYXVkaW9pbnB1dCcgPT09IGRldmljZS5raW5kKSB7XG4gICAgICAgICAgICAgICAgYXVkaW9EZXZpY2VMaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBpZDogZGV2aWNlLmRldmljZUlkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZGV2aWNlLmxhYmVsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNldEF1ZGlvRGV2aWNlcyhhdWRpb0RldmljZUxpc3QpO1xuXG4gICAgICAgIGlmIChhdWRpb0RldmljZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRBdWRpb0RldmljZShhdWRpb0RldmljZUxpc3RbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRBdWRpb0RldmljZShudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2Y0V2ZW50TWFuYWdlci5yZW1vdmVTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHZjRXZlbnRNYW5hZ2VyLmFkZFN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyLCBWQ0V2ZW50VHlwZS5BVURJT19WSVNVQUxfU0VUVElOR1NfQ0hBTkdFRCxcbiAgICAgICAgICAgIFZDRXZlbnRUeXBlLlJBSVNFX0hBTkQsIFZDRXZlbnRUeXBlLkxPV0VSX0hBTkQsIFZDRXZlbnRUeXBlLk5FV19QUk9EVUNFUlMsIFZDRXZlbnRUeXBlLkNPTlNVTUVSX0NMT1NFRCxcbiAgICAgICAgICAgIFZDRXZlbnRUeXBlLkFVRElPX0xFVkVMKTtcblxuICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5vbmRldmljZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoZGV2aWNlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURldmljZXNDaGFuZ2VkKGRldmljZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKClcbiAgICAgICAgICAgICAgICAudGhlbigoZGV2aWNlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRGV2aWNlc0NoYW5nZWQoZGV2aWNlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgIGNvbnN1bWVGYWlsZWRQcm9kdWNlcnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnPT09PT09PT09PT09PT09PT09PT09PURFU1RST1lJTkcgUEFSVElDSVBBTlQ9PT09PT09PT09PT09PT09PT09PT09PT09IDogJyArIHByb3BzLmRhdGEudXNlcklkKTtcbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBnbG9iYWwgZGV2aWNlY2hhbmdlIGhhbmRsZXIgdGhpcyBjb21wb25lbnQgaW5zdGFsbGVkIOKAlFxuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdCBzdXJ2aXZlcyB1bm1vdW50IGFuZCBmaXJlcyBpbnRvIHN0YWxlIGNvbXBvbmVudCBzdGF0ZS5cbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLm9uZGV2aWNlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCdhdWRpbycpO1xuICAgICAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ3ZpZGVvJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBjb25zdW1lcnMpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVDb25zdW1lcihrZXksICd2aWRlbycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTdG9wIGV2ZXJ5IGF1ZGlvLWxldmVsIG1ldGVyIChzZWxmIG1pYyArIGFsbCBjb25zdW1lZCBzdHJlYW1zKS5cbiAgICAgICAgICAgIG1ldGVycy5jdXJyZW50LmZvckVhY2goKHN0b3ApID0+IHN0b3AoKSk7XG4gICAgICAgICAgICBtZXRlcnMuY3VycmVudC5jbGVhcigpO1xuXG4gICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5yZW1vdmVTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgLy8gTWV0ZXIgYSBzdHJlYW0gYW5kIGJyb2FkY2FzdCBpdHMgbGV2ZWwgdW5kZXIgYHVzZXJJZGAuIEtleWVkIHNvIHdlIGNhblxuICAgIC8vIHN0b3AvcmVwbGFjZSBpdCB3aGVuIHRoZSBjb25zdW1lciBjbG9zZXMgb3IgdGhlIHByb2R1Y2VyIHJlc3RhcnRzLlxuICAgIGNvbnN0IHN0YXJ0TWV0ZXIgPSAoa2V5LCBzdHJlYW0sIHVzZXJJZCkgPT4ge1xuICAgICAgICBzdG9wTWV0ZXIoa2V5KTtcbiAgICAgICAgY29uc3Qgc3RvcCA9IHN0YXJ0QXVkaW9MZXZlbE1ldGVyKHN0cmVhbSwgKGxldmVsKSA9PiB7XG4gICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5maXJlRXZlbnQoVkNFdmVudFR5cGUuQVVESU9fTEVWRUwsIHtwYXlsb2FkOiB7dXNlcklkLCBsZXZlbH19KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1ldGVycy5jdXJyZW50LnNldChrZXksIHN0b3ApO1xuICAgIH07XG5cbiAgICBjb25zdCBzdG9wTWV0ZXIgPSAoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3AgPSBtZXRlcnMuY3VycmVudC5nZXQoa2V5KTtcbiAgICAgICAgaWYgKHN0b3ApIHtcbiAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgIG1ldGVycy5jdXJyZW50LmRlbGV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHByb2R1Y2UgPSBhc3luYyAodHlwZSkgPT4ge1xuICAgICAgICBpZiAoIWRldmljZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTm8gYXZhaWxhYmxlIGRldmljZScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkZXZpY2UuY2FuUHJvZHVjZSgndmlkZW8nKSAmJiB0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgcHJvZHVjZSB2aWRlbycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzZWxlY3RlZEF1ZGlvRGV2aWNlICYmIHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGF1ZGlvIGRldmljZSBzZWxlY3RlZCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2R1Y2Vycy5oYXModHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQcm9kdWNlciBhbHJlYWR5IGV4aXN0cyBmb3IgdGhpcyB0eXBlICcgKyB0eXBlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtZWRpYUNvbnN0cmFpbnRzO1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgICAgICAgICBtZWRpYUNvbnN0cmFpbnRzID0ge1xuICAgICAgICAgICAgICAgICAgICBkZXZpY2VJZDogc2VsZWN0ZWRBdWRpb0RldmljZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgYXVkaW86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvOiBmYWxzZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgICAgICAgICBtZWRpYUNvbnN0cmFpbnRzID0gVklERU9fQ09OU1RSQUlOVFM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYShtZWRpYUNvbnN0cmFpbnRzKTtcbiAgICAgICAgY29uc3QgdHJhY2sgPSB0eXBlID09PSAnYXVkaW8nID8gc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0gOiBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgdHJhY2tcbiAgICAgICAgfTtcblxuICAgICAgICBhdWRpb1JlZi5jdXJyZW50ID0gc3RyZWFtO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgLy8gTWV0ZXIgdGhlIGxvY2FsIG1pYyBzbyB0aGUgc2VsZiB0aWxlIGhpZ2hsaWdodHMgd2hlbiB5b3Ugc3BlYWsuXG4gICAgICAgICAgICBzdGFydE1ldGVyKCdzZWxmLWF1ZGlvJywgc3RyZWFtLCBwcm9wcy5kYXRhLnVzZXJJZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmlzSG9zdCAmJiB0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICBtZWRpYVJlY29yZGVyLmFkZFRyYWNrKHByb3BzLmRhdGEudXNlcklkLCB0cmFjayk7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zZXRBdWRpb1RyYWNrKHRyYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICBwYXJhbXMuZW5jb2RpbmdzID0gVklERU9fRU5DT0RJTkdTO1xuICAgICAgICAgICAgcGFyYW1zLmNvZGVjT3B0aW9ucyA9IFZJREVPX0NPREVDX09QVElPTlM7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zZXRWaWRlb1RyYWNrKHRyYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcm9kdWNlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb2R1Y2VyID0gYXdhaXQgcHJvZHVjZXJUcmFuc3BvcnQucHJvZHVjZShwYXJhbXMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9kdWNlcikge1xuICAgICAgICAgICAgcHJvZHVjZXJUcmFuc3BvcnQuZ2V0U3RhdHMoKVxuICAgICAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiBjb25zb2xlLmxvZyhkYXRhKSk7XG4gICAgICAgICAgICBwcm9kdWNlcnMuc2V0KHR5cGUsIHByb2R1Y2VyKTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50ID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgIHNldFZpZGVvUmVmcmVzaGVyKCF2aWRlb1JlZnJlc2hlcik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coc3RyZWFtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvZHVjZXIub24oJ3RyYW5zcG9ydGNsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5zcmNPYmplY3QuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcHJvZHVjZXJzLmRlbGV0ZSh0eXBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBwcm9kdWNlci5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBwcm9kdWNlcnMuZGVsZXRlKHR5cGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY29uc3VtZUZhaWxlZFByb2R1Y2VycyA9ICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodW5tb3VudGVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChjb25zdW1lclRyYW5zcG9ydCkge1xuICAgICAgICAgICAgICAgIG9uTmV3UHJvZHVjZXJzKGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LnNwbGljZSgwLCBmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBjb25zdW1lRmFpbGVkUHJvZHVjZXJzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMDApO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3BQcm9kdWNpbmcgPSAodHlwZSwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKCFwcm9kdWNlcnMuaGFzKHR5cGUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVGhlcmUgaXMgbm8gcHJvZHVjZXIgZm9yIHRoaXMgdHlwZSAnICsgdHlwZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvZHVjZXJJZCA9IHByb2R1Y2Vycy5nZXQodHlwZSkuaWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDbG9zZSBwcm9kdWNlcicsIHByb2R1Y2VySWQpO1xuXG4gICAgICAgIHByb2R1Y2Vycy5nZXQodHlwZSlcbiAgICAgICAgICAgIC5jbG9zZSgpO1xuICAgICAgICBwcm9kdWNlcnMuZGVsZXRlKHR5cGUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc3RvcFZpZGVvVHJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zdG9wQXVkaW9UcmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ0NMT1NJTkcgUFJPRFVDRVIgT0YgSUQgOiAnICsgcHJvZHVjZXJJZCk7XG4gICAgICAgIHNvY2tldE1hbmFnZXIuZW1pdEV2ZW50KFZDRXZlbnRUeXBlLlBST0RVQ0VSX0NMT1NFRCwge1xuICAgICAgICAgICAgdXNlcklkOiBwcm9wcy5kYXRhLnVzZXJJZCxcbiAgICAgICAgICAgIHByb2R1Y2VySWQsXG4gICAgICAgICAgICByb29tSWQ6IHByb3BzLm1lZXRpbmdJZFxuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGNvbnNvbGUubG9nKCdQUk9EVUNFUl9DTE9TRUQgRVJST1IgOiAnLCBlKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTmV3UHJvZHVjZXJzID0gKHByb2R1Y2VycywgbG9hZGluZyA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPT09PT09IFBST0RVQ0VSUyBSRUNFSVZFRCA6IFsgXCIgKyBKU09OLnN0cmluZ2lmeShwcm9kdWNlcnMpICsgXCIgXSA9PT09PT09XCIpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb2R1Y2VyIG9mIHByb2R1Y2Vycykge1xuICAgICAgICAgICAgaWYgKGNvbnN1bWVyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLmtpbmQgPT09ICd2aWRlbycgJiYgIXByb2R1Y2VyLnNjcmVlblNoYXJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDQUxMSU5HIENPTlNVTUUgRlJPTSBPTiBORVcgUFJPRFVDRVJTIEZPUiA6ICcgKyBwcm9wcy5kYXRhLnVzZXJJZCArICcgLSAnICsgcHJvZHVjZXIucHJvZHVjZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKHByb2R1Y2VyLnByb2R1Y2VySWQsIHByb2R1Y2VyLmtpbmQsIGxvYWRpbmcsIHByb2R1Y2VyLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlciB8fCBsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzbWFsbCBwYXJ0aWNpcGFudCBib3ggYXQgdGhlIGJvdHRvbSBiZWxvbmdpbmcgdG8gdGhlIGN1cnJlbnQgdXNlciBtdXN0IGNvbnN1bWUgYWxsIGF1ZGlvXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBkaXN0dXJiIHRoZSBhdWRpbyBkdWUgdG8gYW55IHJlbmRlcmluZyBzdWNoIGFzIEJyaW5nIHRvIHZpZXdcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLmtpbmQgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUocHJvZHVjZXIucHJvZHVjZXJJZCwgcHJvZHVjZXIua2luZCwgbG9hZGluZywgcHJvZHVjZXIudXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LnB1c2gocHJvZHVjZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPT09PT09IFBST0RVQ0VSUyBUSEFUIENPVUxEIE5PVCBCRSBDT05TVU1FUyA6IFsgXCIgKyBKU09OLnN0cmluZ2lmeShmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQpICsgXCIgXSA9PT09PT09XCIpO1xuICAgIH07XG5cbiAgICBjb25zdCByZW1vdmVDb25zdW1lciA9IChjb25zdW1lcklkLCBraW5kLCB1c2VySWQpID0+IHtcbiAgICAgICAgLy8gU3RvcCBhbnkgYWN0aXZlLXNwZWFrZXIgbWV0ZXIgYXR0YWNoZWQgdG8gdGhpcyBjb25zdW1lcidzIHN0cmVhbS5cbiAgICAgICAgc3RvcE1ldGVyKGNvbnN1bWVySWQpO1xuICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgaWYgKHZpZGVvU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodmlkZW9TdHJlYW0uY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50LmdldFRyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgbGV0IGF1ZGlvRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnN1bWVySWQpO1xuICAgICAgICAgICAgaWYgKGF1ZGlvRWxlbWVudCAmJiBhdWRpb0VsZW1lbnQuc3JjT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodXNlcklkICYmIG1lZGlhUmVjb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5yZW1vdmVUcmFjayh1c2VySWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudEJ5SWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5kYXRhLnVzZXJJZCArICctYXVkaW8tZWwtY29udGFpbmVyJyk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRCeUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRCeUlkLnJlbW92ZUNoaWxkKGF1ZGlvRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3VtZXJzLmRlbGV0ZShjb25zdW1lcklkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgZSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZykge1xuICAgICAgICBjb25zb2xlLmxvZygnRkFJTEVEIFRPIENPTlNVTUUgJyArIGtpbmQgKyAnIEZST00gJyArIHVzZXJJZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuXG4gICAgICAgIGlmIChyZXRyaWVzIDwgMTApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSRS1UUllJTkcgWycgKyByZXRyaWVzICsgJ10nKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh1bm1vdW50ZWRSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN1bWUocHJvZHVjZXJJZCwga2luZCwgbG9hZGluZywgdXNlcklkLCByZXRyaWVzKTtcbiAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0NPTVBMRVRFTFkgRkFJTEVEIFRPIENPTlNVTUUgJyArIGtpbmQgKyAnIEZST00gJyArIHVzZXJJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb25zdW1lID0gYXN5bmMgKHByb2R1Y2VySWQsIGtpbmQsIGxvYWRpbmcsIHVzZXJJZCwgcmV0cmllcyA9IDApID0+IHtcbiAgICAgICAgbWVkaWFTb3VwSGVscGVyLmdldENvbnN1bWVTdHJlYW0ocHJvZHVjZXJJZCwgZGV2aWNlLnJ0cENhcGFiaWxpdGllcywgY29uc3VtZXJUcmFuc3BvcnQsIHByb3BzLm1lZXRpbmdJZCxcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lLCBraW5kKVxuICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLFxuICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAga2luZFxuICAgICAgICAgICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25zdW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJzLnNldChjb25zdW1lci5pZCwgY29uc3VtZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PUNPTlNVTUU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IDogJyArIGtpbmQgKyAnIEZPUiA6ICcgKyB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9SZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50ID0gc3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlkZW9NdXRlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlkZW9SZWZyZXNoZXIoIXZpZGVvUmVmcmVzaGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja3MuY3VycmVudC5zZXRWaWRlb1RyYWNrKHN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIgfHwgbG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXVkaW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LmlkID0gY29uc3VtZXIuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5wbGF5c2lubGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0VsZW1lbnQuYXV0b3BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVldGluZy1hdWRpby1lbC1jb250YWluZXInKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZENoaWxkKGF1ZGlvRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWV0ZXIgdGhpcyBwYXJ0aWNpcGFudCdzIGF1ZGlvIGZvciBhY3RpdmUtc3BlYWtlciBoaWdobGlnaHQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TWV0ZXIoY29uc3VtZXIuaWQsIHN0cmVhbSwgdXNlcklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMuaXNIb3N0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVJlY29yZGVyLmFkZFRyYWNrKHVzZXJJZCwgc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lci5vbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhY2tlbmRlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhraW5kICsgXCIgQ09OU1VNRVIgVFJBQ0sgRU5ERUQgRk9SIFwiICsgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoY29uc3VtZXIuaWQsIGtpbmQsIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEd1YXJkOiB0aGUgcGFydGljaXBhbnQgbWF5IGhhdmUgbGVmdCwgc28gZmluZCgpIGNhbiBiZSB1bmRlZmluZWQg4oCUXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlYWRpbmcgLnZpZGVvTXV0ZWQvLmF1ZGlvTXV0ZWQgb24gaXQgdGhyZXcuIE5vIHBhcnRpY2lwYW50IOKGkiBubyByZXRyeS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhY2tFbmRlZFBhcnRpY2lwYW50ID0gcGFydGljaXBhbnRzLmZpbmQoKHApID0+IHAudXNlcklkID09PSB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhY2tFbmRlZFBhcnRpY2lwYW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKGtpbmQgPT09ICd2aWRlbycgJiYgIXRyYWNrRW5kZWRQYXJ0aWNpcGFudC52aWRlb011dGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChraW5kID09PSAnYXVkaW8nICYmICF0cmFja0VuZGVkUGFydGljaXBhbnQuYXVkaW9NdXRlZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvbnN1bWUoa2luZCwgdXNlcklkLCBuZXcgRXJyb3IoJ3RyYWNrZW5kZWQgd2hpbGUgJyArIGtpbmQgKyAnIGlzIE5PVCBtdXRlZCcpLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc3BvcnRjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhraW5kICsgXCIgQ09OU1VNRVIgQ0xPU0VEIEZPUiBcIiArIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGNvbnN1bWVyLmlkLCBraW5kLCB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICByZXRyeUNvbnN1bWUoa2luZCwgdXNlcklkLCBlLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldFBhcnRpY2lwYW50TmFtZSA9ICgpID0+IHtcbiAgICAgICAgbGV0IG5hbWUgPSBwcm9wcy5kYXRhLm5hbWU7XG5cbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChwcm9wcy5kYXRhLnVzZXJJZCkpIHtcbiAgICAgICAgICAgIG5hbWUgPSBgJHtuYW1lfSAoR3Vlc3QpYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHsnY29sLSotKiAnICsgKHByb3BzLmlzQ3VycmVudFVzZXIgPyAnbWVldGluZy1wYXJ0aWNpcGFudC1jb250YWluZXItY3VycmVudC11c2VyJyA6ICdtZWV0aW5nLXBhcnRpY2lwYW50LWNvbnRhaW5lcicpfWB9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBwcm9wcy5wYWRkaW5nID8gcHJvcHMucGFkZGluZyA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHByb3BzLmhlaWdodCA/IHByb3BzLmhlaWdodCA6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHByb3BzLmlzQ3VycmVudFVzZXIgPyAnIzFmMjkzNycgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBwcm9wcy5pc0N1cnJlbnRVc2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnMnB4IHNvbGlkICcgKyAoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yKCkgfHwgJyMxYTNjNWUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjdGl2ZS1zcGVha2VyIGhpZ2hsaWdodDogYW4gaW5zZXQgcmluZyAodGhlIHRpbGUgY2xpcHNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJmbG93LCBzbyBhbiBvdXRzZXQgc2hhZG93IHdvdWxkIGJlIGN1dCBvZmYpLlxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAoIWF1ZGlvTXV0ZWQgJiYgc291bmRMZXZlbCA+IFNQRUFLSU5HX0xFVkVMKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2luc2V0IDAgMCAwIDNweCAnICsgKGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpIHx8ICcjMjJjNTVlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdib3gtc2hhZG93IDEyMG1zIGVhc2Utb3V0J1xuICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2aWRlb011dGVkIHx8ICF2aWRlb1JlZi5jdXJyZW50IHx8ICF2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjZW50ZXJlZC1mbGV4LWJveCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzhweCcgOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb3BzLnNpemluZyA9PT0gJ3NtJyA/ICdhdmF0YXItd3JhcHBlci1zbScgOiAnYXZhdGFyLXdyYXBwZXInfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogKHByb3BzLnNpemluZyA9PT0gJ3NtJyA/IDcyIDogMTEyKSArICdweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAocHJvcHMuc2l6aW5nID09PSAnc20nID8gNzIgOiAxMTIpICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICFhdWRpb011dGVkICYmIHNvdW5kTGV2ZWwgPiAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzAgMCAwICcgKyAoMyArIHNvdW5kTGV2ZWwgLyAxMikgKyAncHggJyArIChhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IoKSB8fCAnIzAwNDc2YScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdib3gtc2hhZG93IDkwbXMgbGluZWFyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjM2E0NjU0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5zaXppbmcgPT09ICdtZCcgPyAnYXZhdGFyIGF2YXRhci1tZCcgOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnYXZhdGFyIGF2YXRhci1zbScgOiAnYXZhdGFyJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnMjBweCcgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkVXJsID8gPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFJlcGVhdDogJ25vLXJlcGVhdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFNpemU6ICdjb3ZlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHtkb3dubG9hZFVybH0pYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+IDogVXRpbHMuZ2V0SW5pdGlhbHMocHJvcHMuZGF0YS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3Byb3BzLmRhdGEudXNlcklkICsgJy12aWRlbyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17NjQwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXszMjB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUGxheSByZWY9e3ZpZGVvUmVmfSBtdXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHByb3BzLmlzQ3VycmVudFVzZXIgPyAnc2NhbGVYKC0xKScgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogKHZpZGVvTXV0ZWQgfHwgIXZpZGVvUmVmLmN1cnJlbnQgfHwgIXZpZGVvUmVmLmN1cnJlbnQuc3JjT2JqZWN0KSA/ICdub25lJyA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypXZSBuZWVkIHRoaXMgZWxlbWVudCB0byBjYXB0dXJlIHJlY29yZGluZyBzb3VuZCovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXVkaW9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtwcm9wcy5kYXRhLnVzZXJJZCArICctYXVkaW8nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgcmVmPXthdWRpb1JlZn0gbXV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ25vbmUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cHJvcHMuc2l6aW5nID09PSAnc20nID8gJ25hbWUtbGFiZWwtc20nIDogJ25hbWUtbGFiZWwnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICc2cHgnIDogJzhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnZmxleC1lbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXA6ICc0cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6ICc3MCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzFweCA4cHgnIDogJzJweCAxMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzExcHgnIDogJzEzcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogMS40LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICdhdXRvJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshcHJvcHMuaXNDdXJyZW50VXNlciAmJiBnZXRQYXJ0aWNpcGFudE5hbWUoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy5pc0N1cnJlbnRVc2VyICYmICdZb3UnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXByb3BzLmlzQ3VycmVudFVzZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5MZWZ0OiAnNHB4JywgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsIGdhcDogJzRweCd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJiAhYXVkaW9NdXRlZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLm9uSG9zdEF1ZGlvTXV0ZShwcm9wcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydNSUMnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGF1ZGlvTXV0ZWQgPyAnaW5saW5lLWZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydNSUNfT0ZGJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJiAhdmlkZW9NdXRlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbkhvc3RWaWRlb011dGUocHJvcHMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydDQU1FUkEnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7ZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT1cIk15IGRldmljZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrRGV2aWNlc0ljb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPXtvcGVuTW9yZUFjdGlvbnMgPyAnZGV2aWNlLW1lbnUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17b3Blbk1vcmVBY3Rpb25zID8gJ3RydWUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydTRVRUSU5HUyd9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e21hcmdpbkxlZnQ6ICc0cHgnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtoYW5kUmFpc2VkICYmIDxQYW5Ub29sIGZvbnRTaXplPXsnc21hbGwnfSBzdHlsZT17e2NvbG9yOiAnI2UyYjAzMCd9fS8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9eydtZWV0aW5nLWF1ZGlvLWVsLWNvbnRhaW5lcid9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgICAgICBhbmNob3JFbD17YW5jaG9yRWx9XG4gICAgICAgICAgICAgICAgaWQ9XCJkZXZpY2VzLW1lbnVcIlxuICAgICAgICAgICAgICAgIG9wZW49e29wZW5Nb3JlQWN0aW9uc31cbiAgICAgICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZURldmljZU1lbnV9XG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xvc2VEZXZpY2VNZW51fVxuICAgICAgICAgICAgICAgIFBhcGVyUHJvcHM9e3tcbiAgICAgICAgICAgICAgICAgICAgZWxldmF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICBzeDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogJ2Ryb3Atc2hhZG93KDBweCAycHggOHB4IHJnYmEoMCwwLDAsMC4zMikpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG10OiAxLjUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnJiAuTXVpTGlzdC1yb290Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTFlMWUxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJyYgLk11aUF2YXRhci1yb290Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1sOiAtMC41LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1yOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcmOmJlZm9yZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpIHJvdGF0ZSg0NWRlZyknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3tcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogMjAsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsOiAxMzZcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGFuY2hvck9yaWdpbj17e1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogJ3RvcCdcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9EZXZpY2VzLm1hcCgoZGV2aWNlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxNZW51SXRlbSBvbkNsaWNrPXsoKSA9PiBjaGFuZ2VBdWRpb0RldmljZShkZXZpY2UpfSBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e2NvbG9yOiBzZWxlY3RlZEF1ZGlvRGV2aWNlICYmIHNlbGVjdGVkQXVkaW9EZXZpY2UuaWQgPT09IGRldmljZS5pZCA/ICcjMTk4NzU0JyA6IG51bGx9fT5cbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UubGFiZWxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9NZW51SXRlbT47XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9NZW51PlxuICAgICAgICA8Lz5cbiAgICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVkNSb29tUGFydGljaXBhbnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksZUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssZUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sZ0JBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLFdBQUEsR0FBQU4sc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFTLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFVLGNBQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLFFB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
|
|
823
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX1ZDRXZlbnRUeXBlIiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX1ZDUm9vbVJlY29yZGVyIiwiX01lZGlhU291cEhlbHBlciIsIl9UcmFja3MiLCJfSWNvbkJ1dHRvbiIsIl9JY29uIiwiX2ljb25zTWF0ZXJpYWwiLCJfVG9vbHRpcCIsIl9tYXRlcmlhbCIsIl9Tb2NrZXRNYW5hZ2VyIiwiX0J1dHRvbiIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfYXVkaW9MZXZlbE1ldGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidCIsIldlYWtNYXAiLCJyIiwibiIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiU1BFQUtJTkdfTEVWRUwiLCJWSURFT19DT0RFQ19PUFRJT05TIiwiZXhwb3J0cyIsInZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlIiwiVklERU9fQ09OU1RSQUlOVFMiLCJhdWRpbyIsInZpZGVvIiwid2lkdGgiLCJtaW4iLCJpZGVhbCIsImhlaWdodCIsIlZJREVPX0VOQ09ESU5HUyIsInJpZCIsIm1heEJpdHJhdGUiLCJzY2FsYWJpbGl0eU1vZGUiLCJsb2NhdGlvbiIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJWQ1Jvb21QYXJ0aWNpcGFudCIsInByb3BzIiwiaGFuZFJhaXNlZCIsInNldEhhbmRSYWlzZWQiLCJSZWFjdCIsInVzZVN0YXRlIiwidmlkZW9NdXRlZCIsInNldFZpZGVvTXV0ZWQiLCJhdWRpb011dGVkIiwic2V0QXVkaW9NdXRlZCIsInByb2R1Y2VyVHJhbnNwb3J0Iiwic2V0UHJvZHVjZXJUcmFuc3BvcnQiLCJ2aWRlb1JlZnJlc2hlciIsInNldFZpZGVvUmVmcmVzaGVyIiwicHJvZHVjZXJzIiwiTWFwIiwiZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0IiwiYXVkaW9EZXZpY2VzIiwic2V0QXVkaW9EZXZpY2VzIiwic2VsZWN0ZWRBdWRpb0RldmljZSIsInNldFNlbGVjdGVkQXVkaW9EZXZpY2UiLCJjb25zdW1lcnMiLCJzb3VuZExldmVsIiwic2V0U291bmRMZXZlbCIsImV2ZW50SGFuZGxlciIsInZpZGVvUmVmIiwidXNlUmVmIiwidmlkZW9TdHJlYW0iLCJhdWRpb1JlZiIsInRyYWNrcyIsIlRyYWNrcyIsInNvdW5kTGV2ZWxDb3VudGVyIiwibWV0ZXJzIiwidW5tb3VudGVkUmVmIiwic2hvd1ZpZGVvIiwiZGV2aWNlIiwicGFydGljaXBhbnRzIiwibnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHMiLCJhbmNob3JFbCIsInNldEFuY2hvckVsIiwib3Blbk1vcmVBY3Rpb25zIiwiQm9vbGVhbiIsImRvd25sb2FkVXJsIiwic2V0RG93bmxvYWRVcmwiLCJoYW5kbGVyIiwiaWQiLCJkYXRhIiwidXNlcklkIiwib24iLCJldmVudFR5cGUiLCJiZSIsIlZDRXZlbnRUeXBlIiwiQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQiLCJvbkFWU2V0dGluZ3NDaGFuZ2UiLCJwYXlsb2FkIiwiUkFJU0VfSEFORCIsIm9uUmFpc2VIYW5kIiwiTE9XRVJfSEFORCIsIm9uTG93ZXJIYW5kIiwiTkVXX1BST0RVQ0VSUyIsIm9uTmV3UHJvZHVjZXJzIiwiQ09OU1VNRVJfQ0xPU0VEIiwiY29uc3VtZXJJZCIsInJlbW92ZUNvbnN1bWVyIiwia2luZCIsIkFVRElPX0xFVkVMIiwibGV2ZWwiLCJoYW5kbGVDbGlja0RldmljZXNJY29uIiwiZXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwiY2hhbmdlQXVkaW9EZXZpY2UiLCJ1c2VFZmZlY3QiLCJhcGkiLCJjdXJyZW50Iiwic3JjT2JqZWN0Iiwic291bmRNb25pdG9yIiwiaW5WaWV3IiwiaGFuZGxlQ2xvc2VEZXZpY2VNZW51IiwiaXNDdXJyZW50VXNlciIsInN0b3BQcm9kdWNpbmciLCJwcm9kdWNlIiwiVXRpbHMiLCJpc051bGwiLCJhdmF0YXJJZCIsImFwcGxpY2F0aW9uTWFuYWdlciIsImdldENvbnRleHRSb290Iiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwib25BdWRpb0RldmljZUNoYW5nZSIsImNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0IiwiY29uc29sZSIsImxvZyIsInNwbGljZSIsImxlbmd0aCIsIm1lZGlhU291cEhlbHBlciIsImluaXRQcm9kdWNlclRyYW5zcG9ydCIsIm1lZXRpbmdJZCIsImdldFVzZXJEZXRhaWxzIiwidXNlcm5hbWUiLCJoYW5kbGVEZXZpY2VzQ2hhbmdlZCIsImRldmljZXMiLCJhdWRpb0RldmljZUxpc3QiLCJmb3JFYWNoIiwicHVzaCIsImRldmljZUlkIiwibGFiZWwiLCJ2Y0V2ZW50TWFuYWdlciIsInJlbW92ZVN1YnNjcmlwdGlvbnMiLCJhZGRTdWJzY3JpcHRpb25zIiwibmF2aWdhdG9yIiwibWVkaWFEZXZpY2VzIiwib25kZXZpY2VjaGFuZ2UiLCJlbnVtZXJhdGVEZXZpY2VzIiwidGhlbiIsImNvbnN1bWVGYWlsZWRQcm9kdWNlcnMiLCJrZXkiLCJ2YWx1ZSIsInN0b3AiLCJjbGVhciIsInN0YXJ0TWV0ZXIiLCJzdHJlYW0iLCJzdG9wTWV0ZXIiLCJzdGFydEF1ZGlvTGV2ZWxNZXRlciIsImZpcmVFdmVudCIsImRlbGV0ZSIsInR5cGUiLCJlcnJvciIsImNhblByb2R1Y2UiLCJtZWRpYUNvbnN0cmFpbnRzIiwiZ2V0VXNlck1lZGlhIiwidHJhY2siLCJnZXRBdWRpb1RyYWNrcyIsImdldFZpZGVvVHJhY2tzIiwicGFyYW1zIiwiaXNIb3N0IiwibWVkaWFSZWNvcmRlciIsImFkZFRyYWNrIiwic2V0QXVkaW9UcmFjayIsImVuY29kaW5ncyIsImNvZGVjT3B0aW9ucyIsInNldFZpZGVvVHJhY2siLCJwcm9kdWNlciIsImdldFN0YXRzIiwiZ2V0VHJhY2tzIiwic2V0VGltZW91dCIsImNhbGxiYWNrIiwicHJvZHVjZXJJZCIsImNsb3NlIiwic3RvcFZpZGVvVHJhY2siLCJzdG9wQXVkaW9UcmFjayIsInNvY2tldE1hbmFnZXIiLCJlbWl0RXZlbnQiLCJQUk9EVUNFUl9DTE9TRUQiLCJyb29tSWQiLCJjYXRjaCIsImxvYWRpbmciLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJKU09OIiwic3RyaW5naWZ5Iiwic2NyZWVuU2hhcmluZyIsImNvbnN1bWUiLCJhdWRpb0VsZW1lbnQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwicmVtb3ZlVHJhY2siLCJlbGVtZW50QnlJZCIsInJlbW92ZUNoaWxkIiwicmV0cnlDb25zdW1lIiwicmV0cmllcyIsInRyYW5zcG9ydCIsImdldFJlY3ZUcmFuc3BvcnQiLCJFcnJvciIsImdldENvbnN1bWVTdHJlYW0iLCJydHBDYXBhYmlsaXRpZXMiLCJfcmVmIiwiY29uc3VtZXIiLCJjcmVhdGVFbGVtZW50IiwicGxheXNpbmxpbmUiLCJhdXRvcGxheSIsImFwcGVuZENoaWxkIiwidHJhY2tFbmRlZFBhcnRpY2lwYW50IiwiZmluZCIsInAiLCJnZXRQYXJ0aWNpcGFudE5hbWUiLCJuYW1lIiwiY29uY2F0IiwiRnJhZ21lbnQiLCJjbGFzc05hbWUiLCJzdHlsZSIsInBhZGRpbmciLCJwb3NpdGlvbiIsImJvcmRlclJhZGl1cyIsIm92ZXJmbG93IiwiYm94U2l6aW5nIiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyIiwiZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IiLCJib3hTaGFkb3ciLCJ0cmFuc2l0aW9uIiwibWFyZ2luQm90dG9tIiwic2l6aW5nIiwiY29sb3IiLCJmb250U2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRQb3NpdGlvbiIsImJhY2tncm91bmRJbWFnZSIsImdldEluaXRpYWxzIiwiYXV0b1BsYXkiLCJyZWYiLCJtdXRlZCIsIm9iamVjdEZpdCIsInRyYW5zZm9ybSIsInpJbmRleCIsImRpc3BsYXkiLCJsZWZ0IiwiYm90dG9tIiwiYWxpZ25JdGVtcyIsImdhcCIsIm1heFdpZHRoIiwiZm9udFdlaWdodCIsImxpbmVIZWlnaHQiLCJ3aGl0ZVNwYWNlIiwidGV4dE92ZXJmbG93IiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwianVzdGlmeUNvbnRlbnQiLCJvbkNsaWNrIiwib25Ib3N0QXVkaW9NdXRlIiwib25Ib3N0VmlkZW9NdXRlIiwidGl0bGUiLCJQYW5Ub29sIiwiTWVudSIsIm9wZW4iLCJvbkNsb3NlIiwiUGFwZXJQcm9wcyIsImVsZXZhdGlvbiIsInN4IiwiZmlsdGVyIiwibXQiLCJtbCIsIm1yIiwiY29udGVudCIsInRvcCIsInJpZ2h0IiwiYmdjb2xvciIsInRyYW5zZm9ybU9yaWdpbiIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsImFuY2hvck9yaWdpbiIsIm1hcCIsImluZGV4IiwiTWVudUl0ZW0iLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tZWRpYS9WQ1Jvb21QYXJ0aWNpcGFudC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzICovXG5pbXBvcnQgUmVhY3QsIHt1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCAnLi9WQ1Jvb21QYXJ0aWNpcGFudC5jc3MnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL1V0aWxzJztcbmltcG9ydCB7VkNFdmVudFR5cGV9IGZyb20gJy4vVkNFdmVudFR5cGUnO1xuaW1wb3J0IHZjRXZlbnRNYW5hZ2VyIGZyb20gJy4vVkNFdmVudE1hbmFnZXInO1xuaW1wb3J0IG1lZGlhUmVjb3JkZXIgZnJvbSAnLi9WQ1Jvb21SZWNvcmRlcic7XG5pbXBvcnQgbWVkaWFTb3VwSGVscGVyIGZyb20gJy4vTWVkaWFTb3VwSGVscGVyJztcbmltcG9ydCBUcmFja3MgZnJvbSAnLi9UcmFja3MnO1xuaW1wb3J0IEljb25CdXR0b24gZnJvbSAnQG11aS9tYXRlcmlhbC9JY29uQnV0dG9uJztcbmltcG9ydCBJY29uIGZyb20gJy4uL0ljb24nO1xuaW1wb3J0IHtQYW5Ub29sfSBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsJztcbmltcG9ydCBUb29sdGlwIGZyb20gJ0BtdWkvbWF0ZXJpYWwvVG9vbHRpcCc7XG5pbXBvcnQge01lbnUsIE1lbnVJdGVtfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCBzb2NrZXRNYW5hZ2VyIGZyb20gJy4uL1NvY2tldE1hbmFnZXInO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAbXVpL21hdGVyaWFsL0J1dHRvbic7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL0FwcGxpY2F0aW9uTWFuYWdlcic7XG5pbXBvcnQge3N0YXJ0QXVkaW9MZXZlbE1ldGVyfSBmcm9tICcuL2F1ZGlvTGV2ZWxNZXRlcic7XG5cbmNvbnN0IFNQRUFLSU5HX0xFVkVMID0gNjtcblxuZXhwb3J0IGNvbnN0IFZJREVPX0NPREVDX09QVElPTlMgPSB7XG4gICAgdmlkZW9Hb29nbGVTdGFydEJpdHJhdGU6IDEwMDBcbn07XG5cbmV4cG9ydCBjb25zdCBWSURFT19DT05TVFJBSU5UUyA9IHtcbiAgICBhdWRpbzogZmFsc2UsXG4gICAgdmlkZW86IHtcbiAgICAgICAgd2lkdGg6IHtcbiAgICAgICAgICAgIG1pbjogNjQwLFxuICAgICAgICAgICAgaWRlYWw6IDE5MjBcbiAgICAgICAgfSxcbiAgICAgICAgaGVpZ2h0OiB7XG4gICAgICAgICAgICBtaW46IDQwMCxcbiAgICAgICAgICAgIGlkZWFsOiAxMDgwXG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgVklERU9fRU5DT0RJTkdTID0gW1xuICAgIHtcbiAgICAgICAgcmlkOiAncjAnLFxuICAgICAgICBtYXhCaXRyYXRlOiAyMDAwMCxcbiAgICAgICAgLy9zY2FsZVJlc29sdXRpb25Eb3duQnk6IDEwLjAsXG4gICAgICAgIHNjYWxhYmlsaXR5TW9kZTogJ1MxVDMnXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHJpZDogJ3IxJyxcbiAgICAgICAgbWF4Qml0cmF0ZTogMTUwMDAwLFxuICAgICAgICBzY2FsYWJpbGl0eU1vZGU6ICdTMVQzJ1xuICAgIH0sXG4gICAge1xuICAgICAgICByaWQ6ICdyMicsXG4gICAgICAgIG1heEJpdHJhdGU6IDQ1MDAwMCxcbiAgICAgICAgc2NhbGFiaWxpdHlNb2RlOiAnUzFUMydcbiAgICB9XG5dO1xuXG5jb25zdCBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG5jb25zdCBWQ1Jvb21QYXJ0aWNpcGFudCA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IFtoYW5kUmFpc2VkLCBzZXRIYW5kUmFpc2VkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbdmlkZW9NdXRlZCwgc2V0VmlkZW9NdXRlZF0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy52aWRlb011dGVkKTtcbiAgICBjb25zdCBbYXVkaW9NdXRlZCwgc2V0QXVkaW9NdXRlZF0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5hdWRpb011dGVkKTtcbiAgICBjb25zdCBbcHJvZHVjZXJUcmFuc3BvcnQsIHNldFByb2R1Y2VyVHJhbnNwb3J0XSA9IFJlYWN0LnVzZVN0YXRlKHByb3BzLnByb2R1Y2VyVHJhbnNwb3J0KTtcbiAgICBjb25zdCBbdmlkZW9SZWZyZXNoZXIsIHNldFZpZGVvUmVmcmVzaGVyXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbcHJvZHVjZXJzXSA9IFJlYWN0LnVzZVN0YXRlKG5ldyBNYXAoKSk7XG4gICAgY29uc3QgW2ZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydF0gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2F1ZGlvRGV2aWNlcywgc2V0QXVkaW9EZXZpY2VzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbc2VsZWN0ZWRBdWRpb0RldmljZSwgc2V0U2VsZWN0ZWRBdWRpb0RldmljZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbY29uc3VtZXJzXSA9IFJlYWN0LnVzZVN0YXRlKG5ldyBNYXAoKSk7XG4gICAgY29uc3QgW3NvdW5kTGV2ZWwsIHNldFNvdW5kTGV2ZWxdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW2V2ZW50SGFuZGxlcl0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgdmlkZW9SZWYgPSB1c2VSZWYoKTtcbiAgICBjb25zdCB2aWRlb1N0cmVhbSA9IHVzZVJlZigpO1xuICAgIGNvbnN0IGF1ZGlvUmVmID0gdXNlUmVmKCk7XG4gICAgY29uc3QgdHJhY2tzID0gdXNlUmVmKG5ldyBUcmFja3MoKSk7XG4gICAgY29uc3Qgc291bmRMZXZlbENvdW50ZXIgPSB1c2VSZWYoMCk7XG4gICAgLy8gQWN0aXZlLXNwZWFrZXIgbWV0ZXJzOiB0aGlzIChzZWxmKSB0aWxlIGlzIHRoZSBhdWRpbyBodWIg4oCUIGl0IGNvbnN1bWVzXG4gICAgLy8gZXZlcnkgcGFydGljaXBhbnQncyBhdWRpbyArIHByb2R1Y2VzIHRoZSBsb2NhbCBtaWMg4oCUIHNvIGl0IHJ1bnMgdGhlIGxldmVsXG4gICAgLy8gbWV0ZXJzIGFuZCBicm9hZGNhc3RzIHt1c2VySWQsIGxldmVsfSBmb3IgZWFjaCB0aWxlIHRvIGhpZ2hsaWdodCBpdHNlbGYuXG4gICAgY29uc3QgbWV0ZXJzID0gdXNlUmVmKG5ldyBNYXAoKSk7XG4gICAgLy8gU2V0IG9uIHVubW91bnQgc28gdGhlIHJlY3Vyc2l2ZSBjb25zdW1lL3JldHJ5IHNldFRpbWVvdXQgbG9vcHMgc3RvcFxuICAgIC8vIHJlLXNjaGVkdWxpbmcgKG90aGVyd2lzZSB0aGV5IHBvbGwvcmV0cnkgZm9yZXZlciBhZnRlciB0aGUgdGlsZSBpcyBnb25lKS5cbiAgICBjb25zdCB1bm1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IHNob3dWaWRlbyA9IHRydWU7XG4gICAgY29uc3Qge1xuICAgICAgICBkZXZpY2UsXG4gICAgICAgIHBhcnRpY2lwYW50c1xuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCB7bnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHN9ID0gcHJvcHM7XG4gICAgY29uc3QgW2FuY2hvckVsLCBzZXRBbmNob3JFbF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBvcGVuTW9yZUFjdGlvbnMgPSBCb29sZWFuKGFuY2hvckVsKTtcblxuICAgIGNvbnN0IFtkb3dubG9hZFVybCwgc2V0RG93bmxvYWRVcmxdID0gdXNlU3RhdGUobnVsbCk7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbWVldGluZy1wYXJ0aWNpcGFudC0nICsgcHJvcHMuZGF0YS51c2VySWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IChldmVudFR5cGUsIGJlKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5BVURJT19WSVNVQUxfU0VUVElOR1NfQ0hBTkdFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQVZTZXR0aW5nc0NoYW5nZShiZS5wYXlsb2FkID8gYmUucGF5bG9hZCA6IGJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLlJBSVNFX0hBTkQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBvblJhaXNlSGFuZChiZS5wYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkxPV0VSX0hBTkQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkxvd2VySGFuZChiZS5wYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLk5FV19QUk9EVUNFUlM6XG4gICAgICAgICAgICAgICAgICAgICAgICBvbk5ld1Byb2R1Y2VycyhiZS5wYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkNPTlNVTUVSX0NMT1NFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdW1lcnMuaGFzKGJlLnBheWxvYWQuY29uc3VtZXJJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDb25zdW1lcihiZS5wYXlsb2FkLmNvbnN1bWVySWQsIGJlLnBheWxvYWQua2luZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5BVURJT19MRVZFTDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZS5wYXlsb2FkICYmIGJlLnBheWxvYWQudXNlcklkID09PSBwcm9wcy5kYXRhLnVzZXJJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNvdW5kTGV2ZWwoYmUucGF5bG9hZC5sZXZlbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZUNsaWNrRGV2aWNlc0ljb24gPSAoZXZlbnQpID0+IHtcbiAgICAgICAgc2V0QW5jaG9yRWwoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNoYW5nZUF1ZGlvRGV2aWNlID0gKGRldmljZSkgPT4ge1xuICAgICAgICBzZXRTZWxlY3RlZEF1ZGlvRGV2aWNlKGRldmljZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uUmFpc2VIYW5kID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC51c2VySWQgPT09IHByb3BzLmRhdGEudXNlcklkKSB7XG4gICAgICAgICAgICBzZXRIYW5kUmFpc2VkKHRydWUpO1xuICAgICAgICAgICAgcHJvcHMuZGF0YS5oYW5kUmFpc2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvbkxvd2VySGFuZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWQudXNlcklkID09PSBwcm9wcy5kYXRhLnVzZXJJZCkge1xuICAgICAgICAgICAgc2V0SGFuZFJhaXNlZChmYWxzZSk7XG4gICAgICAgICAgICBwcm9wcy5kYXRhLmhhbmRSYWlzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBldmVudEhhbmRsZXIuYXBpID0gaGFuZGxlcigpO1xuICAgIH0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHZpZGVvUmVmLmN1cnJlbnQgJiYgdmlkZW9TdHJlYW0uY3VycmVudCkge1xuICAgICAgICAgICAgdmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QgPSB2aWRlb1N0cmVhbS5jdXJyZW50O1xuICAgICAgICB9XG4gICAgfSwgW3ZpZGVvUmVmLmN1cnJlbnRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5zb3VuZE1vbml0b3IgJiYgIXByb3BzLmluVmlldykge1xuICAgICAgICAgICAgaWYgKHNvdW5kTGV2ZWwgPiAzKSB7XG4gICAgICAgICAgICAgICAgc291bmRMZXZlbENvdW50ZXIuY3VycmVudCA9IDEwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VuZExldmVsQ291bnRlci5jdXJyZW50ID4gMCkge1xuICAgICAgICAgICAgICAgIHNvdW5kTGV2ZWxDb3VudGVyLmN1cnJlbnQtLTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvcHMuc291bmRNb25pdG9yKHByb3BzLmRhdGEudXNlcklkLCBzb3VuZExldmVsQ291bnRlci5jdXJyZW50ID09PSAwIHx8IGF1ZGlvTXV0ZWQpO1xuICAgICAgICB9XG4gICAgfSwgW3NvdW5kTGV2ZWxdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChhdWRpb011dGVkKSB7XG4gICAgICAgICAgICBzZXRTb3VuZExldmVsKDApO1xuICAgICAgICAgICAgaWYgKHByb3BzLnNvdW5kTW9uaXRvciAmJiAhcHJvcHMuaW5WaWV3KSB7XG4gICAgICAgICAgICAgICAgcHJvcHMuc291bmRNb25pdG9yKHByb3BzLmRhdGEudXNlcklkLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFthdWRpb011dGVkXSk7XG5cbiAgICBjb25zdCBoYW5kbGVDbG9zZURldmljZU1lbnUgPSAoKSA9PiB7XG4gICAgICAgIHNldEFuY2hvckVsKG51bGwpO1xuICAgIH07XG5cbiAgICBjb25zdCBvbkFWU2V0dGluZ3NDaGFuZ2UgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuZGF0YS51c2VySWQgPT09IHBheWxvYWQudXNlcklkKSB7XG4gICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmF1ZGlvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlKCdhdWRpbycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQudmlkZW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCd2aWRlbycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ3ZpZGVvJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldEF1ZGlvTXV0ZWQocGF5bG9hZC5hdWRpb011dGVkKTtcbiAgICAgICAgICAgIHNldFZpZGVvTXV0ZWQocGF5bG9hZC52aWRlb011dGVkKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcblxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5kYXRhICYmICFVdGlscy5pc051bGwocHJvcHMuZGF0YS5hdmF0YXJJZClcbiAgICAgICAgICAgICYmIHByb3BzLmRhdGEuYXZhdGFySWQgIT09ICd1bmRlZmluZWQnICYmIHByb3BzLmRhdGEuYXZhdGFySWQgIT09ICdudWxsJykge1xuICAgICAgICAgICAgc2V0RG93bmxvYWRVcmwobG9jYXRpb24gKyBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0Q29udGV4dFJvb3QoKSArICcvZG9jcy9hcGkvdjEvbWFuYWdlci9kb3dubG9hZC8nICsgcHJvcHMuZGF0YS5hdmF0YXJJZCArXG4gICAgICAgICAgICAgICAgJz9hY2Nlc3NfdG9rZW49JyArIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FjY2Vzc1Rva2VuJykgKyAnJmlkVG9rZW49JyArIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lkVG9rZW4nKSk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMuZGF0YV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0QXVkaW9NdXRlZChwcm9wcy5hdWRpb011dGVkKTtcbiAgICB9LCBbcHJvcHMuYXVkaW9NdXRlZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0VmlkZW9NdXRlZChwcm9wcy52aWRlb011dGVkKTtcbiAgICB9LCBbcHJvcHMudmlkZW9NdXRlZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb2R1Y2VyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICAvLyBBIChyZSlhc3NpZ25lZCB0cmFuc3BvcnQgbWVhbnMgZXhpc3RpbmcgcHJvZHVjZXJzIGxpdmVkIG9uIHRoZSBvbGRcbiAgICAgICAgICAgIC8vIChub3ctY2xvc2VkKSB0cmFuc3BvcnQuIFRlYXIgdGhlbSBkb3duIHByb3Blcmx5IOKAlCBjbG9zZSArIHN0b3AgdGhlXG4gICAgICAgICAgICAvLyBsb2NhbCB0cmFja3MgKyBub3RpZnkgdGhlIHNlcnZlciDigJQgc28gcHJvZHVjZSgpIHJlY3JlYXRlcyB0aGVtIG9uIHRoZVxuICAgICAgICAgICAgLy8gbmV3IHRyYW5zcG9ydCBpbnN0ZWFkIG9mIGVhcmx5LXJldHVybmluZy4gTm8tb3Agb24gZmlyc3QgbW91bnQuXG4gICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCd2aWRlbycpO1xuICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nKTtcblxuICAgICAgICAgICAgaWYgKCFwcm9wcy52aWRlb011dGVkKSB7XG4gICAgICAgICAgICAgICAgcHJvZHVjZSgndmlkZW8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcHJvcHMuYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgIHByb2R1Y2UoJ2F1ZGlvJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbcHJvZHVjZXJUcmFuc3BvcnRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldFByb2R1Y2VyVHJhbnNwb3J0KHByb3BzLnByb2R1Y2VyVHJhbnNwb3J0KTtcbiAgICB9LCBbcHJvcHMucHJvZHVjZXJUcmFuc3BvcnRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBwcm9wcy5vbkF1ZGlvRGV2aWNlQ2hhbmdlKHNlbGVjdGVkQXVkaW9EZXZpY2UpO1xuICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkQXVkaW9EZXZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9kdWNlclRyYW5zcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlUHJvZHVjZXJUcmFuc3BvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZSgnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW3NlbGVjdGVkQXVkaW9EZXZpY2VdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIC8vIE9uY2UgdGhlIERldmljZSBpcyByZWFkeSwgY29uc3VtZSB0aGUgcHJvZHVjZXJzIHdlIGFscmVhZHkga25vdyBhYm91dFxuICAgICAgICAvLyBhbmQgcmVwbGF5IGFueSB0aGF0IGFycml2ZWQgYmVmb3JlIHdlIHdlcmUgcmVhZHkuIFJlY3YgdHJhbnNwb3J0c1xuICAgICAgICAvLyB0aGVtc2VsdmVzIGFyZSBjcmVhdGVkIGp1c3QtaW4tdGltZSBpbnNpZGUgY29uc3VtZSgpIChwZXIga2luZCksIHNvIHRoZVxuICAgICAgICAvLyB0cmlnZ2VyIGhlcmUgaXMgdGhlIERldmljZSwgbm90IGEgdHJhbnNwb3J0LlxuICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnREVWSUNFIFJFQURZIFdJVEggUFJPRFVDRVJTIDogJywgcHJvcHMuZGF0YS5wcm9kdWNlcnMpO1xuICAgICAgICAgICAgaWYgKHByb3BzLmRhdGEucHJvZHVjZXJzKSB7XG4gICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMocHJvcHMuZGF0YS5wcm9kdWNlcnMsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvbk5ld1Byb2R1Y2VycyhmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQsIHRydWUpO1xuICAgICAgICAgICAgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LnNwbGljZSgwLCBmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH0sIFtkZXZpY2VdKTtcblxuICAgIGNvbnN0IGNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBzZXRQcm9kdWNlclRyYW5zcG9ydChhd2FpdCBtZWRpYVNvdXBIZWxwZXIuaW5pdFByb2R1Y2VyVHJhbnNwb3J0KHByb3BzLmRldmljZSwgcHJvcHMubWVldGluZ0lkLFxuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlRGV2aWNlc0NoYW5nZWQgPSAoZGV2aWNlcykgPT4ge1xuICAgICAgICBsZXQgYXVkaW9EZXZpY2VMaXN0ID0gW107XG4gICAgICAgIGRldmljZXMuZm9yRWFjaCgoZGV2aWNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoJ2F1ZGlvaW5wdXQnID09PSBkZXZpY2Uua2luZCkge1xuICAgICAgICAgICAgICAgIGF1ZGlvRGV2aWNlTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGRldmljZS5kZXZpY2VJZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGRldmljZS5sYWJlbFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzZXRBdWRpb0RldmljZXMoYXVkaW9EZXZpY2VMaXN0KTtcblxuICAgICAgICBpZiAoYXVkaW9EZXZpY2VMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkQXVkaW9EZXZpY2UoYXVkaW9EZXZpY2VMaXN0WzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkQXVkaW9EZXZpY2UobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgdmNFdmVudE1hbmFnZXIucmVtb3ZlU3Vic2NyaXB0aW9ucyhldmVudEhhbmRsZXIpO1xuICAgICAgICB2Y0V2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlciwgVkNFdmVudFR5cGUuQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQsXG4gICAgICAgICAgICBWQ0V2ZW50VHlwZS5SQUlTRV9IQU5ELCBWQ0V2ZW50VHlwZS5MT1dFUl9IQU5ELCBWQ0V2ZW50VHlwZS5ORVdfUFJPRFVDRVJTLCBWQ0V2ZW50VHlwZS5DT05TVU1FUl9DTE9TRUQsXG4gICAgICAgICAgICBWQ0V2ZW50VHlwZS5BVURJT19MRVZFTCk7XG5cbiAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMub25kZXZpY2VjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGRldmljZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEZXZpY2VzQ2hhbmdlZChkZXZpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpXG4gICAgICAgICAgICAgICAgLnRoZW4oKGRldmljZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURldmljZXNDaGFuZ2VkKGRldmljZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBjb25zdW1lRmFpbGVkUHJvZHVjZXJzKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT1ERVNUUk9ZSU5HIFBBUlRJQ0lQQU5UPT09PT09PT09PT09PT09PT09PT09PT09PSA6ICcgKyBwcm9wcy5kYXRhLnVzZXJJZCk7XG4gICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgZ2xvYmFsIGRldmljZWNoYW5nZSBoYW5kbGVyIHRoaXMgY29tcG9uZW50IGluc3RhbGxlZCDigJRcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgaXQgc3Vydml2ZXMgdW5tb3VudCBhbmQgZmlyZXMgaW50byBzdGFsZSBjb21wb25lbnQgc3RhdGUuXG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5vbmRldmljZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCd2aWRlbycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgY29uc3VtZXJzKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoa2V5LCAndmlkZW8nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU3RvcCBldmVyeSBhdWRpby1sZXZlbCBtZXRlciAoc2VsZiBtaWMgKyBhbGwgY29uc3VtZWQgc3RyZWFtcykuXG4gICAgICAgICAgICBtZXRlcnMuY3VycmVudC5mb3JFYWNoKChzdG9wKSA9PiBzdG9wKCkpO1xuICAgICAgICAgICAgbWV0ZXJzLmN1cnJlbnQuY2xlYXIoKTtcblxuICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIucmVtb3ZlU3Vic2NyaXB0aW9ucyhldmVudEhhbmRsZXIpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIC8vIE1ldGVyIGEgc3RyZWFtIGFuZCBicm9hZGNhc3QgaXRzIGxldmVsIHVuZGVyIGB1c2VySWRgLiBLZXllZCBzbyB3ZSBjYW5cbiAgICAvLyBzdG9wL3JlcGxhY2UgaXQgd2hlbiB0aGUgY29uc3VtZXIgY2xvc2VzIG9yIHRoZSBwcm9kdWNlciByZXN0YXJ0cy5cbiAgICBjb25zdCBzdGFydE1ldGVyID0gKGtleSwgc3RyZWFtLCB1c2VySWQpID0+IHtcbiAgICAgICAgc3RvcE1ldGVyKGtleSk7XG4gICAgICAgIGNvbnN0IHN0b3AgPSBzdGFydEF1ZGlvTGV2ZWxNZXRlcihzdHJlYW0sIChsZXZlbCkgPT4ge1xuICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLkFVRElPX0xFVkVMLCB7cGF5bG9hZDoge3VzZXJJZCwgbGV2ZWx9fSk7XG4gICAgICAgIH0pO1xuICAgICAgICBtZXRlcnMuY3VycmVudC5zZXQoa2V5LCBzdG9wKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RvcE1ldGVyID0gKGtleSkgPT4ge1xuICAgICAgICBjb25zdCBzdG9wID0gbWV0ZXJzLmN1cnJlbnQuZ2V0KGtleSk7XG4gICAgICAgIGlmIChzdG9wKSB7XG4gICAgICAgICAgICBzdG9wKCk7XG4gICAgICAgICAgICBtZXRlcnMuY3VycmVudC5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBwcm9kdWNlID0gYXN5bmMgKHR5cGUpID0+IHtcbiAgICAgICAgaWYgKCFkZXZpY2UpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGF2YWlsYWJsZSBkZXZpY2UnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGV2aWNlLmNhblByb2R1Y2UoJ3ZpZGVvJykgJiYgdHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IHByb2R1Y2UgdmlkZW8nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2VsZWN0ZWRBdWRpb0RldmljZSAmJiB0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBhdWRpbyBkZXZpY2Ugc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9kdWNlcnMuaGFzKHR5cGUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUHJvZHVjZXIgYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgdHlwZSAnICsgdHlwZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWVkaWFDb25zdHJhaW50cztcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgICAgICAgICAgbWVkaWFDb25zdHJhaW50cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGV2aWNlSWQ6IHNlbGVjdGVkQXVkaW9EZXZpY2UuaWQsXG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB2aWRlbzogZmFsc2VcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgICAgICAgICAgbWVkaWFDb25zdHJhaW50cyA9IFZJREVPX0NPTlNUUkFJTlRTO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEobWVkaWFDb25zdHJhaW50cyk7XG4gICAgICAgIGNvbnN0IHRyYWNrID0gdHlwZSA9PT0gJ2F1ZGlvJyA/IHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdIDogc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF07XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIHRyYWNrXG4gICAgICAgIH07XG5cbiAgICAgICAgYXVkaW9SZWYuY3VycmVudCA9IHN0cmVhbTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIC8vIE1ldGVyIHRoZSBsb2NhbCBtaWMgc28gdGhlIHNlbGYgdGlsZSBoaWdobGlnaHRzIHdoZW4geW91IHNwZWFrLlxuICAgICAgICAgICAgc3RhcnRNZXRlcignc2VsZi1hdWRpbycsIHN0cmVhbSwgcHJvcHMuZGF0YS51c2VySWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5pc0hvc3QgJiYgdHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5hZGRUcmFjayhwcm9wcy5kYXRhLnVzZXJJZCwgdHJhY2spO1xuICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc2V0QXVkaW9UcmFjayh0cmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgcGFyYW1zLmVuY29kaW5ncyA9IFZJREVPX0VOQ09ESU5HUztcbiAgICAgICAgICAgIHBhcmFtcy5jb2RlY09wdGlvbnMgPSBWSURFT19DT0RFQ19PUFRJT05TO1xuICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc2V0VmlkZW9UcmFjayh0cmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvZHVjZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwcm9kdWNlciA9IGF3YWl0IHByb2R1Y2VyVHJhbnNwb3J0LnByb2R1Y2UocGFyYW1zKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvZHVjZXIpIHtcbiAgICAgICAgICAgIHByb2R1Y2VyVHJhbnNwb3J0LmdldFN0YXRzKClcbiAgICAgICAgICAgICAgICAudGhlbigoZGF0YSkgPT4gY29uc29sZS5sb2coZGF0YSkpO1xuICAgICAgICAgICAgcHJvZHVjZXJzLnNldCh0eXBlLCBwcm9kdWNlcik7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICAgICAgdmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgdmlkZW9TdHJlYW0uY3VycmVudCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICBzZXRWaWRlb1JlZnJlc2hlcighdmlkZW9SZWZyZXNoZXIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHN0cmVhbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb2R1Y2VyLm9uKCd0cmFuc3BvcnRjbG9zZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICBzdHJlYW0uc3JjT2JqZWN0LmdldFRyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHByb2R1Y2Vycy5kZWxldGUodHlwZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcHJvZHVjZXIub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5zcmNPYmplY3QuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcHJvZHVjZXJzLmRlbGV0ZSh0eXBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnN1bWVGYWlsZWRQcm9kdWNlcnMgPSAoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHVubW91bnRlZFJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMoZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICBmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQuc3BsaWNlKDAsIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGNvbnN1bWVGYWlsZWRQcm9kdWNlcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgNTAwMCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcFByb2R1Y2luZyA9ICh0eXBlLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBpZiAoIXByb2R1Y2Vycy5oYXModHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUaGVyZSBpcyBubyBwcm9kdWNlciBmb3IgdGhpcyB0eXBlICcgKyB0eXBlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcm9kdWNlcklkID0gcHJvZHVjZXJzLmdldCh0eXBlKS5pZDtcbiAgICAgICAgY29uc29sZS5sb2coJ0Nsb3NlIHByb2R1Y2VyJywgcHJvZHVjZXJJZCk7XG5cbiAgICAgICAgcHJvZHVjZXJzLmdldCh0eXBlKVxuICAgICAgICAgICAgLmNsb3NlKCk7XG4gICAgICAgIHByb2R1Y2Vycy5kZWxldGUodHlwZSk7XG4gICAgICAgIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zdG9wVmlkZW9UcmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIHRyYWNrcy5jdXJyZW50LnN0b3BBdWRpb1RyYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygnQ0xPU0lORyBQUk9EVUNFUiBPRiBJRCA6ICcgKyBwcm9kdWNlcklkKTtcbiAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuUFJPRFVDRVJfQ0xPU0VELCB7XG4gICAgICAgICAgICB1c2VySWQ6IHByb3BzLmRhdGEudXNlcklkLFxuICAgICAgICAgICAgcHJvZHVjZXJJZCxcbiAgICAgICAgICAgIHJvb21JZDogcHJvcHMubWVldGluZ0lkXG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gY29uc29sZS5sb2coJ1BST0RVQ0VSX0NMT1NFRCBFUlJPUiA6ICcsIGUpKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25OZXdQcm9kdWNlcnMgPSAocHJvZHVjZXJzLCBsb2FkaW5nID0gZmFsc2UpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCI9PT09PT0gUFJPRFVDRVJTIFJFQ0VJVkVEIDogWyBcIiArIEpTT04uc3RyaW5naWZ5KHByb2R1Y2VycykgKyBcIiBdID09PT09PT1cIik7XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgcHJvZHVjZXJzKSB7XG4gICAgICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLmtpbmQgPT09ICd2aWRlbycgJiYgIXByb2R1Y2VyLnNjcmVlblNoYXJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDQUxMSU5HIENPTlNVTUUgRlJPTSBPTiBORVcgUFJPRFVDRVJTIEZPUiA6ICcgKyBwcm9wcy5kYXRhLnVzZXJJZCArICcgLSAnICsgcHJvZHVjZXIucHJvZHVjZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKHByb2R1Y2VyLnByb2R1Y2VySWQsIHByb2R1Y2VyLmtpbmQsIGxvYWRpbmcsIHByb2R1Y2VyLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlciB8fCBsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzbWFsbCBwYXJ0aWNpcGFudCBib3ggYXQgdGhlIGJvdHRvbSBiZWxvbmdpbmcgdG8gdGhlIGN1cnJlbnQgdXNlciBtdXN0IGNvbnN1bWUgYWxsIGF1ZGlvXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBkaXN0dXJiIHRoZSBhdWRpbyBkdWUgdG8gYW55IHJlbmRlcmluZyBzdWNoIGFzIEJyaW5nIHRvIHZpZXdcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLmtpbmQgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUocHJvZHVjZXIucHJvZHVjZXJJZCwgcHJvZHVjZXIua2luZCwgbG9hZGluZywgcHJvZHVjZXIudXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LnB1c2gocHJvZHVjZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPT09PT09IFBST0RVQ0VSUyBUSEFUIENPVUxEIE5PVCBCRSBDT05TVU1FUyA6IFsgXCIgKyBKU09OLnN0cmluZ2lmeShmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQpICsgXCIgXSA9PT09PT09XCIpO1xuICAgIH07XG5cbiAgICBjb25zdCByZW1vdmVDb25zdW1lciA9IChjb25zdW1lcklkLCBraW5kLCB1c2VySWQpID0+IHtcbiAgICAgICAgLy8gU3RvcCBhbnkgYWN0aXZlLXNwZWFrZXIgbWV0ZXIgYXR0YWNoZWQgdG8gdGhpcyBjb25zdW1lcidzIHN0cmVhbS5cbiAgICAgICAgc3RvcE1ldGVyKGNvbnN1bWVySWQpO1xuICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgaWYgKHZpZGVvU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodmlkZW9TdHJlYW0uY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50LmdldFRyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgbGV0IGF1ZGlvRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnN1bWVySWQpO1xuICAgICAgICAgICAgaWYgKGF1ZGlvRWxlbWVudCAmJiBhdWRpb0VsZW1lbnQuc3JjT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodXNlcklkICYmIG1lZGlhUmVjb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5yZW1vdmVUcmFjayh1c2VySWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudEJ5SWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5kYXRhLnVzZXJJZCArICctYXVkaW8tZWwtY29udGFpbmVyJyk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRCeUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRCeUlkLnJlbW92ZUNoaWxkKGF1ZGlvRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3VtZXJzLmRlbGV0ZShjb25zdW1lcklkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgZSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZykge1xuICAgICAgICBjb25zb2xlLmxvZygnRkFJTEVEIFRPIENPTlNVTUUgJyArIGtpbmQgKyAnIEZST00gJyArIHVzZXJJZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuXG4gICAgICAgIGlmIChyZXRyaWVzIDwgMTApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSRS1UUllJTkcgWycgKyByZXRyaWVzICsgJ10nKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh1bm1vdW50ZWRSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN1bWUocHJvZHVjZXJJZCwga2luZCwgbG9hZGluZywgdXNlcklkLCByZXRyaWVzKTtcbiAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0NPTVBMRVRFTFkgRkFJTEVEIFRPIENPTlNVTUUgJyArIGtpbmQgKyAnIEZST00gJyArIHVzZXJJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb25zdW1lID0gYXN5bmMgKHByb2R1Y2VySWQsIGtpbmQsIGxvYWRpbmcsIHVzZXJJZCwgcmV0cmllcyA9IDApID0+IHtcbiAgICAgICAgLy8gR2V0IChhbmQgbGF6aWx5IGNyZWF0ZSkgdGhlIHJlY3YgdHJhbnNwb3J0IGZvciB0aGlzIGtpbmQuIGF1ZGlvIGFuZFxuICAgICAgICAvLyB2aWRlbyByaWRlIHNlcGFyYXRlIHRyYW5zcG9ydHMsIHNvIGEgY2xvc2VkIGNvbnN1bWVyJ3MgbS1zZWN0aW9uIGlzXG4gICAgICAgIC8vIG5ldmVyIHJlY3ljbGVkIGFjcm9zcyBraW5kcyDigJQgd2hpY2ggaXMgd2hhdCB0cmlnZ2VyZWQgdGhlIFJUUFxuICAgICAgICAvLyBleHRlbnNpb24taWQgY29sbGlzaW9uLlxuICAgICAgICBjb25zdCB0cmFuc3BvcnQgPSBhd2FpdCBwcm9wcy5nZXRSZWN2VHJhbnNwb3J0KGtpbmQpO1xuICAgICAgICBpZiAoIXRyYW5zcG9ydCkge1xuICAgICAgICAgICAgcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgbmV3IEVycm9yKCdyZWN2IHRyYW5zcG9ydCB1bmF2YWlsYWJsZSBmb3IgJyArIGtpbmQpLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBtZWRpYVNvdXBIZWxwZXIuZ2V0Q29uc3VtZVN0cmVhbShwcm9kdWNlcklkLCBkZXZpY2UucnRwQ2FwYWJpbGl0aWVzLCB0cmFuc3BvcnQsIHByb3BzLm1lZXRpbmdJZCxcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lLCBraW5kKVxuICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLFxuICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAga2luZFxuICAgICAgICAgICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25zdW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJzLnNldChjb25zdW1lci5pZCwgY29uc3VtZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PUNPTlNVTUU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IDogJyArIGtpbmQgKyAnIEZPUiA6ICcgKyB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9SZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50ID0gc3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlkZW9NdXRlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlkZW9SZWZyZXNoZXIoIXZpZGVvUmVmcmVzaGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja3MuY3VycmVudC5zZXRWaWRlb1RyYWNrKHN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIgfHwgbG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXVkaW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LmlkID0gY29uc3VtZXIuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5wbGF5c2lubGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0VsZW1lbnQuYXV0b3BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVldGluZy1hdWRpby1lbC1jb250YWluZXInKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZENoaWxkKGF1ZGlvRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWV0ZXIgdGhpcyBwYXJ0aWNpcGFudCdzIGF1ZGlvIGZvciBhY3RpdmUtc3BlYWtlciBoaWdobGlnaHQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TWV0ZXIoY29uc3VtZXIuaWQsIHN0cmVhbSwgdXNlcklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMuaXNIb3N0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVJlY29yZGVyLmFkZFRyYWNrKHVzZXJJZCwgc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lci5vbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhY2tlbmRlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhraW5kICsgXCIgQ09OU1VNRVIgVFJBQ0sgRU5ERUQgRk9SIFwiICsgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoY29uc3VtZXIuaWQsIGtpbmQsIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEd1YXJkOiB0aGUgcGFydGljaXBhbnQgbWF5IGhhdmUgbGVmdCwgc28gZmluZCgpIGNhbiBiZSB1bmRlZmluZWQg4oCUXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlYWRpbmcgLnZpZGVvTXV0ZWQvLmF1ZGlvTXV0ZWQgb24gaXQgdGhyZXcuIE5vIHBhcnRpY2lwYW50IOKGkiBubyByZXRyeS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhY2tFbmRlZFBhcnRpY2lwYW50ID0gcGFydGljaXBhbnRzLmZpbmQoKHApID0+IHAudXNlcklkID09PSB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhY2tFbmRlZFBhcnRpY2lwYW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKGtpbmQgPT09ICd2aWRlbycgJiYgIXRyYWNrRW5kZWRQYXJ0aWNpcGFudC52aWRlb011dGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChraW5kID09PSAnYXVkaW8nICYmICF0cmFja0VuZGVkUGFydGljaXBhbnQuYXVkaW9NdXRlZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvbnN1bWUoa2luZCwgdXNlcklkLCBuZXcgRXJyb3IoJ3RyYWNrZW5kZWQgd2hpbGUgJyArIGtpbmQgKyAnIGlzIE5PVCBtdXRlZCcpLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc3BvcnRjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhraW5kICsgXCIgQ09OU1VNRVIgQ0xPU0VEIEZPUiBcIiArIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGNvbnN1bWVyLmlkLCBraW5kLCB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICByZXRyeUNvbnN1bWUoa2luZCwgdXNlcklkLCBlLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldFBhcnRpY2lwYW50TmFtZSA9ICgpID0+IHtcbiAgICAgICAgbGV0IG5hbWUgPSBwcm9wcy5kYXRhLm5hbWU7XG5cbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChwcm9wcy5kYXRhLnVzZXJJZCkpIHtcbiAgICAgICAgICAgIG5hbWUgPSBgJHtuYW1lfSAoR3Vlc3QpYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHsnY29sLSotKiAnICsgKHByb3BzLmlzQ3VycmVudFVzZXIgPyAnbWVldGluZy1wYXJ0aWNpcGFudC1jb250YWluZXItY3VycmVudC11c2VyJyA6ICdtZWV0aW5nLXBhcnRpY2lwYW50LWNvbnRhaW5lcicpfWB9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBwcm9wcy5wYWRkaW5nID8gcHJvcHMucGFkZGluZyA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHByb3BzLmhlaWdodCA/IHByb3BzLmhlaWdodCA6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHByb3BzLmlzQ3VycmVudFVzZXIgPyAnIzFmMjkzNycgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBwcm9wcy5pc0N1cnJlbnRVc2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnMnB4IHNvbGlkICcgKyAoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yKCkgfHwgJyMxYTNjNWUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjdGl2ZS1zcGVha2VyIGhpZ2hsaWdodDogYW4gaW5zZXQgcmluZyAodGhlIHRpbGUgY2xpcHNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJmbG93LCBzbyBhbiBvdXRzZXQgc2hhZG93IHdvdWxkIGJlIGN1dCBvZmYpLlxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAoIWF1ZGlvTXV0ZWQgJiYgc291bmRMZXZlbCA+IFNQRUFLSU5HX0xFVkVMKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2luc2V0IDAgMCAwIDNweCAnICsgKGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpIHx8ICcjMjJjNTVlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdib3gtc2hhZG93IDEyMG1zIGVhc2Utb3V0J1xuICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2aWRlb011dGVkIHx8ICF2aWRlb1JlZi5jdXJyZW50IHx8ICF2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjZW50ZXJlZC1mbGV4LWJveCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzhweCcgOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb3BzLnNpemluZyA9PT0gJ3NtJyA/ICdhdmF0YXItd3JhcHBlci1zbScgOiAnYXZhdGFyLXdyYXBwZXInfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogKHByb3BzLnNpemluZyA9PT0gJ3NtJyA/IDcyIDogMTEyKSArICdweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAocHJvcHMuc2l6aW5nID09PSAnc20nID8gNzIgOiAxMTIpICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICFhdWRpb011dGVkICYmIHNvdW5kTGV2ZWwgPiAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzAgMCAwICcgKyAoMyArIHNvdW5kTGV2ZWwgLyAxMikgKyAncHggJyArIChhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IoKSB8fCAnIzAwNDc2YScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdib3gtc2hhZG93IDkwbXMgbGluZWFyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjM2E0NjU0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5zaXppbmcgPT09ICdtZCcgPyAnYXZhdGFyIGF2YXRhci1tZCcgOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnYXZhdGFyIGF2YXRhci1zbScgOiAnYXZhdGFyJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnMjBweCcgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkVXJsID8gPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFJlcGVhdDogJ25vLXJlcGVhdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFNpemU6ICdjb3ZlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHtkb3dubG9hZFVybH0pYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+IDogVXRpbHMuZ2V0SW5pdGlhbHMocHJvcHMuZGF0YS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3Byb3BzLmRhdGEudXNlcklkICsgJy12aWRlbyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17NjQwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXszMjB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUGxheSByZWY9e3ZpZGVvUmVmfSBtdXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHByb3BzLmlzQ3VycmVudFVzZXIgPyAnc2NhbGVYKC0xKScgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogKHZpZGVvTXV0ZWQgfHwgIXZpZGVvUmVmLmN1cnJlbnQgfHwgIXZpZGVvUmVmLmN1cnJlbnQuc3JjT2JqZWN0KSA/ICdub25lJyA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypXZSBuZWVkIHRoaXMgZWxlbWVudCB0byBjYXB0dXJlIHJlY29yZGluZyBzb3VuZCovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXVkaW9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtwcm9wcy5kYXRhLnVzZXJJZCArICctYXVkaW8nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgcmVmPXthdWRpb1JlZn0gbXV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ25vbmUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cHJvcHMuc2l6aW5nID09PSAnc20nID8gJ25hbWUtbGFiZWwtc20nIDogJ25hbWUtbGFiZWwnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICc2cHgnIDogJzhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnZmxleC1lbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXA6ICc0cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6ICc3MCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzFweCA4cHgnIDogJzJweCAxMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzExcHgnIDogJzEzcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogMS40LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICdhdXRvJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshcHJvcHMuaXNDdXJyZW50VXNlciAmJiBnZXRQYXJ0aWNpcGFudE5hbWUoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy5pc0N1cnJlbnRVc2VyICYmICdZb3UnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXByb3BzLmlzQ3VycmVudFVzZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5MZWZ0OiAnNHB4JywgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsIGdhcDogJzRweCd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJiAhYXVkaW9NdXRlZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLm9uSG9zdEF1ZGlvTXV0ZShwcm9wcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydNSUMnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGF1ZGlvTXV0ZWQgPyAnaW5saW5lLWZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydNSUNfT0ZGJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJiAhdmlkZW9NdXRlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbkhvc3RWaWRlb011dGUocHJvcHMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydDQU1FUkEnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7ZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT1cIk15IGRldmljZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrRGV2aWNlc0ljb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPXtvcGVuTW9yZUFjdGlvbnMgPyAnZGV2aWNlLW1lbnUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17b3Blbk1vcmVBY3Rpb25zID8gJ3RydWUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydTRVRUSU5HUyd9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e21hcmdpbkxlZnQ6ICc0cHgnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtoYW5kUmFpc2VkICYmIDxQYW5Ub29sIGZvbnRTaXplPXsnc21hbGwnfSBzdHlsZT17e2NvbG9yOiAnI2UyYjAzMCd9fS8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9eydtZWV0aW5nLWF1ZGlvLWVsLWNvbnRhaW5lcid9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgICAgICBhbmNob3JFbD17YW5jaG9yRWx9XG4gICAgICAgICAgICAgICAgaWQ9XCJkZXZpY2VzLW1lbnVcIlxuICAgICAgICAgICAgICAgIG9wZW49e29wZW5Nb3JlQWN0aW9uc31cbiAgICAgICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZURldmljZU1lbnV9XG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xvc2VEZXZpY2VNZW51fVxuICAgICAgICAgICAgICAgIFBhcGVyUHJvcHM9e3tcbiAgICAgICAgICAgICAgICAgICAgZWxldmF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICBzeDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogJ2Ryb3Atc2hhZG93KDBweCAycHggOHB4IHJnYmEoMCwwLDAsMC4zMikpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG10OiAxLjUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnJiAuTXVpTGlzdC1yb290Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTFlMWUxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJyYgLk11aUF2YXRhci1yb290Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1sOiAtMC41LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1yOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcmOmJlZm9yZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpIHJvdGF0ZSg0NWRlZyknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3tcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogMjAsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsOiAxMzZcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGFuY2hvck9yaWdpbj17e1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogJ3RvcCdcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9EZXZpY2VzLm1hcCgoZGV2aWNlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxNZW51SXRlbSBvbkNsaWNrPXsoKSA9PiBjaGFuZ2VBdWRpb0RldmljZShkZXZpY2UpfSBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e2NvbG9yOiBzZWxlY3RlZEF1ZGlvRGV2aWNlICYmIHNlbGVjdGVkQXVkaW9EZXZpY2UuaWQgPT09IGRldmljZS5pZCA/ICcjMTk4NzU0JyA6IG51bGx9fT5cbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UubGFiZWxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9NZW51SXRlbT47XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9NZW51PlxuICAgICAgICA8Lz5cbiAgICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVkNSb29tUGFydGljaXBhbnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksZUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssZUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sZ0JBQUEsR0FBQUosc0JBQUEs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
|