diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets.json b/src/OrchardCore.Modules/OrchardCore.Media/Assets.json index e1b3ec39901..80d16ffac43 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets.json +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets.json @@ -11,7 +11,12 @@ "inputs": [ "./node_modules/blueimp-file-upload/js/jquery.fileupload.js", "./node_modules/blueimp-file-upload/js/jquery.iframe-transport.js", - "Assets/js/**/*.js" + "Assets/js/helpers.js", + "Assets/js/app/**/*.js" + ], + "watch": [ + "Assets/js/helpers.js", + "Assets/js/app/**/*.js" ], "output": "wwwroot/Scripts/media.js" } diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/app.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/app.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/app.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/app.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/fileupload.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/fileupload.js similarity index 97% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/fileupload.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/fileupload.js index 9474982bc81..9bf1f5a6930 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/fileupload.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/fileupload.js @@ -1,5 +1,5 @@ $(document).on('mediaApp:ready', function () { - var chunkedFileUploadId = crypto.randomUUID(); + var chunkedFileUploadId = randomUUID(); $('#fileupload') .fileupload({ @@ -54,5 +54,5 @@ $(document).bind('dragover', function (e) { window.dropZoneTimeout = null; dropZone.removeClass('in'); }, 100); - } -}); \ No newline at end of file + } +}); diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/folderComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/folderComponent.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/folderComponent.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/folderComponent.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/mediaItemsGridComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsGridComponent.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/mediaItemsGridComponent.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsGridComponent.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/mediaItemsTableComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsTableComponent.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/mediaItemsTableComponent.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsTableComponent.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/pagerComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/pagerComponent.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/pagerComponent.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/pagerComponent.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/sortIndicatorComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/sortIndicatorComponent.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaApp/sortIndicatorComponent.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/sortIndicatorComponent.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/attachedMediaField.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/attachedMediaField.js similarity index 96% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/attachedMediaField.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/attachedMediaField.js index 5c3772e3b7b..57e211b9060 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/attachedMediaField.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/attachedMediaField.js @@ -129,7 +129,7 @@ function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaI var selector = '#' + idOfUploadButton; var editorId = mediaFieldEditor.attr('id'); - var chunkedFileUploadId = crypto.randomUUID(); + var chunkedFileUploadId = randomUUID(); $(selector) .fileupload({ @@ -160,7 +160,7 @@ function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaI done: function (e, data) { var newMediaItems = []; var errormsg = ""; - + if (data.result.files.length > 0) { for (var i = 0; i < data.result.files.length; i++) { data.result.files[i].isNew = true; @@ -173,7 +173,7 @@ function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaI errormsg += data.result.files[i].error + "\n"; } } - + if (errormsg !== "") { alert(errormsg); return; @@ -247,29 +247,29 @@ function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaI cancelMediaTextModal: function (event) { this.mediaTextModal.hide(); this.selectedMedia.mediaText = this.backupMediaText; - }, + }, showAnchorModal: function (event) { this.anchoringModal = new bootstrap.Modal(this.$refs.anchoringModal); this.anchoringModal.show(); // Cause a refresh to recalc heights. this.selectedMedia.anchor = { - x: this.selectedMedia.anchor.x, - y: this.selectedMedia.anchor.y + x: this.selectedMedia.anchor.x, + y: this.selectedMedia.anchor.y } this.backupAnchor = this.selectedMedia.anchor; - }, + }, cancelAnchoringModal: function (event) { this.anchoringModal.hide(); this.selectedMedia.anchor = this.backupAnchor; - }, + }, resetAnchor: function (event) { this.selectedMedia.anchor = { x: 0.5, y: 0.5 }; - }, - onAnchorDrop: function(event) { + }, + onAnchorDrop: function (event) { var image = this.$refs.anchorImage; this.selectedMedia.anchor = { - x: event.offsetX / image.clientWidth, - y: event.offsetY / image.clientHeight + x: event.offsetX / image.clientWidth, + y: event.offsetY / image.clientHeight } }, anchorLeft: function () { @@ -286,7 +286,7 @@ function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaI } else { return '0'; } - }, + }, anchorTop: function () { if (this.$refs.anchorImage && this.selectedMedia) { var position = this.selectedMedia.anchor.y * this.$refs.anchorImage.clientHeight; @@ -306,7 +306,7 @@ function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaI x: event.offsetX / image.clientWidth, y: event.offsetY / image.clientHeight } - }, + }, addMediaFiles: function (files) { if ((files.length > 1) && (allowMultiple === false)) { alert($('#onlyOneItemMessage').val()); @@ -330,11 +330,11 @@ function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaI watch: { mediaItems: { deep: true, - handler () { + handler() { // Trigger preview rendering setTimeout(function () { $(document).trigger('contentpreview:render'); }, 100); } - }, + }, currentPrefs: function (newPrefs) { localStorage.setItem('mediaFieldPrefs', JSON.stringify(newPrefs)); } diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/mediaFieldThumbsContainer.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/mediaFieldThumbsContainer.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/mediaFieldThumbsContainer.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/mediaFieldThumbsContainer.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/mediafield.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/mediafield.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/mediafield.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/mediafield.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/mediafieldsAppsArray.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/mediafieldsAppsArray.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/MediaField/mediafieldsAppsArray.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/mediafieldsAppsArray.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/Shared/uploadComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/Shared/uploadComponent.js similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/Shared/uploadComponent.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/Shared/uploadComponent.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/Shared/uploadListComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/Shared/uploadListComponent.js similarity index 94% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/Shared/uploadListComponent.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/Shared/uploadListComponent.js index 3eea0751094..b236ab056cb 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/Shared/uploadListComponent.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/Shared/uploadListComponent.js @@ -50,10 +50,10 @@ Vue.component('uploadList', { var self = this; var uploadInput = document.getElementById(self.uploadInputId ?? 'fileupload'); $(uploadInput).bind('fileuploadadd', function (e, data) { - if (!data.files) { + if (!data.files) { return; } - data.files.forEach(function (newFile) { + data.files.forEach(function (newFile) { var alreadyInList = self.files.some(function (f) { return f.name == newFile.name; }); @@ -62,8 +62,8 @@ Vue.component('uploadList', { self.files.push({ name: newFile.name, percentage: 0, errorMessage: '' }); } else { console.error('A file with the same name is already on the queue:' + newFile.name); - } - }); + } + }); }); bus.$on('removalRequest', function (fileUpload) { @@ -88,7 +88,7 @@ Vue.component('uploadList', { this.expanded = false; } }, - clearErrors: function () { + clearErrors: function () { this.files = this.files.filter(function (item) { return item.errorMessage == ''; }); diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/helpers.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/helpers.js new file mode 100644 index 00000000000..f969b730d05 --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/helpers.js @@ -0,0 +1,9 @@ +function randomUUID() { + if (typeof crypto === 'object' && typeof crypto.randomUUID === 'function') { + return crypto.randomUUID(); + } + + return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => + (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16) + ); +} diff --git a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js index f3fda24cd52..6e2bd34e102 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js @@ -1558,6 +1558,15 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == }); }); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function randomUUID() { + if ((typeof crypto === "undefined" ? "undefined" : _typeof(crypto)) === 'object' && typeof crypto.randomUUID === 'function') { + return crypto.randomUUID(); + } + return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, function (c) { + return (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16); + }); +} +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -2037,7 +2046,7 @@ function initializeMediaApplication(displayMediaApplication, mediaApplicationUrl }); } $(document).on('mediaApp:ready', function () { - var chunkedFileUploadId = crypto.randomUUID(); + var chunkedFileUploadId = randomUUID(); $('#fileupload').fileupload({ dropZone: $('#mediaApp'), limitConcurrentUploads: 20, @@ -2779,7 +2788,7 @@ function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaI }); var selector = '#' + idOfUploadButton; var editorId = mediaFieldEditor.attr('id'); - var chunkedFileUploadId = crypto.randomUUID(); + var chunkedFileUploadId = randomUUID(); $(selector).fileupload({ limitConcurrentUploads: 20, dropZone: $('#' + editorId), @@ -3350,4 +3359,4 @@ Vue.component('mediaFieldThumbsContainer', { } } }); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5maWxldXBsb2FkLmpzIiwianF1ZXJ5LmlmcmFtZS10cmFuc3BvcnQuanMiLCJNZWRpYUFwcC9hcHAuanMiLCJNZWRpYUFwcC9maWxldXBsb2FkLmpzIiwiTWVkaWFBcHAvZm9sZGVyQ29tcG9uZW50LmpzIiwiTWVkaWFBcHAvbWVkaWFJdGVtc0dyaWRDb21wb25lbnQuanMiLCJNZWRpYUFwcC9tZWRpYUl0ZW1zVGFibGVDb21wb25lbnQuanMiLCJNZWRpYUFwcC9wYWdlckNvbXBvbmVudC5qcyIsIk1lZGlhQXBwL3NvcnRJbmRpY2F0b3JDb21wb25lbnQuanMiLCJTaGFyZWQvdXBsb2FkQ29tcG9uZW50LmpzIiwiU2hhcmVkL3VwbG9hZExpc3RDb21wb25lbnQuanMiLCJNZWRpYUZpZWxkL2F0dGFjaGVkTWVkaWFGaWVsZC5qcyIsIk1lZGlhRmllbGQvbWVkaWFmaWVsZC5qcyIsIk1lZGlhRmllbGQvbWVkaWFmaWVsZHNBcHBzQXJyYXkuanMiLCJNZWRpYUZpZWxkL21lZGlhRmllbGRUaHVtYnNDb250YWluZXIuanMiXSwibmFtZXMiOlsiZmFjdG9yeSIsImRlZmluZSIsImFtZCIsImV4cG9ydHMiLCJfdHlwZW9mIiwicmVxdWlyZSIsIndpbmRvdyIsImpRdWVyeSIsIiQiLCJzdXBwb3J0IiwiZmlsZUlucHV0IiwiUmVnRXhwIiwidGVzdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInByb3AiLCJ4aHJGaWxlVXBsb2FkIiwiUHJvZ3Jlc3NFdmVudCIsIkZpbGVSZWFkZXIiLCJ4aHJGb3JtRGF0YUZpbGVVcGxvYWQiLCJGb3JtRGF0YSIsImJsb2JTbGljZSIsIkJsb2IiLCJwcm90b3R5cGUiLCJzbGljZSIsIndlYmtpdFNsaWNlIiwibW96U2xpY2UiLCJnZXREcmFnSGFuZGxlciIsInR5cGUiLCJpc0RyYWdPdmVyIiwiZSIsImRhdGFUcmFuc2ZlciIsIm9yaWdpbmFsRXZlbnQiLCJpbkFycmF5IiwidHlwZXMiLCJfdHJpZ2dlciIsIkV2ZW50IiwiZGVsZWdhdGVkRXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsImRyb3BFZmZlY3QiLCJ3aWRnZXQiLCJvcHRpb25zIiwiZHJvcFpvbmUiLCJkb2N1bWVudCIsInBhc3RlWm9uZSIsInVuZGVmaW5lZCIsInJlcGxhY2VGaWxlSW5wdXQiLCJwYXJhbU5hbWUiLCJzaW5nbGVGaWxlVXBsb2FkcyIsImxpbWl0TXVsdGlGaWxlVXBsb2FkcyIsImxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZSIsImxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZU92ZXJoZWFkIiwic2VxdWVudGlhbFVwbG9hZHMiLCJsaW1pdENvbmN1cnJlbnRVcGxvYWRzIiwiZm9yY2VJZnJhbWVUcmFuc3BvcnQiLCJyZWRpcmVjdCIsInJlZGlyZWN0UGFyYW1OYW1lIiwicG9zdE1lc3NhZ2UiLCJtdWx0aXBhcnQiLCJtYXhDaHVua1NpemUiLCJ1cGxvYWRlZEJ5dGVzIiwicmVjYWxjdWxhdGVQcm9ncmVzcyIsInByb2dyZXNzSW50ZXJ2YWwiLCJiaXRyYXRlSW50ZXJ2YWwiLCJhdXRvVXBsb2FkIiwidW5pcXVlRmlsZW5hbWVzIiwibWVzc2FnZXMiLCJpMThuIiwibWVzc2FnZSIsImNvbnRleHQiLCJ0b1N0cmluZyIsImVhY2giLCJrZXkiLCJ2YWx1ZSIsInJlcGxhY2UiLCJmb3JtRGF0YSIsImZvcm0iLCJzZXJpYWxpemVBcnJheSIsImFkZCIsImRhdGEiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJmaWxldXBsb2FkIiwicHJvY2VzcyIsImRvbmUiLCJzdWJtaXQiLCJwcm9jZXNzRGF0YSIsImNvbnRlbnRUeXBlIiwiY2FjaGUiLCJ0aW1lb3V0IiwiX3Byb21pc2VQaXBlIiwicGFydHMiLCJmbiIsImpxdWVyeSIsInNwbGl0IiwiTnVtYmVyIiwiX3NwZWNpYWxPcHRpb25zIiwiX2Jsb2JTbGljZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiX0JpdHJhdGVUaW1lciIsInRpbWVzdGFtcCIsIkRhdGUiLCJub3ciLCJnZXRUaW1lIiwibG9hZGVkIiwiYml0cmF0ZSIsImdldEJpdHJhdGUiLCJpbnRlcnZhbCIsInRpbWVEaWZmIiwiX2lzWEhSVXBsb2FkIiwiX2dldEZvcm1EYXRhIiwiaXNBcnJheSIsIm5hbWUiLCJwdXNoIiwiX2dldFRvdGFsIiwiZmlsZXMiLCJ0b3RhbCIsImluZGV4IiwiZmlsZSIsInNpemUiLCJfaW5pdFByb2dyZXNzT2JqZWN0Iiwib2JqIiwicHJvZ3Jlc3MiLCJfcHJvZ3Jlc3MiLCJleHRlbmQiLCJfaW5pdFJlc3BvbnNlT2JqZWN0IiwiX3Jlc3BvbnNlIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiX29uUHJvZ3Jlc3MiLCJsZW5ndGhDb21wdXRhYmxlIiwiX3RpbWUiLCJNYXRoIiwiZmxvb3IiLCJjaHVua1NpemUiLCJfYml0cmF0ZVRpbWVyIiwiX2luaXRQcm9ncmVzc0xpc3RlbmVyIiwidGhhdCIsInhociIsImFqYXhTZXR0aW5ncyIsInVwbG9hZCIsIm9uIiwib2UiLCJfZGVpbml0UHJvZ3Jlc3NMaXN0ZW5lciIsIm9mZiIsIl9pc0luc3RhbmNlT2YiLCJfZ2V0VW5pcXVlRmlsZW5hbWUiLCJtYXAiLCJTdHJpbmciLCJfIiwicDEiLCJwMiIsImV4dCIsIl9pbml0WEhSRGF0YSIsImhlYWRlcnMiLCJjb250ZW50UmFuZ2UiLCJibG9iIiwiZW5jb2RlVVJJIiwidXBsb2FkTmFtZSIsImZpZWxkIiwiYXBwZW5kIiwiZmlsZU5hbWUiLCJfaW5pdElmcmFtZVNldHRpbmdzIiwidGFyZ2V0SG9zdCIsInVybCIsImRhdGFUeXBlIiwibG9jYXRpb24iLCJob3N0IiwiX2luaXREYXRhU2V0dGluZ3MiLCJfY2h1bmtlZFVwbG9hZCIsIl9nZXRQYXJhbU5hbWUiLCJpbnB1dCIsImkiLCJsZW5ndGgiLCJfaW5pdEZvcm1TZXR0aW5ncyIsImhyZWYiLCJ0b1VwcGVyQ2FzZSIsImZvcm1BY2NlcHRDaGFyc2V0IiwiYXR0ciIsIl9nZXRBSkFYU2V0dGluZ3MiLCJfZ2V0RGVmZXJyZWRTdGF0ZSIsImRlZmVycmVkIiwic3RhdGUiLCJpc1Jlc29sdmVkIiwiaXNSZWplY3RlZCIsIl9lbmhhbmNlUHJvbWlzZSIsInByb21pc2UiLCJzdWNjZXNzIiwiZXJyb3IiLCJmYWlsIiwiY29tcGxldGUiLCJhbHdheXMiLCJfZ2V0WEhSUHJvbWlzZSIsInJlc29sdmVPclJlamVjdCIsImFyZ3MiLCJkZmQiLCJEZWZlcnJlZCIsInJlc29sdmVXaXRoIiwicmVqZWN0V2l0aCIsImFib3J0IiwiX2FkZENvbnZlbmllbmNlTWV0aG9kcyIsImdldFByb21pc2UiLCJyZXNvbHZlRnVuYyIsInJlamVjdEZ1bmMiLCJfcHJvY2Vzc1F1ZXVlIiwiZXJyb3JUaHJvd24iLCJqcVhIUiIsIl9vblNlbmQiLCJwcm9jZXNzaW5nIiwicmVzcG9uc2UiLCJfZ2V0VXBsb2FkZWRCeXRlcyIsInJhbmdlIiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJ1cHBlckJ5dGVzUG9zIiwicGFyc2VJbnQiLCJ0ZXN0T25seSIsImZzIiwidWIiLCJtY3MiLCJvIiwiY3VycmVudExvYWRlZCIsImFqYXgiLCJyZXN1bHQiLCJ0ZXh0U3RhdHVzIiwiX2JlZm9yZVNlbmQiLCJfYWN0aXZlIiwiX29uRG9uZSIsIl9vbkZhaWwiLCJfb25BbHdheXMiLCJqcVhIUm9yUmVzdWx0IiwianFYSFJvckVycm9yIiwiYWJvcnRlZCIsInNsb3QiLCJwaXBlIiwic2VuZCIsIl9zZW5kaW5nIiwibmV4dFNsb3QiLCJfc2xvdHMiLCJzaGlmdCIsInJlc29sdmUiLCJfc2VxdWVuY2UiLCJfb25BZGQiLCJmaWxlc0xlbmd0aCIsImxpbWl0IiwibGltaXRTaXplIiwib3ZlcmhlYWQiLCJiYXRjaFNpemUiLCJwYXJhbU5hbWVTZXQiLCJwYXJhbU5hbWVTbGljZSIsImZpbGVTZXQiLCJqIiwib3JpZ2luYWxGaWxlcyIsImVsZW1lbnQiLCJuZXdEYXRhIiwiX3JlcGxhY2VGaWxlSW5wdXQiLCJpbnB1dENsb25lIiwiY2xvbmUiLCJyZXN0b3JlRm9jdXMiLCJpcyIsImFjdGl2ZUVsZW1lbnQiLCJmaWxlSW5wdXRDbG9uZSIsInJlc2V0IiwiYWZ0ZXIiLCJkZXRhY2giLCJ0cmlnZ2VyIiwiY2xlYW5EYXRhIiwiZWwiLCJfaGFuZGxlRmlsZVRyZWVFbnRyeSIsImVudHJ5IiwicGF0aCIsImVudHJpZXMiLCJkaXJSZWFkZXIiLCJlcnJvckhhbmRsZXIiLCJzdWNjZXNzSGFuZGxlciIsIl9oYW5kbGVGaWxlVHJlZUVudHJpZXMiLCJyZWFkRW50cmllcyIsInJlc3VsdHMiLCJjb25jYXQiLCJpc0ZpbGUiLCJfZmlsZSIsInJlbGF0aXZlUGF0aCIsImlzRGlyZWN0b3J5IiwiY3JlYXRlUmVhZGVyIiwid2hlbiIsIkFycmF5IiwiX2dldERyb3BwZWRGaWxlcyIsIml0ZW1zIiwid2Via2l0R2V0QXNFbnRyeSIsImdldEFzRW50cnkiLCJpdGVtIiwiZ2V0QXNGaWxlIiwibWFrZUFycmF5IiwiX2dldFNpbmdsZUZpbGVJbnB1dEZpbGVzIiwiZmlsZVNpemUiLCJfZ2V0RmlsZUlucHV0RmlsZXMiLCJfb25DaGFuZ2UiLCJ0YXJnZXQiLCJfb25QYXN0ZSIsImNsaXBib2FyZERhdGEiLCJfb25Ecm9wIiwiX29uRHJhZ092ZXIiLCJfb25EcmFnRW50ZXIiLCJfb25EcmFnTGVhdmUiLCJfaW5pdEV2ZW50SGFuZGxlcnMiLCJfb24iLCJkcmFnb3ZlciIsImRyb3AiLCJkcmFnZW50ZXIiLCJkcmFnbGVhdmUiLCJwYXN0ZSIsImNoYW5nZSIsIl9kZXN0cm95RXZlbnRIYW5kbGVycyIsIl9vZmYiLCJfZGVzdHJveSIsIl9zZXRPcHRpb24iLCJyZWluaXQiLCJfc3VwZXIiLCJfaW5pdFNwZWNpYWxPcHRpb25zIiwiZmluZCIsIl9nZXRSZWdFeHAiLCJzdHIiLCJtb2RpZmllcnMiLCJwb3AiLCJqb2luIiwiX2lzUmVnRXhwT3B0aW9uIiwiX2luaXREYXRhQXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJ0b0xvd2VyQ2FzZSIsImNoYXJBdCIsIl9jcmVhdGUiLCJhY3RpdmUiLCJkaXNhYmxlZCIsInJlamVjdCIsInRoZW4iLCJjb3VudGVyIiwianNvbkFQSSIsImpzb25QYXJzZSIsIkpTT04iLCJhamF4VHJhbnNwb3J0IiwiYXN5bmMiLCJpbml0aWFsSWZyYW1lU3JjIiwiaWZyYW1lIiwiYWRkUGFyYW1DaGFyIiwiY29tcGxldGVDYWxsYmFjayIsImZpbGVJbnB1dENsb25lcyIsInBhcmFtTmFtZXMiLCJjb250ZW50cyIsImZpcnN0Q2hpbGQiLCJFcnJvciIsImFwcGVuZFRvIiwic2V0VGltZW91dCIsInJlbW92ZSIsInZhbCIsInJlbW92ZUF0dHIiLCJyZXBsYWNlV2l0aCIsImJvZHkiLCJhamF4U2V0dXAiLCJjb252ZXJ0ZXJzIiwiaWZyYW1lVGV4dCIsInRleHQiLCJpZnJhbWVKc29uIiwiaWZyYW1lSHRtbCIsImh0bWwiLCJpZnJhbWVYbWwiLCJ4bWxEb2MiLCJpc1hNTERvYyIsInBhcnNlWE1MIiwiWE1MRG9jdW1lbnQiLCJ4bWwiLCJpZnJhbWVTY3JpcHQiLCJnbG9iYWxFdmFsIiwiaW5pdGlhbGl6ZWQiLCJtZWRpYUFwcCIsImJ1cyIsIlZ1ZSIsImluaXRpYWxpemVNZWRpYUFwcGxpY2F0aW9uIiwiZGlzcGxheU1lZGlhQXBwbGljYXRpb24iLCJtZWRpYUFwcGxpY2F0aW9uVXJsIiwicGF0aEJhc2UiLCJjb25zb2xlIiwibWV0aG9kIiwiY29udGVudCIsInJvb3QiLCJmb2xkZXIiLCJzZWxlY3RlZEZvbGRlciIsIm1lZGlhSXRlbXMiLCJzZWxlY3RlZE1lZGlhcyIsImVycm9ycyIsImRyYWdEcm9wVGh1bWJuYWlsIiwiSW1hZ2UiLCJzbWFsbFRodW1icyIsImdyaWRWaWV3IiwibWVkaWFGaWx0ZXIiLCJzb3J0QnkiLCJzb3J0QXNjIiwiaXRlbXNJblBhZ2UiLCJjcmVhdGVkIiwic2VsZiIsInNyYyIsIiRvbiIsInNlbGVjdFJvb3QiLCJzZWxlY3RlZCIsImVycm9ySW5mbyIsImxvYWRGb2xkZXIiLCJuZXdOYW1lIiwibmV3UGF0aCIsIm9sZFBhdGgiLCJtZWRpYSIsImZpbHRlciIsIm1lZGlhUGF0aCIsImNyZWF0ZUZvbGRlciIsImRlbGV0ZUZvbGRlciIsIm5ld1NvcnQiLCJjaGFuZ2VTb3J0IiwidG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYSIsInJlbmFtZU1lZGlhIiwiZGVsZXRlTWVkaWFJdGVtIiwiaGFuZGxlRHJhZ1N0YXJ0IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsImN1cnJlbnRQcmVmcyIsInBhcnNlIiwiY29tcHV0ZWQiLCJpc0hvbWUiLCJwYXJlbnRzIiwicCIsInBhcmVudEZvbGRlciIsInVuc2hpZnQiLCJwYXJlbnQiLCJmaWx0ZXJlZE1lZGlhSXRlbXMiLCJmaWx0ZXJlZCIsImluZGV4T2YiLCJzb3J0IiwiYSIsImIiLCJtaW1lIiwibG9jYWxlQ29tcGFyZSIsImxhc3RNb2RpZnkiLCJoaWRkZW5Db3VudCIsInRodW1iU2l6ZSIsImdldCIsInNldCIsIm5ld1ByZWZzIiwid2F0Y2giLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwibmV3Rm9sZGVyIiwibW91bnRlZCIsIiRyZWZzIiwicm9vdEZvbGRlciIsInRvZ2dsZSIsIm1ldGhvZHMiLCJ1cGxvYWRVcmwiLCJ1cmxWYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIm1lZGlhVXJsIiwibG9nIiwiZm9yRWFjaCIsIm9wZW4iLCJzZWxlY3RBbGwiLCJ1blNlbGVjdEFsbCIsImludmVydFNlbGVjdGlvbiIsInRlbXAiLCJpc01lZGlhU2VsZWN0ZWQiLCJzcGxpY2UiLCJzb21lIiwiYXJyYXkiLCJtb2RlbCIsImNvbmZpcm1EaWFsb2ciLCJfb2JqZWN0U3ByZWFkIiwiY2FsbGJhY2siLCJyZXNwIiwiX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4iLCIkZW1pdCIsInJlc3BvbnNlVGV4dCIsImVtcHR5IiwibW9kYWwiLCJib290c3RyYXAiLCJNb2RhbCIsImdldE9yQ3JlYXRlSW5zdGFuY2UiLCJzaG93IiwiZm9jdXMiLCJzZWxlY3RBbmREZWxldGVNZWRpYSIsImRlbGV0ZU1lZGlhIiwiZGVsZXRlTWVkaWFMaXN0IiwibWVkaWFMaXN0IiwicGF0aHMiLCJtZWRpYU5hbWVzIiwic2V0RGF0YSIsInNldERyYWdJbWFnZSIsImVmZmVjdEFsbG93ZWQiLCJoYW5kbGVTY3JvbGxXaGlsZURyYWciLCJjbGllbnRZIiwic2Nyb2xsQnkiLCJpbm5lckhlaWdodCIsImtleXByZXNzIiwid2hpY2giLCJjbGljayIsImhpZGUiLCJlcnJvck1lc3NhZ2UiLCJvbGROYW1lIiwiY3VycmVudEZvbGRlciIsImdldEVsZW1lbnRCeUlkIiwic3R5bGUiLCJkaXNwbGF5IiwiY2h1bmtlZEZpbGVVcGxvYWRJZCIsImNyeXB0byIsInJhbmRvbVVVSUQiLCJhbnRpRm9yZ2VyeVRva2VuIiwiRmlsZSIsImxhc3RNb2RpZmllZCIsImJpbmQiLCJkdCIsImNvbnRhaW5zIiwiZHJvcFpvbmVUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiYWRkQ2xhc3MiLCJob3ZlcmVkRHJvcFpvbmUiLCJjbG9zZXN0IiwicmVtb3ZlQ2xhc3MiLCJjb21wb25lbnQiLCJ0ZW1wbGF0ZSIsImRpciIsInByb3BzIiwic2VsZWN0ZWRJbk1lZGlhQXBwIiwibGV2ZWwiLCJjaGlsZHJlbiIsImlzSG92ZXJlZCIsInBhZGRpbmciLCJpc1NlbGVjdGVkIiwiaXNSb290IiwiaXNBbmNlc3Rvck9mU2VsZWN0ZWRGb2xkZXIiLCJsb2FkQ2hpbGRyZW4iLCJzZWxlY3QiLCJjIiwiZW10cHkiLCJoYW5kbGVEcmFnT3ZlciIsImhhbmRsZURyYWdMZWF2ZSIsIm1vdmVNZWRpYVRvRm9sZGVyIiwiZ2V0RGF0YSIsInNvdXJjZUZvbGRlciIsInRhcmdldEZvbGRlciIsImFsZXJ0IiwiVCIsImVkaXRCdXR0b24iLCJkZWxldGVCdXR0b24iLCJidWlsZE1lZGlhVXJsIiwiZHJhZ1N0YXJ0IiwiQm9vbGVhbiIsImltYWdlSGVhZGVyIiwibmFtZUhlYWRlciIsImxhc3RNb2RpZnlIZWFkZXIiLCJzaXplSGVhZGVyIiwidHlwZUhlYWRlciIsInZpZXdCdXR0b24iLCJwcmludERhdGVUaW1lIiwiZGF0ZW1pbGxpcyIsImQiLCJ0b0xvY2FsZVN0cmluZyIsInNvdXJjZUl0ZW1zIiwicGFnZVNpemUiLCJwYWdlU2l6ZU9wdGlvbnMiLCJjdXJyZW50IiwicGFnZXJGaXJzdEJ1dHRvbiIsInBhZ2VyUHJldmlvdXNCdXR0b24iLCJwYWdlck5leHRCdXR0b24iLCJwYWdlckxhc3RCdXR0b24iLCJwYWdlclBhZ2VTaXplTGFiZWwiLCJwYWdlclBhZ2VMYWJlbCIsInBhZ2VyVG90YWxMYWJlbCIsIm5leHQiLCJwcmV2aW91cyIsImdvRmlyc3QiLCJnb0xhc3QiLCJ0b3RhbFBhZ2VzIiwiZ29UbyIsInRhcmdldFBhZ2UiLCJwYWdlcyIsImNlaWwiLCJpc0xhc3RQYWdlIiwiaXNGaXJzdFBhZ2UiLCJjYW5Eb05leHQiLCJjYW5Eb1ByZXYiLCJjYW5Eb0ZpcnN0IiwiY2FuRG9MYXN0IiwiaXRlbXNJbkN1cnJlbnRQYWdlIiwic3RhcnQiLCJlbmQiLCJwYWdlTGlua3MiLCJsaW5rcyIsImJlZm9yZUN1cnJlbnQiLCJiZWZvcmVCZWZvcmVDdXJyZW50IiwiYWZ0ZXJDdXJyZW50IiwiYWZ0ZXJBZnRlckN1cnJlbnQiLCJjb2xuYW1lIiwic2VsZWN0ZWRjb2xuYW1lIiwiYXNjIiwiaXNBY3RpdmUiLCJ1cGxvYWRJbnB1dElkIiwiX3NlbGYkdXBsb2FkSW5wdXRJZCIsInVwbG9hZElucHV0IiwicGVyY2VudGFnZSIsImhhbmRsZUZhaWx1cmUiLCJkaXNtaXNzV2FybmluZyIsImV4cGFuZGVkIiwicGVuZGluZ0NvdW50IiwiZXJyb3JDb3VudCIsInVwbG9hZHMiLCJjbGVhckVycm9ycyIsImZpbGVDb3VudCIsIm5ld0ZpbGUiLCJhbHJlYWR5SW5MaXN0IiwiZiIsImZpbGVVcGxvYWQiLCJ1cGRhdGVDb3VudCIsImluaXRpYWxpemVBdHRhY2hlZE1lZGlhRmllbGQiLCJpZE9mVXBsb2FkQnV0dG9uIiwidXBsb2FkQWN0aW9uIiwibWVkaWFJdGVtVXJsIiwiYWxsb3dNdWx0aXBsZSIsImFsbG93TWVkaWFUZXh0IiwiYWxsb3dBbmNob3JzIiwidGVtcFVwbG9hZEZvbGRlciIsIm1heFVwbG9hZENodW5rU2l6ZSIsImluaXRpYWxQYXRocyIsIm1lZGlhRmllbGRFZGl0b3IiLCJpZHByZWZpeCIsIm1lZGlhRmllbGRBcHAiLCJtZWRpYUZpZWxkQXBwcyIsInNlbGVjdGVkTWVkaWEiLCJpZFByZWZpeCIsImJhY2t1cE1lZGlhVGV4dCIsImJhY2t1cEFuY2hvciIsIm1lZGlhVGV4dG1vZGFsIiwiYW5jaG9yaW5nTW9kYWwiLCJtZWRpYVBhdGhzIiwieCIsImlzUmVtb3ZlZCIsImlzTmV3IiwibWVkaWFUZXh0IiwiYW5jaG9yIiwiYXR0YWNoZWRGaWxlTmFtZSIsInZhbHVlcyIsInNpZ25hbCIsInZ1ZWtleSIsInkiLCJyb3VuZCIsImNhbkFkZE1lZGlhIiwibm9uUmVtb3ZlZE1lZGlhSXRlbXMiLCJzZWxlY3RNZWRpYSIsInNlbGVjdG9yIiwiZWRpdG9ySWQiLCJjb3VudCIsImdldFVuaXF1ZUlkIiwibmV3TWVkaWFJdGVtcyIsImVycm9ybXNnIiwiciIsInJhbmRvbSIsInYiLCJyZW1vdmVTZWxlY3RlZCIsImV2ZW50IiwicmVtb3ZlZCIsInNob3dNZWRpYVRleHRNb2RhbCIsIm1lZGlhVGV4dE1vZGFsIiwiY2FuY2VsTWVkaWFUZXh0TW9kYWwiLCJzaG93QW5jaG9yTW9kYWwiLCJjYW5jZWxBbmNob3JpbmdNb2RhbCIsInJlc2V0QW5jaG9yIiwib25BbmNob3JEcm9wIiwiaW1hZ2UiLCJhbmNob3JJbWFnZSIsIm9mZnNldFgiLCJjbGllbnRXaWR0aCIsIm9mZnNldFkiLCJjbGllbnRIZWlnaHQiLCJhbmNob3JMZWZ0IiwibW9kYWxCb2R5Iiwib2Zmc2V0IiwicG9zaXRpb24iLCJhbmNob3JUb3AiLCJzZXRBbmNob3IiLCJhZGRNZWRpYUZpbGVzIiwiZGVlcCIsImhhbmRsZXIiLCJpbml0aWFsaXplTWVkaWFGaWVsZCIsIm1vZGFsQm9keUVsZW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwic2hvd01vZGFsIiwiYW5jaG9ySWNvbiIsInF1ZXJ5U2VsZWN0b3IiLCJpc0ludGVnZXIiLCJtZWRp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RUFBRWxlO0VBQ2QsQ0FBQztFQUNEd1AsT0FBTyxFQUFFLFNBQUFBLFFBQUEsRUFBWTtJQUVqQixJQUFJQyxJQUFJLEdBQUcsSUFBSTs7SUFFZjtJQUNBQSxJQUFJLENBQUNrSixDQUFDLENBQUNvSixhQUFhLEdBQUc1cUIsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQztJQUNwRDZDLElBQUksQ0FBQ2tKLENBQUMsQ0FBQ3FKLGNBQWMsR0FBRzdxQixDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDO0lBQ3JENkMsSUFBSSxDQUFDa0osQ0FBQyxDQUFDc0osUUFBUSxHQUFHOXFCLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDO0VBQzdDLENBQUM7RUFDRG1HLE9BQU8sRUFBRTtJQUNMK0Isb0JBQW9CLEVBQUUsU0FBQUEscUJBQVUzRSxLQUFLLEVBQUU7TUFDbkMsSUFBSSxDQUFDK1IsT0FBTyxDQUFDN04sS0FBSyxDQUFDLCtCQUErQixFQUFFbEUsS0FBSyxDQUFDO0lBQzlELENBQUM7SUFDRGtQLFdBQVcsRUFBRSxTQUFBQSxZQUFVbFAsS0FBSyxFQUFFO01BQzFCLElBQUksQ0FBQytSLE9BQU8sQ0FBQzdOLEtBQUssQ0FBQyxzQkFBc0IsRUFBRWxFLEtBQUssQ0FBQztJQUNyRCxDQUFDO0lBQ0QySSxhQUFhLEVBQUUsU0FBQUEsY0FBVTlYLEdBQUcsRUFBRW1SLFNBQVMsRUFBRTtNQUNyQyxPQUFPblIsR0FBRyxJQUFJQSxHQUFHLENBQUMyUSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLFFBQVEsR0FBR1EsU0FBUyxHQUFHLFVBQVUsR0FBR0EsU0FBUztJQUNyRztFQUNKO0FBQ0osQ0FBQyxDQUFDIiwiZmlsZSI6Im1lZGlhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIGpRdWVyeSBGaWxlIFVwbG9hZCBQbHVnaW5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZFxuICpcbiAqIENvcHlyaWdodCAyMDEwLCBTZWJhc3RpYW4gVHNjaGFuXG4gKiBodHRwczovL2JsdWVpbXAubmV0XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqL1xuXG4vKiBnbG9iYWwgZGVmaW5lLCByZXF1aXJlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbihmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAndXNlIHN0cmljdCc7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAvLyBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgQU1EIG1vZHVsZTpcbiAgICBkZWZpbmUoWydqcXVlcnknLCAnanF1ZXJ5LXVpL3VpL3dpZGdldCddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JyksIHJlcXVpcmUoJy4vdmVuZG9yL2pxdWVyeS51aS53aWRnZXQnKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gQnJvd3NlciBnbG9iYWxzOlxuICAgIGZhY3Rvcnkod2luZG93LmpRdWVyeSk7XG4gIH1cbn0pKGZ1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBEZXRlY3QgZmlsZSBpbnB1dCBzdXBwb3J0LCBiYXNlZCBvblxuICAvLyBodHRwczovL3ZpbGphbWlzLmNvbS8yMDEyL2ZpbGUtdXBsb2FkLXN1cHBvcnQtb24tbW9iaWxlL1xuICAkLnN1cHBvcnQuZmlsZUlucHV0ID0gIShcbiAgICBuZXcgUmVnRXhwKFxuICAgICAgLy8gSGFuZGxlIGRldmljZXMgd2hpY2ggZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMgZm9yIHRoZSBmZWF0dXJlIGRldGVjdGlvbjpcbiAgICAgICcoQW5kcm9pZCAoMVxcXFwuWzAxNTZdfDJcXFxcLlswMV0pKScgK1xuICAgICAgICAnfChXaW5kb3dzIFBob25lIChPUyA3fDhcXFxcLjApKXwoWEJMV1ApfChadW5lV1ApfChXUERlc2t0b3ApJyArXG4gICAgICAgICd8KHcoZWIpP09TQnJvd3Nlcil8KHdlYk9TKScgK1xuICAgICAgICAnfChLaW5kbGUvKDFcXFxcLjB8MlxcXFwuWzA1XXwzXFxcXC4wKSknXG4gICAgKS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSB8fFxuICAgIC8vIEZlYXR1cmUgZGV0ZWN0aW9uIGZvciBhbGwgb3RoZXIgZGV2aWNlczpcbiAgICAkKCc8aW5wdXQgdHlwZT1cImZpbGVcIi8+JykucHJvcCgnZGlzYWJsZWQnKVxuICApO1xuXG4gIC8vIFRoZSBGaWxlUmVhZGVyIEFQSSBpcyBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IHdvcmtzIGFzIGZlYXR1cmUgZGV0ZWN0aW9uLFxuICAvLyBhcyBzb21lIFNhZmFyaSB2ZXJzaW9ucyAoNT8pIHN1cHBvcnQgWEhSIGZpbGUgdXBsb2FkcyB2aWEgdGhlIEZvcm1EYXRhIEFQSSxcbiAgLy8gYnV0IG5vdCBub24tbXVsdGlwYXJ0IFhIUiBmaWxlIHVwbG9hZHMuXG4gIC8vIHdpbmRvdy5YTUxIdHRwUmVxdWVzdFVwbG9hZCBpcyBub3QgYXZhaWxhYmxlIG9uIElFMTAsIHNvIHdlIGNoZWNrIGZvclxuICAvLyB3aW5kb3cuUHJvZ3Jlc3NFdmVudCBpbnN0ZWFkIHRvIGRldGVjdCBYSFIyIGZpbGUgdXBsb2FkIGNhcGFiaWxpdHk6XG4gICQuc3VwcG9ydC54aHJGaWxlVXBsb2FkID0gISEod2luZG93LlByb2dyZXNzRXZlbnQgJiYgd2luZG93LkZpbGVSZWFkZXIpO1xuICAkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkID0gISF3aW5kb3cuRm9ybURhdGE7XG5cbiAgLy8gRGV0ZWN0IHN1cHBvcnQgZm9yIEJsb2Igc2xpY2luZyAocmVxdWlyZWQgZm9yIGNodW5rZWQgdXBsb2Fkcyk6XG4gICQuc3VwcG9ydC5ibG9iU2xpY2UgPVxuICAgIHdpbmRvdy5CbG9iICYmXG4gICAgKEJsb2IucHJvdG90eXBlLnNsaWNlIHx8XG4gICAgICBCbG9iLnByb3RvdHlwZS53ZWJraXRTbGljZSB8fFxuICAgICAgQmxvYi5wcm90b3R5cGUubW96U2xpY2UpO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGRyYWcgaGFuZGxlcnMgZm9yIGRyYWdvdmVyL2RyYWdlbnRlci9kcmFnbGVhdmVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgRXZlbnQgdHlwZVxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IERyYWcgaGFuZGxlclxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0RHJhZ0hhbmRsZXIodHlwZSkge1xuICAgIHZhciBpc0RyYWdPdmVyID0gdHlwZSA9PT0gJ2RyYWdvdmVyJztcbiAgICByZXR1cm4gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUuZGF0YVRyYW5zZmVyID0gZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXI7XG4gICAgICB2YXIgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXI7XG4gICAgICBpZiAoXG4gICAgICAgIGRhdGFUcmFuc2ZlciAmJlxuICAgICAgICAkLmluQXJyYXkoJ0ZpbGVzJywgZGF0YVRyYW5zZmVyLnR5cGVzKSAhPT0gLTEgJiZcbiAgICAgICAgdGhpcy5fdHJpZ2dlcih0eXBlLCAkLkV2ZW50KHR5cGUsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSkpICE9PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKGlzRHJhZ092ZXIpIHtcbiAgICAgICAgICBkYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgZmlsZXVwbG9hZCB3aWRnZXQgbGlzdGVucyBmb3IgY2hhbmdlIGV2ZW50cyBvbiBmaWxlIGlucHV0IGZpZWxkcyBkZWZpbmVkXG4gIC8vIHZpYSBmaWxlSW5wdXQgc2V0dGluZyBhbmQgcGFzdGUgb3IgZHJvcCBldmVudHMgb2YgdGhlIGdpdmVuIGRyb3Bab25lLlxuICAvLyBJbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBqUXVlcnkgV2lkZ2V0IG1ldGhvZHMsIHRoZSBmaWxldXBsb2FkIHdpZGdldFxuICAvLyBleHBvc2VzIHRoZSBcImFkZFwiIGFuZCBcInNlbmRcIiBtZXRob2RzLCB0byBhZGQgb3IgZGlyZWN0bHkgc2VuZCBmaWxlcyB1c2luZ1xuICAvLyB0aGUgZmlsZXVwbG9hZCBBUEkuXG4gIC8vIEJ5IGRlZmF1bHQsIGZpbGVzIGFkZGVkIHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgcGFzdGUsIGRyYWcgJiBkcm9wIG9yXG4gIC8vIFwiYWRkXCIgbWV0aG9kIGFyZSB1cGxvYWRlZCBpbW1lZGlhdGVseSwgYnV0IGl0IGlzIHBvc3NpYmxlIHRvIG92ZXJyaWRlXG4gIC8vIHRoZSBcImFkZFwiIGNhbGxiYWNrIG9wdGlvbiB0byBxdWV1ZSBmaWxlIHVwbG9hZHMuXG4gICQud2lkZ2V0KCdibHVlaW1wLmZpbGV1cGxvYWQnLCB7XG4gICAgb3B0aW9uczoge1xuICAgICAgLy8gVGhlIGRyb3AgdGFyZ2V0IGVsZW1lbnQocyksIGJ5IHRoZSBkZWZhdWx0IHRoZSBjb21wbGV0ZSBkb2N1bWVudC5cbiAgICAgIC8vIFNldCB0byBudWxsIHRvIGRpc2FibGUgZHJhZyAmIGRyb3Agc3VwcG9ydDpcbiAgICAgIGRyb3Bab25lOiAkKGRvY3VtZW50KSxcbiAgICAgIC8vIFRoZSBwYXN0ZSB0YXJnZXQgZWxlbWVudChzKSwgYnkgdGhlIGRlZmF1bHQgdW5kZWZpbmVkLlxuICAgICAgLy8gU2V0IHRvIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IG9iamVjdCB0byBlbmFibGUgZmlsZSBwYXN0aW5nOlxuICAgICAgcGFzdGVab25lOiB1bmRlZmluZWQsXG4gICAgICAvLyBUaGUgZmlsZSBpbnB1dCBmaWVsZChzKSwgdGhhdCBhcmUgbGlzdGVuZWQgdG8gZm9yIGNoYW5nZSBldmVudHMuXG4gICAgICAvLyBJZiB1bmRlZmluZWQsIGl0IGlzIHNldCB0byB0aGUgZmlsZSBpbnB1dCBmaWVsZHMgaW5zaWRlXG4gICAgICAvLyBvZiB0aGUgd2lkZ2V0IGVsZW1lbnQgb24gcGx1Z2luIGluaXRpYWxpemF0aW9uLlxuICAgICAgLy8gU2V0IHRvIG51bGwgdG8gZGlzYWJsZSB0aGUgY2hhbmdlIGxpc3RlbmVyLlxuICAgICAgZmlsZUlucHV0OiB1bmRlZmluZWQsXG4gICAgICAvLyBCeSBkZWZhdWx0LCB0aGUgZmlsZSBpbnB1dCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIGEgY2xvbmUgYWZ0ZXJcbiAgICAgIC8vIGVhY2ggaW5wdXQgZmllbGQgY2hhbmdlIGV2ZW50LiBUaGlzIGlzIHJlcXVpcmVkIGZvciBpZnJhbWUgdHJhbnNwb3J0XG4gICAgICAvLyBxdWV1ZXMgYW5kIGFsbG93cyBjaGFuZ2UgZXZlbnRzIHRvIGJlIGZpcmVkIGZvciB0aGUgc2FtZSBmaWxlXG4gICAgICAvLyBzZWxlY3Rpb24sIGJ1dCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byBmYWxzZTpcbiAgICAgIHJlcGxhY2VGaWxlSW5wdXQ6IHRydWUsXG4gICAgICAvLyBUaGUgcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSBmaWxlIGZvcm0gZGF0YSAodGhlIHJlcXVlc3QgYXJndW1lbnQgbmFtZSkuXG4gICAgICAvLyBJZiB1bmRlZmluZWQgb3IgZW1wdHksIHRoZSBuYW1lIHByb3BlcnR5IG9mIHRoZSBmaWxlIGlucHV0IGZpZWxkIGlzXG4gICAgICAvLyB1c2VkLCBvciBcImZpbGVzW11cIiBpZiB0aGUgZmlsZSBpbnB1dCBuYW1lIHByb3BlcnR5IGlzIGFsc28gZW1wdHksXG4gICAgICAvLyBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5nczpcbiAgICAgIHBhcmFtTmFtZTogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgZWFjaCBmaWxlIG9mIGEgc2VsZWN0aW9uIGlzIHVwbG9hZGVkIHVzaW5nIGFuIGluZGl2aWR1YWxcbiAgICAgIC8vIHJlcXVlc3QgZm9yIFhIUiB0eXBlIHVwbG9hZHMuIFNldCB0byBmYWxzZSB0byB1cGxvYWQgZmlsZVxuICAgICAgLy8gc2VsZWN0aW9ucyBpbiBvbmUgcmVxdWVzdCBlYWNoOlxuICAgICAgc2luZ2xlRmlsZVVwbG9hZHM6IHRydWUsXG4gICAgICAvLyBUbyBsaW1pdCB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lIFhIUiByZXF1ZXN0LFxuICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6XG4gICAgICBsaW1pdE11bHRpRmlsZVVwbG9hZHM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgb3B0aW9uIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lXG4gICAgICAvLyBYSFIgcmVxdWVzdCB0byBrZWVwIHRoZSByZXF1ZXN0IHNpemUgdW5kZXIgb3IgZXF1YWwgdG8gdGhlIGRlZmluZWRcbiAgICAgIC8vIGxpbWl0IGluIGJ5dGVzOlxuICAgICAgbGltaXRNdWx0aUZpbGVVcGxvYWRTaXplOiB1bmRlZmluZWQsXG4gICAgICAvLyBNdWx0aXBhcnQgZmlsZSB1cGxvYWRzIGFkZCBhIG51bWJlciBvZiBieXRlcyB0byBlYWNoIHVwbG9hZGVkIGZpbGUsXG4gICAgICAvLyB0aGVyZWZvcmUgdGhlIGZvbGxvd2luZyBvcHRpb24gYWRkcyBhbiBvdmVyaGVhZCBmb3IgZWFjaCBmaWxlIHVzZWRcbiAgICAgIC8vIGluIHRoZSBsaW1pdE11bHRpRmlsZVVwbG9hZFNpemUgY29uZmlndXJhdGlvbjpcbiAgICAgIGxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZU92ZXJoZWFkOiA1MTIsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBpc3N1ZSBhbGwgZmlsZSB1cGxvYWQgcmVxdWVzdHNcbiAgICAgIC8vIGluIGEgc2VxdWVudGlhbCBvcmRlcjpcbiAgICAgIHNlcXVlbnRpYWxVcGxvYWRzOiBmYWxzZSxcbiAgICAgIC8vIFRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY29uY3VycmVudCB1cGxvYWRzLFxuICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6XG4gICAgICBsaW1pdENvbmN1cnJlbnRVcGxvYWRzOiB1bmRlZmluZWQsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBmb3JjZSBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICBmb3JjZUlmcmFtZVRyYW5zcG9ydDogZmFsc2UsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdGhlIGxvY2F0aW9uIG9mIGEgcmVkaXJlY3QgdXJsIG9uIHRoZVxuICAgICAgLy8gb3JpZ2luIHNlcnZlciwgZm9yIGNyb3NzLWRvbWFpbiBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICByZWRpcmVjdDogdW5kZWZpbmVkLFxuICAgICAgLy8gVGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgcmVkaXJlY3QgdXJsLCBzZW50IGFzIHBhcnQgb2YgdGhlIGZvcm1cbiAgICAgIC8vIGRhdGEgYW5kIHNldCB0byAncmVkaXJlY3QnIGlmIHRoaXMgb3B0aW9uIGlzIGVtcHR5OlxuICAgICAgcmVkaXJlY3RQYXJhbU5hbWU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0aGUgbG9jYXRpb24gb2YgYSBwb3N0TWVzc2FnZSB3aW5kb3csXG4gICAgICAvLyB0byBlbmFibGUgcG9zdE1lc3NhZ2UgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICBwb3N0TWVzc2FnZTogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgWEhSIGZpbGUgdXBsb2FkcyBhcmUgc2VudCBhcyBtdWx0aXBhcnQvZm9ybS1kYXRhLlxuICAgICAgLy8gVGhlIGlmcmFtZSB0cmFuc3BvcnQgaXMgYWx3YXlzIHVzaW5nIG11bHRpcGFydC9mb3JtLWRhdGEuXG4gICAgICAvLyBTZXQgdG8gZmFsc2UgdG8gZW5hYmxlIG5vbi1tdWx0aXBhcnQgWEhSIHVwbG9hZHM6XG4gICAgICBtdWx0aXBhcnQ6IHRydWUsXG4gICAgICAvLyBUbyB1cGxvYWQgbGFyZ2UgZmlsZXMgaW4gc21hbGxlciBjaHVua3MsIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvblxuICAgICAgLy8gdG8gYSBwcmVmZXJyZWQgbWF4aW11bSBjaHVuayBzaXplLiBJZiBzZXQgdG8gMCwgbnVsbCBvciB1bmRlZmluZWQsXG4gICAgICAvLyBvciB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1aXJlZCBCbG9iIEFQSSwgZmlsZXMgd2lsbFxuICAgICAgLy8gYmUgdXBsb2FkZWQgYXMgYSB3aG9sZS5cbiAgICAgIG1heENodW5rU2l6ZTogdW5kZWZpbmVkLFxuICAgICAgLy8gV2hlbiBhIG5vbi1tdWx0aXBhcnQgdXBsb2FkIG9yIGEgY2h1bmtlZCBtdWx0aXBhcnQgdXBsb2FkIGhhcyBiZWVuXG4gICAgICAvLyBhYm9ydGVkLCB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZXN1bWUgdGhlIHVwbG9hZCBieSBzZXR0aW5nXG4gICAgICAvLyBpdCB0byB0aGUgc2l6ZSBvZiB0aGUgYWxyZWFkeSB1cGxvYWRlZCBieXRlcy4gVGhpcyBvcHRpb24gaXMgbW9zdFxuICAgICAgLy8gdXNlZnVsIHdoZW4gbW9kaWZ5aW5nIHRoZSBvcHRpb25zIG9iamVjdCBpbnNpZGUgb2YgdGhlIFwiYWRkXCIgb3JcbiAgICAgIC8vIFwic2VuZFwiIGNhbGxiYWNrcywgYXMgdGhlIG9wdGlvbnMgYXJlIGNsb25lZCBmb3IgZWFjaCBmaWxlIHVwbG9hZC5cbiAgICAgIHVwbG9hZGVkQnl0ZXM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIGZpbGUgdXBsb2FkcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZVxuICAgICAgLy8gZ2xvYmFsIHByb2dyZXNzIGNhbGN1bGF0aW9uLiBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gZmFsc2UgdG9cbiAgICAgIC8vIHByZXZlbnQgcmVjYWxjdWxhdGluZyB0aGUgZ2xvYmFsIHByb2dyZXNzIGRhdGE6XG4gICAgICByZWNhbGN1bGF0ZVByb2dyZXNzOiB0cnVlLFxuICAgICAgLy8gSW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIGNhbGN1bGF0ZSBhbmQgdHJpZ2dlciBwcm9ncmVzcyBldmVudHM6XG4gICAgICBwcm9ncmVzc0ludGVydmFsOiAxMDAsXG4gICAgICAvLyBJbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgdG8gY2FsY3VsYXRlIHByb2dyZXNzIGJpdHJhdGU6XG4gICAgICBiaXRyYXRlSW50ZXJ2YWw6IDUwMCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIHVwbG9hZHMgYXJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSB3aGVuIGFkZGluZyBmaWxlczpcbiAgICAgIGF1dG9VcGxvYWQ6IHRydWUsXG4gICAgICAvLyBCeSBkZWZhdWx0LCBkdXBsaWNhdGUgZmlsZSBuYW1lcyBhcmUgZXhwZWN0ZWQgdG8gYmUgaGFuZGxlZCBvblxuICAgICAgLy8gdGhlIHNlcnZlci1zaWRlLiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSAoZS5nLiB3aGVuIHVwbG9hZGluZ1xuICAgICAgLy8gZmlsZXMgZGlyZWN0bHkgdG8gQW1hem9uIFMzKSwgdGhlIGZvbGxvd2luZyBvcHRpb24gY2FuIGJlIHNldCB0b1xuICAgICAgLy8gYW4gZW1wdHkgb2JqZWN0IG9yIGFuIG9iamVjdCBtYXBwaW5nIGV4aXN0aW5nIGZpbGVuYW1lcywgZS5nLjpcbiAgICAgIC8vIHsgXCJpbWFnZS5qcGdcIjogdHJ1ZSwgXCJpbWFnZSAoMSkuanBnXCI6IHRydWUgfVxuICAgICAgLy8gSWYgaXQgaXMgc2V0LCBhbGwgZmlsZXMgd2lsbCBiZSB1cGxvYWRlZCB3aXRoIHVuaXF1ZSBmaWxlbmFtZXMsXG4gICAgICAvLyBhZGRpbmcgaW5jcmVhc2luZyBudW1iZXIgc3VmZml4ZXMgaWYgbmVjZXNzYXJ5LCBlLmcuOlxuICAgICAgLy8gXCJpbWFnZSAoMikuanBnXCJcbiAgICAgIHVuaXF1ZUZpbGVuYW1lczogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBFcnJvciBhbmQgaW5mbyBtZXNzYWdlczpcbiAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgIHVwbG9hZGVkQnl0ZXM6ICdVcGxvYWRlZCBieXRlcyBleGNlZWQgZmlsZSBzaXplJ1xuICAgICAgfSxcblxuICAgICAgLy8gVHJhbnNsYXRpb24gZnVuY3Rpb24sIGdldHMgdGhlIG1lc3NhZ2Uga2V5IHRvIGJlIHRyYW5zbGF0ZWRcbiAgICAgIC8vIGFuZCBhbiBvYmplY3Qgd2l0aCBjb250ZXh0IHNwZWNpZmljIGRhdGEgYXMgYXJndW1lbnRzOlxuICAgICAgaTE4bjogZnVuY3Rpb24gKG1lc3NhZ2UsIGNvbnRleHQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VzW21lc3NhZ2VdIHx8IG1lc3NhZ2UudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAkLmVhY2goY29udGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgneycgKyBrZXkgKyAnfScsIHZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIEFkZGl0aW9uYWwgZm9ybSBkYXRhIHRvIGJlIHNlbnQgYWxvbmcgd2l0aCB0aGUgZmlsZSB1cGxvYWRzIGNhbiBiZSBzZXRcbiAgICAgIC8vIHVzaW5nIHRoaXMgb3B0aW9uLCB3aGljaCBhY2NlcHRzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBuYW1lIGFuZFxuICAgICAgLy8gdmFsdWUgcHJvcGVydGllcywgYSBmdW5jdGlvbiByZXR1cm5pbmcgc3VjaCBhbiBhcnJheSwgYSBGb3JtRGF0YVxuICAgICAgLy8gb2JqZWN0IChmb3IgWEhSIGZpbGUgdXBsb2FkcyksIG9yIGEgc2ltcGxlIG9iamVjdC5cbiAgICAgIC8vIFRoZSBmb3JtIG9mIHRoZSBmaXJzdCBmaWxlSW5wdXQgaXMgZ2l2ZW4gYXMgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbjpcbiAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoZm9ybSkge1xuICAgICAgICByZXR1cm4gZm9ybS5zZXJpYWxpemVBcnJheSgpO1xuICAgICAgfSxcblxuICAgICAgLy8gVGhlIGFkZCBjYWxsYmFjayBpcyBpbnZva2VkIGFzIHNvb24gYXMgZmlsZXMgYXJlIGFkZGVkIHRvIHRoZSBmaWxldXBsb2FkXG4gICAgICAvLyB3aWRnZXQgKHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgZHJhZyAmIGRyb3AsIHBhc3RlIG9yIGFkZCBBUEkgY2FsbCkuXG4gICAgICAvLyBJZiB0aGUgc2luZ2xlRmlsZVVwbG9hZHMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoaXMgY2FsbGJhY2sgd2lsbCBiZVxuICAgICAgLy8gY2FsbGVkIG9uY2UgZm9yIGVhY2ggZmlsZSBpbiB0aGUgc2VsZWN0aW9uIGZvciBYSFIgZmlsZSB1cGxvYWRzLCBlbHNlXG4gICAgICAvLyBvbmNlIGZvciBlYWNoIGZpbGUgc2VsZWN0aW9uLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSB1cGxvYWQgc3RhcnRzIHdoZW4gdGhlIHN1Ym1pdCBtZXRob2QgaXMgaW52b2tlZCBvbiB0aGUgZGF0YSBwYXJhbWV0ZXIuXG4gICAgICAvLyBUaGUgZGF0YSBvYmplY3QgY29udGFpbnMgYSBmaWxlcyBwcm9wZXJ0eSBob2xkaW5nIHRoZSBhZGRlZCBmaWxlc1xuICAgICAgLy8gYW5kIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgcGx1Z2luIG9wdGlvbnMgYXMgd2VsbCBhcyBkZWZpbmUgYWpheCBzZXR0aW5ncy5cbiAgICAgIC8vXG4gICAgICAvLyBMaXN0ZW5lcnMgZm9yIHRoaXMgY2FsbGJhY2sgY2FuIGFsc28gYmUgYm91bmQgdGhlIGZvbGxvd2luZyB3YXk6XG4gICAgICAvLyAub24oJ2ZpbGV1cGxvYWRhZGQnLCBmdW5jKTtcbiAgICAgIC8vXG4gICAgICAvLyBkYXRhLnN1Ym1pdCgpIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBhbmQgYWxsb3dzIHRvIGF0dGFjaCBhZGRpdGlvbmFsXG4gICAgICAvLyBoYW5kbGVycyB1c2luZyBqUXVlcnkncyBEZWZlcnJlZCBjYWxsYmFja3M6XG4gICAgICAvLyBkYXRhLnN1Ym1pdCgpLmRvbmUoZnVuYykuZmFpbChmdW5jKS5hbHdheXMoZnVuYyk7XG4gICAgICBhZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhLmF1dG9VcGxvYWQgfHxcbiAgICAgICAgICAoZGF0YS5hdXRvVXBsb2FkICE9PSBmYWxzZSAmJlxuICAgICAgICAgICAgJCh0aGlzKS5maWxldXBsb2FkKCdvcHRpb24nLCAnYXV0b1VwbG9hZCcpKVxuICAgICAgICApIHtcbiAgICAgICAgICBkYXRhLnByb2Nlc3MoKS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRhdGEuc3VibWl0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIE90aGVyIGNhbGxiYWNrczpcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdWJtaXQgZXZlbnQgb2YgZWFjaCBmaWxlIHVwbG9hZDpcbiAgICAgIC8vIHN1Ym1pdDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdWJtaXQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdGFydCBvZiBlYWNoIGZpbGUgdXBsb2FkIHJlcXVlc3Q6XG4gICAgICAvLyBzZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZHNlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgdXBsb2FkczpcbiAgICAgIC8vIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZG9uZScsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZmFpbGVkIChhYm9ydCBvciBlcnJvcikgdXBsb2FkczpcbiAgICAgIC8vIGZhaWw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZmFpbCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgY29tcGxldGVkIChzdWNjZXNzLCBhYm9ydCBvciBlcnJvcikgcmVxdWVzdHM6XG4gICAgICAvLyBhbHdheXM6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkYWx3YXlzJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgLy8gcHJvZ3Jlc3M6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcHJvZ3Jlc3MnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGdsb2JhbCB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgLy8gcHJvZ3Jlc3NhbGw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcHJvZ3Jlc3NhbGwnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZHMgc3RhcnQsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAvLyBzdGFydDogZnVuY3Rpb24gKGUpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdGFydCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgdXBsb2FkcyBzdG9wLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAvLyBzdG9wOiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZHN0b3AnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGNoYW5nZSBldmVudHMgb2YgdGhlIGZpbGVJbnB1dChzKTpcbiAgICAgIC8vIGNoYW5nZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaGFuZ2UnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHBhc3RlIGV2ZW50cyB0byB0aGUgcGFzdGVab25lKHMpOlxuICAgICAgLy8gcGFzdGU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcGFzdGUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGRyb3AgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcbiAgICAgIC8vIGRyb3A6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZHJvcCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZHJhZ292ZXIgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcbiAgICAgIC8vIGRyYWdvdmVyOiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZGRyYWdvdmVyJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGJlZm9yZSB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdCAoYmVmb3JlIGZvcm0gZGF0YSBpbml0aWFsaXphdGlvbik6XG4gICAgICAvLyBjaHVua2JlZm9yZXNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdDpcbiAgICAgIC8vIGNodW5rc2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua3NlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgY2h1bmsgdXBsb2FkczpcbiAgICAgIC8vIGNodW5rZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2RvbmUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIGNodW5rIHVwbG9hZHM6XG4gICAgICAvLyBjaHVua2ZhaWw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtmYWlsJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBjb21wbGV0ZWQgKHN1Y2Nlc3MsIGFib3J0IG9yIGVycm9yKSBjaHVuayB1cGxvYWQgcmVxdWVzdHM6XG4gICAgICAvLyBjaHVua2Fsd2F5czogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2Fsd2F5cycsIGZ1bmMpO1xuXG4gICAgICAvLyBUaGUgcGx1Z2luIG9wdGlvbnMgYXJlIHVzZWQgYXMgc2V0dGluZ3Mgb2JqZWN0IGZvciB0aGUgYWpheCBjYWxscy5cbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIGpRdWVyeSBhamF4IHNldHRpbmdzIHJlcXVpcmVkIGZvciB0aGUgZmlsZSB1cGxvYWRzOlxuICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgY29udGVudFR5cGU6IGZhbHNlLFxuICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgdGltZW91dDogMFxuICAgIH0sXG5cbiAgICAvLyBqUXVlcnkgdmVyc2lvbnMgYmVmb3JlIDEuOCByZXF1aXJlIHByb21pc2UucGlwZSBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzXG4gICAgLy8gdXNlZCwgYXMgcHJvbWlzZS50aGVuIGluIG9sZGVyIHZlcnNpb25zIGhhcyBhIGRpZmZlcmVudCBiZWhhdmlvciwgc2VlOlxuICAgIC8vIGh0dHBzOi8vYmxvZy5qcXVlcnkuY29tLzIwMTIvMDgvMDkvanF1ZXJ5LTEtOC1yZWxlYXNlZC9cbiAgICAvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTEwMTBcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvcHVsbC8zNDM1XG4gICAgX3Byb21pc2VQaXBlOiAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHBhcnRzID0gJC5mbi5qcXVlcnkuc3BsaXQoJy4nKTtcbiAgICAgIHJldHVybiBOdW1iZXIocGFydHNbMF0pID4gMSB8fCBOdW1iZXIocGFydHNbMV0pID4gNyA/ICd0aGVuJyA6ICdwaXBlJztcbiAgICB9KSgpLFxuXG4gICAgLy8gQSBsaXN0IG9mIG9wdGlvbnMgdGhhdCByZXF1aXJlIHJlaW5pdGlhbGl6aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQvb3JcbiAgICAvLyBzcGVjaWFsIGluaXRpYWxpemF0aW9uIGNvZGU6XG4gICAgX3NwZWNpYWxPcHRpb25zOiBbXG4gICAgICAnZmlsZUlucHV0JyxcbiAgICAgICdkcm9wWm9uZScsXG4gICAgICAncGFzdGVab25lJyxcbiAgICAgICdtdWx0aXBhcnQnLFxuICAgICAgJ2ZvcmNlSWZyYW1lVHJhbnNwb3J0J1xuICAgIF0sXG5cbiAgICBfYmxvYlNsaWNlOlxuICAgICAgJC5zdXBwb3J0LmJsb2JTbGljZSAmJlxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2xpY2UgPSB0aGlzLnNsaWNlIHx8IHRoaXMud2Via2l0U2xpY2UgfHwgdGhpcy5tb3pTbGljZTtcbiAgICAgICAgcmV0dXJuIHNsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9LFxuXG4gICAgX0JpdHJhdGVUaW1lcjogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy50aW1lc3RhbXAgPSBEYXRlLm5vdyA/IERhdGUubm93KCkgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIHRoaXMubG9hZGVkID0gMDtcbiAgICAgIHRoaXMuYml0cmF0ZSA9IDA7XG4gICAgICB0aGlzLmdldEJpdHJhdGUgPSBmdW5jdGlvbiAobm93LCBsb2FkZWQsIGludGVydmFsKSB7XG4gICAgICAgIHZhciB0aW1lRGlmZiA9IG5vdyAtIHRoaXMudGltZXN0YW1wO1xuICAgICAgICBpZiAoIXRoaXMuYml0cmF0ZSB8fCAhaW50ZXJ2YWwgfHwgdGltZURpZmYgPiBpbnRlcnZhbCkge1xuICAgICAgICAgIHRoaXMuYml0cmF0ZSA9IChsb2FkZWQgLSB0aGlzLmxvYWRlZCkgKiAoMTAwMCAvIHRpbWVEaWZmKSAqIDg7XG4gICAgICAgICAgdGhpcy5sb2FkZWQgPSBsb2FkZWQ7XG4gICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBub3c7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYml0cmF0ZTtcbiAgICAgIH07XG4gICAgfSxcblxuICAgIF9pc1hIUlVwbG9hZDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICFvcHRpb25zLmZvcmNlSWZyYW1lVHJhbnNwb3J0ICYmXG4gICAgICAgICgoIW9wdGlvbnMubXVsdGlwYXJ0ICYmICQuc3VwcG9ydC54aHJGaWxlVXBsb2FkKSB8fFxuICAgICAgICAgICQuc3VwcG9ydC54aHJGb3JtRGF0YUZpbGVVcGxvYWQpXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBfZ2V0Rm9ybURhdGE6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgZm9ybURhdGE7XG4gICAgICBpZiAoJC50eXBlKG9wdGlvbnMuZm9ybURhdGEpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhKG9wdGlvbnMuZm9ybSk7XG4gICAgICB9XG4gICAgICBpZiAoJC5pc0FycmF5KG9wdGlvbnMuZm9ybURhdGEpKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgaWYgKCQudHlwZShvcHRpb25zLmZvcm1EYXRhKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9ybURhdGEgPSBbXTtcbiAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIGZvcm1EYXRhLnB1c2goeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZm9ybURhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcblxuICAgIF9nZXRUb3RhbDogZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICB2YXIgdG90YWwgPSAwO1xuICAgICAgJC5lYWNoKGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgdG90YWwgKz0gZmlsZS5zaXplIHx8IDE7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9LFxuXG4gICAgX2luaXRQcm9ncmVzc09iamVjdDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgdmFyIHByb2dyZXNzID0ge1xuICAgICAgICBsb2FkZWQ6IDAsXG4gICAgICAgIHRvdGFsOiAwLFxuICAgICAgICBiaXRyYXRlOiAwXG4gICAgICB9O1xuICAgICAgaWYgKG9iai5fcHJvZ3Jlc3MpIHtcbiAgICAgICAgJC5leHRlbmQob2JqLl9wcm9ncmVzcywgcHJvZ3Jlc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqLl9wcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFJlc3BvbnNlT2JqZWN0OiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICB2YXIgcHJvcDtcbiAgICAgIGlmIChvYmouX3Jlc3BvbnNlKSB7XG4gICAgICAgIGZvciAocHJvcCBpbiBvYmouX3Jlc3BvbnNlKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmouX3Jlc3BvbnNlLCBwcm9wKSkge1xuICAgICAgICAgICAgZGVsZXRlIG9iai5fcmVzcG9uc2VbcHJvcF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmouX3Jlc3BvbnNlID0ge307XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9vblByb2dyZXNzOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKGUubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgICAgICAgbG9hZGVkO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YS5fdGltZSAmJlxuICAgICAgICAgIGRhdGEucHJvZ3Jlc3NJbnRlcnZhbCAmJlxuICAgICAgICAgIG5vdyAtIGRhdGEuX3RpbWUgPCBkYXRhLnByb2dyZXNzSW50ZXJ2YWwgJiZcbiAgICAgICAgICBlLmxvYWRlZCAhPT0gZS50b3RhbFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5fdGltZSA9IG5vdztcbiAgICAgICAgbG9hZGVkID1cbiAgICAgICAgICBNYXRoLmZsb29yKFxuICAgICAgICAgICAgKGUubG9hZGVkIC8gZS50b3RhbCkgKiAoZGF0YS5jaHVua1NpemUgfHwgZGF0YS5fcHJvZ3Jlc3MudG90YWwpXG4gICAgICAgICAgKSArIChkYXRhLnVwbG9hZGVkQnl0ZXMgfHwgMCk7XG4gICAgICAgIC8vIEFkZCB0aGUgZGlmZmVyZW5jZSBmcm9tIHRoZSBwcmV2aW91c2x5IGxvYWRlZCBzdGF0ZVxuICAgICAgICAvLyB0byB0aGUgZ2xvYmFsIGxvYWRlZCBjb3VudGVyOlxuICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gbG9hZGVkIC0gZGF0YS5fcHJvZ3Jlc3MubG9hZGVkO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcy5iaXRyYXRlID0gdGhpcy5fYml0cmF0ZVRpbWVyLmdldEJpdHJhdGUoXG4gICAgICAgICAgbm93LFxuICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCxcbiAgICAgICAgICBkYXRhLmJpdHJhdGVJbnRlcnZhbFxuICAgICAgICApO1xuICAgICAgICBkYXRhLl9wcm9ncmVzcy5sb2FkZWQgPSBkYXRhLmxvYWRlZCA9IGxvYWRlZDtcbiAgICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IGRhdGEuX2JpdHJhdGVUaW1lci5nZXRCaXRyYXRlKFxuICAgICAgICAgIG5vdyxcbiAgICAgICAgICBsb2FkZWQsXG4gICAgICAgICAgZGF0YS5iaXRyYXRlSW50ZXJ2YWxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVHJpZ2dlciBhIGN1c3RvbSBwcm9ncmVzcyBldmVudCB3aXRoIGEgdG90YWwgZGF0YSBwcm9wZXJ0eSBzZXRcbiAgICAgICAgLy8gdG8gdGhlIGZpbGUgc2l6ZShzKSBvZiB0aGUgY3VycmVudCB1cGxvYWQgYW5kIGEgbG9hZGVkIGRhdGFcbiAgICAgICAgLy8gcHJvcGVydHkgY2FsY3VsYXRlZCBhY2NvcmRpbmdseTpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAncHJvZ3Jlc3MnLFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICBkYXRhXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRyaWdnZXIgYSBnbG9iYWwgcHJvZ3Jlc3MgZXZlbnQgZm9yIGFsbCBjdXJyZW50IGZpbGUgdXBsb2FkcyxcbiAgICAgICAgLy8gaW5jbHVkaW5nIGFqYXggY2FsbHMgcXVldWVkIGZvciBzZXF1ZW50aWFsIGZpbGUgdXBsb2FkczpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAncHJvZ3Jlc3NhbGwnLFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzYWxsJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICB0aGlzLl9wcm9ncmVzc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHhociA9IG9wdGlvbnMueGhyID8gb3B0aW9ucy54aHIoKSA6ICQuYWpheFNldHRpbmdzLnhocigpO1xuICAgICAgLy8gQWNjZXNzIHRvIHRoZSBuYXRpdmUgWEhSIG9iamVjdCBpcyByZXF1aXJlZCB0byBhZGQgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAvLyBmb3IgdGhlIHVwbG9hZCBwcm9ncmVzcyBldmVudDpcbiAgICAgIGlmICh4aHIudXBsb2FkKSB7XG4gICAgICAgICQoeGhyLnVwbG9hZCkub24oJ3Byb2dyZXNzJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICB2YXIgb2UgPSBlLm9yaWdpbmFsRXZlbnQ7XG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcm9ncmVzcyBldmVudCBwcm9wZXJ0aWVzIGdldCBjb3BpZWQgb3ZlcjpcbiAgICAgICAgICBlLmxlbmd0aENvbXB1dGFibGUgPSBvZS5sZW5ndGhDb21wdXRhYmxlO1xuICAgICAgICAgIGUubG9hZGVkID0gb2UubG9hZGVkO1xuICAgICAgICAgIGUudG90YWwgPSBvZS50b3RhbDtcbiAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKGUsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0aW9ucy54aHIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHhocjtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2RlaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgeGhyID0gb3B0aW9ucy54aHIgPyBvcHRpb25zLnhocigpIDogJC5hamF4U2V0dGluZ3MueGhyKCk7XG4gICAgICBpZiAoeGhyLnVwbG9hZCkge1xuICAgICAgICAkKHhoci51cGxvYWQpLm9mZigncHJvZ3Jlc3MnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2lzSW5zdGFuY2VPZjogZnVuY3Rpb24gKHR5cGUsIG9iaikge1xuICAgICAgLy8gQ3Jvc3MtZnJhbWUgaW5zdGFuY2VvZiBjaGVja1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgdHlwZSArICddJztcbiAgICB9LFxuXG4gICAgX2dldFVuaXF1ZUZpbGVuYW1lOiBmdW5jdGlvbiAobmFtZSwgbWFwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgICBpZiAobWFwW25hbWVdKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKFxuICAgICAgICAgIC8oPzogXFwoKFtcXGRdKylcXCkpPyhcXC5bXi5dKyk/JC8sXG4gICAgICAgICAgZnVuY3Rpb24gKF8sIHAxLCBwMikge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gcDEgPyBOdW1iZXIocDEpICsgMSA6IDE7XG4gICAgICAgICAgICB2YXIgZXh0ID0gcDIgfHwgJyc7XG4gICAgICAgICAgICByZXR1cm4gJyAoJyArIGluZGV4ICsgJyknICsgZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFVuaXF1ZUZpbGVuYW1lKG5hbWUsIG1hcCk7XG4gICAgICB9XG4gICAgICBtYXBbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfSxcblxuICAgIF9pbml0WEhSRGF0YTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZm9ybURhdGEsXG4gICAgICAgIGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdLFxuICAgICAgICAvLyBJZ25vcmUgbm9uLW11bHRpcGFydCBzZXR0aW5nIGlmIG5vdCBzdXBwb3J0ZWQ6XG4gICAgICAgIG11bHRpcGFydCA9IG9wdGlvbnMubXVsdGlwYXJ0IHx8ICEkLnN1cHBvcnQueGhyRmlsZVVwbG9hZCxcbiAgICAgICAgcGFyYW1OYW1lID1cbiAgICAgICAgICAkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknXG4gICAgICAgICAgICA/IG9wdGlvbnMucGFyYW1OYW1lWzBdXG4gICAgICAgICAgICA6IG9wdGlvbnMucGFyYW1OYW1lO1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0gJC5leHRlbmQoe30sIG9wdGlvbnMuaGVhZGVycyk7XG4gICAgICBpZiAob3B0aW9ucy5jb250ZW50UmFuZ2UpIHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LVJhbmdlJ10gPSBvcHRpb25zLmNvbnRlbnRSYW5nZTtcbiAgICAgIH1cbiAgICAgIGlmICghbXVsdGlwYXJ0IHx8IG9wdGlvbnMuYmxvYiB8fCAhdGhpcy5faXNJbnN0YW5jZU9mKCdGaWxlJywgZmlsZSkpIHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPVxuICAgICAgICAgICdhdHRhY2htZW50OyBmaWxlbmFtZT1cIicgK1xuICAgICAgICAgIGVuY29kZVVSSShmaWxlLnVwbG9hZE5hbWUgfHwgZmlsZS5uYW1lKSArXG4gICAgICAgICAgJ1wiJztcbiAgICAgIH1cbiAgICAgIGlmICghbXVsdGlwYXJ0KSB7XG4gICAgICAgIG9wdGlvbnMuY29udGVudFR5cGUgPSBmaWxlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IG9wdGlvbnMuYmxvYiB8fCBmaWxlO1xuICAgICAgfSBlbHNlIGlmICgkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgLy8gd2luZG93LnBvc3RNZXNzYWdlIGRvZXMgbm90IGFsbG93IHNlbmRpbmcgRm9ybURhdGFcbiAgICAgICAgICAvLyBvYmplY3RzLCBzbyB3ZSBqdXN0IGFkZCB0aGUgRmlsZS9CbG9iIG9iamVjdHMgdG9cbiAgICAgICAgICAvLyB0aGUgZm9ybURhdGEgYXJyYXkgYW5kIGxldCB0aGUgcG9zdE1lc3NhZ2Ugd2luZG93XG4gICAgICAgICAgLy8gY3JlYXRlIHRoZSBGb3JtRGF0YSBvYmplY3Qgb3V0IG9mIHRoaXMgYXJyYXk6XG4gICAgICAgICAgZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5ibG9iKSB7XG4gICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogcGFyYW1OYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy5ibG9iXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOlxuICAgICAgICAgICAgICAgICAgKCQudHlwZShvcHRpb25zLnBhcmFtTmFtZSkgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbU5hbWVbaW5kZXhdKSB8fFxuICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWxlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGF0Ll9pc0luc3RhbmNlT2YoJ0Zvcm1EYXRhJywgb3B0aW9ucy5mb3JtRGF0YSkpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhID0gb3B0aW9ucy5mb3JtRGF0YTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgICQuZWFjaCh0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKSwgZnVuY3Rpb24gKGluZGV4LCBmaWVsZCkge1xuICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZmllbGQubmFtZSwgZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLmJsb2IpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICBvcHRpb25zLmJsb2IsXG4gICAgICAgICAgICAgIGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBjaGVjayBhbGxvd3MgdGhlIHRlc3RzIHRvIHJ1biB3aXRoXG4gICAgICAgICAgICAgIC8vIGR1bW15IG9iamVjdHM6XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGF0Ll9pc0luc3RhbmNlT2YoJ0ZpbGUnLCBmaWxlKSB8fFxuICAgICAgICAgICAgICAgIHRoYXQuX2lzSW5zdGFuY2VPZignQmxvYicsIGZpbGUpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudW5pcXVlRmlsZW5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHRoYXQuX2dldFVuaXF1ZUZpbGVuYW1lKFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51bmlxdWVGaWxlbmFtZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICgkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyYW1OYW1lW2luZGV4XSkgfHxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgICAgICAgIGZpbGVOYW1lXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IGZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgLy8gQmxvYiByZWZlcmVuY2UgaXMgbm90IG5lZWRlZCBhbnltb3JlLCBmcmVlIG1lbW9yeTpcbiAgICAgIG9wdGlvbnMuYmxvYiA9IG51bGw7XG4gICAgfSxcblxuICAgIF9pbml0SWZyYW1lU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGFyZ2V0SG9zdCA9ICQoJzxhPjwvYT4nKS5wcm9wKCdocmVmJywgb3B0aW9ucy51cmwpLnByb3AoJ2hvc3QnKTtcbiAgICAgIC8vIFNldHRpbmcgdGhlIGRhdGFUeXBlIHRvIGlmcmFtZSBlbmFibGVzIHRoZSBpZnJhbWUgdHJhbnNwb3J0OlxuICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdpZnJhbWUgJyArIChvcHRpb25zLmRhdGFUeXBlIHx8ICcnKTtcbiAgICAgIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IGFjY2VwdHMgYSBzZXJpYWxpemVkIGFycmF5IGFzIGZvcm0gZGF0YTpcbiAgICAgIG9wdGlvbnMuZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTtcbiAgICAgIC8vIEFkZCByZWRpcmVjdCB1cmwgdG8gZm9ybSBkYXRhIG9uIGNyb3NzLWRvbWFpbiB1cGxvYWRzOlxuICAgICAgaWYgKG9wdGlvbnMucmVkaXJlY3QgJiYgdGFyZ2V0SG9zdCAmJiB0YXJnZXRIb3N0ICE9PSBsb2NhdGlvbi5ob3N0KSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybURhdGEucHVzaCh7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5yZWRpcmVjdFBhcmFtTmFtZSB8fCAncmVkaXJlY3QnLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb25zLnJlZGlyZWN0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdERhdGFTZXR0aW5nczogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NodW5rZWRVcGxvYWQob3B0aW9ucywgdHJ1ZSkpIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdFhIUkRhdGEob3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2luaXRQcm9ncmVzc0xpc3RlbmVyKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyB0aGUgZGF0YVR5cGUgdG8gcG9zdG1lc3NhZ2UgZW5hYmxlcyB0aGVcbiAgICAgICAgICAvLyBwb3N0TWVzc2FnZSB0cmFuc3BvcnQ6XG4gICAgICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdwb3N0bWVzc2FnZSAnICsgKG9wdGlvbnMuZGF0YVR5cGUgfHwgJycpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pbml0SWZyYW1lU2V0dGluZ3Mob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRQYXJhbU5hbWU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCksXG4gICAgICAgIHBhcmFtTmFtZSA9IG9wdGlvbnMucGFyYW1OYW1lO1xuICAgICAgaWYgKCFwYXJhbU5hbWUpIHtcbiAgICAgICAgcGFyYW1OYW1lID0gW107XG4gICAgICAgIGZpbGVJbnB1dC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpLFxuICAgICAgICAgICAgbmFtZSA9IGlucHV0LnByb3AoJ25hbWUnKSB8fCAnZmlsZXNbXScsXG4gICAgICAgICAgICBpID0gKGlucHV0LnByb3AoJ2ZpbGVzJykgfHwgWzFdKS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGkpIHtcbiAgICAgICAgICAgIHBhcmFtTmFtZS5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcGFyYW1OYW1lLmxlbmd0aCkge1xuICAgICAgICAgIHBhcmFtTmFtZSA9IFtmaWxlSW5wdXQucHJvcCgnbmFtZScpIHx8ICdmaWxlc1tdJ107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoISQuaXNBcnJheShwYXJhbU5hbWUpKSB7XG4gICAgICAgIHBhcmFtTmFtZSA9IFtwYXJhbU5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmFtTmFtZTtcbiAgICB9LFxuXG4gICAgX2luaXRGb3JtU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAvLyBSZXRyaWV2ZSBtaXNzaW5nIG9wdGlvbnMgZnJvbSB0aGUgaW5wdXQgZmllbGQgYW5kIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBmb3JtLCBpZiBhdmFpbGFibGU6XG4gICAgICBpZiAoIW9wdGlvbnMuZm9ybSB8fCAhb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xuICAgICAgICBvcHRpb25zLmZvcm0gPSAkKG9wdGlvbnMuZmlsZUlucHV0LnByb3AoJ2Zvcm0nKSk7XG4gICAgICAgIC8vIElmIHRoZSBnaXZlbiBmaWxlIGlucHV0IGRvZXNuJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGZvcm0sXG4gICAgICAgIC8vIHVzZSB0aGUgZGVmYXVsdCB3aWRnZXQgZmlsZSBpbnB1dCdzIGZvcm06XG4gICAgICAgIGlmICghb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xuICAgICAgICAgIG9wdGlvbnMuZm9ybSA9ICQodGhpcy5vcHRpb25zLmZpbGVJbnB1dC5wcm9wKCdmb3JtJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvcHRpb25zLnBhcmFtTmFtZSA9IHRoaXMuX2dldFBhcmFtTmFtZShvcHRpb25zKTtcbiAgICAgIGlmICghb3B0aW9ucy51cmwpIHtcbiAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLmZvcm0ucHJvcCgnYWN0aW9uJykgfHwgbG9jYXRpb24uaHJlZjtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIG11c3QgYmUgXCJQT1NUXCIgb3IgXCJQVVRcIjpcbiAgICAgIG9wdGlvbnMudHlwZSA9IChcbiAgICAgICAgb3B0aW9ucy50eXBlIHx8XG4gICAgICAgICgkLnR5cGUob3B0aW9ucy5mb3JtLnByb3AoJ21ldGhvZCcpKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBvcHRpb25zLmZvcm0ucHJvcCgnbWV0aG9kJykpIHx8XG4gICAgICAgICcnXG4gICAgICApLnRvVXBwZXJDYXNlKCk7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BPU1QnICYmXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BVVCcgJiZcbiAgICAgICAgb3B0aW9ucy50eXBlICE9PSAnUEFUQ0gnXG4gICAgICApIHtcbiAgICAgICAgb3B0aW9ucy50eXBlID0gJ1BPU1QnO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybUFjY2VwdENoYXJzZXQgPSBvcHRpb25zLmZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2dldEFKQVhTZXR0aW5nczogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgZGF0YSk7XG4gICAgICB0aGlzLl9pbml0Rm9ybVNldHRpbmdzKG9wdGlvbnMpO1xuICAgICAgdGhpcy5faW5pdERhdGFTZXR0aW5ncyhvcHRpb25zKTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0sXG5cbiAgICAvLyBqUXVlcnkgMS42IGRvZXNuJ3QgcHJvdmlkZSAuc3RhdGUoKSxcbiAgICAvLyB3aGlsZSBqUXVlcnkgMS44KyByZW1vdmVkIC5pc1JlamVjdGVkKCkgYW5kIC5pc1Jlc29sdmVkKCk6XG4gICAgX2dldERlZmVycmVkU3RhdGU6IGZ1bmN0aW9uIChkZWZlcnJlZCkge1xuICAgICAgaWYgKGRlZmVycmVkLnN0YXRlKSB7XG4gICAgICAgIHJldHVybiBkZWZlcnJlZC5zdGF0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmVycmVkLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICByZXR1cm4gJ3Jlc29sdmVkJztcbiAgICAgIH1cbiAgICAgIGlmIChkZWZlcnJlZC5pc1JlamVjdGVkKCkpIHtcbiAgICAgICAgcmV0dXJuICdyZWplY3RlZCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ3BlbmRpbmcnO1xuICAgIH0sXG5cbiAgICAvLyBNYXBzIGpxWEhSIGNhbGxiYWNrcyB0byB0aGUgZXF1aXZhbGVudFxuICAgIC8vIG1ldGhvZHMgb2YgdGhlIGdpdmVuIFByb21pc2Ugb2JqZWN0OlxuICAgIF9lbmhhbmNlUHJvbWlzZTogZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgIHByb21pc2Uuc3VjY2VzcyA9IHByb21pc2UuZG9uZTtcbiAgICAgIHByb21pc2UuZXJyb3IgPSBwcm9taXNlLmZhaWw7XG4gICAgICBwcm9taXNlLmNvbXBsZXRlID0gcHJvbWlzZS5hbHdheXM7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9LFxuXG4gICAgLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIFByb21pc2Ugb2JqZWN0IGVuaGFuY2VkIHdpdGhcbiAgICAvLyB0aGUganFYSFIgbWV0aG9kcyBhYm9ydCwgc3VjY2VzcywgZXJyb3IgYW5kIGNvbXBsZXRlOlxuICAgIF9nZXRYSFJQcm9taXNlOiBmdW5jdGlvbiAocmVzb2x2ZU9yUmVqZWN0LCBjb250ZXh0LCBhcmdzKSB7XG4gICAgICB2YXIgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgdGhpcy5vcHRpb25zLmNvbnRleHQgfHwgcHJvbWlzZTtcbiAgICAgIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IHRydWUpIHtcbiAgICAgICAgZGZkLnJlc29sdmVXaXRoKGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfSBlbHNlIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGRmZC5yZWplY3RXaXRoKGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcHJvbWlzZS5hYm9ydCA9IGRmZC5wcm9taXNlO1xuICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VQcm9taXNlKHByb21pc2UpO1xuICAgIH0sXG5cbiAgICAvLyBBZGRzIGNvbnZlbmllbmNlIG1ldGhvZHMgdG8gdGhlIGRhdGEgY2FsbGJhY2sgYXJndW1lbnQ6XG4gICAgX2FkZENvbnZlbmllbmNlTWV0aG9kczogZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZ2V0UHJvbWlzZSA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlV2l0aCh0aGF0LCBhcmdzKS5wcm9taXNlKCk7XG4gICAgICAgIH07XG4gICAgICBkYXRhLnByb2Nlc3MgPSBmdW5jdGlvbiAocmVzb2x2ZUZ1bmMsIHJlamVjdEZ1bmMpIHtcbiAgICAgICAgaWYgKHJlc29sdmVGdW5jIHx8IHJlamVjdEZ1bmMpIHtcbiAgICAgICAgICBkYXRhLl9wcm9jZXNzUXVldWUgPSB0aGlzLl9wcm9jZXNzUXVldWUgPSAodGhpcy5fcHJvY2Vzc1F1ZXVlIHx8XG4gICAgICAgICAgICBnZXRQcm9taXNlKFt0aGlzXSkpXG4gICAgICAgICAgICBbdGhhdC5fcHJvbWlzZVBpcGVdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdFdpdGgodGhhdCwgW2RhdGFdKS5wcm9taXNlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGdldFByb21pc2UoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBbdGhhdC5fcHJvbWlzZVBpcGVdKHJlc29sdmVGdW5jLCByZWplY3RGdW5jKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1F1ZXVlIHx8IGdldFByb21pc2UoW3RoaXNdKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUoKSAhPT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgZGF0YS5qcVhIUiA9IHRoaXMuanFYSFIgPVxuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgICQuRXZlbnQoJ3N1Ym1pdCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICkgIT09IGZhbHNlICYmIHRoYXQuX29uU2VuZChlLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5qcVhIUiB8fCB0aGF0Ll9nZXRYSFJQcm9taXNlKCk7XG4gICAgICB9O1xuICAgICAgZGF0YS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuanFYSFIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5qcVhIUi5hYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXJyb3JUaHJvd24gPSAnYWJvcnQnO1xuICAgICAgICB0aGF0Ll90cmlnZ2VyKCdmYWlsJywgbnVsbCwgdGhpcyk7XG4gICAgICAgIHJldHVybiB0aGF0Ll9nZXRYSFJQcm9taXNlKGZhbHNlKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5qcVhIUikge1xuICAgICAgICAgIHJldHVybiB0aGF0Ll9nZXREZWZlcnJlZFN0YXRlKHRoaXMuanFYSFIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9wcm9jZXNzUXVldWUpIHtcbiAgICAgICAgICByZXR1cm4gdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZGF0YS5wcm9jZXNzaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICF0aGlzLmpxWEhSICYmXG4gICAgICAgICAgdGhpcy5fcHJvY2Vzc1F1ZXVlICYmXG4gICAgICAgICAgdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpID09PSAncGVuZGluZydcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgICB9O1xuICAgICAgZGF0YS5yZXNwb25zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlO1xuICAgICAgfTtcbiAgICB9LFxuXG4gICAgLy8gUGFyc2VzIHRoZSBSYW5nZSBoZWFkZXIgZnJvbSB0aGUgc2VydmVyIHJlc3BvbnNlXG4gICAgLy8gYW5kIHJldHVybnMgdGhlIHVwbG9hZGVkIGJ5dGVzOlxuICAgIF9nZXRVcGxvYWRlZEJ5dGVzOiBmdW5jdGlvbiAoanFYSFIpIHtcbiAgICAgIHZhciByYW5nZSA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCdSYW5nZScpLFxuICAgICAgICBwYXJ0cyA9IHJhbmdlICYmIHJhbmdlLnNwbGl0KCctJyksXG4gICAgICAgIHVwcGVyQnl0ZXNQb3MgPSBwYXJ0cyAmJiBwYXJ0cy5sZW5ndGggPiAxICYmIHBhcnNlSW50KHBhcnRzWzFdLCAxMCk7XG4gICAgICByZXR1cm4gdXBwZXJCeXRlc1BvcyAmJiB1cHBlckJ5dGVzUG9zICsgMTtcbiAgICB9LFxuXG4gICAgLy8gVXBsb2FkcyBhIGZpbGUgaW4gbXVsdGlwbGUsIHNlcXVlbnRpYWwgcmVxdWVzdHNcbiAgICAvLyBieSBzcGxpdHRpbmcgdGhlIGZpbGUgdXAgaW4gbXVsdGlwbGUgYmxvYiBjaHVua3MuXG4gICAgLy8gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSwgb25seSB0ZXN0cyBpZiB0aGUgZmlsZVxuICAgIC8vIHNob3VsZCBiZSB1cGxvYWRlZCBpbiBjaHVua3MsIGJ1dCBkb2VzIG5vdCBpbnZva2UgYW55XG4gICAgLy8gdXBsb2FkIHJlcXVlc3RzOlxuICAgIF9jaHVua2VkVXBsb2FkOiBmdW5jdGlvbiAob3B0aW9ucywgdGVzdE9ubHkpIHtcbiAgICAgIG9wdGlvbnMudXBsb2FkZWRCeXRlcyA9IG9wdGlvbnMudXBsb2FkZWRCeXRlcyB8fCAwO1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBmaWxlID0gb3B0aW9ucy5maWxlc1swXSxcbiAgICAgICAgZnMgPSBmaWxlLnNpemUsXG4gICAgICAgIHViID0gb3B0aW9ucy51cGxvYWRlZEJ5dGVzLFxuICAgICAgICBtY3MgPSBvcHRpb25zLm1heENodW5rU2l6ZSB8fCBmcyxcbiAgICAgICAgc2xpY2UgPSB0aGlzLl9ibG9iU2xpY2UsXG4gICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCksXG4gICAgICAgIGpxWEhSLFxuICAgICAgICB1cGxvYWQ7XG4gICAgICBpZiAoXG4gICAgICAgICEoXG4gICAgICAgICAgdGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucykgJiZcbiAgICAgICAgICBzbGljZSAmJlxuICAgICAgICAgICh1YiB8fCAoJC50eXBlKG1jcykgPT09ICdmdW5jdGlvbicgPyBtY3Mob3B0aW9ucykgOiBtY3MpIDwgZnMpXG4gICAgICAgICkgfHxcbiAgICAgICAgb3B0aW9ucy5kYXRhXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRlc3RPbmx5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHViID49IGZzKSB7XG4gICAgICAgIGZpbGUuZXJyb3IgPSBvcHRpb25zLmkxOG4oJ3VwbG9hZGVkQnl0ZXMnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFhIUlByb21pc2UoZmFsc2UsIG9wdGlvbnMuY29udGV4dCwgW1xuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICBmaWxlLmVycm9yXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgICAgLy8gVGhlIGNodW5rIHVwbG9hZCBtZXRob2Q6XG4gICAgICB1cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIENsb25lIHRoZSBvcHRpb25zIG9iamVjdCBmb3IgZWFjaCBjaHVuayB1cGxvYWQ6XG4gICAgICAgIHZhciBvID0gJC5leHRlbmQoe30sIG9wdGlvbnMpLFxuICAgICAgICAgIGN1cnJlbnRMb2FkZWQgPSBvLl9wcm9ncmVzcy5sb2FkZWQ7XG4gICAgICAgIG8uYmxvYiA9IHNsaWNlLmNhbGwoXG4gICAgICAgICAgZmlsZSxcbiAgICAgICAgICB1YixcbiAgICAgICAgICB1YiArICgkLnR5cGUobWNzKSA9PT0gJ2Z1bmN0aW9uJyA/IG1jcyhvKSA6IG1jcyksXG4gICAgICAgICAgZmlsZS50eXBlXG4gICAgICAgICk7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IGNodW5rIHNpemUsIGFzIHRoZSBibG9iIGl0c2VsZlxuICAgICAgICAvLyB3aWxsIGJlIGRlcmVmZXJlbmNlZCBhZnRlciBkYXRhIHByb2Nlc3Npbmc6XG4gICAgICAgIG8uY2h1bmtTaXplID0gby5ibG9iLnNpemU7XG4gICAgICAgIC8vIEV4cG9zZSB0aGUgY2h1bmsgYnl0ZXMgcG9zaXRpb24gcmFuZ2U6XG4gICAgICAgIG8uY29udGVudFJhbmdlID1cbiAgICAgICAgICAnYnl0ZXMgJyArIHViICsgJy0nICsgKHViICsgby5jaHVua1NpemUgLSAxKSArICcvJyArIGZzO1xuICAgICAgICAvLyBUcmlnZ2VyIGNodW5rYmVmb3Jlc2VuZCB0byBhbGxvdyBmb3JtIGRhdGEgdG8gYmUgdXBkYXRlZCBmb3IgdGhpcyBjaHVua1xuICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2JlZm9yZXNlbmQnLCBudWxsLCBvKTtcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgdXBsb2FkIGRhdGEgKHRoZSBibG9iIGFuZCBwb3RlbnRpYWwgZm9ybSBkYXRhKTpcbiAgICAgICAgdGhhdC5faW5pdFhIUkRhdGEobyk7XG4gICAgICAgIC8vIEFkZCBwcm9ncmVzcyBsaXN0ZW5lcnMgZm9yIHRoaXMgY2h1bmsgdXBsb2FkOlxuICAgICAgICB0aGF0Ll9pbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAganFYSFIgPSAoXG4gICAgICAgICAgKHRoYXQuX3RyaWdnZXIoJ2NodW5rc2VuZCcsIG51bGwsIG8pICE9PSBmYWxzZSAmJiAkLmFqYXgobykpIHx8XG4gICAgICAgICAgdGhhdC5fZ2V0WEhSUHJvbWlzZShmYWxzZSwgby5jb250ZXh0KVxuICAgICAgICApXG4gICAgICAgICAgLmRvbmUoZnVuY3Rpb24gKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICAgICAgICAgIHViID0gdGhhdC5fZ2V0VXBsb2FkZWRCeXRlcyhqcVhIUikgfHwgdWIgKyBvLmNodW5rU2l6ZTtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHByb2dyZXNzIGV2ZW50IGlmIG5vIGZpbmFsIHByb2dyZXNzIGV2ZW50XG4gICAgICAgICAgICAvLyB3aXRoIGxvYWRlZCBlcXVhbGluZyB0b3RhbCBoYXMgYmVlbiB0cmlnZ2VyZWRcbiAgICAgICAgICAgIC8vIGZvciB0aGlzIGNodW5rOlxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMb2FkZWQgKyBvLmNodW5rU2l6ZSAtIG8uX3Byb2dyZXNzLmxvYWRlZCkge1xuICAgICAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKFxuICAgICAgICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge1xuICAgICAgICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGxvYWRlZDogdWIgLSBvLnVwbG9hZGVkQnl0ZXMsXG4gICAgICAgICAgICAgICAgICB0b3RhbDogdWIgLSBvLnVwbG9hZGVkQnl0ZXNcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBvXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnVwbG9hZGVkQnl0ZXMgPSBvLnVwbG9hZGVkQnl0ZXMgPSB1YjtcbiAgICAgICAgICAgIG8ucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgby50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcbiAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rZG9uZScsIG51bGwsIG8pO1xuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmthbHdheXMnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIGlmICh1YiA8IGZzKSB7XG4gICAgICAgICAgICAgIC8vIEZpbGUgdXBsb2FkIG5vdCB5ZXQgY29tcGxldGUsXG4gICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgY2h1bms6XG4gICAgICAgICAgICAgIHVwbG9hZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGZkLnJlc29sdmVXaXRoKG8uY29udGV4dCwgW3Jlc3VsdCwgdGV4dFN0YXR1cywganFYSFJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5mYWlsKGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgIG8udGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7XG4gICAgICAgICAgICBvLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2ZhaWwnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rYWx3YXlzJywgbnVsbCwgbyk7XG4gICAgICAgICAgICBkZmQucmVqZWN0V2l0aChvLmNvbnRleHQsIFtqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd25dKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hbHdheXMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhhdC5fZGVpbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgIHByb21pc2UuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgfTtcbiAgICAgIHVwbG9hZCgpO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfSxcblxuICAgIF9iZWZvcmVTZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCkge1xuICAgICAgICAvLyB0aGUgc3RhcnQgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gdXBsb2FkIHN0YXJ0c1xuICAgICAgICAvLyBhbmQgbm8gb3RoZXIgdXBsb2FkcyBhcmUgY3VycmVudGx5IHJ1bm5pbmcsXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAgIHRoaXMuX3RyaWdnZXIoJ3N0YXJ0Jyk7XG4gICAgICAgIC8vIFNldCB0aW1lciBmb3IgZ2xvYmFsIGJpdHJhdGUgcHJvZ3Jlc3MgY2FsY3VsYXRpb246XG4gICAgICAgIHRoaXMuX2JpdHJhdGVUaW1lciA9IG5ldyB0aGlzLl9CaXRyYXRlVGltZXIoKTtcbiAgICAgICAgLy8gUmVzZXQgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCA9IHRoaXMuX3Byb2dyZXNzLnRvdGFsID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MuYml0cmF0ZSA9IDA7XG4gICAgICB9XG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRhaW5lciBvYmplY3RzIGZvciB0aGUgLnJlc3BvbnNlKCkgYW5kXG4gICAgICAvLyAucHJvZ3Jlc3MoKSBtZXRob2RzIG9uIHRoZSBkYXRhIG9iamVjdCBhcmUgYXZhaWxhYmxlXG4gICAgICAvLyBhbmQgcmVzZXQgdG8gdGhlaXIgaW5pdGlhbCBzdGF0ZTpcbiAgICAgIHRoaXMuX2luaXRSZXNwb25zZU9iamVjdChkYXRhKTtcbiAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdChkYXRhKTtcbiAgICAgIGRhdGEuX3Byb2dyZXNzLmxvYWRlZCA9IGRhdGEubG9hZGVkID0gZGF0YS51cGxvYWRlZEJ5dGVzIHx8IDA7XG4gICAgICBkYXRhLl9wcm9ncmVzcy50b3RhbCA9IGRhdGEudG90YWwgPSB0aGlzLl9nZXRUb3RhbChkYXRhLmZpbGVzKSB8fCAxO1xuICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IDA7XG4gICAgICB0aGlzLl9hY3RpdmUgKz0gMTtcbiAgICAgIC8vIEluaXRpYWxpemUgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gZGF0YS5sb2FkZWQ7XG4gICAgICB0aGlzLl9wcm9ncmVzcy50b3RhbCArPSBkYXRhLnRvdGFsO1xuICAgIH0sXG5cbiAgICBfb25Eb25lOiBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUiwgb3B0aW9ucykge1xuICAgICAgdmFyIHRvdGFsID0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWwsXG4gICAgICAgIHJlc3BvbnNlID0gb3B0aW9ucy5fcmVzcG9uc2U7XG4gICAgICBpZiAob3B0aW9ucy5fcHJvZ3Jlc3MubG9hZGVkIDwgdG90YWwpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgcHJvZ3Jlc3MgZXZlbnQgaWYgbm8gZmluYWwgcHJvZ3Jlc3MgZXZlbnRcbiAgICAgICAgLy8gd2l0aCBsb2FkZWQgZXF1YWxpbmcgdG90YWwgaGFzIGJlZW4gdHJpZ2dlcmVkOlxuICAgICAgICB0aGlzLl9vblByb2dyZXNzKFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge1xuICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGxvYWRlZDogdG90YWwsXG4gICAgICAgICAgICB0b3RhbDogdG90YWxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXNwb25zZS5yZXN1bHQgPSBvcHRpb25zLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgcmVzcG9uc2UuanFYSFIgPSBvcHRpb25zLmpxWEhSID0ganFYSFI7XG4gICAgICB0aGlzLl90cmlnZ2VyKCdkb25lJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vbkZhaWw6IGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24sIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZXNwb25zZSA9IG9wdGlvbnMuX3Jlc3BvbnNlO1xuICAgICAgaWYgKG9wdGlvbnMucmVjYWxjdWxhdGVQcm9ncmVzcykge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGZhaWxlZCAoZXJyb3Igb3IgYWJvcnQpIGZpbGUgdXBsb2FkIGZyb21cbiAgICAgICAgLy8gdGhlIGdsb2JhbCBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkIC09IG9wdGlvbnMuX3Byb2dyZXNzLmxvYWRlZDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudG90YWwgLT0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWw7XG4gICAgICB9XG4gICAgICByZXNwb25zZS5qcVhIUiA9IG9wdGlvbnMuanFYSFIgPSBqcVhIUjtcbiAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgcmVzcG9uc2UuZXJyb3JUaHJvd24gPSBvcHRpb25zLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICB0aGlzLl90cmlnZ2VyKCdmYWlsJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vbkFsd2F5czogZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvciwgb3B0aW9ucykge1xuICAgICAgLy8ganFYSFJvclJlc3VsdCwgdGV4dFN0YXR1cyBhbmQganFYSFJvckVycm9yIGFyZSBhZGRlZCB0byB0aGVcbiAgICAgIC8vIG9wdGlvbnMgb2JqZWN0IHZpYSBkb25lIGFuZCBmYWlsIGNhbGxiYWNrc1xuICAgICAgdGhpcy5fdHJpZ2dlcignYWx3YXlzJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vblNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICBpZiAoIWRhdGEuc3VibWl0KSB7XG4gICAgICAgIHRoaXMuX2FkZENvbnZlbmllbmNlTWV0aG9kcyhlLCBkYXRhKTtcbiAgICAgIH1cbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAganFYSFIsXG4gICAgICAgIGFib3J0ZWQsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIHBpcGUsXG4gICAgICAgIG9wdGlvbnMgPSB0aGF0Ll9nZXRBSkFYU2V0dGluZ3MoZGF0YSksXG4gICAgICAgIHNlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhhdC5fc2VuZGluZyArPSAxO1xuICAgICAgICAgIC8vIFNldCB0aW1lciBmb3IgYml0cmF0ZSBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgICBvcHRpb25zLl9iaXRyYXRlVGltZXIgPSBuZXcgdGhhdC5fQml0cmF0ZVRpbWVyKCk7XG4gICAgICAgICAganFYSFIgPVxuICAgICAgICAgICAganFYSFIgfHxcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgKChhYm9ydGVkIHx8XG4gICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgICAgICdzZW5kJyxcbiAgICAgICAgICAgICAgICAgICQuRXZlbnQoJ3NlbmQnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICAgICkgPT09IGZhbHNlKSAmJlxuICAgICAgICAgICAgICAgIHRoYXQuX2dldFhIUlByb21pc2UoZmFsc2UsIG9wdGlvbnMuY29udGV4dCwgYWJvcnRlZCkpIHx8XG4gICAgICAgICAgICAgIHRoYXQuX2NodW5rZWRVcGxvYWQob3B0aW9ucykgfHxcbiAgICAgICAgICAgICAgJC5hamF4KG9wdGlvbnMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25Eb25lKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZmFpbChmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25GYWlsKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5hbHdheXMoZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvcikge1xuICAgICAgICAgICAgICAgIHRoYXQuX2RlaW5pdFByb2dyZXNzTGlzdGVuZXIob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25BbHdheXMoXG4gICAgICAgICAgICAgICAgICBqcVhIUm9yUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgdGV4dFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIGpxWEhSb3JFcnJvcixcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoYXQuX3NlbmRpbmcgLT0gMTtcbiAgICAgICAgICAgICAgICB0aGF0Ll9hY3RpdmUgLT0gMTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgJiZcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyA+IHRoYXQuX3NlbmRpbmdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBuZXh0IHF1ZXVlZCB1cGxvYWQsXG4gICAgICAgICAgICAgICAgICAvLyB0aGF0IGhhcyBub3QgYmVlbiBhYm9ydGVkOlxuICAgICAgICAgICAgICAgICAgdmFyIG5leHRTbG90ID0gdGhhdC5fc2xvdHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0U2xvdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZShuZXh0U2xvdCkgPT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgIG5leHRTbG90LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXh0U2xvdCA9IHRoYXQuX3Nsb3RzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9hY3RpdmUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBzdG9wIGNhbGxiYWNrIGlzIHRyaWdnZXJlZCB3aGVuIGFsbCB1cGxvYWRzIGhhdmVcbiAgICAgICAgICAgICAgICAgIC8vIGJlZW4gY29tcGxldGVkLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdzdG9wJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4ganFYSFI7XG4gICAgICAgIH07XG4gICAgICB0aGlzLl9iZWZvcmVTZW5kKGUsIG9wdGlvbnMpO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm9wdGlvbnMuc2VxdWVudGlhbFVwbG9hZHMgfHxcbiAgICAgICAgKHRoaXMub3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzICYmXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPD0gdGhpcy5fc2VuZGluZylcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPiAxKSB7XG4gICAgICAgICAgc2xvdCA9ICQuRGVmZXJyZWQoKTtcbiAgICAgICAgICB0aGlzLl9zbG90cy5wdXNoKHNsb3QpO1xuICAgICAgICAgIHBpcGUgPSBzbG90W3RoYXQuX3Byb21pc2VQaXBlXShzZW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX3NlcXVlbmNlW3RoYXQuX3Byb21pc2VQaXBlXShzZW5kLCBzZW5kKTtcbiAgICAgICAgICBwaXBlID0gdGhpcy5fc2VxdWVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBwaXBlZCBQcm9taXNlIG9iamVjdCwgZW5oYW5jZWQgd2l0aCBhbiBhYm9ydCBtZXRob2QsXG4gICAgICAgIC8vIHdoaWNoIGlzIGRlbGVnYXRlZCB0byB0aGUganFYSFIgb2JqZWN0IG9mIHRoZSBjdXJyZW50IHVwbG9hZCxcbiAgICAgICAgLy8gYW5kIGpxWEhSIGNhbGxiYWNrcyBtYXBwZWQgdG8gdGhlIGVxdWl2YWxlbnQgUHJvbWlzZSBtZXRob2RzOlxuICAgICAgICBwaXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGFib3J0ZWQgPSBbdW5kZWZpbmVkLCAnYWJvcnQnLCAnYWJvcnQnXTtcbiAgICAgICAgICBpZiAoIWpxWEhSKSB7XG4gICAgICAgICAgICBpZiAoc2xvdCkge1xuICAgICAgICAgICAgICBzbG90LnJlamVjdFdpdGgob3B0aW9ucy5jb250ZXh0LCBhYm9ydGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5oYW5jZVByb21pc2UocGlwZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VuZCgpO1xuICAgIH0sXG5cbiAgICBfb25BZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCBkYXRhKSxcbiAgICAgICAgZmlsZXMgPSBkYXRhLmZpbGVzLFxuICAgICAgICBmaWxlc0xlbmd0aCA9IGZpbGVzLmxlbmd0aCxcbiAgICAgICAgbGltaXQgPSBvcHRpb25zLmxpbWl0TXVsdGlGaWxlVXBsb2FkcyxcbiAgICAgICAgbGltaXRTaXplID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemUsXG4gICAgICAgIG92ZXJoZWFkID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemVPdmVyaGVhZCxcbiAgICAgICAgYmF0Y2hTaXplID0gMCxcbiAgICAgICAgcGFyYW1OYW1lID0gdGhpcy5fZ2V0UGFyYW1OYW1lKG9wdGlvbnMpLFxuICAgICAgICBwYXJhbU5hbWVTZXQsXG4gICAgICAgIHBhcmFtTmFtZVNsaWNlLFxuICAgICAgICBmaWxlU2V0LFxuICAgICAgICBpLFxuICAgICAgICBqID0gMDtcbiAgICAgIGlmICghZmlsZXNMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGxpbWl0U2l6ZSAmJiBmaWxlc1swXS5zaXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGltaXRTaXplID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAhKG9wdGlvbnMuc2luZ2xlRmlsZVVwbG9hZHMgfHwgbGltaXQgfHwgbGltaXRTaXplKSB8fFxuICAgICAgICAhdGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucylcbiAgICAgICkge1xuICAgICAgICBmaWxlU2V0ID0gW2ZpbGVzXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW3BhcmFtTmFtZV07XG4gICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucy5zaW5nbGVGaWxlVXBsb2FkcyB8fCBsaW1pdFNpemUpICYmIGxpbWl0KSB7XG4gICAgICAgIGZpbGVTZXQgPSBbXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWxlc0xlbmd0aDsgaSArPSBsaW1pdCkge1xuICAgICAgICAgIGZpbGVTZXQucHVzaChmaWxlcy5zbGljZShpLCBpICsgbGltaXQpKTtcbiAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShpLCBpICsgbGltaXQpO1xuICAgICAgICAgIGlmICghcGFyYW1OYW1lU2xpY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyYW1OYW1lU2V0LnB1c2gocGFyYW1OYW1lU2xpY2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnNpbmdsZUZpbGVVcGxvYWRzICYmIGxpbWl0U2l6ZSkge1xuICAgICAgICBmaWxlU2V0ID0gW107XG4gICAgICAgIHBhcmFtTmFtZVNldCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7IGkgPSBpICsgMSkge1xuICAgICAgICAgIGJhdGNoU2l6ZSArPSBmaWxlc1tpXS5zaXplICsgb3ZlcmhlYWQ7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaSArIDEgPT09IGZpbGVzTGVuZ3RoIHx8XG4gICAgICAgICAgICBiYXRjaFNpemUgKyBmaWxlc1tpICsgMV0uc2l6ZSArIG92ZXJoZWFkID4gbGltaXRTaXplIHx8XG4gICAgICAgICAgICAobGltaXQgJiYgaSArIDEgLSBqID49IGxpbWl0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmlsZVNldC5wdXNoKGZpbGVzLnNsaWNlKGosIGkgKyAxKSk7XG4gICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShqLCBpICsgMSk7XG4gICAgICAgICAgICBpZiAoIXBhcmFtTmFtZVNsaWNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtTmFtZVNldC5wdXNoKHBhcmFtTmFtZVNsaWNlKTtcbiAgICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgICAgIGJhdGNoU2l6ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbU5hbWVTZXQgPSBwYXJhbU5hbWU7XG4gICAgICB9XG4gICAgICBkYXRhLm9yaWdpbmFsRmlsZXMgPSBmaWxlcztcbiAgICAgICQuZWFjaChmaWxlU2V0IHx8IGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIG5ld0RhdGEgPSAkLmV4dGVuZCh7fSwgZGF0YSk7XG4gICAgICAgIG5ld0RhdGEuZmlsZXMgPSBmaWxlU2V0ID8gZWxlbWVudCA6IFtlbGVtZW50XTtcbiAgICAgICAgbmV3RGF0YS5wYXJhbU5hbWUgPSBwYXJhbU5hbWVTZXRbaW5kZXhdO1xuICAgICAgICB0aGF0Ll9pbml0UmVzcG9uc2VPYmplY3QobmV3RGF0YSk7XG4gICAgICAgIHRoYXQuX2luaXRQcm9ncmVzc09iamVjdChuZXdEYXRhKTtcbiAgICAgICAgdGhhdC5fYWRkQ29udmVuaWVuY2VNZXRob2RzKGUsIG5ld0RhdGEpO1xuICAgICAgICByZXN1bHQgPSB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICdhZGQnLFxuICAgICAgICAgICQuRXZlbnQoJ2FkZCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgbmV3RGF0YVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBfcmVwbGFjZUZpbGVJbnB1dDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBpbnB1dCA9IGRhdGEuZmlsZUlucHV0LFxuICAgICAgICBpbnB1dENsb25lID0gaW5wdXQuY2xvbmUodHJ1ZSksXG4gICAgICAgIHJlc3RvcmVGb2N1cyA9IGlucHV0LmlzKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgLy8gQWRkIGEgcmVmZXJlbmNlIGZvciB0aGUgbmV3IGNsb25lZCBmaWxlIGlucHV0IHRvIHRoZSBkYXRhIGFyZ3VtZW50OlxuICAgICAgZGF0YS5maWxlSW5wdXRDbG9uZSA9IGlucHV0Q2xvbmU7XG4gICAgICAkKCc8Zm9ybT48L2Zvcm0+JykuYXBwZW5kKGlucHV0Q2xvbmUpWzBdLnJlc2V0KCk7XG4gICAgICAvLyBEZXRhY2hpbmcgYWxsb3dzIHRvIGluc2VydCB0aGUgZmlsZUlucHV0IG9uIGFub3RoZXIgZm9ybVxuICAgICAgLy8gd2l0aG91dCBsb3NpbmcgdGhlIGZpbGUgaW5wdXQgdmFsdWU6XG4gICAgICBpbnB1dC5hZnRlcihpbnB1dENsb25lKS5kZXRhY2goKTtcbiAgICAgIC8vIElmIHRoZSBmaWxlSW5wdXQgaGFkIGZvY3VzIGJlZm9yZSBpdCB3YXMgZGV0YWNoZWQsXG4gICAgICAvLyByZXN0b3JlIGZvY3VzIHRvIHRoZSBpbnB1dENsb25lLlxuICAgICAgaWYgKHJlc3RvcmVGb2N1cykge1xuICAgICAgICBpbnB1dENsb25lLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBtZW1vcnkgbGVha3Mgd2l0aCB0aGUgZGV0YWNoZWQgZmlsZSBpbnB1dDpcbiAgICAgICQuY2xlYW5EYXRhKGlucHV0Lm9mZigncmVtb3ZlJykpO1xuICAgICAgLy8gUmVwbGFjZSB0aGUgb3JpZ2luYWwgZmlsZSBpbnB1dCBlbGVtZW50IGluIHRoZSBmaWxlSW5wdXRcbiAgICAgIC8vIGVsZW1lbnRzIHNldCB3aXRoIHRoZSBjbG9uZSwgd2hpY2ggaGFzIGJlZW4gY29waWVkIGluY2x1ZGluZ1xuICAgICAgLy8gZXZlbnQgaGFuZGxlcnM6XG4gICAgICB0aGlzLm9wdGlvbnMuZmlsZUlucHV0ID0gdGhpcy5vcHRpb25zLmZpbGVJbnB1dC5tYXAoZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgIGlmIChlbCA9PT0gaW5wdXRbMF0pIHtcbiAgICAgICAgICByZXR1cm4gaW5wdXRDbG9uZVswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWw7XG4gICAgICB9KTtcbiAgICAgIC8vIElmIHRoZSB3aWRnZXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgb24gdGhlIGZpbGUgaW5wdXQgaXRzZWxmLFxuICAgICAgLy8gb3ZlcnJpZGUgdGhpcy5lbGVtZW50IHdpdGggdGhlIGZpbGUgaW5wdXQgY2xvbmU6XG4gICAgICBpZiAoaW5wdXRbMF0gPT09IHRoaXMuZWxlbWVudFswXSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBpbnB1dENsb25lO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaGFuZGxlRmlsZVRyZWVFbnRyeTogZnVuY3Rpb24gKGVudHJ5LCBwYXRoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgZW50cmllcyA9IFtdLFxuICAgICAgICBkaXJSZWFkZXIsXG4gICAgICAgIGVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgaWYgKGUgJiYgIWUuZW50cnkpIHtcbiAgICAgICAgICAgIGUuZW50cnkgPSBlbnRyeTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2luY2UgJC53aGVuIHJldHVybnMgaW1tZWRpYXRlbHkgaWYgb25lXG4gICAgICAgICAgLy8gRGVmZXJyZWQgaXMgcmVqZWN0ZWQsIHdlIHVzZSByZXNvbHZlIGluc3RlYWQuXG4gICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdmFsaWQgZmlsZXMgYW5kIGludmFsaWQgaXRlbXNcbiAgICAgICAgICAvLyB0byBiZSByZXR1cm5lZCB0b2dldGhlciBpbiBvbmUgc2V0OlxuICAgICAgICAgIGRmZC5yZXNvbHZlKFtlXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3NIYW5kbGVyID0gZnVuY3Rpb24gKGVudHJpZXMpIHtcbiAgICAgICAgICB0aGF0XG4gICAgICAgICAgICAuX2hhbmRsZUZpbGVUcmVlRW50cmllcyhlbnRyaWVzLCBwYXRoICsgZW50cnkubmFtZSArICcvJylcbiAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZhaWwoZXJyb3JIYW5kbGVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhZEVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGlyUmVhZGVyLnJlYWRFbnRyaWVzKGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3NIYW5kbGVyKGVudHJpZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW50cmllcyA9IGVudHJpZXMuY29uY2F0KHJlc3VsdHMpO1xuICAgICAgICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGVycm9ySGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHBhdGggPSBwYXRoIHx8ICcnO1xuICAgICAgaWYgKGVudHJ5LmlzRmlsZSkge1xuICAgICAgICBpZiAoZW50cnkuX2ZpbGUpIHtcbiAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBDaHJvbWUgYnVnICMxNDk3MzVcbiAgICAgICAgICBlbnRyeS5fZmlsZS5yZWxhdGl2ZVBhdGggPSBwYXRoO1xuICAgICAgICAgIGRmZC5yZXNvbHZlKGVudHJ5Ll9maWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnRyeS5maWxlKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnJlbGF0aXZlUGF0aCA9IHBhdGg7XG4gICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlKTtcbiAgICAgICAgICB9LCBlcnJvckhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgIGRpclJlYWRlciA9IGVudHJ5LmNyZWF0ZVJlYWRlcigpO1xuICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmV0dXJuIGFuIGVtcHR5IGxpc3QgZm9yIGZpbGUgc3lzdGVtIGl0ZW1zXG4gICAgICAgIC8vIG90aGVyIHRoYW4gZmlsZXMgb3IgZGlyZWN0b3JpZXM6XG4gICAgICAgIGRmZC5yZXNvbHZlKFtdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZmQucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfaGFuZGxlRmlsZVRyZWVFbnRyaWVzOiBmdW5jdGlvbiAoZW50cmllcywgcGF0aCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcmV0dXJuICQud2hlblxuICAgICAgICAuYXBwbHkoXG4gICAgICAgICAgJCxcbiAgICAgICAgICAkLm1hcChlbnRyaWVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGF0Ll9oYW5kbGVGaWxlVHJlZUVudHJ5KGVudHJ5LCBwYXRoKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIFt0aGlzLl9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2dldERyb3BwZWRGaWxlczogZnVuY3Rpb24gKGRhdGFUcmFuc2Zlcikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBkYXRhVHJhbnNmZXIgPSBkYXRhVHJhbnNmZXIgfHwge307XG4gICAgICB2YXIgaXRlbXMgPSBkYXRhVHJhbnNmZXIuaXRlbXM7XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW1zICYmXG4gICAgICAgIGl0ZW1zLmxlbmd0aCAmJlxuICAgICAgICAoaXRlbXNbMF0ud2Via2l0R2V0QXNFbnRyeSB8fCBpdGVtc1swXS5nZXRBc0VudHJ5KVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVGaWxlVHJlZUVudHJpZXMoXG4gICAgICAgICAgJC5tYXAoaXRlbXMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgICAgICBpZiAoaXRlbS53ZWJraXRHZXRBc0VudHJ5KSB7XG4gICAgICAgICAgICAgIGVudHJ5ID0gaXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIENocm9tZSBidWcgIzE0OTczNTpcbiAgICAgICAgICAgICAgICBlbnRyeS5fZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0QXNFbnRyeSgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoJC5tYWtlQXJyYXkoZGF0YVRyYW5zZmVyLmZpbGVzKSkucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfZ2V0U2luZ2xlRmlsZUlucHV0RmlsZXM6IGZ1bmN0aW9uIChmaWxlSW5wdXQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgZmlsZUlucHV0ID0gJChmaWxlSW5wdXQpO1xuICAgICAgdmFyIGVudHJpZXMgPSBmaWxlSW5wdXQucHJvcCgnZW50cmllcycpLFxuICAgICAgICBmaWxlcyxcbiAgICAgICAgdmFsdWU7XG4gICAgICBpZiAoZW50cmllcyAmJiBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRmlsZVRyZWVFbnRyaWVzKGVudHJpZXMpO1xuICAgICAgfVxuICAgICAgZmlsZXMgPSAkLm1ha2VBcnJheShmaWxlSW5wdXQucHJvcCgnZmlsZXMnKSk7XG4gICAgICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IGZpbGVJbnB1dC5wcm9wKCd2YWx1ZScpO1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKFtdKS5wcm9taXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIGZpbGVzIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBicm93c2VyIGRvZXMgbm90XG4gICAgICAgIC8vIHN1cHBvcnQgdGhlIEZpbGUgQVBJIGFuZCB3ZSBhZGQgYSBwc2V1ZG8gRmlsZSBvYmplY3Qgd2l0aFxuICAgICAgICAvLyB0aGUgaW5wdXQgdmFsdWUgYXMgbmFtZSB3aXRoIHBhdGggaW5mb3JtYXRpb24gcmVtb3ZlZDpcbiAgICAgICAgZmlsZXMgPSBbeyBuYW1lOiB2YWx1ZS5yZXBsYWNlKC9eLipcXFxcLywgJycpIH1dO1xuICAgICAgfSBlbHNlIGlmIChmaWxlc1swXS5uYW1lID09PSB1bmRlZmluZWQgJiYgZmlsZXNbMF0uZmlsZU5hbWUpIHtcbiAgICAgICAgLy8gRmlsZSBub3JtYWxpemF0aW9uIGZvciBTYWZhcmkgNCBhbmQgRmlyZWZveCAzOlxuICAgICAgICAkLmVhY2goZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgIGZpbGUubmFtZSA9IGZpbGUuZmlsZU5hbWU7XG4gICAgICAgICAgZmlsZS5zaXplID0gZmlsZS5maWxlU2l6ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoZmlsZXMpLnByb21pc2UoKTtcbiAgICB9LFxuXG4gICAgX2dldEZpbGVJbnB1dEZpbGVzOiBmdW5jdGlvbiAoZmlsZUlucHV0KSB7XG4gICAgICBpZiAoIShmaWxlSW5wdXQgaW5zdGFuY2VvZiAkKSB8fCBmaWxlSW5wdXQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcyhmaWxlSW5wdXQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICQud2hlblxuICAgICAgICAuYXBwbHkoJCwgJC5tYXAoZmlsZUlucHV0LCB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcykpXG4gICAgICAgIFt0aGlzLl9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX29uQ2hhbmdlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBkYXRhID0ge1xuICAgICAgICAgIGZpbGVJbnB1dDogJChlLnRhcmdldCksXG4gICAgICAgICAgZm9ybTogJChlLnRhcmdldC5mb3JtKVxuICAgICAgICB9O1xuICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICBpZiAodGhhdC5vcHRpb25zLnJlcGxhY2VGaWxlSW5wdXQpIHtcbiAgICAgICAgICB0aGF0Ll9yZXBsYWNlRmlsZUlucHV0KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICAgJ2NoYW5nZScsXG4gICAgICAgICAgICAkLkV2ZW50KCdjaGFuZ2UnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIHRoYXQuX29uQWRkKGUsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX29uUGFzdGU6IGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgaXRlbXMgPVxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudCAmJlxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhICYmXG4gICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuaXRlbXMsXG4gICAgICAgIGRhdGEgPSB7IGZpbGVzOiBbXSB9O1xuICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAkLmVhY2goaXRlbXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuICAgICAgICAgIHZhciBmaWxlID0gaXRlbS5nZXRBc0ZpbGUgJiYgaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZGF0YS5maWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICAgICAgJ3Bhc3RlJyxcbiAgICAgICAgICAgICQuRXZlbnQoJ3Bhc3RlJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICApICE9PSBmYWxzZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25Ecm9wOiBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5kYXRhVHJhbnNmZXIgPSBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXIsXG4gICAgICAgIGRhdGEgPSB7fTtcbiAgICAgIGlmIChkYXRhVHJhbnNmZXIgJiYgZGF0YVRyYW5zZmVyLmZpbGVzICYmIGRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGgpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9nZXREcm9wcGVkRmlsZXMoZGF0YVRyYW5zZmVyKS5hbHdheXMoZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoXG4gICAgICAgICAgICAgICdkcm9wJyxcbiAgICAgICAgICAgICAgJC5FdmVudCgnZHJvcCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGF0Ll9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25EcmFnT3ZlcjogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdvdmVyJyksXG5cbiAgICBfb25EcmFnRW50ZXI6IGdldERyYWdIYW5kbGVyKCdkcmFnZW50ZXInKSxcblxuICAgIF9vbkRyYWdMZWF2ZTogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdsZWF2ZScpLFxuXG4gICAgX2luaXRFdmVudEhhbmRsZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5faXNYSFJVcGxvYWQodGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLl9vbih0aGlzLm9wdGlvbnMuZHJvcFpvbmUsIHtcbiAgICAgICAgICBkcmFnb3ZlcjogdGhpcy5fb25EcmFnT3ZlcixcbiAgICAgICAgICBkcm9wOiB0aGlzLl9vbkRyb3AsXG4gICAgICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKSBvbiBkcmFnZW50ZXIgaXMgcmVxdWlyZWQgZm9yIElFMTArOlxuICAgICAgICAgIGRyYWdlbnRlcjogdGhpcy5fb25EcmFnRW50ZXIsXG4gICAgICAgICAgLy8gZHJhZ2xlYXZlIGlzIG5vdCByZXF1aXJlZCwgYnV0IGFkZGVkIGZvciBjb21wbGV0ZW5lc3M6XG4gICAgICAgICAgZHJhZ2xlYXZlOiB0aGlzLl9vbkRyYWdMZWF2ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLnBhc3RlWm9uZSwge1xuICAgICAgICAgIHBhc3RlOiB0aGlzLl9vblBhc3RlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCQuc3VwcG9ydC5maWxlSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLmZpbGVJbnB1dCwge1xuICAgICAgICAgIGNoYW5nZTogdGhpcy5fb25DaGFuZ2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9kZXN0cm95RXZlbnRIYW5kbGVyczogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5kcm9wWm9uZSwgJ2RyYWdlbnRlciBkcmFnbGVhdmUgZHJhZ292ZXIgZHJvcCcpO1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5wYXN0ZVpvbmUsICdwYXN0ZScpO1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5maWxlSW5wdXQsICdjaGFuZ2UnKTtcbiAgICB9LFxuXG4gICAgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3lFdmVudEhhbmRsZXJzKCk7XG4gICAgfSxcblxuICAgIF9zZXRPcHRpb246IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgcmVpbml0ID0gJC5pbkFycmF5KGtleSwgdGhpcy5fc3BlY2lhbE9wdGlvbnMpICE9PSAtMTtcbiAgICAgIGlmIChyZWluaXQpIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3N1cGVyKGtleSwgdmFsdWUpO1xuICAgICAgaWYgKHJlaW5pdCkge1xuICAgICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5faW5pdEV2ZW50SGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRTcGVjaWFsT3B0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBpZiAob3B0aW9ucy5maWxlSW5wdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRpb25zLmZpbGVJbnB1dCA9IHRoaXMuZWxlbWVudC5pcygnaW5wdXRbdHlwZT1cImZpbGVcIl0nKVxuICAgICAgICAgID8gdGhpcy5lbGVtZW50XG4gICAgICAgICAgOiB0aGlzLmVsZW1lbnQuZmluZCgnaW5wdXRbdHlwZT1cImZpbGVcIl0nKTtcbiAgICAgIH0gZWxzZSBpZiAoIShvcHRpb25zLmZpbGVJbnB1dCBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zLmRyb3Bab25lIGluc3RhbmNlb2YgJCkpIHtcbiAgICAgICAgb3B0aW9ucy5kcm9wWm9uZSA9ICQob3B0aW9ucy5kcm9wWm9uZSk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zLnBhc3RlWm9uZSBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMucGFzdGVab25lID0gJChvcHRpb25zLnBhc3RlWm9uZSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRSZWdFeHA6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnLycpLFxuICAgICAgICBtb2RpZmllcnMgPSBwYXJ0cy5wb3AoKTtcbiAgICAgIHBhcnRzLnNoaWZ0KCk7XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cChwYXJ0cy5qb2luKCcvJyksIG1vZGlmaWVycyk7XG4gICAgfSxcblxuICAgIF9pc1JlZ0V4cE9wdGlvbjogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGtleSAhPT0gJ3VybCcgJiZcbiAgICAgICAgJC50eXBlKHZhbHVlKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgL15cXC8uKlxcL1tpZ21dezAsM30kLy50ZXN0KHZhbHVlKVxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgX2luaXREYXRhQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBkYXRhID0gdGhpcy5lbGVtZW50LmRhdGEoKTtcbiAgICAgIC8vIEluaXRpYWxpemUgb3B0aW9ucyBzZXQgdmlhIEhUTUw1IGRhdGEtYXR0cmlidXRlczpcbiAgICAgICQuZWFjaCh0aGlzLmVsZW1lbnRbMF0uYXR0cmlidXRlcywgZnVuY3Rpb24gKGluZGV4LCBhdHRyKSB7XG4gICAgICAgIHZhciBrZXkgPSBhdHRyLm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgaWYgKC9eZGF0YS0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgaHlwaGVuLWF0ZWQga2V5IHRvIGNhbWVsQ2FzZTpcbiAgICAgICAgICBrZXkgPSBrZXkuc2xpY2UoNSkucmVwbGFjZSgvLVthLXpdL2csIGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHIuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgaWYgKHRoYXQuX2lzUmVnRXhwT3B0aW9uKGtleSwgdmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoYXQuX2dldFJlZ0V4cCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2NyZWF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5faW5pdERhdGFBdHRyaWJ1dGVzKCk7XG4gICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Nsb3RzID0gW107XG4gICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX2dldFhIUlByb21pc2UodHJ1ZSk7XG4gICAgICB0aGlzLl9zZW5kaW5nID0gdGhpcy5fYWN0aXZlID0gMDtcbiAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdCh0aGlzKTtcbiAgICAgIHRoaXMuX2luaXRFdmVudEhhbmRsZXJzKCk7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyB0byBxdWVyeVxuICAgIC8vIHRoZSBudW1iZXIgb2YgYWN0aXZlIHVwbG9hZHM6XG4gICAgYWN0aXZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH0sXG5cbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBleHBvc2VkIHRvIHRoZSB3aWRnZXQgQVBJIGFuZCBhbGxvd3MgdG8gcXVlcnlcbiAgICAvLyB0aGUgd2lkZ2V0IHVwbG9hZCBwcm9ncmVzcy5cbiAgICAvLyBJdCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGxvYWRlZCwgdG90YWwgYW5kIGJpdHJhdGUgcHJvcGVydGllc1xuICAgIC8vIGZvciB0aGUgcnVubmluZyB1cGxvYWRzOlxuICAgIHByb2dyZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyBhZGRpbmcgZmlsZXNcbiAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxuICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIHByb3BlcnR5IGFuZCBjYW4gY29udGFpbiBhZGRpdGlvbmFsIG9wdGlvbnM6XG4gICAgLy8gLmZpbGV1cGxvYWQoJ2FkZCcsIHtmaWxlczogZmlsZXNMaXN0fSk7XG4gICAgYWRkOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgaWYgKCFkYXRhIHx8IHRoaXMub3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5maWxlSW5wdXQgJiYgIWRhdGEuZmlsZXMpIHtcbiAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7XG4gICAgICAgICAgdGhhdC5fb25BZGQobnVsbCwgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5maWxlcyA9ICQubWFrZUFycmF5KGRhdGEuZmlsZXMpO1xuICAgICAgICB0aGlzLl9vbkFkZChudWxsLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIHNlbmRpbmcgZmlsZXNcbiAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxuICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIG9yIGZpbGVJbnB1dCBwcm9wZXJ0eSBhbmQgY2FuIGNvbnRhaW4gYWRkaXRpb25hbCBvcHRpb25zOlxuICAgIC8vIC5maWxldXBsb2FkKCdzZW5kJywge2ZpbGVzOiBmaWxlc0xpc3R9KTtcbiAgICAvLyBUaGUgbWV0aG9kIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBmb3IgdGhlIGZpbGUgdXBsb2FkIGNhbGwuXG4gICAgc2VuZDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhICYmICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKGRhdGEuZmlsZUlucHV0ICYmICFkYXRhLmZpbGVzKSB7XG4gICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCksXG4gICAgICAgICAgICBqcVhIUixcbiAgICAgICAgICAgIGFib3J0ZWQ7XG4gICAgICAgICAgcHJvbWlzZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGpxWEhSKSB7XG4gICAgICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGZkLnJlamVjdChudWxsLCAnYWJvcnQnLCAnYWJvcnQnKTtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICAgIGlmIChhYm9ydGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGRmZC5yZWplY3QoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgICAganFYSFIgPSB0aGF0Ll9vblNlbmQobnVsbCwgZGF0YSk7XG4gICAgICAgICAgICBqcVhIUi50aGVuKFxuICAgICAgICAgICAgICBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUikge1xuICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgZGZkLnJlamVjdChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmZpbGVzID0gJC5tYWtlQXJyYXkoZGF0YS5maWxlcyk7XG4gICAgICAgIGlmIChkYXRhLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9vblNlbmQobnVsbCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9nZXRYSFJQcm9taXNlKGZhbHNlLCBkYXRhICYmIGRhdGEuY29udGV4dCk7XG4gICAgfVxuICB9KTtcbn0pO1xuIiwiLypcbiAqIGpRdWVyeSBJZnJhbWUgVHJhbnNwb3J0IFBsdWdpblxuICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkXG4gKlxuICogQ29weXJpZ2h0IDIwMTEsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICovXG5cbi8qIGdsb2JhbCBkZWZpbmUsIHJlcXVpcmUgKi9cblxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBBTUQgbW9kdWxlOlxuICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFsczpcbiAgICBmYWN0b3J5KHdpbmRvdy5qUXVlcnkpO1xuICB9XG59KShmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gSGVscGVyIHZhcmlhYmxlIHRvIGNyZWF0ZSB1bmlxdWUgbmFtZXMgZm9yIHRoZSB0cmFuc3BvcnQgaWZyYW1lczpcbiAgdmFyIGNvdW50ZXIgPSAwLFxuICAgIGpzb25BUEkgPSAkLFxuICAgIGpzb25QYXJzZSA9ICdwYXJzZUpTT04nO1xuXG4gIGlmICgnSlNPTicgaW4gd2luZG93ICYmICdwYXJzZScgaW4gSlNPTikge1xuICAgIGpzb25BUEkgPSBKU09OO1xuICAgIGpzb25QYXJzZSA9ICdwYXJzZSc7XG4gIH1cblxuICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCBhY2NlcHRzIGZvdXIgYWRkaXRpb25hbCBvcHRpb25zOlxuICAvLyBvcHRpb25zLmZpbGVJbnB1dDogYSBqUXVlcnkgY29sbGVjdGlvbiBvZiBmaWxlIGlucHV0IGZpZWxkc1xuICAvLyBvcHRpb25zLnBhcmFtTmFtZTogdGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgZmlsZSBmb3JtIGRhdGEsXG4gIC8vICBvdmVycmlkZXMgdGhlIG5hbWUgcHJvcGVydHkgb2YgdGhlIGZpbGUgaW5wdXQgZmllbGQocyksXG4gIC8vICBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAgLy8gb3B0aW9ucy5mb3JtRGF0YTogYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIG5hbWUgYW5kIHZhbHVlIHByb3BlcnRpZXMsXG4gIC8vICBlcXVpdmFsZW50IHRvIHRoZSByZXR1cm4gZGF0YSBvZiAuc2VyaWFsaXplQXJyYXkoKSwgZS5nLjpcbiAgLy8gIFt7bmFtZTogJ2EnLCB2YWx1ZTogMX0sIHtuYW1lOiAnYicsIHZhbHVlOiAyfV1cbiAgLy8gb3B0aW9ucy5pbml0aWFsSWZyYW1lU3JjOiB0aGUgVVJMIG9mIHRoZSBpbml0aWFsIGlmcmFtZSBzcmMsXG4gIC8vICBieSBkZWZhdWx0IHNldCB0byBcImphdmFzY3JpcHQ6ZmFsc2U7XCJcbiAgJC5hamF4VHJhbnNwb3J0KCdpZnJhbWUnLCBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmFzeW5jKSB7XG4gICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGluaXRpYWwgaWZyYW1lIHNyY1xuICAgICAgLy8gcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2OlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNjcmlwdC11cmxcbiAgICAgIHZhciBpbml0aWFsSWZyYW1lU3JjID0gb3B0aW9ucy5pbml0aWFsSWZyYW1lU3JjIHx8ICdqYXZhc2NyaXB0OmZhbHNlOycsXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlmcmFtZSxcbiAgICAgICAgYWRkUGFyYW1DaGFyO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VuZDogZnVuY3Rpb24gKF8sIGNvbXBsZXRlQ2FsbGJhY2spIHtcbiAgICAgICAgICBmb3JtID0gJCgnPGZvcm0gc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9mb3JtPicpO1xuICAgICAgICAgIGZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnLCBvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KTtcbiAgICAgICAgICBhZGRQYXJhbUNoYXIgPSAvXFw/Ly50ZXN0KG9wdGlvbnMudXJsKSA/ICcmJyA6ICc/JztcbiAgICAgICAgICAvLyBYRG9tYWluUmVxdWVzdCBvbmx5IHN1cHBvcnRzIEdFVCBhbmQgUE9TVDpcbiAgICAgICAgICBpZiAob3B0aW9ucy50eXBlID09PSAnREVMRVRFJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPURFTEVURSc7XG4gICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09ICdQVVQnKSB7XG4gICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsICsgYWRkUGFyYW1DaGFyICsgJ19tZXRob2Q9UFVUJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ1BBVENIJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPVBBVENIJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSUUgdmVyc2lvbnMgYmVsb3cgSUU4IGNhbm5vdCBzZXQgdGhlIG5hbWUgcHJvcGVydHkgb2ZcbiAgICAgICAgICAvLyBlbGVtZW50cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBET00sXG4gICAgICAgICAgLy8gc28gd2Ugc2V0IHRoZSBuYW1lIGFsb25nIHdpdGggdGhlIGlmcmFtZSBIVE1MIG1hcmt1cDpcbiAgICAgICAgICBjb3VudGVyICs9IDE7XG4gICAgICAgICAgaWZyYW1lID0gJChcbiAgICAgICAgICAgICc8aWZyYW1lIHNyYz1cIicgK1xuICAgICAgICAgICAgICBpbml0aWFsSWZyYW1lU3JjICtcbiAgICAgICAgICAgICAgJ1wiIG5hbWU9XCJpZnJhbWUtdHJhbnNwb3J0LScgK1xuICAgICAgICAgICAgICBjb3VudGVyICtcbiAgICAgICAgICAgICAgJ1wiPjwvaWZyYW1lPidcbiAgICAgICAgICApLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGZpbGVJbnB1dENsb25lcyxcbiAgICAgICAgICAgICAgcGFyYW1OYW1lcyA9ICQuaXNBcnJheShvcHRpb25zLnBhcmFtTmFtZSlcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMucGFyYW1OYW1lXG4gICAgICAgICAgICAgICAgOiBbb3B0aW9ucy5wYXJhbU5hbWVdO1xuICAgICAgICAgICAgaWZyYW1lLm9mZignbG9hZCcpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgcmVzcG9uc2U7XG4gICAgICAgICAgICAgIC8vIFdyYXAgaW4gYSB0cnkvY2F0Y2ggYmxvY2sgdG8gY2F0Y2ggZXhjZXB0aW9ucyB0aHJvd25cbiAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gYWNjZXNzIGNyb3NzLWRvbWFpbiBpZnJhbWUgY29udGVudHM6XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBpZnJhbWUuY29udGVudHMoKTtcbiAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lIGFuZCBGaXJlZm94IGRvIG5vdCB0aHJvdyBhblxuICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgaWZyYW1lLmNvbnRlbnRzKCkgb25cbiAgICAgICAgICAgICAgICAvLyBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNvIHdlIHVuaWZ5IHRoZSByZXNwb25zZTpcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmxlbmd0aCB8fCAhcmVzcG9uc2VbMF0uZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gVGhlIGNvbXBsZXRlIGNhbGxiYWNrIHJldHVybnMgdGhlXG4gICAgICAgICAgICAgIC8vIGlmcmFtZSBjb250ZW50IGRvY3VtZW50IGFzIHJlc3BvbnNlIG9iamVjdDpcbiAgICAgICAgICAgICAgY29tcGxldGVDYWxsYmFjaygyMDAsICdzdWNjZXNzJywgeyBpZnJhbWU6IHJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAvLyBGaXggZm9yIElFIGVuZGxlc3MgcHJvZ3Jlc3MgYmFyIGFjdGl2aXR5IGJ1Z1xuICAgICAgICAgICAgICAvLyAoaGFwcGVucyBvbiBmb3JtIHN1Ym1pdHMgdG8gaWZyYW1lIHRhcmdldHMpOlxuICAgICAgICAgICAgICAkKCc8aWZyYW1lIHNyYz1cIicgKyBpbml0aWFsSWZyYW1lU3JjICsgJ1wiPjwvaWZyYW1lPicpLmFwcGVuZFRvKFxuICAgICAgICAgICAgICAgIGZvcm1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92aW5nIHRoZSBmb3JtIGluIGEgc2V0VGltZW91dCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYWxsb3dzIENocm9tZSdzIGRldmVsb3BlciB0b29scyB0byBkaXNwbGF5XG4gICAgICAgICAgICAgICAgLy8gdGhlIHJlc3BvbnNlIHJlc3VsdFxuICAgICAgICAgICAgICAgIGZvcm0ucmVtb3ZlKCk7XG4gICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JtXG4gICAgICAgICAgICAgIC5wcm9wKCd0YXJnZXQnLCBpZnJhbWUucHJvcCgnbmFtZScpKVxuICAgICAgICAgICAgICAucHJvcCgnYWN0aW9uJywgb3B0aW9ucy51cmwpXG4gICAgICAgICAgICAgIC5wcm9wKCdtZXRob2QnLCBvcHRpb25zLnR5cGUpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybURhdGEpIHtcbiAgICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChpbmRleCwgZmllbGQpIHtcbiAgICAgICAgICAgICAgICAkKCc8aW5wdXQgdHlwZT1cImhpZGRlblwiLz4nKVxuICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBmaWVsZC5uYW1lKVxuICAgICAgICAgICAgICAgICAgLnZhbChmaWVsZC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhmb3JtKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ICYmXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPT09ICdQT1NUJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpbGVJbnB1dENsb25lcyA9IG9wdGlvbnMuZmlsZUlucHV0LmNsb25lKCk7XG4gICAgICAgICAgICAgIC8vIEluc2VydCBhIGNsb25lIGZvciBlYWNoIGZpbGUgaW5wdXQgZmllbGQ6XG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0LmFmdGVyKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWxlSW5wdXRDbG9uZXNbaW5kZXhdO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICQodGhpcykucHJvcCgnbmFtZScsIHBhcmFtTmFtZXNbaW5kZXhdIHx8IG9wdGlvbnMucGFyYW1OYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBBcHBlbmRpbmcgdGhlIGZpbGUgaW5wdXQgZmllbGRzIHRvIHRoZSBoaWRkZW4gZm9ybVxuICAgICAgICAgICAgICAvLyByZW1vdmVzIHRoZW0gZnJvbSB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbjpcbiAgICAgICAgICAgICAgZm9ybVxuICAgICAgICAgICAgICAgIC5hcHBlbmQob3B0aW9ucy5maWxlSW5wdXQpXG4gICAgICAgICAgICAgICAgLnByb3AoJ2VuY3R5cGUnLCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpXG4gICAgICAgICAgICAgICAgLy8gZW5jdHlwZSBtdXN0IGJlIHNldCBhcyBlbmNvZGluZyBmb3IgSUU6XG4gICAgICAgICAgICAgICAgLnByb3AoJ2VuY29kaW5nJywgJ211bHRpcGFydC9mb3JtLWRhdGEnKTtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBIVE1MNSBmb3JtIGF0dHJpYnV0ZSBmcm9tIHRoZSBpbnB1dChzKTpcbiAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQucmVtb3ZlQXR0cignZm9ybScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAvLyBTdWJtaXR0aW5nIHRoZSBmb3JtIGluIGEgc2V0VGltZW91dCBjYWxsIGZpeGVzIGFuIGlzc3VlIHdpdGhcbiAgICAgICAgICAgICAgLy8gU2FmYXJpIDEzIG5vdCB0cmlnZ2VyaW5nIHRoZSBpZnJhbWUgbG9hZCBldmVudCBhZnRlciByZXNldHRpbmdcbiAgICAgICAgICAgICAgLy8gdGhlIGxvYWQgZXZlbnQgaGFuZGxlciwgc2VlIGFsc286XG4gICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9pc3N1ZXMvMzYzM1xuICAgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpO1xuICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIGZpbGUgaW5wdXQgZmllbGRzIGF0IHRoZWlyIG9yaWdpbmFsIGxvY2F0aW9uXG4gICAgICAgICAgICAgIC8vIGJ5IHJlcGxhY2luZyB0aGUgY2xvbmVzIHdpdGggdGhlIG9yaWdpbmFsczpcbiAgICAgICAgICAgICAgaWYgKGZpbGVJbnB1dENsb25lcyAmJiBmaWxlSW5wdXRDbG9uZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGlucHV0KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY2xvbmUgPSAkKGZpbGVJbnB1dENsb25lc1tpbmRleF0pO1xuICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgbmFtZSBhbmQgZm9ybSBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgICAgJChpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBjbG9uZS5wcm9wKCduYW1lJykpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdmb3JtJywgY2xvbmUuYXR0cignZm9ybScpKTtcbiAgICAgICAgICAgICAgICAgIGNsb25lLnJlcGxhY2VXaXRoKGlucHV0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoaWZyYW1lKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoaWZyYW1lKSB7XG4gICAgICAgICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGlmcmFtZSBzcmMgYWJvcnRzIHRoZSByZXF1ZXN0XG4gICAgICAgICAgICAvLyBhbmQgcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2LlxuICAgICAgICAgICAgaWZyYW1lLm9mZignbG9hZCcpLnByb3AoJ3NyYycsIGluaXRpYWxJZnJhbWVTcmMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgZm9ybS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCByZXR1cm5zIHRoZSBpZnJhbWUgY29udGVudCBkb2N1bWVudCBhcyByZXNwb25zZS5cbiAgLy8gVGhlIGZvbGxvd2luZyBhZGRzIGNvbnZlcnRlcnMgZnJvbSBpZnJhbWUgdG8gdGV4dCwganNvbiwgaHRtbCwgeG1sXG4gIC8vIGFuZCBzY3JpcHQuXG4gIC8vIFBsZWFzZSBub3RlIHRoYXQgdGhlIENvbnRlbnQtVHlwZSBmb3IgSlNPTiByZXNwb25zZXMgaGFzIHRvIGJlIHRleHQvcGxhaW5cbiAgLy8gb3IgdGV4dC9odG1sLCBpZiB0aGUgYnJvd3NlciBkb2Vzbid0IGluY2x1ZGUgYXBwbGljYXRpb24vanNvbiBpbiB0aGVcbiAgLy8gQWNjZXB0IGhlYWRlciwgZWxzZSBJRSB3aWxsIHNob3cgYSBkb3dubG9hZCBkaWFsb2cuXG4gIC8vIFRoZSBDb250ZW50LVR5cGUgZm9yIFhNTCByZXNwb25zZXMgb24gdGhlIG90aGVyIGhhbmQgaGFzIHRvIGJlIGFsd2F5c1xuICAvLyBhcHBsaWNhdGlvbi94bWwgb3IgdGV4dC94bWwsIHNvIElFIHByb3Blcmx5IHBhcnNlcyB0aGUgWE1MIHJlc3BvbnNlLlxuICAvLyBTZWUgYWxzb1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvd2lraS9TZXR1cCNjb250ZW50LXR5cGUtbmVnb3RpYXRpb25cbiAgJC5hamF4U2V0dXAoe1xuICAgIGNvbnZlcnRlcnM6IHtcbiAgICAgICdpZnJhbWUgdGV4dCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSBqc29uJzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmIGpzb25BUElbanNvblBhcnNlXSgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgaHRtbCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS5odG1sKCk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSB4bWwnOiBmdW5jdGlvbiAoaWZyYW1lKSB7XG4gICAgICAgIHZhciB4bWxEb2MgPSBpZnJhbWUgJiYgaWZyYW1lWzBdO1xuICAgICAgICByZXR1cm4geG1sRG9jICYmICQuaXNYTUxEb2MoeG1sRG9jKVxuICAgICAgICAgID8geG1sRG9jXG4gICAgICAgICAgOiAkLnBhcnNlWE1MKFxuICAgICAgICAgICAgICAoeG1sRG9jLlhNTERvY3VtZW50ICYmIHhtbERvYy5YTUxEb2N1bWVudC54bWwpIHx8XG4gICAgICAgICAgICAgICAgJCh4bWxEb2MuYm9keSkuaHRtbCgpXG4gICAgICAgICAgICApO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgc2NyaXB0JzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmICQuZ2xvYmFsRXZhbCgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59KTtcbiIsInZhciBpbml0aWFsaXplZDtcclxudmFyIG1lZGlhQXBwO1xyXG5cclxudmFyIGJ1cyA9IG5ldyBWdWUoKTtcclxuXHJcbmZ1bmN0aW9uIGluaXRpYWxpemVNZWRpYUFwcGxpY2F0aW9uKGRpc3BsYXlNZWRpYUFwcGxpY2F0aW9uLCBtZWRpYUFwcGxpY2F0aW9uVXJsLCBwYXRoQmFzZSkge1xyXG5cclxuICAgIGlmIChpbml0aWFsaXplZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplZCA9IHRydWU7XHJcblxyXG4gICAgaWYgKCFtZWRpYUFwcGxpY2F0aW9uVXJsKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignbWVkaWFBcHBsaWNhdGlvblVybCB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZCcpO1xyXG4gICAgfVxyXG5cclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdXJsOiBtZWRpYUFwcGxpY2F0aW9uVXJsLFxyXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgJCgnLnRhLWNvbnRlbnQnKS5hcHBlbmQoY29udGVudCk7XHJcblxyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCdtZWRpYWFwcGxpY2F0aW9uOnJlYWR5Jyk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcm9vdCA9IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICQoJyN0LW1lZGlhTGlicmFyeScpLnRleHQoKSxcclxuICAgICAgICAgICAgICAgIHBhdGg6ICcnLFxyXG4gICAgICAgICAgICAgICAgZm9sZGVyOiAnJyxcclxuICAgICAgICAgICAgICAgIGlzRGlyZWN0b3J5OiB0cnVlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBtZWRpYUFwcCA9IG5ldyBWdWUoe1xyXG4gICAgICAgICAgICAgICAgZWw6ICcjbWVkaWFBcHAnLFxyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRm9sZGVyOiB7fSxcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE1lZGlhczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBkcmFnRHJvcFRodW1ibmFpbDogbmV3IEltYWdlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgc21hbGxUaHVtYnM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGdyaWRWaWV3OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpbHRlcjogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgc29ydEJ5OiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBzb3J0QXNjOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zSW5QYWdlOiBbXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZHJhZ0Ryb3BUaHVtYm5haWwuc3JjID0gKHBhdGhCYXNlIHx8ICcnKSArICcvT3JjaGFyZENvcmUuTWVkaWEvSW1hZ2VzL2RyYWctdGh1bWJuYWlsLnBuZyc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2ZvbGRlclNlbGVjdGVkJywgZnVuY3Rpb24gKGZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRm9sZGVyID0gZm9sZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdmb2xkZXJEZWxldGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdFJvb3QoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignZm9sZGVyQWRkZWQnLCBmdW5jdGlvbiAoZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRGb2xkZXIgPSBmb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRlci5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhTGlzdE1vdmVkJywgZnVuY3Rpb24gKGVycm9ySW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRGb2xkZXIoc2VsZi5zZWxlY3RlZEZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvckluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzLnB1c2goZXJyb3JJbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdtZWRpYVJlbmFtZWQnLCBmdW5jdGlvbiAobmV3TmFtZSwgbmV3UGF0aCwgb2xkUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWEgPSBzZWxmLm1lZGlhSXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5tZWRpYVBhdGggPT09IG9sZFBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pWzBdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWEubWVkaWFQYXRoID0gbmV3UGF0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWEubmFtZSA9IG5ld05hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2NyZWF0ZUZvbGRlclJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZUZvbGRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdkZWxldGVGb2xkZXJSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWxldGVGb2xkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tbW9uIGhhbmRsZXJzIGZvciBhY3Rpb25zIGluIGJvdGggZ3JpZCBhbmQgdGFibGUgdmlldy5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdzb3J0Q2hhbmdlUmVxdWVzdGVkJywgZnVuY3Rpb24gKG5ld1NvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VTb3J0KG5ld1NvcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdtZWRpYVRvZ2dsZVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdyZW5hbWVNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbmFtZU1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignZGVsZXRlTWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWxldGVNZWRpYUl0ZW0obWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdtZWRpYURyYWdTdGFydFJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSwgZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZURyYWdTdGFydChtZWRpYSwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGVyIGZvciBwYWdlciBldmVudHNcclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdwYWdlckV2ZW50JywgZnVuY3Rpb24gKGl0ZW1zSW5QYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaXRlbXNJblBhZ2UgPSBpdGVtc0luUGFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZWRpYUFwcGxpY2F0aW9uUHJlZnMnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRm9sZGVyID0gcm9vdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50UHJlZnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZWRpYUFwcGxpY2F0aW9uUHJlZnMnKSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBpc0hvbWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPT0gcm9vdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Rm9sZGVyID0gdGhpcy5zZWxlY3RlZEZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBhcmVudEZvbGRlciAmJiBwYXJlbnRGb2xkZXIucGF0aCAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcC51bnNoaWZ0KHBhcmVudEZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRGb2xkZXIgPSBwYXJlbnRGb2xkZXIucGFyZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm9vdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTWVkaWFJdGVtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBzZWxmLm1lZGlhSXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWxmLm1lZGlhRmlsdGVyLnRvTG93ZXJDYXNlKCkpID4gLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2VsZi5zb3J0QnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NpemUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ydEFzYyA/IGEuc2l6ZSAtIGIuc2l6ZSA6IGIuc2l6ZSAtIGEuc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21pbWUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ydEFzYyA/IGEubWltZS50b0xvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoYi5taW1lLnRvTG93ZXJDYXNlKCkpIDogYi5taW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShhLm1pbWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsYXN0TW9kaWZ5JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNvcnRBc2MgPyBhLmxhc3RNb2RpZnkgLSBiLmxhc3RNb2RpZnkgOiBiLmxhc3RNb2RpZnkgLSBhLmxhc3RNb2RpZnk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ydEFzYyA/IGEubmFtZS50b0xvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoYi5uYW1lLnRvTG93ZXJDYXNlKCkpIDogYi5uYW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShhLm5hbWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbkNvdW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLm1lZGlhSXRlbXMubGVuZ3RoIC0gdGhpcy5maWx0ZXJlZE1lZGlhSXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGh1bWJTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNtYWxsVGh1bWJzID8gMTAwIDogMjQwO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFByZWZzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFRodW1iczogdGhpcy5zbWFsbFRodW1icyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZvbGRlcjogdGhpcy5zZWxlY3RlZEZvbGRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkVmlldzogdGhpcy5ncmlkVmlld1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbWFsbFRodW1icyA9IG5ld1ByZWZzLnNtYWxsVGh1bWJzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5ld1ByZWZzLnNlbGVjdGVkRm9sZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkVmlldyA9IG5ld1ByZWZzLmdyaWRWaWV3O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHdhdGNoOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFByZWZzOiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21lZGlhQXBwbGljYXRpb25QcmVmcycsIEpTT04uc3RyaW5naWZ5KG5ld1ByZWZzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZvbGRlcjogZnVuY3Rpb24gKG5ld0ZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhRmlsdGVyID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBuZXdGb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZEZvbGRlcihuZXdGb2xkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnMucm9vdEZvbGRlci50b2dnbGUoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkVXJsOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsVmFsdWUgPSAkKCcjdXBsb2FkRmlsZXMnKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmxWYWx1ZSArICh1cmxWYWx1ZS5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgXCJwYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuc2VsZWN0ZWRGb2xkZXIucGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RSb290OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSB0aGlzLnJvb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBsb2FkRm9sZGVyOiBmdW5jdGlvbiAoZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFVcmwgPSAkKCcjZ2V0TWVkaWFJdGVtc1VybCcpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhmb2xkZXIucGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IG1lZGlhVXJsICsgKG1lZGlhVXJsLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyBcInBhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoZm9sZGVyLnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcyA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29ydEJ5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3J0QXNjID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIGxvYWRpbmcgZm9sZGVyOicgKyBmb2xkZXIucGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RSb290KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpbHRlcmVkTWVkaWFJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcy5wdXNoKHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdW5TZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW52ZXJ0U2VsZWN0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5maWx0ZXJlZE1lZGlhSXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTWVkaWFTZWxlY3RlZCh0aGlzLmZpbHRlcmVkTWVkaWFJdGVtc1tpXSkgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2godGhpcy5maWx0ZXJlZE1lZGlhSXRlbXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMgPSB0ZW1wO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTWVkaWFTZWxlY3RlZChtZWRpYSkgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcy5zcGxpY2UodGhpcy5zZWxlY3RlZE1lZGlhcy5pbmRleE9mKG1lZGlhKSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnB1c2gobWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBpc01lZGlhU2VsZWN0ZWQ6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5zZWxlY3RlZE1lZGlhcy5zb21lKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnVybC50b0xvd2VyQ2FzZSgpID09PSBtZWRpYS51cmwudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGVGb2xkZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbGRlciA9IHRoaXMuc2VsZWN0ZWRGb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJvb3QgZm9sZGVyIGNhbid0IGJlIGRlbGV0ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRlciA9PSB0aGlzLnJvb3QubW9kZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybURpYWxvZyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4kKFwiI2RlbGV0ZUZvbGRlclwiKS5kYXRhKCksIGNhbGxiYWNrOiBmdW5jdGlvbiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNkZWxldGVGb2xkZXJVcmwnKS52YWwoKSArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoZm9sZGVyLnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ2RlbGV0ZUZvbGRlcicsIGZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjY3JlYXRlRm9sZGVyTW9kYWwtZXJyb3JzJykuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gYm9vdHN0cmFwLk1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoJCgnI2NyZWF0ZUZvbGRlck1vZGFsJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbCAubW9kYWwtYm9keSBpbnB1dCcpLnZhbCgnJykuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmFtZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWwtZXJyb3JzJykuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gYm9vdHN0cmFwLk1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoJCgnI3JlbmFtZU1lZGlhTW9kYWwnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI29sZC1pdGVtLW5hbWUnKS52YWwobWVkaWEubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNyZW5hbWVNZWRpYU1vZGFsIC5tb2RhbC1ib2R5IGlucHV0JykudmFsKG1lZGlhLm5hbWUpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RBbmREZWxldGVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlTWVkaWEoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZU1lZGlhTGlzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFMaXN0ID0gdGhpcy5zZWxlY3RlZE1lZGlhcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lZGlhTGlzdC5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1EaWFsb2coe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uJChcIiNkZWxldGVNZWRpYVwiKS5kYXRhKCksIGNhbGxiYWNrOiBmdW5jdGlvbiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXRocyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHMucHVzaChtZWRpYUxpc3RbaV0ubWVkaWFQYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI2RlbGV0ZU1lZGlhTGlzdFVybCcpLnZhbCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzOiBwYXRoc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLnNlbGVjdGVkTWVkaWFzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHNlbGYubWVkaWFJdGVtcyAmJiBzZWxmLm1lZGlhSXRlbXMuaW5kZXhPZihzZWxmLnNlbGVjdGVkTWVkaWFzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYURlbGV0ZWQnLCBzZWxmLnNlbGVjdGVkTWVkaWFzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZU1lZGlhSXRlbTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtRGlhbG9nKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiQoXCIjZGVsZXRlTWVkaWFcIikuZGF0YSgpLCBjYWxsYmFjazogZnVuY3Rpb24gKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjZGVsZXRlTWVkaWFVcmwnKS52YWwoKSArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQobWVkaWEubWVkaWFQYXRoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc2VsZi5tZWRpYUl0ZW1zICYmIHNlbGYubWVkaWFJdGVtcy5pbmRleE9mKG1lZGlhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhRGVsZXRlZCcsIG1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9zZWxmLnNlbGVjdGVkTWVkaWEgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVEcmFnU3RhcnQ6IGZ1bmN0aW9uIChtZWRpYSwgZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaXJzdCBwYXJ0IG9mIG1vdmUgbWVkaWEgdG8gZm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmVwYXJlIHRoZSBkYXRhIHRoYXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBmb2xkZXIgY29tcG9uZW50IG9uIGRyb3AgZXZlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhTmFtZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYU5hbWVzLnB1c2goaXRlbS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIHRoZSB1c2VyIGRyYWdzIGFuIHVuc2VsZWN0ZWQgaXRlbSwgd2Ugc2VsZWN0IGl0IGZpcnN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTWVkaWFTZWxlY3RlZChtZWRpYSkgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhTmFtZXMucHVzaChtZWRpYS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMucHVzaChtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoJ21lZGlhTmFtZXMnLCBKU09OLnN0cmluZ2lmeShtZWRpYU5hbWVzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3NvdXJjZUZvbGRlcicsIHRoaXMuc2VsZWN0ZWRGb2xkZXIucGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSh0aGlzLmRyYWdEcm9wVGh1bWJuYWlsLCAxMCwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2Nyb2xsV2hpbGVEcmFnOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jbGllbnRZIDwgMTUwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsQnkoMCwgLTEwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY2xpZW50WSA+IHdpbmRvdy5pbm5lckhlaWdodCAtIDEwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbEJ5KDAsIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlU29ydDogZnVuY3Rpb24gKG5ld1NvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc29ydEJ5ID09IG5ld1NvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydEFzYyA9ICF0aGlzLnNvcnRBc2M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRBc2MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0QnkgPSBuZXdTb3J0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICQoJyNjcmVhdGUtZm9sZGVyLW5hbWUnKS5rZXlwcmVzcyhmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGUud2hpY2g7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09IDEzKSB7ICAvLyB0aGUgZW50ZXIga2V5IGNvZGVcclxuICAgICAgICAgICAgICAgICAgICAkKCcjbW9kYWxGb290ZXJPaycpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICQoJyNtb2RhbEZvb3Rlck9rJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gJCgnI2NyZWF0ZS1mb2xkZXItbmFtZScpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjY3JlYXRlRm9sZGVyVXJsJykudmFsKCkgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyLnBhdGgpICsgXCImbmFtZT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdhZGRGb2xkZXInLCBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlciwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2RhbCA9IGJvb3RzdHJhcC5Nb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKCQoJyNjcmVhdGVGb2xkZXJNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjY3JlYXRlRm9sZGVyTW9kYWwtZXJyb3JzJykuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IEpTT04ucGFyc2UoZXJyb3IucmVzcG9uc2VUZXh0KS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiIHJvbGU9XCJhbGVydFwiPjwvZGl2PicpLnRleHQoZXJyb3JNZXNzYWdlKS5hcHBlbmRUbygkKCcjY3JlYXRlRm9sZGVyTW9kYWwtZXJyb3JzJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICQoJyNyZW5hbWVNZWRpYU1vZGFsRm9vdGVyT2snKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld05hbWUgPSAkKCcjbmV3LWl0ZW0tbmFtZScpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9sZE5hbWUgPSAkKCcjb2xkLWl0ZW0tbmFtZScpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChuZXdOYW1lID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50Rm9sZGVyID0gbWVkaWFBcHAuc2VsZWN0ZWRGb2xkZXIucGF0aCArIFwiL1wiO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGb2xkZXIgPT09IFwiL1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvbGRlciA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIG5ld1BhdGggPSBjdXJyZW50Rm9sZGVyICsgbmV3TmFtZTtcclxuICAgICAgICAgICAgICAgIHZhciBvbGRQYXRoID0gY3VycmVudEZvbGRlciArIG9sZE5hbWU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5ld1BhdGgudG9Mb3dlckNhc2UoKSA9PT0gb2xkUGF0aC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gYm9vdHN0cmFwLk1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoJCgnI3JlbmFtZU1lZGlhTW9kYWwnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnI3JlbmFtZU1lZGlhVXJsJykudmFsKCkgKyBcIj9vbGRQYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG9sZFBhdGgpICsgXCImbmV3UGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChuZXdQYXRoKSxcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gYm9vdHN0cmFwLk1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoJCgnI3JlbmFtZU1lZGlhTW9kYWwnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYVJlbmFtZWQnLCBuZXdOYW1lLCBuZXdQYXRoLCBvbGRQYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWwtZXJyb3JzJykuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IEpTT04ucGFyc2UoZXJyb3IucmVzcG9uc2VUZXh0KS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiIHJvbGU9XCJhbGVydFwiPjwvZGl2PicpLnRleHQoZXJyb3JNZXNzYWdlKS5hcHBlbmRUbygkKCcjcmVuYW1lTWVkaWFNb2RhbC1lcnJvcnMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRpc3BsYXlNZWRpYUFwcGxpY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVkaWFBcHAnKS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgJChkb2N1bWVudCkudHJpZ2dlcignbWVkaWFBcHA6cmVhZHknKTtcclxuXHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG4iLCIkKGRvY3VtZW50KS5vbignbWVkaWFBcHA6cmVhZHknLCBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgY2h1bmtlZEZpbGVVcGxvYWRJZCA9IGNyeXB0by5yYW5kb21VVUlEKCk7XHJcblxyXG4gICAgJCgnI2ZpbGV1cGxvYWQnKVxyXG4gICAgICAgIC5maWxldXBsb2FkKHtcclxuICAgICAgICAgICAgZHJvcFpvbmU6ICQoJyNtZWRpYUFwcCcpLFxyXG4gICAgICAgICAgICBsaW1pdENvbmN1cnJlbnRVcGxvYWRzOiAyMCxcclxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgdXJsOiAkKCcjdXBsb2FkRmlsZXMnKS52YWwoKSxcclxuICAgICAgICAgICAgbWF4Q2h1bmtTaXplOiBOdW1iZXIoJCgnI21heFVwbG9hZENodW5rU2l6ZScpLnZhbCgpIHx8IDApLFxyXG4gICAgICAgICAgICBmb3JtRGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFudGlGb3JnZXJ5VG9rZW4gPSAkKFwiaW5wdXRbbmFtZT1fX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbl1cIikudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdwYXRoJywgdmFsdWU6IG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyLnBhdGggfSxcclxuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbicsIHZhbHVlOiBhbnRpRm9yZ2VyeVRva2VuIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19jaHVua2VkRmlsZVVwbG9hZElkJywgdmFsdWU6IGNodW5rZWRGaWxlVXBsb2FkSWQgfSxcclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICQuZWFjaChkYXRhLnJlc3VsdC5maWxlcywgZnVuY3Rpb24gKGluZGV4LCBmaWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWxlLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhQXBwLm1lZGlhSXRlbXMucHVzaChmaWxlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAub24oJ2ZpbGV1cGxvYWRjaHVua2JlZm9yZXNlbmQnLCAoZSwgb3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZmlsZSA9IG9wdGlvbnMuZmlsZXNbMF07XHJcbiAgICAgICAgICAgIC8vIEhlcmUgd2UgcmVwbGFjZSB0aGUgYmxvYiB3aXRoIGEgRmlsZSBvYmplY3QgdG8gZW5zdXJlIHRoZSBmaWxlIG5hbWUgYW5kIG90aGVycyBhcmUgcHJlc2VydmVkIGZvciB0aGUgYmFja2VuZC5cclxuICAgICAgICAgICAgb3B0aW9ucy5ibG9iID0gbmV3IEZpbGUoXHJcbiAgICAgICAgICAgICAgICBbb3B0aW9ucy5ibG9iXSxcclxuICAgICAgICAgICAgICAgIGZpbGUubmFtZSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBmaWxlLmxhc3RNb2RpZmllZCxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG59KTtcclxuXHJcblxyXG4kKGRvY3VtZW50KS5iaW5kKCdkcmFnb3ZlcicsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICB2YXIgZHQgPSBlLm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyO1xyXG4gICAgaWYgKGR0LnR5cGVzICYmIChkdC50eXBlcy5pbmRleE9mID8gZHQudHlwZXMuaW5kZXhPZignRmlsZXMnKSAhPSAtMSA6IGR0LnR5cGVzLmNvbnRhaW5zKCdGaWxlcycpKSkge1xyXG4gICAgICAgIHZhciBkcm9wWm9uZSA9ICQoJyNjdXN0b21kcm9wem9uZScpLFxyXG4gICAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LmRyb3Bab25lVGltZW91dDtcclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZHJvcFpvbmUuYWRkQ2xhc3MoJ2luJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBob3ZlcmVkRHJvcFpvbmUgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KGRyb3Bab25lKTtcclxuICAgICAgICB3aW5kb3cuZHJvcFpvbmVUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5kcm9wWm9uZVRpbWVvdXQgPSBudWxsO1xyXG4gICAgICAgICAgICBkcm9wWm9uZS5yZW1vdmVDbGFzcygnaW4nKTtcclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgfSAgICBcclxufSk7IiwiLy8gPGZvbGRlcj4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ2ZvbGRlcicsIHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGxpIDpjbGFzcz1cIntzZWxlY3RlZDogaXNTZWxlY3RlZH1cIiBcclxuICAgICAgICAgICAgICAgIHYtb246ZHJhZ2xlYXZlLnByZXZlbnQgPSBcImhhbmRsZURyYWdMZWF2ZSgkZXZlbnQpO1wiIFxyXG4gICAgICAgICAgICAgICAgdi1vbjpkcmFnb3Zlci5wcmV2ZW50LnN0b3A9XCJoYW5kbGVEcmFnT3ZlcigkZXZlbnQpO1wiIFxyXG4gICAgICAgICAgICAgICAgdi1vbjpkcm9wLnByZXZlbnQuc3RvcCA9IFwibW92ZU1lZGlhVG9Gb2xkZXIobW9kZWwsICRldmVudClcIiA+XHJcbiAgICAgICAgICAgIDxkaXYgOmNsYXNzPVwie2ZvbGRlcmhvdmVyZWQ6IGlzSG92ZXJlZCAsIHRyZWVyb290OiBsZXZlbCA9PSAxfVwiID5cclxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiA6c3R5bGU9XCJ7IHBhZGRpbmcke2RvY3VtZW50LmRpciA9PSBcImx0clwiID8gXCJMZWZ0XCIgOiBcIlJpZ2h0XCJ9OnBhZGRpbmcgKyAncHgnIH1cIiB2LW9uOmNsaWNrPVwic2VsZWN0XCIgIGRyYWdnYWJsZT1cImZhbHNlXCIgY2xhc3M9XCJmb2xkZXItbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIHYtb246Y2xpY2suc3RvcD1cInRvZ2dsZVwiIGNsYXNzPVwiZXhwYW5kXCIgOmNsYXNzPVwie29wZW5lZDogb3BlbiwgY2xvc2VkOiAhb3BlbiwgZW1wdHk6IGVtcHR5fVwiPjxpIHYtaWY9XCJvcGVuXCIgY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGV2cm9uLSR7ZG9jdW1lbnQuZGlyID09IFwibHRyXCIgPyBcInJpZ2h0XCIgOiBcImxlZnRcIn1cIj48L2k+PC9zcGFuPiBcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbGRlci1uYW1lIG1zLTJcIj57e21vZGVsLm5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZm9sZGVyLWFjdGlvbnNcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB2LWNsb2FrIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tc21cIiB2LW9uOmNsaWNrPVwiY3JlYXRlRm9sZGVyXCIgdi1pZj1cImlzU2VsZWN0ZWQgfHwgaXNSb290XCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1wbHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHYtY2xvYWsgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHYtb246Y2xpY2s9XCJkZWxldGVGb2xkZXJcIiB2LWlmPVwiaXNTZWxlY3RlZCAmJiAhaXNSb290XCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10cmFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8b2wgdi1zaG93PVwib3BlblwiPlxyXG4gICAgICAgICAgICAgICAgPGZvbGRlciB2LWZvcj1cImZvbGRlciBpbiBjaGlsZHJlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCJmb2xkZXIucGF0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDptb2RlbD1cImZvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpzZWxlY3RlZC1pbi1tZWRpYS1hcHA9XCJzZWxlY3RlZEluTWVkaWFBcHBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6bGV2ZWw9XCJsZXZlbCArIDFcIj5cclxuICAgICAgICAgICAgICAgIDwvZm9sZGVyPlxyXG4gICAgICAgICAgICA8L29sPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgYCxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgbW9kZWw6IE9iamVjdCxcclxuICAgICAgICBzZWxlY3RlZEluTWVkaWFBcHA6IE9iamVjdCxcclxuICAgICAgICBsZXZlbDogTnVtYmVyXHJcbiAgICB9LFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9wZW46IGZhbHNlLFxyXG4gICAgICAgICAgICBjaGlsZHJlbjogbnVsbCwgLy8gbm90IGluaXRpYWxpemVkIHN0YXRlIChmb3IgbGF6eS1sb2FkaW5nKVxyXG4gICAgICAgICAgICBwYXJlbnQ6IG51bGwsXHJcbiAgICAgICAgICAgIGlzSG92ZXJlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDBcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICBlbXB0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuY2hpbGRyZW4gfHwgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT0gMDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkSW5NZWRpYUFwcC5uYW1lID09IHRoaXMubW9kZWwubmFtZSkgJiYgKHRoaXMuc2VsZWN0ZWRJbk1lZGlhQXBwLnBhdGggPT0gdGhpcy5tb2RlbC5wYXRoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGlzUm9vdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5wYXRoID09PSAnJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICgodGhpcy5pc1Jvb3QgPT0gZmFsc2UpICYmICh0aGlzLmlzQW5jZXN0b3JPZlNlbGVjdGVkRm9sZGVyKCkpKXtcclxuICAgICAgICAgICAgdGhpcy50b2dnbGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGFkZGluZyA9IHRoaXMubGV2ZWwgPCAzID8gIDE2IDogMTYgKyAodGhpcy5sZXZlbCAqIDgpO1xyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgYnVzLiRvbignZGVsZXRlRm9sZGVyJywgZnVuY3Rpb24gKGZvbGRlcikge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc2VsZi5jaGlsZHJlbiAmJiBzZWxmLmNoaWxkcmVuLmluZGV4T2YoZm9sZGVyKVxyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSlcclxuICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ2ZvbGRlckRlbGV0ZWQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBidXMuJG9uKCdhZGRGb2xkZXInLCBmdW5jdGlvbiAodGFyZ2V0LCBmb2xkZXIpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYubW9kZWwgPT0gdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jaGlsZHJlbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hpbGRyZW4ucHVzaChmb2xkZXIpO1xyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGZvbGRlci5wYXJlbnQgPSBzZWxmLm1vZGVsO1xyXG4gICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdmb2xkZXJBZGRlZCcsIGZvbGRlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgaXNBbmNlc3Rvck9mU2VsZWN0ZWRGb2xkZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcGFyZW50Rm9sZGVyID0gbWVkaWFBcHAuc2VsZWN0ZWRGb2xkZXI7XHJcbiAgICAgICAgICAgIHdoaWxlIChwYXJlbnRGb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRGb2xkZXIucGF0aCA9PSB0aGlzLm1vZGVsLnBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGFyZW50Rm9sZGVyID0gcGFyZW50Rm9sZGVyLnBhcmVudDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdG9nZ2xlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW4gJiYgIXRoaXMuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZENoaWxkcmVuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlbGVjdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ2ZvbGRlclNlbGVjdGVkJywgdGhpcy5tb2RlbCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZENoaWxkcmVuKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjcmVhdGVGb2xkZXI6IGZ1bmN0aW9uICgpIHsgICAgICAgICAgIFxyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ2NyZWF0ZUZvbGRlclJlcXVlc3RlZCcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVsZXRlRm9sZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnZGVsZXRlRm9sZGVyUmVxdWVzdGVkJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBsb2FkQ2hpbGRyZW46IGZ1bmN0aW9uICgpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6ICQoJyNnZXRGb2xkZXJzVXJsJykudmFsKCkgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHNlbGYubW9kZWwucGF0aCksXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoaWxkcmVuID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYy5wYXJlbnQgPSBzZWxmLm1vZGVsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbXRweSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBoYW5kbGVEcmFnT3ZlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hvdmVyZWQgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaGFuZGxlRHJhZ0xlYXZlOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzSG92ZXJlZCA9IGZhbHNlOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbW92ZU1lZGlhVG9Gb2xkZXI6IGZ1bmN0aW9uIChmb2xkZXIsIGUpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgc2VsZi5pc0hvdmVyZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHZhciBtZWRpYU5hbWVzID0gSlNPTi5wYXJzZShlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCdtZWRpYU5hbWVzJykpOyBcclxuXHJcbiAgICAgICAgICAgIGlmIChtZWRpYU5hbWVzLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHNvdXJjZUZvbGRlciA9IGUuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3NvdXJjZUZvbGRlcicpO1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0Rm9sZGVyID0gZm9sZGVyLnBhdGg7XHJcblxyXG4gICAgICAgICAgICBpZiAoc291cmNlRm9sZGVyID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgc291cmNlRm9sZGVyID0gJ3Jvb3QnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0Rm9sZGVyID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0Rm9sZGVyID0gJ3Jvb3QnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc291cmNlRm9sZGVyID09PSB0YXJnZXRGb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCQoJyNzYW1lRm9sZGVyTWVzc2FnZScpLnZhbCgpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uZmlybURpYWxvZyh7Li4uJChcIiNtb3ZlTWVkaWFcIikuZGF0YSgpLCBjYWxsYmFjazogZnVuY3Rpb24gKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbW92ZU1lZGlhTGlzdFVybCcpLnZhbCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFOYW1lczogbWVkaWFOYW1lcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZvbGRlcjogc291cmNlRm9sZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Rm9sZGVyOiB0YXJnZXRGb2xkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYUxpc3RNb3ZlZCcpOyAvLyBNZWRpYUFwcCB3aWxsIGxpc3RlbiB0byB0aGlzLCBhbmQgdGhlbiBpdCB3aWxsIHJlbG9hZCBwYWdlIHNvIHRoZSBtb3ZlZCBtZWRpYXMgd29uJ3QgYmUgdGhlcmUgYW55bW9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhTGlzdE1vdmVkJywgZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDxtZWRpYS1pdGVtcy1ncmlkPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgnbWVkaWEtaXRlbXMtZ3JpZCcsIHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPG9sIGNsYXNzPVwicm93IG1lZGlhLWl0ZW1zLWdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxsaSB2LWZvcj1cIm1lZGlhIGluIGZpbHRlcmVkTWVkaWFJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgOmtleT1cIm1lZGlhLm5hbWVcIiBcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lZGlhLWl0ZW0gbWVkaWEtY29udGFpbmVyLW1haW4tbGlzdC1pdGVtIGNhcmQgcC0wXCJcclxuICAgICAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7d2lkdGg6IHRodW1iU2l6ZSArIDIgKyAncHgnfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwie3NlbGVjdGVkOiBpc01lZGlhU2VsZWN0ZWQobWVkaWEpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdi1vbjpjbGljay5zdG9wPVwidG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYShtZWRpYSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnYWJsZT1cInRydWVcIiB2LW9uOmRyYWdzdGFydD1cImRyYWdTdGFydChtZWRpYSwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYi1jb250YWluZXJcIiA6c3R5bGU9XCJ7aGVpZ2h0OiB0aHVtYlNpemUgKydweCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgdi1pZj1cIm1lZGlhLm1pbWUuc3RhcnRzV2l0aCgnaW1hZ2UnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNyYz1cImJ1aWxkTWVkaWFVcmwobWVkaWEudXJsLCB0aHVtYlNpemUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnN0eWxlPVwie21heEhlaWdodDogdGh1bWJTaXplICsncHgnLCBtYXhXaWR0aDogdGh1bWJTaXplICsncHgnfVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIHYtZWxzZSBjbGFzcz1cImZhLXJlZ3VsYXIgZmEtZmlsZSBkaXNwbGF5LTFcIiA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYS1jb250YWluZXItbWFpbi1pdGVtLXRpdGxlIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiBlZGl0LWJ1dHRvblwiIHYtb246Y2xpY2suc3RvcD1cInJlbmFtZU1lZGlhKG1lZGlhKVwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtZWRpdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsb2F0LWVuZCBpbmxpbmUtbWVkaWEtYnV0dG9uIGRlbGV0ZS1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJkZWxldGVNZWRpYShtZWRpYSlcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRyYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgOmhyZWY9XCJtZWRpYS51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsb2F0LWVuZCBpbmxpbmUtbWVkaWEtYnV0dG9uIHZpZXctYnV0dG9uXCJcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLWRvd25sb2FkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZWRpYS1maWxlbmFtZSBjYXJkLXRleHQgc21hbGxcIiA6dGl0bGU9XCJtZWRpYS5uYW1lXCI+e3sgbWVkaWEubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvb2w+XHJcbiAgICAgICAgYCxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBUOiB7fVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIGZpbHRlcmVkTWVkaWFJdGVtczogQXJyYXksXHJcbiAgICAgICAgc2VsZWN0ZWRNZWRpYXM6IEFycmF5LFxyXG4gICAgICAgIHRodW1iU2l6ZTogTnVtYmVyXHJcbiAgICB9LFxyXG4gICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyByZXRyaWV2aW5nIGxvY2FsaXplZCBzdHJpbmdzIGZyb20gdmlld1xyXG4gICAgICAgIHNlbGYuVC5lZGl0QnV0dG9uID0gJCgnI3QtZWRpdC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZGVsZXRlQnV0dG9uID0gJCgnI3QtZGVsZXRlLWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBpc01lZGlhU2VsZWN0ZWQ6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5zZWxlY3RlZE1lZGlhcy5zb21lKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnVybC50b0xvd2VyQ2FzZSgpID09PSBtZWRpYS51cmwudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBidWlsZE1lZGlhVXJsOiBmdW5jdGlvbiAodXJsLCB0aHVtYlNpemUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVybCArICh1cmwuaW5kZXhPZignPycpID09IC0xID8gJz8nIDogJyYnKSArICd3aWR0aD0nICsgdGh1bWJTaXplICsgJyZoZWlnaHQ9JyArIHRodW1iU2l6ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRvZ2dsZVNlbGVjdGlvbk9mTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhVG9nZ2xlUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVuYW1lTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ3JlbmFtZU1lZGlhUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVsZXRlTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ2RlbGV0ZU1lZGlhUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZHJhZ1N0YXJ0OiBmdW5jdGlvbiAobWVkaWEsIGUpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYURyYWdTdGFydFJlcXVlc3RlZCcsIG1lZGlhLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyA8bWVkaWEtaXRlbXMtdGFibGU+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdtZWRpYS1pdGVtcy10YWJsZScsIHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgbWVkaWEtaXRlbXMtdGFibGUgbS0wXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImhlYWRlci1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzcz1cInRodW1ibmFpbC1jb2x1bW5cIj57eyBULmltYWdlSGVhZGVyIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiB2LW9uOmNsaWNrPVwiY2hhbmdlU29ydCgnbmFtZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAge3sgVC5uYW1lSGVhZGVyIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8c29ydC1pbmRpY2F0b3IgY29sbmFtZT1cIm5hbWVcIiA6c2VsZWN0ZWRjb2xuYW1lPVwic29ydEJ5XCIgOmFzYz1cInNvcnRBc2NcIj48L3NvcnQtaW5kaWNhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgdi1vbjpjbGljaz1cImNoYW5nZVNvcnQoJ2xhc3RNb2RpZnknKVwiPiBcclxuICAgICAgICAgICAgICAgICAgICAgICB7eyBULmxhc3RNb2RpZnlIZWFkZXIgfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8c29ydC1pbmRpY2F0b3IgY29sbmFtZT1cImxhc3RNb2RpZnlcIiA6c2VsZWN0ZWRjb2xuYW1lPVwic29ydEJ5XCIgOmFzYz1cInNvcnRBc2NcIj48L3NvcnQtaW5kaWNhdG9yPiBcclxuICAgICAgICAgICAgICAgICAgICA8L3RoPiBcclxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiB2LW9uOmNsaWNrPVwiY2hhbmdlU29ydCgnc2l6ZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9uYWwtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBULnNpemVIZWFkZXIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3J0LWluZGljYXRvciBjb2xuYW1lPVwic2l6ZVwiIDpzZWxlY3RlZGNvbG5hbWU9XCJzb3J0QnlcIiA6YXNjPVwic29ydEFzY1wiPjwvc29ydC1pbmRpY2F0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIHYtb246Y2xpY2s9XCJjaGFuZ2VTb3J0KCdtaW1lJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcHRpb25hbC1jb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgVC50eXBlSGVhZGVyIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8c29ydC1pbmRpY2F0b3IgY29sbmFtZT1cIm1pbWVcIiA6c2VsZWN0ZWRjb2xuYW1lPVwic29ydEJ5XCIgOmFzYz1cInNvcnRBc2NcIj48L3NvcnQtaW5kaWNhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgdi1mb3I9XCJtZWRpYSBpbiBmaWx0ZXJlZE1lZGlhSXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWVkaWEtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwie3NlbGVjdGVkOiBpc01lZGlhU2VsZWN0ZWQobWVkaWEpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdi1vbjpjbGljay5zdG9wPVwidG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYShtZWRpYSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdnYWJsZT1cInRydWVcIiB2LW9uOmRyYWdzdGFydD1cImRyYWdTdGFydChtZWRpYSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOmtleT1cIm1lZGlhLm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0aHVtYm5haWwtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZy13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgdi1pZj1cIm1lZGlhLm1pbWUuc3RhcnRzV2l0aCgnaW1hZ2UnKVwiIGRyYWdnYWJsZT1cImZhbHNlXCIgOnNyYz1cImJ1aWxkTWVkaWFVcmwobWVkaWEudXJsLCB0aHVtYlNpemUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgdi1lbHNlIGNsYXNzPVwiZmEtc29saWQgZmEtZmlsZSBmYS1sZ1wiIDpkYXRhLW1pbWU9XCJtZWRpYS5taW1lXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtbmFtZS1jZWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJicmVhay13b3JkXCI+IHt7IG1lZGlhLm5hbWUgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc20gbWUtMSBlZGl0LWJ1dHRvblwiIHYtb246Y2xpY2suc3RvcD1cInJlbmFtZU1lZGlhKG1lZGlhKVwiPiB7eyBULmVkaXRCdXR0b24gfX0gPC9hID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc20gZGVsZXRlLWJ1dHRvblwiIHYtb246Y2xpY2suc3RvcD1cImRlbGV0ZU1lZGlhKG1lZGlhKVwiPiB7eyBULmRlbGV0ZUJ1dHRvbiB9fSA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSA6aHJlZj1cIm1lZGlhLnVybFwiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGJ0bi1zbSB2aWV3LWJ1dHRvblwiPiB7eyBULnZpZXdCdXR0b24gfX0gPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29sXCI+IHt7IHByaW50RGF0ZVRpbWUobWVkaWEubGFzdE1vZGlmeSkgfX0gPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNvbCBvcHRpb25hbC1jb2xcIj4ge3sgaXNOYU4obWVkaWEuc2l6ZSk/IDAgOiBNYXRoLnJvdW5kKG1lZGlhLnNpemUgLyAxMDI0KSB9fSBLQjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb2wgb3B0aW9uYWwtY29sXCI+e3sgbWVkaWEubWltZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgICBgLFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIFQ6IHt9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgc29ydEJ5OiBTdHJpbmcsXHJcbiAgICAgICAgc29ydEFzYzogQm9vbGVhbixcclxuICAgICAgICBmaWx0ZXJlZE1lZGlhSXRlbXM6IEFycmF5LFxyXG4gICAgICAgIHNlbGVjdGVkTWVkaWFzOiBBcnJheSxcclxuICAgICAgICB0aHVtYlNpemU6IE51bWJlclxyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5ULmltYWdlSGVhZGVyID0gJCgnI3QtaW1hZ2UtaGVhZGVyJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULm5hbWVIZWFkZXIgPSAkKCcjdC1uYW1lLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5sYXN0TW9kaWZ5SGVhZGVyID0gJCgnI3QtbGFzdE1vZGlmeS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuc2l6ZUhlYWRlciA9ICQoJyN0LXNpemUtaGVhZGVyJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnR5cGVIZWFkZXIgPSAkKCcjdC10eXBlLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5lZGl0QnV0dG9uID0gJCgnI3QtZWRpdC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZGVsZXRlQnV0dG9uID0gJCgnI3QtZGVsZXRlLWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC52aWV3QnV0dG9uID0gJCgnI3Qtdmlldy1idXR0b24nKS52YWwoKTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgaXNNZWRpYVNlbGVjdGVkOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuc2VsZWN0ZWRNZWRpYXMuc29tZShmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC51cmwudG9Mb3dlckNhc2UoKSA9PT0gbWVkaWEudXJsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYnVpbGRNZWRpYVVybDogZnVuY3Rpb24gKHVybCwgdGh1bWJTaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1cmwgKyAodXJsLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyAnd2lkdGg9JyArIHRodW1iU2l6ZSArICcmaGVpZ2h0PScgKyB0aHVtYlNpemU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjaGFuZ2VTb3J0OiBmdW5jdGlvbiAobmV3U29ydCkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ3NvcnRDaGFuZ2VSZXF1ZXN0ZWQnLCBuZXdTb3J0KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRvZ2dsZVNlbGVjdGlvbk9mTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhVG9nZ2xlUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVuYW1lTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ3JlbmFtZU1lZGlhUmVxdWVzdGVkJywgbWVkaWEpOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVsZXRlTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ2RlbGV0ZU1lZGlhUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZHJhZ1N0YXJ0OiBmdW5jdGlvbiAobWVkaWEsIGUpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYURyYWdTdGFydFJlcXVlc3RlZCcsIG1lZGlhLCBlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHByaW50RGF0ZVRpbWU6IGZ1bmN0aW9uIChkYXRlbWlsbGlzKXtcclxuICAgICAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShkYXRlbWlsbGlzKTtcclxuICAgICAgICAgICAgcmV0dXJuIGQudG9Mb2NhbGVTdHJpbmcoKTsgICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyBUaGlzIGNvbXBvbmVudCByZWNlaXZlcyBhIGxpc3Qgb2YgYWxsIHRoZSBpdGVtcywgdW5wYWdlZC5cclxuLy8gQXMgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2VyLCBpdCByYWlzZXMgZXZlbnRzIHdpdGggdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IHBhZ2UuXHJcbi8vIEl0J3MgdGhlIHBhcmVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGxpc3RlbiBmb3IgdGhlc2UgZXZlbnRzIGFuZCBkaXNwbGF5IHRoZSByZWNlaXZlZCBpdGVtc1xyXG4vLyA8cGFnZXI+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdwYWdlcicsIHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2PlxyXG4gICAgICAgIDxuYXYgaWQ9XCJtZWRpYS1wYWdlclwiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiBhcmlhLWxhYmVsPVwiUGFnaW5hdGlvbiBOYXZpZ2F0aW9uXCIgcm9sZT1cIm5hdmlnYXRpb25cIiA6ZGF0YS1jb21wdXRlZC10cmlnZ2VyPVwiaXRlbXNJbkN1cnJlbnRQYWdlLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJwYWdpbmF0aW9uIHBhZ2luYXRpb24tc20gbS0wXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbWVkaWEtZmlyc3QtYnV0dG9uXCIgOmNsYXNzPVwie2Rpc2FibGVkIDogIWNhbkRvRmlyc3R9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIDp0YWJpbmRleD1cImNhbkRvRmlyc3QgPyAwIDogLTFcIiB2LW9uOmNsaWNrPVwiZ29GaXJzdFwiPnt7IFQucGFnZXJGaXJzdEJ1dHRvbiB9fTwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiA6Y2xhc3M9XCJ7ZGlzYWJsZWQgOiAhY2FuRG9QcmV2fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb1ByZXYgPyAwIDogLTFcIiB2LW9uOmNsaWNrPVwicHJldmlvdXNcIj57eyBULnBhZ2VyUHJldmlvdXNCdXR0b24gfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIHYtaWY9XCJsaW5rICE9PSAtMVwiIGNsYXNzPVwicGFnZS1pdGVtIHBhZ2UtbnVtYmVyXCIgIDpjbGFzcz1cInthY3RpdmUgOiBjdXJyZW50ID09IGxpbmsgLSAxfVwiIHYtZm9yPVwibGluayBpbiBwYWdlTGlua3NcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgdi1vbjpjbGljaz1cImdvVG8obGluayAtIDEpXCIgOmFyaWEtbGFiZWw9XCInR290byBQYWdlJyArIGxpbmtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsaW5rfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cImN1cnJlbnQgPT0gbGluayAtMVwiIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+KGN1cnJlbnQpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiA6Y2xhc3M9XCJ7ZGlzYWJsZWQgOiAhY2FuRG9OZXh0fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb05leHQgPyAwIDogLTFcIiB2LW9uOmNsaWNrPVwibmV4dFwiPnt7IFQucGFnZXJOZXh0QnV0dG9uIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSBtZWRpYS1sYXN0LWJ1dHRvblwiIDpjbGFzcz1cIntkaXNhYmxlZCA6ICFjYW5Eb0xhc3R9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIDp0YWJpbmRleD1cImNhbkRvTGFzdCA/IDAgOiAtMVwiIHYtb246Y2xpY2s9XCJnb0xhc3RcIj57eyBULnBhZ2VyTGFzdEJ1dHRvbiB9fTwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbXMtNCBwYWdlLXNpemUtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGluayBkaXNhYmxlZCB0ZXh0LW11dGVkIHBhZ2Utc2l6ZS1sYWJlbFwiPnt7IFQucGFnZXJQYWdlU2l6ZUxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwicGFnZVNpemVTZWxlY3RcIiBjbGFzcz1cInBhZ2UtbGlua1wiIHYtbW9kZWw9XCJwYWdlU2l6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj1cIm9wdGlvbiBpbiBwYWdlU2l6ZU9wdGlvbnNcIiB2LWJpbmQ6dmFsdWU9XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdGlvbn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbmF2PlxyXG4gICAgICAgIDxuYXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJwYWdpbmF0aW9uIHBhZ2luYXRpb24tc20gbS0wIG10LTJcIj5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSBtcy00IHBhZ2UtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1saW5rIGRpc2FibGVkIHRleHQtbXV0ZWQgXCI+e3sgVC5wYWdlclBhZ2VMYWJlbCB9fSB7e2N1cnJlbnQgKyAxfX0ve3t0b3RhbFBhZ2VzfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1zLTQgdG90YWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1saW5rIGRpc2FibGVkIHRleHQtbXV0ZWQgXCI+IHt7IFQucGFnZXJUb3RhbExhYmVsIH19IHt7dG90YWx9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9uYXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgYCxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgc291cmNlSXRlbXM6IEFycmF5XHJcbiAgICB9LFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHBhZ2VTaXplOiAxMCxcclxuICAgICAgICAgICAgcGFnZVNpemVPcHRpb25zOiBbMTAsIDMwLCA1MCwgMTAwXSxcclxuICAgICAgICAgICAgY3VycmVudDogMCxcclxuICAgICAgICAgICAgVDoge31cclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIC8vIHJldHJpZXZpbmcgbG9jYWxpemVkIHN0cmluZ3MgZnJvbSB2aWV3XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyRmlyc3RCdXR0b24gPSAkKCcjdC1wYWdlci1maXJzdC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJQcmV2aW91c0J1dHRvbiA9ICQoJyN0LXBhZ2VyLXByZXZpb3VzLWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlck5leHRCdXR0b24gPSAkKCcjdC1wYWdlci1uZXh0LWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlckxhc3RCdXR0b24gPSAkKCcjdC1wYWdlci1sYXN0LWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlclBhZ2VTaXplTGFiZWwgPSAkKCcjdC1wYWdlci1wYWdlLXNpemUtbGFiZWwnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJQYWdlTGFiZWwgPSAkKCcjdC1wYWdlci1wYWdlLWxhYmVsJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyVG90YWxMYWJlbCA9ICQoJyN0LXBhZ2VyLXRvdGFsLWxhYmVsJykudmFsKCk7ICAgICAgICBcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmN1cnJlbnQgKyAxO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcHJldmlvdXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5jdXJyZW50IC0gMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdvRmlyc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gMDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdvTGFzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnRvdGFsUGFnZXMgLSAxO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ29UbzogZnVuY3Rpb24gKHRhcmdldFBhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGFyZ2V0UGFnZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICB0b3RhbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VJdGVtcyA/IHRoaXMuc291cmNlSXRlbXMubGVuZ3RoIDogMDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRvdGFsUGFnZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWwgLyB0aGlzLnBhZ2VTaXplKTtcclxuICAgICAgICAgICAgcmV0dXJuIHBhZ2VzID4gMCA/IHBhZ2VzIDogMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGlzTGFzdFBhZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudCArIDEgPj0gdGhpcy50b3RhbFBhZ2VzO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaXNGaXJzdFBhZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudCA9PT0gMDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkRvTmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNMYXN0UGFnZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkRvUHJldjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNGaXJzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb0ZpcnN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0ZpcnN0UGFnZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkRvTGFzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNMYXN0UGFnZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIHRoaXMgY29tcHV0ZWQgaXMgb25seSB0byBoYXZlIGEgY2VudHJhbCBwbGFjZSB3aGVyZSB3ZSBkZXRlY3QgY2hhbmdlcyBhbmQgbGV2ZXJhZ2UgVnVlIEpTIHJlYWN0aXZpdHkgdG8gcmFpc2Ugb3VyIGV2ZW50LlxyXG4gICAgICAgIC8vIFRoYXQgZXZlbnQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBwYXJlbnQgbWVkaWEgYXBwIHRvIGRpc3BsYXkgdGhlIGl0ZW1zIGluIHRoZSBwYWdlLlxyXG4gICAgICAgIC8vIHRoaXMgbG9naWMgd2lsbCBub3QgcnVuIGlmIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSBpcyBub3QgdXNlZCBpbiB0aGUgdGVtcGxhdGUuIFdlIHVzZSBhIGR1bW15IFwiZGF0YS1jb21wdXRlZC10cmlnZ2VyXCIgYXR0cmlidXRlIGZvciB0aGF0LlxyXG4gICAgICAgIGl0ZW1zSW5DdXJyZW50UGFnZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLnBhZ2VTaXplICogdGhpcy5jdXJyZW50O1xyXG4gICAgICAgICAgICB2YXIgZW5kID0gc3RhcnQgKyB0aGlzLnBhZ2VTaXplO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5zb3VyY2VJdGVtcy5zbGljZShzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdwYWdlckV2ZW50JywgcmVzdWx0KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhZ2VMaW5rczogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgdmFyIGxpbmtzID0gW107XHJcblxyXG4gICAgICAgICAgICBsaW5rcy5wdXNoKHRoaXMuY3VycmVudCArIDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gQWRkIDIgaXRlbXMgYmVmb3JlIGN1cnJlbnRcclxuICAgICAgICAgICAgdmFyIGJlZm9yZUN1cnJlbnQgPSB0aGlzLmN1cnJlbnQgPiAwID8gdGhpcy5jdXJyZW50IDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnVuc2hpZnQoYmVmb3JlQ3VycmVudCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYmVmb3JlQmVmb3JlQ3VycmVudCA9IHRoaXMuY3VycmVudCA+IDEgPyB0aGlzLmN1cnJlbnQgLSAxIDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnVuc2hpZnQoYmVmb3JlQmVmb3JlQ3VycmVudCk7XHJcblxyXG5cclxuICAgICAgICAgICAgLy8gQWRkIDIgaXRlbXMgYWZ0ZXIgY3VycmVudFxyXG4gICAgICAgICAgICB2YXIgYWZ0ZXJDdXJyZW50ID0gdGhpcy50b3RhbFBhZ2VzIC0gdGhpcy5jdXJyZW50ID4gMSA/IHRoaXMuY3VycmVudCArIDIgOiAtMTtcclxuICAgICAgICAgICAgbGlua3MucHVzaChhZnRlckN1cnJlbnQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFmdGVyQWZ0ZXJDdXJyZW50ID0gdGhpcy50b3RhbFBhZ2VzIC0gdGhpcy5jdXJyZW50ID4gMiA/IHRoaXMuY3VycmVudCArIDMgOiAtMTtcclxuICAgICAgICAgICAgbGlua3MucHVzaChhZnRlckFmdGVyQ3VycmVudCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbGlua3M7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHdhdGNoOiB7XHJcbiAgICAgICAgc291cmNlSXRlbXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gMDsgLy8gcmVzZXR0aW5nIGN1cnJlbnQgcGFnZSBhZnRlciByZWNlaXZpbmcgYSBuZXcgbGlzdCBvZiB1bnBhZ2VkIGl0ZW1zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYWdlU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDxzb3J0LWluZGljYXRvcj4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ3NvcnRJbmRpY2F0b3InLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgdi1zaG93PVwiaXNBY3RpdmVcIiBjbGFzcz1cInNvcnQtaW5kaWNhdG9yXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cImFzY1wiPjxpIGNsYXNzPVwic21hbGwgZmEgZmEtY2hldnJvbi11cFwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cIiFhc2NcIj48aSBjbGFzcz1cInNtYWxsIGZhIGZhLWNoZXZyb24tZG93blwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgYCxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgY29sbmFtZTogU3RyaW5nLFxyXG4gICAgICAgIHNlbGVjdGVkY29sbmFtZTogU3RyaW5nLFxyXG4gICAgICAgIGFzYzogQm9vbGVhblxyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgaXNBY3RpdmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbmFtZS50b0xvd2VyQ2FzZSgpID09IHRoaXMuc2VsZWN0ZWRjb2xuYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gPHVwbG9hZD4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ3VwbG9hZCcsIHtcclxuICAgIHRlbXBsYXRlOiAnXFxcclxuICAgICAgICA8ZGl2IDpjbGFzcz1cInsgXFwndXBsb2FkLXdhcm5pbmdcXCcgOiBtb2RlbC5lcnJvck1lc3NhZ2UgfVwiIGNsYXNzPVwidXBsb2FkIG0tMiBwLTIgcHQtMFwiPiBcXFxyXG4gICAgICAgICAgICA8c3BhbiB2LWlmPVwibW9kZWwuZXJyb3JNZXNzYWdlXCIgdi1vbjpjbGljaz1cImRpc21pc3NXYXJuaW5nKClcIiBjbGFzcz1cImNsb3NlLXdhcm5pbmdcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiA8L3NwYW4+XFxcclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJ1cGxvYWQtbmFtZVwiIDp0aXRsZT1cIm1vZGVsLmVycm9yTWVzc2FnZVwiPnt7IG1vZGVsLm5hbWUgfX08L3A+IFxcXHJcbiAgICAgICAgICAgIDxkaXY+IFxcXHJcbiAgICAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cIiFtb2RlbC5lcnJvck1lc3NhZ2VcIiA6c3R5bGU9XCJ7IHdpZHRoOiBtb2RlbC5wZXJjZW50YWdlICsgXFwnJVxcJ31cIiBjbGFzcz1cInByb2dyZXNzLWJhclwiPiA8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJtb2RlbC5lcnJvck1lc3NhZ2VcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiA6dGl0bGU9XCJtb2RlbC5lcnJvck1lc3NhZ2VcIj4gRXJyb3I6IHt7IG1vZGVsLmVycm9yTWVzc2FnZSB9fSA8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICcsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIG1vZGVsOiBPYmplY3QsXHJcbiAgICAgICAgdXBsb2FkSW5wdXRJZDogU3RyaW5nXHJcbiAgICB9LFxyXG4gICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB2YXIgdXBsb2FkSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxmLnVwbG9hZElucHV0SWQgPz8gJ2ZpbGV1cGxvYWQnKTtcclxuICAgICAgICAkKHVwbG9hZElucHV0KS5iaW5kKCdmaWxldXBsb2FkcHJvZ3Jlc3MnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxlc1swXS5uYW1lICE9PSBzZWxmLm1vZGVsLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzZWxmLm1vZGVsLnBlcmNlbnRhZ2UgPSBwYXJzZUludChkYXRhLmxvYWRlZCAvIGRhdGEudG90YWwgKiAxMDAsIDEwKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJCh1cGxvYWRJbnB1dCkuYmluZCgnZmlsZXVwbG9hZGRvbmUnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxlc1swXS5uYW1lICE9PSBzZWxmLm1vZGVsLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHQuZmlsZXNbMF0uZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlRmFpbHVyZShkYXRhLmZpbGVzWzBdLm5hbWUsIGRhdGEucmVzdWx0LmZpbGVzWzBdLmVycm9yKTtcclxuICAgICAgICAgICAgfSBlbHNlIHsgIFxyXG4gICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW1vdmFsUmVxdWVzdCcsIHNlbGYubW9kZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQodXBsb2FkSW5wdXQpLmJpbmQoJ2ZpbGV1cGxvYWRmYWlsJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsZXNbMF0ubmFtZSAhPT0gc2VsZi5tb2RlbC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VsZi5oYW5kbGVGYWlsdXJlKGRhdGEuZmlsZXNbMF0ubmFtZSwgJCgnI3QtZXJyb3InKS52YWwoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGhhbmRsZUZhaWx1cmU6IGZ1bmN0aW9uIChmaWxlTmFtZSwgbWVzc2FnZSkge1xyXG4gICAgICAgICAgICBpZiAoZmlsZU5hbWUgIT09IHRoaXMubW9kZWwubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZXJyb3JNZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdFcnJvck9uVXBsb2FkJywgdGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkaXNtaXNzV2FybmluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ3JlbW92YWxSZXF1ZXN0JywgdGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gPHVwbG9hZC1saXN0PiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgndXBsb2FkTGlzdCcsIHtcclxuICAgIHRlbXBsYXRlOiAnXFxcclxuICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWxpc3RcIiB2LXNob3c9XCJmaWxlcy5sZW5ndGggPiAwXCI+IFxcXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIiBAY2xpY2s9XCJleHBhbmRlZCA9ICFleHBhbmRlZFwiPiBcXFxyXG4gICAgICAgICAgICAgICAgPHNwYW4+IHt7IFQudXBsb2FkcyB9fSA8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgICAgICA8c3BhbiB2LXNob3c9XCJwZW5kaW5nQ291bnRcIj4gKFBlbmRpbmc6IHt7IHBlbmRpbmdDb3VudCB9fSkgPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gdi1zaG93PVwiZXJyb3JDb3VudFwiIDpjbGFzcz1cInsgXFwndGV4dC1kYW5nZXJcXCcgOiBlcnJvckNvdW50IH1cIj4gKCB7eyBULmVycm9ycyB9fToge3sgZXJyb3JDb3VudCB9fSAvIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiB2LW9uOmNsaWNrLnN0b3A9XCJjbGVhckVycm9yc1wiID4ge3sgVC5jbGVhckVycm9ycyB9fSA8L2E+KTwvc3Bhbj4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9nZ2xlLWJ1dHRvblwiPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1zaG93PVwiZXhwYW5kZWRcIj4gXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGV2cm9uLWRvd25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LXNob3c9XCIhZXhwYW5kZWRcIj4gXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGV2cm9uLXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCIgdi1zaG93PVwiZXhwYW5kZWRcIj4gXFxcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwXCI+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPHVwbG9hZCA6dXBsb2FkLWlucHV0LWlkPVwidXBsb2FkSW5wdXRJZFwiIHYtZm9yPVwiZiBpbiBmaWxlc1wiIDprZXk9XCJmLm5hbWVcIiAgOm1vZGVsPVwiZlwiPjwvdXBsb2FkPiBcXFxyXG4gICAgICAgICAgICAgICAgPC9kaXYgPiBcXFxyXG4gICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAnLFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZpbGVzOiBbXSxcclxuICAgICAgICAgICAgVDoge30sXHJcbiAgICAgICAgICAgIGV4cGFuZGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcGVuZGluZ0NvdW50OiAwLFxyXG4gICAgICAgICAgICBlcnJvckNvdW50OiAwXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgdXBsb2FkSW5wdXRJZDogU3RyaW5nXHJcbiAgICB9LFxyXG4gICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyByZXRyaWV2aW5nIGxvY2FsaXplZCBzdHJpbmdzIGZyb20gdmlld1xyXG4gICAgICAgIHNlbGYuVC51cGxvYWRzID0gJCgnI3QtdXBsb2FkcycpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5lcnJvcnMgPSAkKCcjdC1lcnJvcnMnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuY2xlYXJFcnJvcnMgPSAkKCcjdC1jbGVhci1lcnJvcnMnKS52YWwoKTtcclxuICAgIH0sXHJcbiAgICBjb21wdXRlZDoge1xyXG4gICAgICAgIGZpbGVDb3VudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWxlcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHVwbG9hZElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VsZi51cGxvYWRJbnB1dElkID8/ICdmaWxldXBsb2FkJyk7XHJcbiAgICAgICAgJCh1cGxvYWRJbnB1dCkuYmluZCgnZmlsZXVwbG9hZGFkZCcsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICghZGF0YS5maWxlcykgeyBcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkYXRhLmZpbGVzLmZvckVhY2goZnVuY3Rpb24gKG5ld0ZpbGUpIHsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB2YXIgYWxyZWFkeUluTGlzdCA9IHNlbGYuZmlsZXMuc29tZShmdW5jdGlvbiAoZikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmLm5hbWUgPT0gbmV3RmlsZS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFhbHJlYWR5SW5MaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlcy5wdXNoKHsgbmFtZTogbmV3RmlsZS5uYW1lLCBwZXJjZW50YWdlOiAwLCBlcnJvck1lc3NhZ2U6ICcnIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGFscmVhZHkgb24gdGhlIHF1ZXVlOicgKyBuZXdGaWxlLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgIFxyXG4gICAgICAgICAgICB9KTsgICAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYnVzLiRvbigncmVtb3ZhbFJlcXVlc3QnLCBmdW5jdGlvbiAoZmlsZVVwbG9hZCkge1xyXG4gICAgICAgICAgICBzZWxmLmZpbGVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ubmFtZSA9PSBmaWxlVXBsb2FkLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYnVzLiRvbignRXJyb3JPblVwbG9hZCcsIGZ1bmN0aW9uIChmaWxlVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIHNlbGYudXBkYXRlQ291bnQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgdXBkYXRlQ291bnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvckNvdW50ID0gdGhpcy5maWxlcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmVycm9yTWVzc2FnZSAhPSAnJztcclxuICAgICAgICAgICAgfSkubGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdDb3VudCA9IHRoaXMuZmlsZXMubGVuZ3RoIC0gdGhpcy5lcnJvckNvdW50O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5maWxlcy5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyRXJyb3JzOiBmdW5jdGlvbiAoKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZXMgPSB0aGlzLmZpbGVzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZXJyb3JNZXNzYWdlID09ICcnO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgd2F0Y2g6IHtcclxuICAgICAgICBmaWxlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvdW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiZnVuY3Rpb24gaW5pdGlhbGl6ZUF0dGFjaGVkTWVkaWFGaWVsZChlbCwgaWRPZlVwbG9hZEJ1dHRvbiwgdXBsb2FkQWN0aW9uLCBtZWRpYUl0ZW1VcmwsIGFsbG93TXVsdGlwbGUsIGFsbG93TWVkaWFUZXh0LCBhbGxvd0FuY2hvcnMsIHRlbXBVcGxvYWRGb2xkZXIsIG1heFVwbG9hZENodW5rU2l6ZSkge1xyXG5cclxuICAgIHZhciB0YXJnZXQgPSAkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCQoZWwpLmRhdGEoJ2ZvcicpKSk7XHJcbiAgICB2YXIgaW5pdGlhbFBhdGhzID0gdGFyZ2V0LmRhdGEoXCJpbml0XCIpO1xyXG5cclxuICAgIHZhciBtZWRpYUZpZWxkRWRpdG9yID0gJChlbCk7XHJcbiAgICB2YXIgaWRwcmVmaXggPSBtZWRpYUZpZWxkRWRpdG9yLmF0dHIoXCJpZFwiKTtcclxuICAgIHZhciBtZWRpYUZpZWxkQXBwO1xyXG5cclxuICAgIG1lZGlhRmllbGRBcHBzLnB1c2gobWVkaWFGaWVsZEFwcCA9IG5ldyBWdWUoe1xyXG4gICAgICAgIGVsOiBtZWRpYUZpZWxkRWRpdG9yLmdldCgwKSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIG1lZGlhSXRlbXM6IFtdLFxyXG4gICAgICAgICAgICBzZWxlY3RlZE1lZGlhOiBudWxsLFxyXG4gICAgICAgICAgICBzbWFsbFRodW1iczogZmFsc2UsXHJcbiAgICAgICAgICAgIGlkUHJlZml4OiBpZHByZWZpeCxcclxuICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbGxvd01lZGlhVGV4dDogYWxsb3dNZWRpYVRleHQsXHJcbiAgICAgICAgICAgIGJhY2t1cE1lZGlhVGV4dDogJycsXHJcbiAgICAgICAgICAgIGFsbG93QW5jaG9yczogYWxsb3dBbmNob3JzLFxyXG4gICAgICAgICAgICBiYWNrdXBBbmNob3I6IG51bGwsXHJcbiAgICAgICAgICAgIG1lZGlhVGV4dG1vZGFsOiBudWxsLFxyXG4gICAgICAgICAgICBhbmNob3JpbmdNb2RhbDogbnVsbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRQcmVmcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhRmllbGRQcmVmcycpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgICAgIHBhdGhzOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFQYXRocyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoaW5pdGlhbFBhdGhzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgubWVkaWFQYXRoID09PSAnbm90LWZvdW5kJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhUGF0aHMucHVzaCh7IHBhdGg6IHgubWVkaWFQYXRoLCBpc1JlbW92ZWQ6IHguaXNSZW1vdmVkLCBpc05ldzogeC5pc05ldywgbWVkaWFUZXh0OiB4Lm1lZGlhVGV4dCwgYW5jaG9yOiB4LmFuY2hvciwgYXR0YWNoZWRGaWxlTmFtZTogeC5hdHRhY2hlZEZpbGVOYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShtZWRpYVBhdGhzKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSB2YWx1ZXMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ25hbCA9ICQuRGVmZXJyZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLmZvckVhY2goZnVuY3Rpb24gKHgsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7IG5hbWU6ICcgJyArIHgucGF0aCwgbWltZTogJycsIG1lZGlhUGF0aDogJycsIGFuY2hvcjogeC5hbmNob3IsIGF0dGFjaGVkRmlsZU5hbWU6IHguYXR0YWNoZWRGaWxlTmFtZSB9KTsgLy8gZG9uJ3QgcmVtb3ZlIHRoZSBzcGFjZS4gU29tZXRoaW5nIGRpZmZlcmVudCBpcyBuZWVkZWQgb3IgaXQgd29udCByZWFjdCB3aGVuIHRoZSByZWFsIG5hbWUgYXJyaXZlcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9ICQud2hlbihzaWduYWwpLmRvbmUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IG1lZGlhSXRlbVVybCArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoeC5wYXRoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEudnVla2V5ID0gZGF0YS5uYW1lICsgaS50b1N0cmluZygpOyAvLyBCZWNhdXNlIGEgdW5pcXVlIGtleSBpcyByZXF1aXJlZCBieSBWdWUgb24gdi1mb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVkaWFUZXh0ID0geC5tZWRpYVRleHQ7IC8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hbmNob3IgPSB4LmFuY2hvcjsgLy8gVGhpcyB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZnJvbSB0aGUgYWpheCBjYWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmF0dGFjaGVkRmlsZU5hbWUgPSB4LmF0dGFjaGVkRmlsZU5hbWU7Ly8gVGhpcyB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZnJvbSB0aGUgYWpheCBjYWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaSwgMSwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09ICsrbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnB1c2goeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGVycm9yKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnNwbGljZShpLCAxLCB7IG5hbWU6IHgucGF0aCwgbWltZTogJycsIG1lZGlhUGF0aDogJ25vdC1mb3VuZCcsIG1lZGlhVGV4dDogJycsIGFuY2hvcjogeyB4OiAwLjUsIHk6IDAuNSB9LCBhdHRhY2hlZEZpbGVOYW1lOiB4LmF0dGFjaGVkRmlsZU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09ICsrbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnB1c2goeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzaWduYWwucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmaWxlU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodGhpcy5zZWxlY3RlZE1lZGlhLnNpemUgLyAxMDI0KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuQWRkTWVkaWE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBub25SZW1vdmVkTWVkaWFJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1lZGlhSXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWVkaWFJdGVtc1tpXS5pc1JlbW92ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9uUmVtb3ZlZE1lZGlhSXRlbXMucHVzaCh0aGlzLm1lZGlhSXRlbXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9uUmVtb3ZlZE1lZGlhSXRlbXMubGVuZ3RoID09PSAwIHx8IG5vblJlbW92ZWRNZWRpYUl0ZW1zLmxlbmd0aCA+IDAgJiYgYWxsb3dNdWx0aXBsZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGh1bWJTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zbWFsbFRodW1icyA/IDEyMCA6IDI0MDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY3VycmVudFByZWZzOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFRodW1iczogdGhpcy5zbWFsbFRodW1ic1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbWFsbFRodW1icyA9IG5ld1ByZWZzLnNtYWxsVGh1bWJzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIHNlbGYucGF0aHMgPSBpbml0aWFsUGF0aHM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignc2VsZWN0QW5kRGVsZXRlTWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0QW5kRGVsZXRlTWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuJG9uKCdzZWxlY3RNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gJyMnICsgaWRPZlVwbG9hZEJ1dHRvbjtcclxuICAgICAgICAgICAgdmFyIGVkaXRvcklkID0gbWVkaWFGaWVsZEVkaXRvci5hdHRyKCdpZCcpO1xyXG4gICAgICAgICAgICB2YXIgY2h1bmtlZEZpbGVVcGxvYWRJZCA9IGNyeXB0by5yYW5kb21VVUlEKCk7XHJcblxyXG4gICAgICAgICAgICAkKHNlbGVjdG9yKVxyXG4gICAgICAgICAgICAgICAgLmZpbGV1cGxvYWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbWl0Q29uY3VycmVudFVwbG9hZHM6IDIwLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bab25lOiAkKCcjJyArIGVkaXRvcklkKSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogdXBsb2FkQWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heENodW5rU2l6ZTogbWF4VXBsb2FkQ2h1bmtTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gZGF0YS5maWxlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5maWxlc1tpXS51cGxvYWROYW1lID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldFVuaXF1ZUlkKCkgKyBkYXRhLmZpbGVzW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzW2ldLmF0dGFjaGVkRmlsZU5hbWUgPSBkYXRhLmZpbGVzW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zdWJtaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbnRpRm9yZ2VyeVRva2VuID0gJChcImlucHV0W25hbWU9X19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW5dXCIpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3BhdGgnLCB2YWx1ZTogdGVtcFVwbG9hZEZvbGRlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nLCB2YWx1ZTogYW50aUZvcmdlcnlUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19jaHVua2VkRmlsZVVwbG9hZElkJywgdmFsdWU6IGNodW5rZWRGaWxlVXBsb2FkSWQgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdNZWRpYUl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvcm1zZyA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnJlc3VsdC5maWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEucmVzdWx0LmZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yZXN1bHQuZmlsZXNbaV0uaXNOZXcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgZXJyb3IgaXMgZGVmaW5lZCBwcm9iYWJseSB0aGUgZmlsZSB0eXBlIGlzIG5vdCBhbGxvd2VkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucmVzdWx0LmZpbGVzW2ldLmVycm9yID09PSB1bmRlZmluZWQgfHwgZGF0YS5yZXN1bHQuZmlsZXNbaV0uZXJyb3IgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yZXN1bHQuZmlsZXNbaV0uYXR0YWNoZWRGaWxlTmFtZSA9IGRhdGEuZmlsZXNbaV0uYXR0YWNoZWRGaWxlTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3TWVkaWFJdGVtcy5wdXNoKGRhdGEucmVzdWx0LmZpbGVzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcm1zZyArPSBkYXRhLnJlc3VsdC5maWxlc1tpXS5lcnJvciArIFwiXFxuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ybXNnICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChlcnJvcm1zZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobmV3TWVkaWFJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdNZWRpYUl0ZW1zLmxlbmd0aCA+IDEgJiYgYWxsb3dNdWx0aXBsZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQoJyNvbmx5T25lSXRlbU1lc3NhZ2UnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMucHVzaChuZXdNZWRpYUl0ZW1zWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zID0gbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLmNvbmNhdChuZXdNZWRpYUl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3Igb24gdXBsb2FkLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhqcVhIUik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRleHRTdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvclRocm93bik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5vbignZmlsZXVwbG9hZGNodW5rYmVmb3Jlc2VuZCcsIChlLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEhlcmUgd2UgcmVwbGFjZSB0aGUgYmxvYiB3aXRoIGEgRmlsZSBvYmplY3QgdG8gZW5zdXJlIHRoZSBmaWxlIG5hbWUgYW5kIG90aGVycyBhcmUgcHJlc2VydmVkIGZvciB0aGUgYmFja2VuZC5cclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmJsb2IgPSBuZXcgRmlsZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuYmxvYl0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBmaWxlLmxhc3RNb2RpZmllZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgc2VsZWN0TWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhID0gbWVkaWE7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdldFVuaXF1ZUlkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlbW92ZVNlbGVjdGVkOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZW1vdmVkID0ge307XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5tZWRpYUl0ZW1zICYmIHRoaXMubWVkaWFJdGVtcy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRNZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRoaXMubWVkaWFJdGVtc1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQuaXNSZW1vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzLm1lZGlhSXRlbXMuc3BsaWNlKFtpbmRleF0sIDEsIHJlbW92ZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVtb3ZlIGJ1dHRvbiBjYW4gYWxzbyByZW1vdmUgYSB1bmlxdWUgbWVkaWEgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1lZGlhSXRlbXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgPSB0aGlzLm1lZGlhSXRlbXNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkLmlzUmVtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcy5tZWRpYUl0ZW1zLnNwbGljZSgwLCAxLCByZW1vdmVkKTsgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLnNwbGljZSgwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBudWxsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaG93TWVkaWFUZXh0TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwodGhpcy4kcmVmcy5tZWRpYVRleHRNb2RhbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwTWVkaWFUZXh0ID0gdGhpcy5zZWxlY3RlZE1lZGlhLm1lZGlhVGV4dDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuY2VsTWVkaWFUZXh0TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEubWVkaWFUZXh0ID0gdGhpcy5iYWNrdXBNZWRpYVRleHQ7XHJcbiAgICAgICAgICAgIH0sIFxyXG4gICAgICAgICAgICBzaG93QW5jaG9yTW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwodGhpcy4kcmVmcy5hbmNob3JpbmdNb2RhbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcmluZ01vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgIC8vIENhdXNlIGEgcmVmcmVzaCB0byByZWNhbGMgaGVpZ2h0cy5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHg6IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueCxcclxuICAgICAgICAgICAgICAgICAgeTogdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci55XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2t1cEFuY2hvciA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3I7XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICBcclxuICAgICAgICAgICAgY2FuY2VsQW5jaG9yaW5nTW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0gdGhpcy5iYWNrdXBBbmNob3I7XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlc2V0QW5jaG9yOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7IHg6IDAuNSwgeTogMC41IH07XHJcbiAgICAgICAgICAgIH0sIFxyXG4gICAgICAgICAgICBvbkFuY2hvckRyb3A6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLiRyZWZzLmFuY2hvckltYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgIHg6IGV2ZW50Lm9mZnNldFggLyBpbWFnZS5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50Lm9mZnNldFkgLyBpbWFnZS5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYW5jaG9yTGVmdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UgJiYgdGhpcy4kcmVmcy5tb2RhbEJvZHkgJiYgdGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBpbWFnZSBpcyBzaHJ1bmsgY29tcGFyZSBhZ2FpbnN0IHRoZSBtb2RhbCBib2R5LlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAodGhpcy4kcmVmcy5tb2RhbEJvZHkuY2xpZW50V2lkdGggLSB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudFdpZHRoKSAvIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gKHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueCAqIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50V2lkdGgpICsgb2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IDE3KSB7IC8vIEFkanVzdCBzbyB0aGUgdGFyZ2V0IGRvZXNuJ3Qgc2hvdyBvdXRzaWRlIGltYWdlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IDE3O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gLSA4OyAvLyBBZGp1c3QgdG8gaGl0IHRoZSBtb3VzZSBwb2ludGVyLlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGFuY2hvclRvcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UgJiYgdGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci55ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMTUpIHsgLy8gQWRqdXN0bWVudCBzbyB0aGUgdGFyZ2V0IGRvZXNuJ3Qgc2hvdyBvdXRzaWRlIGltYWdlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IDE1O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKyA1OyAvLyBBZGp1c3QgdG8gaGl0IHRoZSBtb3VzZSBwb2ludGVyLlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRBbmNob3I6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogZXZlbnQub2Zmc2V0WCAvIGltYWdlLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50Lm9mZnNldFkgLyBpbWFnZS5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgICAgICAgICBcclxuICAgICAgICAgICAgYWRkTWVkaWFGaWxlczogZnVuY3Rpb24gKGZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZpbGVzLmxlbmd0aCA+IDEpICYmIChhbGxvd011bHRpcGxlID09PSBmYWxzZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydCgkKCcjb25seU9uZUl0ZW1NZXNzYWdlJykudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5wdXNoKGZpbGVzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zID0gbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLmNvbmNhdChmaWxlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYSA9IG1lZGlhO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0VGltZW91dCBiZWNhdXNlIHNvbWV0aW1lcyBcclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZVNlbGVjdGVkIHdhcyBjYWxsZWQgZXZlbiBiZWZvcmUgdGhlIG1lZGlhIHdhcyBzZXQuXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZVNlbGVjdGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB3YXRjaDoge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiB7XHJcbiAgICAgICAgICAgICAgICBkZWVwOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaGFuZGxlciAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBwcmV2aWV3IHJlbmRlcmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAkKGRvY3VtZW50KS50cmlnZ2VyKCdjb250ZW50cHJldmlldzpyZW5kZXInKTsgfSwgMTAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgXHJcbiAgICAgICAgICAgIGN1cnJlbnRQcmVmczogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbWVkaWFGaWVsZFByZWZzJywgSlNPTi5zdHJpbmdpZnkobmV3UHJlZnMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pKTtcclxufVxyXG4iLCJmdW5jdGlvbiBpbml0aWFsaXplTWVkaWFGaWVsZChlbCwgbW9kYWxCb2R5RWxlbWVudCwgbWVkaWFJdGVtVXJsLCBhbGxvd011bHRpcGxlLCBhbGxvd01lZGlhVGV4dCwgYWxsb3dBbmNob3JzKSB7XHJcbiAgICAvL0JhZ1BhcnQgY3JlYXRlIGEgc2NyaXB0IHNlY3Rpb24gd2l0aG91dCBvdGhlciBET00gZWxlbWVudHNcclxuICAgIGlmKGVsID09PSBudWxsKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIFxyXG4gICAgdmFyIHRhcmdldCA9ICQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJChlbCkuZGF0YSgnZm9yJykpKTtcclxuICAgIHZhciBpbml0aWFsUGF0aHMgPSB0YXJnZXQuZGF0YShcImluaXRcIik7XHJcblxyXG4gICAgdmFyIG1lZGlhRmllbGRFZGl0b3IgPSAkKGVsKTtcclxuICAgIHZhciBpZHByZWZpeCA9IG1lZGlhRmllbGRFZGl0b3IuYXR0cihcImlkXCIpO1xyXG4gICAgdmFyIG1lZGlhRmllbGRBcHA7XHJcblxyXG4gICAgLy93aGVuIGhpZGUgbW9kYWwgZGV0YWNoIG1lZGlhIGFwcCB0byBhdm9pZCBpc3N1ZSBvbiBCYWdQYXJ0XHJcbiAgICBtb2RhbEJvZHlFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2hpZGRlbi5icy5tb2RhbCcsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICQoXCIjbWVkaWFBcHBcIikuYXBwZW5kVG8oJ2JvZHknKTtcclxuICAgICAgICAkKFwiI21lZGlhQXBwXCIpLmhpZGUoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIG1lZGlhRmllbGRBcHBzLnB1c2gobWVkaWFGaWVsZEFwcCA9IG5ldyBWdWUoe1xyXG4gICAgICAgIGVsOiBtZWRpYUZpZWxkRWRpdG9yLmdldCgwKSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIG1lZGlhSXRlbXM6IFtdLFxyXG4gICAgICAgICAgICBzZWxlY3RlZE1lZGlhOiBudWxsLFxyXG4gICAgICAgICAgICBzbWFsbFRodW1iczogZmFsc2UsXHJcbiAgICAgICAgICAgIGlkUHJlZml4OiBpZHByZWZpeCxcclxuICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbGxvd01lZGlhVGV4dDogYWxsb3dNZWRpYVRleHQsXHJcbiAgICAgICAgICAgIGJhY2t1cE1lZGlhVGV4dDogJycsXHJcbiAgICAgICAgICAgIGFsbG93QW5jaG9yczogYWxsb3dBbmNob3JzLFxyXG4gICAgICAgICAgICBiYWNrdXBBbmNob3I6IG51bGwsXHJcbiAgICAgICAgICAgIG1lZGlhVGV4dE1vZGFsOiBudWxsLFxyXG4gICAgICAgICAgICBhbmNob3JpbmdNb2RhbDogbnVsbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRQcmVmcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhRmllbGRQcmVmcycpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgICAgIHBhdGhzOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFQYXRocyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoaW5pdGlhbFBhdGhzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgubWVkaWFQYXRoID09PSAnbm90LWZvdW5kJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhUGF0aHMucHVzaCh7IHBhdGg6IHgubWVkaWFQYXRoLCBtZWRpYVRleHQ6IHgubWVkaWFUZXh0LCBhbmNob3I6IHguYW5jaG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShtZWRpYVBhdGhzKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSB2YWx1ZXMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ25hbCA9ICQuRGVmZXJyZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLmZvckVhY2goZnVuY3Rpb24gKHgsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7IG5hbWU6ICcgJyArIHgucGF0aCwgbWltZTogJycsIG1lZGlhUGF0aDogJycgfSk7IC8vIGRvbid0IHJlbW92ZSB0aGUgc3BhY2UuIFNvbWV0aGluZyBkaWZmZXJlbnQgaXMgbmVlZGVkIG9yIGl0IHdvbnQgcmVhY3Qgd2hlbiB0aGUgcmVhbCBuYW1lIGFycml2ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSAkLndoZW4oc2lnbmFsKS5kb25lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtZWRpYUl0ZW1VcmwgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHgucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZ1ZWtleSA9IGRhdGEubmFtZSArIGkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZWRpYVRleHQgPSB4Lm1lZGlhVGV4dDsgLy8gVGhpcyB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZnJvbSB0aGUgYWpheCBjYWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmFuY2hvciA9IHguYW5jaG9yOyAvLyBUaGlzIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBhamF4IGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnNwbGljZShpLCAxLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gKytsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lZGlhSXRlbXMucHVzaCh5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaSwgMSwgeyBuYW1lOiB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICdub3QtZm91bmQnLCBtZWRpYVRleHQ6ICcnLCBhbmNob3I6IHsgeDogMCwgeTogMCB9IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlsZVNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuc2VsZWN0ZWRNZWRpYS5zaXplIC8gMTAyNCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbkFkZE1lZGlhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZWRpYUl0ZW1zLmxlbmd0aCA9PT0gMCB8fCB0aGlzLm1lZGlhSXRlbXMubGVuZ3RoID4gMCAmJiBhbGxvd011bHRpcGxlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aHVtYlNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNtYWxsVGh1bWJzID8gMTIwIDogMjQwO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjdXJyZW50UHJlZnM6IHtcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsVGh1bWJzOiB0aGlzLnNtYWxsVGh1bWJzXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYWxsVGh1bWJzID0gbmV3UHJlZnMuc21hbGxUaHVtYnM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5wYXRocyA9IGluaXRpYWxQYXRocztcclxuXHJcbiAgICAgICAgICAgIHNlbGYuJG9uKCdzZWxlY3RBbmREZWxldGVNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RBbmREZWxldGVNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ3NlbGVjdE1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdE1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignZmlsZXNVcGxvYWRlZCcsIGZ1bmN0aW9uIChmaWxlcykge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5hZGRNZWRpYUZpbGVzKGZpbGVzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgICAgIHNlbGVjdE1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYSA9IG1lZGlhO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaG93TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2FuQWRkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiI21lZGlhQXBwXCIpLmFwcGVuZFRvKCQobW9kYWxCb2R5RWxlbWVudCkuZmluZCgnLm1vZGFsLWJvZHknKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgJChcIiNtZWRpYUFwcFwiKS5zaG93KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwobW9kYWxCb2R5RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwuc2hvdygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkKG1vZGFsQm9keUVsZW1lbnQpLmZpbmQoJy5tZWRpYUZpZWxkU2VsZWN0QnV0dG9uJykub2ZmKCdjbGljaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkTWVkaWFGaWxlcyhtZWRpYUFwcC5zZWxlY3RlZE1lZGlhcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRoZSBpbmNsdWRlZCBtZWRpYXMgdG8gYmUgc3RpbGwgc2VsZWN0ZWQgdGhlIG5leHQgdGltZSB3ZSBvcGVuIHRoZSBtb2RhbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFBcHAuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dNZWRpYVRleHRNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbCh0aGlzLiRyZWZzLm1lZGlhVGV4dE1vZGFsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUZXh0TW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrdXBNZWRpYVRleHQgPSB0aGlzLnNlbGVjdGVkTWVkaWEubWVkaWFUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5jZWxNZWRpYVRleHRNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5tZWRpYVRleHQgPSB0aGlzLmJhY2t1cE1lZGlhVGV4dDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd0FuY2hvck1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKHRoaXMuJHJlZnMuYW5jaG9yaW5nTW9kYWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbC5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAvLyBDYXVzZSBhIHJlZnJlc2ggdG8gcmVjYWxjIGhlaWdodHMuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICB4OiB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLngsXHJcbiAgICAgICAgICAgICAgICAgIHk6IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrdXBBbmNob3IgPSB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yO1xyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjYW5jZWxBbmNob3JpbmdNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcmluZ01vZGFsLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB0aGlzLmJhY2t1cEFuY2hvcjtcclxuICAgICAgICAgICAgfSwgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVzZXRBbmNob3I6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHsgeDogMC41LCB5OiAwLjUgfTtcclxuICAgICAgICAgICAgfSwgIFxyXG4gICAgICAgICAgICBvbkFuY2hvckRyb3A6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLiRyZWZzLmFuY2hvckltYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgIHg6IGV2ZW50Lm9mZnNldFggLyBpbWFnZS5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50Lm9mZnNldFkgLyBpbWFnZS5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYW5jaG9yTGVmdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UgJiYgdGhpcy4kcmVmcy5tb2RhbEJvZHkgJiYgdGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBpbWFnZSBpcyBzaHJ1bmsgY29tcGFyZSBhZ2FpbnN0IHRoZSBtb2RhbCBib2R5LlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAodGhpcy4kcmVmcy5tb2RhbEJvZHkuY2xpZW50V2lkdGggLSB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudFdpZHRoKSAvIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gKHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueCAqIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50V2lkdGgpICsgb2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhbmNob3JJY29uID0gTWF0aC5yb3VuZCh0aGlzLiRyZWZzLm1vZGFsQm9keS5xdWVyeVNlbGVjdG9yKCcuaWNvbi1tZWRpYS1hbmNob3InKS5jbGllbnRXaWR0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoTnVtYmVyLmlzSW50ZWdlcihhbmNob3JJY29uKSlcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gLSBhbmNob3JJY29uLzI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGFuY2hvclRvcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UgJiYgdGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci55ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0QW5jaG9yOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHg6IGV2ZW50Lm9mZnNldFggLyBpbWFnZS5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICB5OiBldmVudC5vZmZzZXRZIC8gaW1hZ2UuY2xpZW50SGVpZ2h0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgXHJcbiAgICAgICAgICAgIGFkZE1lZGlhRmlsZXM6IGZ1bmN0aW9uIChmaWxlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKChmaWxlcy5sZW5ndGggPiAxKSAmJiAoYWxsb3dNdWx0aXBsZSA9PT0gZmFsc2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJCgnI29ubHlPbmVJdGVtTWVzc2FnZScpLnZhbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMucHVzaChmaWxlc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcyA9IG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5jb25jYXQoZmlsZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZW1vdmVTZWxlY3RlZDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5tZWRpYUl0ZW1zICYmIHRoaXMubWVkaWFJdGVtcy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRNZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJlbW92ZSBidXR0b24gY2FuIGFsc28gcmVtb3ZlIGEgdW5pcXVlIG1lZGlhIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tZWRpYUl0ZW1zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYSA9IG1lZGlhO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0VGltZW91dCBiZWNhdXNlIHNvbWV0aW1lcyByZW1vdmVTZWxlY3RlZCB3YXMgY2FsbGVkIGV2ZW4gYmVmb3JlIHRoZSBtZWRpYSB3YXMgc2V0LlxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVTZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2F0Y2g6IHtcclxuICAgICAgICAgICAgbWVkaWFJdGVtczoge1xyXG4gICAgICAgICAgICAgICAgZGVlcDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGhhbmRsZXIgKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgcHJldmlldyByZW5kZXJpbmdcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgJChkb2N1bWVudCkudHJpZ2dlcignY29udGVudHByZXZpZXc6cmVuZGVyJyk7IH0sIDEwMCk7IFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjdXJyZW50UHJlZnM6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21lZGlhRmllbGRQcmVmcycsIEpTT04uc3RyaW5naWZ5KG5ld1ByZWZzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KSk7XHJcbn1cclxuIiwiLy8gZGlmZmVyZW50IG1lZGlhIGZpZWxkIGVkaXRvcnMgd2lsbCBhZGQgdGhlbXNlbHZlcyB0byB0aGlzIGFycmF5XHJcbnZhciBtZWRpYUZpZWxkQXBwcyA9IFtdO1xyXG4iLCIvLyA8bWVkaWEtZmllbGQtdGh1bWJzLWNvbnRhaW5lcj4gY29tcG9uZW50IFxyXG4vLyBkaWZmZXJlbnQgbWVkaWEgZmllbGQgZWRpdG9ycyBzaGFyZSB0aGlzIGNvbXBvbmVudCB0byBwcmVzZW50IHRoZSB0aHVtYnMuXHJcblZ1ZS5jb21wb25lbnQoJ21lZGlhRmllbGRUaHVtYnNDb250YWluZXInLCB7XHJcbiAgICB0ZW1wbGF0ZTogJ1xcXHJcbiAgICAgICA8ZGl2IDppZD1cImlkUHJlZml4ICsgXFwnX21lZGlhQ29udGFpbmVyTWFpblxcJ1wiIHYtY2xvYWs+XFxcclxuICAgICAgICAgPGRpdiB2LWlmPVwibWVkaWFJdGVtcy5sZW5ndGggPCAxXCIgY2xhc3M9XCJjYXJkIHRleHQtY2VudGVyXCI+XFxcclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9IFwiY2FyZC1ib2R5XCIgPlxcXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhpbnRcIj57e1Qubm9JbWFnZXN9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgPGRyYWdnYWJsZSA6bGlzdD1cIm1lZGlhSXRlbXNcIiB0YWc9XCJvbFwiIGNsYXNzPVwicm93IG1lZGlhLWl0ZW1zLWdyaWRcIiA+XFxcclxuICAgICAgICAgICAgPGxpIHYtZm9yPVwibWVkaWEgaW4gbWVkaWFJdGVtc1wiXFxcclxuICAgICAgICAgICAgICAgIDprZXk9XCJtZWRpYS52dWVrZXlcIiBcXFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtZWRpYS1jb250YWluZXItbWFpbi1saXN0LWl0ZW0gY2FyZCBwLTBcIlxcXHJcbiAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7d2lkdGg6IHRodW1iU2l6ZSArIDIgKyBcXCdweFxcJ31cIlxcXHJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7c2VsZWN0ZWQ6IHNlbGVjdGVkTWVkaWEgPT0gbWVkaWF9XCJcXFxyXG4gICAgICAgICAgICAgICAgdi1vbjpjbGljaz1cInNlbGVjdE1lZGlhKG1lZGlhKVwiIHYtaWY9XCIhbWVkaWEuaXNSZW1vdmVkXCI+XFxcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9XCJtZWRpYS5tZWRpYVBhdGghPT0gXFwnbm90LWZvdW5kXFwnXCI+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRodW1iLWNvbnRhaW5lclwiIDpzdHlsZT1cIntoZWlnaHQ6IHRodW1iU2l6ZSArIFxcJ3B4XFwnfVwiID5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyB2LWlmPVwibWVkaWEubWltZS5zdGFydHNXaXRoKFxcJ2ltYWdlXFwnKVwiIFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3JjPVwiYnVpbGRNZWRpYVVybChtZWRpYS51cmwsIHRodW1iU2l6ZSlcIiBcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7bWF4SGVpZ2h0OiB0aHVtYlNpemUgKyBcXCdweFxcJyAsIG1heFdpZHRoOiB0aHVtYlNpemUgKyBcXCdweFxcJ31cIi8+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIHYtZWxzZSBjbGFzcz1cImZhLXJlZ3VsYXIgZmEtZmlsZSBkaXNwbGF5LTFcIiA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiPjwvaT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYS1jb250YWluZXItbWFpbi1pdGVtLXRpdGxlIGNhcmQtYm9keVwiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtZW5kIGlubGluZS1tZWRpYS1idXR0b24gZGVsZXRlLWJ1dHRvblwiXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1vbjpjbGljay5zdG9wPVwic2VsZWN0QW5kRGVsZXRlTWVkaWEobWVkaWEpXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10cmFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSA6aHJlZj1cIm1lZGlhLnVybFwiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtZW5kIGlubGluZS1tZWRpYS1idXR0b24gdmlldy1idXR0b25cIlwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtZG93bmxvYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVkaWEtZmlsZW5hbWUgY2FyZC10ZXh0IHNtYWxsXCIgOnRpdGxlPVwibWVkaWEubWVkaWFQYXRoXCI+e3sgbWVkaWEuaXNOZXcgPyBtZWRpYS5uYW1lLnN1YnN0cigzNikgOiBtZWRpYS5uYW1lIH19PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWVsc2U+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRodW1iLWNvbnRhaW5lciBmbGV4LWNvbHVtblwiIDpzdHlsZT1cIntoZWlnaHQ6IHRodW1iU2l6ZSArIFxcJ3B4XFwnfVwiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWJhbiB0ZXh0LWRhbmdlciBkLWJsb2NrXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHNtYWxsIGQtYmxvY2tcIj57eyBULm1lZGlhTm90Rm91bmQgfX08L3NwYW4+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgc21hbGwgZC1ibG9jayB0ZXh0LWNlbnRlclwiPnt7IFQuZGlzY2FyZFdhcm5pbmcgfX08L3NwYW4+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLWNvbnRhaW5lci1tYWluLWl0ZW0tdGl0bGUgY2FyZC1ib2R5XCI+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsb2F0LWVuZCBpbmxpbmUtbWVkaWEtYnV0dG9uIGRlbGV0ZS1idXR0b25cIlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1vbjpjbGljay5zdG9wPVwic2VsZWN0QW5kRGVsZXRlTWVkaWEobWVkaWEpXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10cmFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVkaWEtZmlsZW5hbWUgY2FyZC10ZXh0IHNtYWxsIHRleHQtZGFuZ2VyXCIgOnRpdGxlPVwibWVkaWEubmFtZVwiPnt7IG1lZGlhLm5hbWUgfX08L3NwYW4+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgIDwvbGk+XFxcclxuICAgICAgICAgPC9kcmFnZ2FibGU+XFxcclxuICAgICAgIDwvZGl2PlxcXHJcbiAgICAnLFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIFQ6IHt9XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIG1lZGlhSXRlbXM6IEFycmF5LFxyXG4gICAgICAgIHNlbGVjdGVkTWVkaWE6IE9iamVjdCxcclxuICAgICAgICB0aHVtYlNpemU6IE51bWJlcixcclxuICAgICAgICBpZFByZWZpeDogU3RyaW5nXHJcbiAgICB9LFxyXG4gICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIC8vIHJldHJpZXZpbmcgbG9jYWxpemVkIHN0cmluZ3MgZnJvbSB2aWV3XHJcbiAgICAgICAgc2VsZi5ULm1lZGlhTm90Rm91bmQgPSAkKCcjdC1tZWRpYS1ub3QtZm91bmQnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZGlzY2FyZFdhcm5pbmcgPSAkKCcjdC1kaXNjYXJkLXdhcm5pbmcnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQubm9JbWFnZXMgPSAkKCcjdC1uby1pbWFnZXMnKS52YWwoKTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgc2VsZWN0QW5kRGVsZXRlTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICB0aGlzLiRwYXJlbnQuJGVtaXQoJ3NlbGVjdEFuZERlbGV0ZU1lZGlhUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2VsZWN0TWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICB0aGlzLiRwYXJlbnQuJGVtaXQoJ3NlbGVjdE1lZGlhUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYnVpbGRNZWRpYVVybDogZnVuY3Rpb24gKHVybCwgdGh1bWJTaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1cmwgKyAodXJsLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyAnd2lkdGg9JyArIHRodW1iU2l6ZSArICcmaGVpZ2h0PScgKyB0aHVtYlNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIl19 +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5maWxldXBsb2FkLmpzIiwianF1ZXJ5LmlmcmFtZS10cmFuc3BvcnQuanMiLCJoZWxwZXJzLmpzIiwiTWVkaWFBcHAvYXBwLmpzIiwiTWVkaWFBcHAvZmlsZXVwbG9hZC5qcyIsIk1lZGlhQXBwL2ZvbGRlckNvbXBvbmVudC5qcyIsIk1lZGlhQXBwL21lZGlhSXRlbXNHcmlkQ29tcG9uZW50LmpzIiwiTWVkaWFBcHAvbWVkaWFJdGVtc1RhYmxlQ29tcG9uZW50LmpzIiwiTWVkaWFBcHAvcGFnZXJDb21wb25lbnQuanMiLCJNZWRpYUFwcC9zb3J0SW5kaWNhdG9yQ29tcG9uZW50LmpzIiwiU2hhcmVkL3VwbG9hZENvbXBvbmVudC5qcyIsIlNoYXJlZC91cGxvYWRMaXN0Q29tcG9uZW50LmpzIiwiTWVkaWFGaWVsZC9hdHRhY2hlZE1lZGlhRmllbGQuanMiLCJNZWRpYUZpZWxkL21lZGlhZmllbGQuanMiLCJNZWRpYUZpZWxkL21lZGlhZmllbGRzQXBwc0FycmF5LmpzIiwiTWVkaWFGaWVsZC9tZWRpYUZpZWxkVGh1bWJzQ29udGFpbmVyLmpzIl0sIm5hbWVzIjpbImZhY3RvcnkiLCJkZWZpbmUiLCJhbWQiLCJleHBvcnRzIiwiX3R5cGVvZiIsInJlcXVpcmUiLCJ3aW5kb3ciLCJqUXVlcnkiLCIkIiwic3VwcG9ydCIsImZpbGVJbnB1dCIsIlJlZ0V4cCIsInRlc3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJwcm9wIiwieGhyRmlsZVVwbG9hZCIsIlByb2dyZXNzRXZlbnQiLCJGaWxlUmVhZGVyIiwieGhyRm9ybURhdGFGaWxlVXBsb2FkIiwiRm9ybURhdGEiLCJibG9iU2xpY2UiLCJCbG9iIiwicHJvdG90eXBlIiwic2xpY2UiLCJ3ZWJraXRTbGljZSIsIm1velNsaWNlIiwiZ2V0RHJhZ0hhbmRsZXIiLCJ0eXBlIiwiaXNEcmFnT3ZlciIsImUiLCJkYXRhVHJhbnNmZXIiLCJvcmlnaW5hbEV2ZW50IiwiaW5BcnJheSIsInR5cGVzIiwiX3RyaWdnZXIiLCJFdmVudCIsImRlbGVnYXRlZEV2ZW50IiwicHJldmVudERlZmF1bHQiLCJkcm9wRWZmZWN0Iiwid2lkZ2V0Iiwib3B0aW9ucyIsImRyb3Bab25lIiwiZG9jdW1lbnQiLCJwYXN0ZVpvbmUiLCJ1bmRlZmluZWQiLCJyZXBsYWNlRmlsZUlucHV0IiwicGFyYW1OYW1lIiwic2luZ2xlRmlsZVVwbG9hZHMiLCJsaW1pdE11bHRpRmlsZVVwbG9hZHMiLCJsaW1pdE11bHRpRmlsZVVwbG9hZFNpemUiLCJsaW1pdE11bHRpRmlsZVVwbG9hZFNpemVPdmVyaGVhZCIsInNlcXVlbnRpYWxVcGxvYWRzIiwibGltaXRDb25jdXJyZW50VXBsb2FkcyIsImZvcmNlSWZyYW1lVHJhbnNwb3J0IiwicmVkaXJlY3QiLCJyZWRpcmVjdFBhcmFtTmFtZSIsInBvc3RNZXNzYWdlIiwibXVsdGlwYXJ0IiwibWF4Q2h1bmtTaXplIiwidXBsb2FkZWRCeXRlcyIsInJlY2FsY3VsYXRlUHJvZ3Jlc3MiLCJwcm9ncmVzc0ludGVydmFsIiwiYml0cmF0ZUludGVydmFsIiwiYXV0b1VwbG9hZCIsInVuaXF1ZUZpbGVuYW1lcyIsIm1lc3NhZ2VzIiwiaTE4biIsIm1lc3NhZ2UiLCJjb250ZXh0IiwidG9TdHJpbmciLCJlYWNoIiwia2V5IiwidmFsdWUiLCJyZXBsYWNlIiwiZm9ybURhdGEiLCJmb3JtIiwic2VyaWFsaXplQXJyYXkiLCJhZGQiLCJkYXRhIiwiaXNEZWZhdWx0UHJldmVudGVkIiwiZmlsZXVwbG9hZCIsInByb2Nlc3MiLCJkb25lIiwic3VibWl0IiwicHJvY2Vzc0RhdGEiLCJjb250ZW50VHlwZSIsImNhY2hlIiwidGltZW91dCIsIl9wcm9taXNlUGlwZSIsInBhcnRzIiwiZm4iLCJqcXVlcnkiLCJzcGxpdCIsIk51bWJlciIsIl9zcGVjaWFsT3B0aW9ucyIsIl9ibG9iU2xpY2UiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9CaXRyYXRlVGltZXIiLCJ0aW1lc3RhbXAiLCJEYXRlIiwibm93IiwiZ2V0VGltZSIsImxvYWRlZCIsImJpdHJhdGUiLCJnZXRCaXRyYXRlIiwiaW50ZXJ2YWwiLCJ0aW1lRGlmZiIsIl9pc1hIUlVwbG9hZCIsIl9nZXRGb3JtRGF0YSIsImlzQXJyYXkiLCJuYW1lIiwicHVzaCIsIl9nZXRUb3RhbCIsImZpbGVzIiwidG90YWwiLCJpbmRleCIsImZpbGUiLCJzaXplIiwiX2luaXRQcm9ncmVzc09iamVjdCIsIm9iaiIsInByb2dyZXNzIiwiX3Byb2dyZXNzIiwiZXh0ZW5kIiwiX2luaXRSZXNwb25zZU9iamVjdCIsIl9yZXNwb25zZSIsIk9iamVjdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIl9vblByb2dyZXNzIiwibGVuZ3RoQ29tcHV0YWJsZSIsIl90aW1lIiwiTWF0aCIsImZsb29yIiwiY2h1bmtTaXplIiwiX2JpdHJhdGVUaW1lciIsIl9pbml0UHJvZ3Jlc3NMaXN0ZW5lciIsInRoYXQiLCJ4aHIiLCJhamF4U2V0dGluZ3MiLCJ1cGxvYWQiLCJvbiIsIm9lIiwiX2RlaW5pdFByb2dyZXNzTGlzdGVuZXIiLCJvZmYiLCJfaXNJbnN0YW5jZU9mIiwiX2dldFVuaXF1ZUZpbGVuYW1lIiwibWFwIiwiU3RyaW5nIiwiXyIsInAxIiwicDIiLCJleHQiLCJfaW5pdFhIUkRhdGEiLCJoZWFkZXJzIiwiY29udGVudFJhbmdlIiwiYmxvYiIsImVuY29kZVVSSSIsInVwbG9hZE5hbWUiLCJmaWVsZCIsImFwcGVuZCIsImZpbGVOYW1lIiwiX2luaXRJZnJhbWVTZXR0aW5ncyIsInRhcmdldEhvc3QiLCJ1cmwiLCJkYXRhVHlwZSIsImxvY2F0aW9uIiwiaG9zdCIsIl9pbml0RGF0YVNldHRpbmdzIiwiX2NodW5rZWRVcGxvYWQiLCJfZ2V0UGFyYW1OYW1lIiwiaW5wdXQiLCJpIiwibGVuZ3RoIiwiX2luaXRGb3JtU2V0dGluZ3MiLCJocmVmIiwidG9VcHBlckNhc2UiLCJmb3JtQWNjZXB0Q2hhcnNldCIsImF0dHIiLCJfZ2V0QUpBWFNldHRpbmdzIiwiX2dldERlZmVycmVkU3RhdGUiLCJkZWZlcnJlZCIsInN0YXRlIiwiaXNSZXNvbHZlZCIsImlzUmVqZWN0ZWQiLCJfZW5oYW5jZVByb21pc2UiLCJwcm9taXNlIiwic3VjY2VzcyIsImVycm9yIiwiZmFpbCIsImNvbXBsZXRlIiwiYWx3YXlzIiwiX2dldFhIUlByb21pc2UiLCJyZXNvbHZlT3JSZWplY3QiLCJhcmdzIiwiZGZkIiwiRGVmZXJyZWQiLCJyZXNvbHZlV2l0aCIsInJlamVjdFdpdGgiLCJhYm9ydCIsIl9hZGRDb252ZW5pZW5jZU1ldGhvZHMiLCJnZXRQcm9taXNlIiwicmVzb2x2ZUZ1bmMiLCJyZWplY3RGdW5jIiwiX3Byb2Nlc3NRdWV1ZSIsImVycm9yVGhyb3duIiwianFYSFIiLCJfb25TZW5kIiwicHJvY2Vzc2luZyIsInJlc3BvbnNlIiwiX2dldFVwbG9hZGVkQnl0ZXMiLCJyYW5nZSIsImdldFJlc3BvbnNlSGVhZGVyIiwidXBwZXJCeXRlc1BvcyIsInBhcnNlSW50IiwidGVzdE9ubHkiLCJmcyIsInViIiwibWNzIiwibyIsImN1cnJlbnRMb2FkZWQiLCJhamF4IiwicmVzdWx0IiwidGV4dFN0YXR1cyIsIl9iZWZvcmVTZW5kIiwiX2FjdGl2ZSIsIl9vbkRvbmUiLCJfb25GYWlsIiwiX29uQWx3YXlzIiwianFYSFJvclJlc3VsdCIsImpxWEhSb3JFcnJvciIsImFib3J0ZWQiLCJzbG90IiwicGlwZSIsInNlbmQiLCJfc2VuZGluZyIsIm5leHRTbG90IiwiX3Nsb3RzIiwic2hpZnQiLCJyZXNvbHZlIiwiX3NlcXVlbmNlIiwiX29uQWRkIiwiZmlsZXNMZW5ndGgiLCJsaW1pdCIsImxpbWl0U2l6ZSIsIm92ZXJoZWFkIiwiYmF0Y2hTaXplIiwicGFyYW1OYW1lU2V0IiwicGFyYW1OYW1lU2xpY2UiLCJmaWxlU2V0IiwiaiIsIm9yaWdpbmFsRmlsZXMiLCJlbGVtZW50IiwibmV3RGF0YSIsIl9yZXBsYWNlRmlsZUlucHV0IiwiaW5wdXRDbG9uZSIsImNsb25lIiwicmVzdG9yZUZvY3VzIiwiaXMiLCJhY3RpdmVFbGVtZW50IiwiZmlsZUlucHV0Q2xvbmUiLCJyZXNldCIsImFmdGVyIiwiZGV0YWNoIiwidHJpZ2dlciIsImNsZWFuRGF0YSIsImVsIiwiX2hhbmRsZUZpbGVUcmVlRW50cnkiLCJlbnRyeSIsInBhdGgiLCJlbnRyaWVzIiwiZGlyUmVhZGVyIiwiZXJyb3JIYW5kbGVyIiwic3VjY2Vzc0hhbmRsZXIiLCJfaGFuZGxlRmlsZVRyZWVFbnRyaWVzIiwicmVhZEVudHJpZXMiLCJyZXN1bHRzIiwiY29uY2F0IiwiaXNGaWxlIiwiX2ZpbGUiLCJyZWxhdGl2ZVBhdGgiLCJpc0RpcmVjdG9yeSIsImNyZWF0ZVJlYWRlciIsIndoZW4iLCJBcnJheSIsIl9nZXREcm9wcGVkRmlsZXMiLCJpdGVtcyIsIndlYmtpdEdldEFzRW50cnkiLCJnZXRBc0VudHJ5IiwiaXRlbSIsImdldEFzRmlsZSIsIm1ha2VBcnJheSIsIl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcyIsImZpbGVTaXplIiwiX2dldEZpbGVJbnB1dEZpbGVzIiwiX29uQ2hhbmdlIiwidGFyZ2V0IiwiX29uUGFzdGUiLCJjbGlwYm9hcmREYXRhIiwiX29uRHJvcCIsIl9vbkRyYWdPdmVyIiwiX29uRHJhZ0VudGVyIiwiX29uRHJhZ0xlYXZlIiwiX2luaXRFdmVudEhhbmRsZXJzIiwiX29uIiwiZHJhZ292ZXIiLCJkcm9wIiwiZHJhZ2VudGVyIiwiZHJhZ2xlYXZlIiwicGFzdGUiLCJjaGFuZ2UiLCJfZGVzdHJveUV2ZW50SGFuZGxlcnMiLCJfb2ZmIiwiX2Rlc3Ryb3kiLCJfc2V0T3B0aW9uIiwicmVpbml0IiwiX3N1cGVyIiwiX2luaXRTcGVjaWFsT3B0aW9ucyIsImZpbmQiLCJfZ2V0UmVnRXhwIiwic3RyIiwibW9kaWZpZXJzIiwicG9wIiwiam9pbiIsIl9pc1JlZ0V4cE9wdGlvbiIsIl9pbml0RGF0YUF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGVzIiwidG9Mb3dlckNhc2UiLCJjaGFyQXQiLCJfY3JlYXRlIiwiYWN0aXZlIiwiZGlzYWJsZWQiLCJyZWplY3QiLCJ0aGVuIiwiY291bnRlciIsImpzb25BUEkiLCJqc29uUGFyc2UiLCJKU09OIiwiYWpheFRyYW5zcG9ydCIsImFzeW5jIiwiaW5pdGlhbElmcmFtZVNyYyIsImlmcmFtZSIsImFkZFBhcmFtQ2hhciIsImNvbXBsZXRlQ2FsbGJhY2siLCJmaWxlSW5wdXRDbG9uZXMiLCJwYXJhbU5hbWVzIiwiY29udGVudHMiLCJmaXJzdENoaWxkIiwiRXJyb3IiLCJhcHBlbmRUbyIsInNldFRpbWVvdXQiLCJyZW1vdmUiLCJ2YWwiLCJyZW1vdmVBdHRyIiwicmVwbGFjZVdpdGgiLCJib2R5IiwiYWpheFNldHVwIiwiY29udmVydGVycyIsImlmcmFtZVRleHQiLCJ0ZXh0IiwiaWZyYW1lSnNvbiIsImlmcmFtZUh0bWwiLCJodG1sIiwiaWZyYW1lWG1sIiwieG1sRG9jIiwiaXNYTUxEb2MiLCJwYXJzZVhNTCIsIlhNTERvY3VtZW50IiwieG1sIiwiaWZyYW1lU2NyaXB0IiwiZ2xvYmFsRXZhbCIsInJhbmRvbVVVSUQiLCJjcnlwdG8iLCJjIiwiZ2V0UmFuZG9tVmFsdWVzIiwiVWludDhBcnJheSIsImluaXRpYWxpemVkIiwibWVkaWFBcHAiLCJidXMiLCJWdWUiLCJpbml0aWFsaXplTWVkaWFBcHBsaWNhdGlvbiIsImRpc3BsYXlNZWRpYUFwcGxpY2F0aW9uIiwibWVkaWFBcHBsaWNhdGlvblVybCIsInBhdGhCYXNlIiwiY29uc29sZSIsIm1ldGhvZCIsImNvbnRlbnQiLCJyb290IiwiZm9sZGVyIiwic2VsZWN0ZWRGb2xkZXIiLCJtZWRpYUl0ZW1zIiwic2VsZWN0ZWRNZWRpYXMiLCJlcnJvcnMiLCJkcmFnRHJvcFRodW1ibmFpbCIsIkltYWdlIiwic21hbGxUaHVtYnMiLCJncmlkVmlldyIsIm1lZGlhRmlsdGVyIiwic29ydEJ5Iiwic29ydEFzYyIsIml0ZW1zSW5QYWdlIiwiY3JlYXRlZCIsInNlbGYiLCJzcmMiLCIkb24iLCJzZWxlY3RSb290Iiwic2VsZWN0ZWQiLCJlcnJvckluZm8iLCJsb2FkRm9sZGVyIiwibmV3TmFtZSIsIm5ld1BhdGgiLCJvbGRQYXRoIiwibWVkaWEiLCJmaWx0ZXIiLCJtZWRpYVBhdGgiLCJjcmVhdGVGb2xkZXIiLCJkZWxldGVGb2xkZXIiLCJuZXdTb3J0IiwiY2hhbmdlU29ydCIsInRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEiLCJyZW5hbWVNZWRpYSIsImRlbGV0ZU1lZGlhSXRlbSIsImhhbmRsZURyYWdTdGFydCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJjdXJyZW50UHJlZnMiLCJwYXJzZSIsImNvbXB1dGVkIiwiaXNIb21lIiwicGFyZW50cyIsInAiLCJwYXJlbnRGb2xkZXIiLCJ1bnNoaWZ0IiwicGFyZW50IiwiZmlsdGVyZWRNZWRpYUl0ZW1zIiwiZmlsdGVyZWQiLCJpbmRleE9mIiwic29ydCIsImEiLCJiIiwibWltZSIsImxvY2FsZUNvbXBhcmUiLCJsYXN0TW9kaWZ5IiwiaGlkZGVuQ291bnQiLCJ0aHVtYlNpemUiLCJnZXQiLCJzZXQiLCJuZXdQcmVmcyIsIndhdGNoIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsIm5ld0ZvbGRlciIsIm1vdW50ZWQiLCIkcmVmcyIsInJvb3RGb2xkZXIiLCJ0b2dnbGUiLCJtZXRob2RzIiwidXBsb2FkVXJsIiwidXJsVmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJtZWRpYVVybCIsImxvZyIsImZvckVhY2giLCJvcGVuIiwic2VsZWN0QWxsIiwidW5TZWxlY3RBbGwiLCJpbnZlcnRTZWxlY3Rpb24iLCJ0ZW1wIiwiaXNNZWRpYVNlbGVjdGVkIiwic3BsaWNlIiwic29tZSIsImFycmF5IiwibW9kZWwiLCJjb25maXJtRGlhbG9nIiwiX29iamVjdFNwcmVhZCIsImNhbGxiYWNrIiwicmVzcCIsIl9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuIiwiJGVtaXQiLCJyZXNwb25zZVRleHQiLCJlbXB0eSIsIm1vZGFsIiwiYm9vdHN0cmFwIiwiTW9kYWwiLCJnZXRPckNyZWF0ZUluc3RhbmNlIiwic2hvdyIsImZvY3VzIiwic2VsZWN0QW5kRGVsZXRlTWVkaWEiLCJkZWxldGVNZWRpYSIsImRlbGV0ZU1lZGlhTGlzdCIsIm1lZGlhTGlzdCIsInBhdGhzIiwibWVkaWFOYW1lcyIsInNldERhdGEiLCJzZXREcmFnSW1hZ2UiLCJlZmZlY3RBbGxvd2VkIiwiaGFuZGxlU2Nyb2xsV2hpbGVEcmFnIiwiY2xpZW50WSIsInNjcm9sbEJ5IiwiaW5uZXJIZWlnaHQiLCJrZXlwcmVzcyIsIndoaWNoIiwiY2xpY2siLCJoaWRlIiwiZXJyb3JNZXNzYWdlIiwib2xkTmFtZSIsImN1cnJlbnRGb2xkZXIiLCJnZXRFbGVtZW50QnlJZCIsInN0eWxlIiwiZGlzcGxheSIsImNodW5rZWRGaWxlVXBsb2FkSWQiLCJhbnRpRm9yZ2VyeVRva2VuIiwiRmlsZSIsImxhc3RNb2RpZmllZCIsImJpbmQiLCJkdCIsImNvbnRhaW5zIiwiZHJvcFpvbmVUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiYWRkQ2xhc3MiLCJob3ZlcmVkRHJvcFpvbmUiLCJjbG9zZXN0IiwicmVtb3ZlQ2xhc3MiLCJjb21wb25lbnQiLCJ0ZW1wbGF0ZSIsImRpciIsInByb3BzIiwic2VsZWN0ZWRJbk1lZGlhQXBwIiwibGV2ZWwiLCJjaGlsZHJlbiIsImlzSG92ZXJlZCIsInBhZGRpbmciLCJpc1NlbGVjdGVkIiwiaXNSb290IiwiaXNBbmNlc3Rvck9mU2VsZWN0ZWRGb2xkZXIiLCJsb2FkQ2hpbGRyZW4iLCJzZWxlY3QiLCJlbXRweSIsImhhbmRsZURyYWdPdmVyIiwiaGFuZGxlRHJhZ0xlYXZlIiwibW92ZU1lZGlhVG9Gb2xkZXIiLCJnZXREYXRhIiwic291cmNlRm9sZGVyIiwidGFyZ2V0Rm9sZGVyIiwiYWxlcnQiLCJUIiwiZWRpdEJ1dHRvbiIsImRlbGV0ZUJ1dHRvbiIsImJ1aWxkTWVkaWFVcmwiLCJkcmFnU3RhcnQiLCJCb29sZWFuIiwiaW1hZ2VIZWFkZXIiLCJuYW1lSGVhZGVyIiwibGFzdE1vZGlmeUhlYWRlciIsInNpemVIZWFkZXIiLCJ0eXBlSGVhZGVyIiwidmlld0J1dHRvbiIsInByaW50RGF0ZVRpbWUiLCJkYXRlbWlsbGlzIiwiZCIsInRvTG9jYWxlU3RyaW5nIiwic291cmNlSXRlbXMiLCJwYWdlU2l6ZSIsInBhZ2VTaXplT3B0aW9ucyIsImN1cnJlbnQiLCJwYWdlckZpcnN0QnV0dG9uIiwicGFnZXJQcmV2aW91c0J1dHRvbiIsInBhZ2VyTmV4dEJ1dHRvbiIsInBhZ2VyTGFzdEJ1dHRvbiIsInBhZ2VyUGFnZVNpemVMYWJlbCIsInBhZ2VyUGFnZUxhYmVsIiwicGFnZXJUb3RhbExhYmVsIiwibmV4dCIsInByZXZpb3VzIiwiZ29GaXJzdCIsImdvTGFzdCIsInRvdGFsUGFnZXMiLCJnb1RvIiwidGFyZ2V0UGFnZSIsInBhZ2VzIiwiY2VpbCIsImlzTGFzdFBhZ2UiLCJpc0ZpcnN0UGFnZSIsImNhbkRvTmV4dCIsImNhbkRvUHJldiIsImNhbkRvRmlyc3QiLCJjYW5Eb0xhc3QiLCJpdGVtc0luQ3VycmVudFBhZ2UiLCJzdGFydCIsImVuZCIsInBhZ2VMaW5rcyIsImxpbmtzIiwiYmVmb3JlQ3VycmVudCIsImJlZm9yZUJlZm9yZUN1cnJlbnQiLCJhZnRlckN1cnJlbnQiLCJhZnRlckFmdGVyQ3VycmVudCIsImNvbG5hbWUiLCJzZWxlY3RlZGNvbG5hbWUiLCJhc2MiLCJpc0FjdGl2ZSIsInVwbG9hZElucHV0SWQiLCJfc2VsZiR1cGxvYWRJbnB1dElkIiwidXBsb2FkSW5wdXQiLCJwZXJjZW50YWdlIiwiaGFuZGxlRmFpbHVyZSIsImRpc21pc3NXYXJuaW5nIiwiZXhwYW5kZWQiLCJwZW5kaW5nQ291bnQiLCJlcnJvckNvdW50IiwidXBsb2FkcyIsImNsZWFyRXJyb3JzIiwiZmlsZUNvdW50IiwibmV3RmlsZSIsImFscmVhZHlJbkxpc3QiLCJmIiwiZmlsZVVwbG9hZCIsInVwZGF0ZUNvdW50IiwiaW5pdGlhbGl6ZUF0dGFjaGVkTWVkaWFGaWVsZCIsImlkT2ZVcGxvYWRCdXR0b24iLCJ1cGxvYWRBY3Rpb24iLCJtZWRpYUl0ZW1VcmwiLCJhbGxvd011bHRpcGxlIiwiYWxsb3dNZWRpYVRleHQiLCJhbGxvd0FuY2hvcnMiLCJ0ZW1wVXBsb2FkRm9sZGVyIiwibWF4VXBsb2FkQ2h1bmtTaXplIiwiaW5pdGlhbFBhdGhzIiwibWVkaWFGaWVsZEVkaXRvciIsImlkcHJlZml4IiwibWVkaWFGaWVsZEFwcCIsIm1lZGlhRmllbGRBcHBzIiwic2VsZWN0ZWRNZWRpYSIsImlkUHJlZml4IiwiYmFja3VwTWVkaWFUZXh0IiwiYmFja3VwQW5jaG9yIiwibWVkaWFUZXh0bW9kYWwiLCJhbmNob3JpbmdNb2RhbCIsIm1lZGlhUGF0aHMiLCJ4IiwiaXNSZW1vdmVkIiwiaXNOZXciLCJtZWRpYVRleHQiLCJhbmNob3IiLCJhdHRhY2hlZEZpbGVOYW1lIiwidmFsdWVzIiwic2lnbmFsIiwidnVla2V5IiwieSIsInJvdW5kIiwiY2FuQWRkTWVkaWEiLCJub25SZW1vdmVkTWVkaWFJdGVtcyIsInNlbGVjdE1lZGlhIiwic2VsZWN0b3IiLCJlZGl0b3JJZCIsImNvdW50IiwiZ2V0VW5pcXVlSWQiLCJuZXdNZWRpYUl0ZW1zIiwiZXJyb3Jtc2ciLCJyIiwicmFuZG9tIiwidiIsInJlbW92ZVNlbGVjdGVkIiwiZXZlbnQiLCJyZW1vdmVkIiwic2hvd01lZGlhVGV4dE1vZGFsIiwibWVkaWFUZXh0TW9kYWwiLCJjYW5jZWxNZWRpYVRleHRNb2RhbCIsInNob3dBbmNob3JNb2RhbCIsImNhbmNlbEFuY2hvcmluZ01vZGFsIiwicmVzZXRBbmNob3IiLCJvbkFuY2hvckRyb3AiLCJpbWFnZSIsImFuY2hvckltYWdlIiwib2Zmc2V0WCIsImNsaWVudFdpZHRoIiwib2Zmc2V0WSIsImNsaWVudEhlaWdodCIsImFuY2hvckxlZnQiLCJtb2RhbEJvZHkiLCJvZmZzZXQiLCJwb3NpdGlvbiIsImFuY2hvclRvcCIsInNldEFuY2hvciIsImFkZE1lZGlhRmlsZXMiLCJkZWVwIiwiaGFuZGxlciIsImluaXRpYWxpemVNZWRpYUZpZWxkIiwibW9kYWxCb2R5RWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJzaG93TW9kYWwiLCJhbmNob3JJY29uIiwicXVlcnlTZWxlY3RvciIsImlzSW50ZWdlciIsIm1lZGlhTm90Rm91bmQiLCJkaXNjYXJkV2FybmluZyIsIm5vSW1hZ2VzIiwiJHBhcmVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDLFVBQVVBLE9BQU8sRUFBRTtFQUNsQixZQUFZOztFQUNaLElBQUksT0FBT0MsTUFBTSxLQUFLLFVBQVUsSUFBSUEsTUFBTSxDQUFDQyxHQUFHLEVBQUU7SUFDOUM7SUFDQUQsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLHFCQUFxQixDQUFDLEVBQUVELE9BQU8sQ0FBQztFQUNwRCxDQUFDLE1BQU0sSUFBSSxRQUFPRyxPQUFPLGlDQUFBQyxPQUFBLENBQVBELE9BQU8sT0FBSyxRQUFRLEVBQUU7SUFDdEM7SUFDQUgsT0FBTyxDQUFDSyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUVBLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0VBQ2xFLENBQUMsTUFBTTtJQUNMO0lBQ0FMLE9BQU8sQ0FBQ00sTUFBTSxDQUFDQyxNQUFNLENBQUM7RUFDeEI7QUFDRixDQUFDLEVBQUUsVUFBVUMsQ0FBQyxFQUFFO0VBQ2QsWUFBWTs7RUFFWjtFQUNBO0VBQ0FBLENBQUMsQ0FBQ0MsT0FBTyxDQUFDQyxTQUFTLEdBQUcsRUFDcEIsSUFBSUMsTUFBTTtFQUNSO0VBQ0EsaUNBQWlDLEdBQy9CLDREQUE0RCxHQUM1RCw0QkFBNEIsR0FDNUIsa0NBQ0osQ0FBQyxDQUFDQyxJQUFJLENBQUNOLE1BQU0sQ0FBQ08sU0FBUyxDQUFDQyxTQUFTLENBQUM7RUFDbEM7RUFDQU4sQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUNPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0M7O0VBRUQ7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBUCxDQUFDLENBQUNDLE9BQU8sQ0FBQ08sYUFBYSxHQUFHLENBQUMsRUFB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U0FBQUEscUJBQVUzRSxLQUFLLEVBQUU7TUFDbkMsSUFBSSxDQUFDNFIsT0FBTyxDQUFDMU4sS0FBSyxDQUFDLCtCQUErQixFQUFFbEUsS0FBSyxDQUFDO0lBQzlELENBQUM7SUFDRCtPLFdBQVcsRUFBRSxTQUFBQSxZQUFVL08sS0FBSyxFQUFFO01BQzFCLElBQUksQ0FBQzRSLE9BQU8sQ0FBQzFOLEtBQUssQ0FBQyxzQkFBc0IsRUFBRWxFLEtBQUssQ0FBQztJQUNyRCxDQUFDO0lBQ0R3SSxhQUFhLEVBQUUsU0FBQUEsY0FBVWhZLEdBQUcsRUFBRXdSLFNBQVMsRUFBRTtNQUNyQyxPQUFPeFIsR0FBRyxJQUFJQSxHQUFHLENBQUNnUixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLFFBQVEsR0FBR1EsU0FBUyxHQUFHLFVBQVUsR0FBR0EsU0FBUztJQUNyRztFQUNKO0FBQ0osQ0FBQyxDQUFDIiwiZmlsZSI6Im1lZGlhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIGpRdWVyeSBGaWxlIFVwbG9hZCBQbHVnaW5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZFxuICpcbiAqIENvcHlyaWdodCAyMDEwLCBTZWJhc3RpYW4gVHNjaGFuXG4gKiBodHRwczovL2JsdWVpbXAubmV0XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqL1xuXG4vKiBnbG9iYWwgZGVmaW5lLCByZXF1aXJlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbihmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAndXNlIHN0cmljdCc7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAvLyBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgQU1EIG1vZHVsZTpcbiAgICBkZWZpbmUoWydqcXVlcnknLCAnanF1ZXJ5LXVpL3VpL3dpZGdldCddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JyksIHJlcXVpcmUoJy4vdmVuZG9yL2pxdWVyeS51aS53aWRnZXQnKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gQnJvd3NlciBnbG9iYWxzOlxuICAgIGZhY3Rvcnkod2luZG93LmpRdWVyeSk7XG4gIH1cbn0pKGZ1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBEZXRlY3QgZmlsZSBpbnB1dCBzdXBwb3J0LCBiYXNlZCBvblxuICAvLyBodHRwczovL3ZpbGphbWlzLmNvbS8yMDEyL2ZpbGUtdXBsb2FkLXN1cHBvcnQtb24tbW9iaWxlL1xuICAkLnN1cHBvcnQuZmlsZUlucHV0ID0gIShcbiAgICBuZXcgUmVnRXhwKFxuICAgICAgLy8gSGFuZGxlIGRldmljZXMgd2hpY2ggZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMgZm9yIHRoZSBmZWF0dXJlIGRldGVjdGlvbjpcbiAgICAgICcoQW5kcm9pZCAoMVxcXFwuWzAxNTZdfDJcXFxcLlswMV0pKScgK1xuICAgICAgICAnfChXaW5kb3dzIFBob25lIChPUyA3fDhcXFxcLjApKXwoWEJMV1ApfChadW5lV1ApfChXUERlc2t0b3ApJyArXG4gICAgICAgICd8KHcoZWIpP09TQnJvd3Nlcil8KHdlYk9TKScgK1xuICAgICAgICAnfChLaW5kbGUvKDFcXFxcLjB8MlxcXFwuWzA1XXwzXFxcXC4wKSknXG4gICAgKS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSB8fFxuICAgIC8vIEZlYXR1cmUgZGV0ZWN0aW9uIGZvciBhbGwgb3RoZXIgZGV2aWNlczpcbiAgICAkKCc8aW5wdXQgdHlwZT1cImZpbGVcIi8+JykucHJvcCgnZGlzYWJsZWQnKVxuICApO1xuXG4gIC8vIFRoZSBGaWxlUmVhZGVyIEFQSSBpcyBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IHdvcmtzIGFzIGZlYXR1cmUgZGV0ZWN0aW9uLFxuICAvLyBhcyBzb21lIFNhZmFyaSB2ZXJzaW9ucyAoNT8pIHN1cHBvcnQgWEhSIGZpbGUgdXBsb2FkcyB2aWEgdGhlIEZvcm1EYXRhIEFQSSxcbiAgLy8gYnV0IG5vdCBub24tbXVsdGlwYXJ0IFhIUiBmaWxlIHVwbG9hZHMuXG4gIC8vIHdpbmRvdy5YTUxIdHRwUmVxdWVzdFVwbG9hZCBpcyBub3QgYXZhaWxhYmxlIG9uIElFMTAsIHNvIHdlIGNoZWNrIGZvclxuICAvLyB3aW5kb3cuUHJvZ3Jlc3NFdmVudCBpbnN0ZWFkIHRvIGRldGVjdCBYSFIyIGZpbGUgdXBsb2FkIGNhcGFiaWxpdHk6XG4gICQuc3VwcG9ydC54aHJGaWxlVXBsb2FkID0gISEod2luZG93LlByb2dyZXNzRXZlbnQgJiYgd2luZG93LkZpbGVSZWFkZXIpO1xuICAkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkID0gISF3aW5kb3cuRm9ybURhdGE7XG5cbiAgLy8gRGV0ZWN0IHN1cHBvcnQgZm9yIEJsb2Igc2xpY2luZyAocmVxdWlyZWQgZm9yIGNodW5rZWQgdXBsb2Fkcyk6XG4gICQuc3VwcG9ydC5ibG9iU2xpY2UgPVxuICAgIHdpbmRvdy5CbG9iICYmXG4gICAgKEJsb2IucHJvdG90eXBlLnNsaWNlIHx8XG4gICAgICBCbG9iLnByb3RvdHlwZS53ZWJraXRTbGljZSB8fFxuICAgICAgQmxvYi5wcm90b3R5cGUubW96U2xpY2UpO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGRyYWcgaGFuZGxlcnMgZm9yIGRyYWdvdmVyL2RyYWdlbnRlci9kcmFnbGVhdmVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgRXZlbnQgdHlwZVxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IERyYWcgaGFuZGxlclxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0RHJhZ0hhbmRsZXIodHlwZSkge1xuICAgIHZhciBpc0RyYWdPdmVyID0gdHlwZSA9PT0gJ2RyYWdvdmVyJztcbiAgICByZXR1cm4gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUuZGF0YVRyYW5zZmVyID0gZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXI7XG4gICAgICB2YXIgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXI7XG4gICAgICBpZiAoXG4gICAgICAgIGRhdGFUcmFuc2ZlciAmJlxuICAgICAgICAkLmluQXJyYXkoJ0ZpbGVzJywgZGF0YVRyYW5zZmVyLnR5cGVzKSAhPT0gLTEgJiZcbiAgICAgICAgdGhpcy5fdHJpZ2dlcih0eXBlLCAkLkV2ZW50KHR5cGUsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSkpICE9PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKGlzRHJhZ092ZXIpIHtcbiAgICAgICAgICBkYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgZmlsZXVwbG9hZCB3aWRnZXQgbGlzdGVucyBmb3IgY2hhbmdlIGV2ZW50cyBvbiBmaWxlIGlucHV0IGZpZWxkcyBkZWZpbmVkXG4gIC8vIHZpYSBmaWxlSW5wdXQgc2V0dGluZyBhbmQgcGFzdGUgb3IgZHJvcCBldmVudHMgb2YgdGhlIGdpdmVuIGRyb3Bab25lLlxuICAvLyBJbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBqUXVlcnkgV2lkZ2V0IG1ldGhvZHMsIHRoZSBmaWxldXBsb2FkIHdpZGdldFxuICAvLyBleHBvc2VzIHRoZSBcImFkZFwiIGFuZCBcInNlbmRcIiBtZXRob2RzLCB0byBhZGQgb3IgZGlyZWN0bHkgc2VuZCBmaWxlcyB1c2luZ1xuICAvLyB0aGUgZmlsZXVwbG9hZCBBUEkuXG4gIC8vIEJ5IGRlZmF1bHQsIGZpbGVzIGFkZGVkIHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgcGFzdGUsIGRyYWcgJiBkcm9wIG9yXG4gIC8vIFwiYWRkXCIgbWV0aG9kIGFyZSB1cGxvYWRlZCBpbW1lZGlhdGVseSwgYnV0IGl0IGlzIHBvc3NpYmxlIHRvIG92ZXJyaWRlXG4gIC8vIHRoZSBcImFkZFwiIGNhbGxiYWNrIG9wdGlvbiB0byBxdWV1ZSBmaWxlIHVwbG9hZHMuXG4gICQud2lkZ2V0KCdibHVlaW1wLmZpbGV1cGxvYWQnLCB7XG4gICAgb3B0aW9uczoge1xuICAgICAgLy8gVGhlIGRyb3AgdGFyZ2V0IGVsZW1lbnQocyksIGJ5IHRoZSBkZWZhdWx0IHRoZSBjb21wbGV0ZSBkb2N1bWVudC5cbiAgICAgIC8vIFNldCB0byBudWxsIHRvIGRpc2FibGUgZHJhZyAmIGRyb3Agc3VwcG9ydDpcbiAgICAgIGRyb3Bab25lOiAkKGRvY3VtZW50KSxcbiAgICAgIC8vIFRoZSBwYXN0ZSB0YXJnZXQgZWxlbWVudChzKSwgYnkgdGhlIGRlZmF1bHQgdW5kZWZpbmVkLlxuICAgICAgLy8gU2V0IHRvIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IG9iamVjdCB0byBlbmFibGUgZmlsZSBwYXN0aW5nOlxuICAgICAgcGFzdGVab25lOiB1bmRlZmluZWQsXG4gICAgICAvLyBUaGUgZmlsZSBpbnB1dCBmaWVsZChzKSwgdGhhdCBhcmUgbGlzdGVuZWQgdG8gZm9yIGNoYW5nZSBldmVudHMuXG4gICAgICAvLyBJZiB1bmRlZmluZWQsIGl0IGlzIHNldCB0byB0aGUgZmlsZSBpbnB1dCBmaWVsZHMgaW5zaWRlXG4gICAgICAvLyBvZiB0aGUgd2lkZ2V0IGVsZW1lbnQgb24gcGx1Z2luIGluaXRpYWxpemF0aW9uLlxuICAgICAgLy8gU2V0IHRvIG51bGwgdG8gZGlzYWJsZSB0aGUgY2hhbmdlIGxpc3RlbmVyLlxuICAgICAgZmlsZUlucHV0OiB1bmRlZmluZWQsXG4gICAgICAvLyBCeSBkZWZhdWx0LCB0aGUgZmlsZSBpbnB1dCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIGEgY2xvbmUgYWZ0ZXJcbiAgICAgIC8vIGVhY2ggaW5wdXQgZmllbGQgY2hhbmdlIGV2ZW50LiBUaGlzIGlzIHJlcXVpcmVkIGZvciBpZnJhbWUgdHJhbnNwb3J0XG4gICAgICAvLyBxdWV1ZXMgYW5kIGFsbG93cyBjaGFuZ2UgZXZlbnRzIHRvIGJlIGZpcmVkIGZvciB0aGUgc2FtZSBmaWxlXG4gICAgICAvLyBzZWxlY3Rpb24sIGJ1dCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byBmYWxzZTpcbiAgICAgIHJlcGxhY2VGaWxlSW5wdXQ6IHRydWUsXG4gICAgICAvLyBUaGUgcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSBmaWxlIGZvcm0gZGF0YSAodGhlIHJlcXVlc3QgYXJndW1lbnQgbmFtZSkuXG4gICAgICAvLyBJZiB1bmRlZmluZWQgb3IgZW1wdHksIHRoZSBuYW1lIHByb3BlcnR5IG9mIHRoZSBmaWxlIGlucHV0IGZpZWxkIGlzXG4gICAgICAvLyB1c2VkLCBvciBcImZpbGVzW11cIiBpZiB0aGUgZmlsZSBpbnB1dCBuYW1lIHByb3BlcnR5IGlzIGFsc28gZW1wdHksXG4gICAgICAvLyBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5nczpcbiAgICAgIHBhcmFtTmFtZTogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgZWFjaCBmaWxlIG9mIGEgc2VsZWN0aW9uIGlzIHVwbG9hZGVkIHVzaW5nIGFuIGluZGl2aWR1YWxcbiAgICAgIC8vIHJlcXVlc3QgZm9yIFhIUiB0eXBlIHVwbG9hZHMuIFNldCB0byBmYWxzZSB0byB1cGxvYWQgZmlsZVxuICAgICAgLy8gc2VsZWN0aW9ucyBpbiBvbmUgcmVxdWVzdCBlYWNoOlxuICAgICAgc2luZ2xlRmlsZVVwbG9hZHM6IHRydWUsXG4gICAgICAvLyBUbyBsaW1pdCB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lIFhIUiByZXF1ZXN0LFxuICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6XG4gICAgICBsaW1pdE11bHRpRmlsZVVwbG9hZHM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgb3B0aW9uIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lXG4gICAgICAvLyBYSFIgcmVxdWVzdCB0byBrZWVwIHRoZSByZXF1ZXN0IHNpemUgdW5kZXIgb3IgZXF1YWwgdG8gdGhlIGRlZmluZWRcbiAgICAgIC8vIGxpbWl0IGluIGJ5dGVzOlxuICAgICAgbGltaXRNdWx0aUZpbGVVcGxvYWRTaXplOiB1bmRlZmluZWQsXG4gICAgICAvLyBNdWx0aXBhcnQgZmlsZSB1cGxvYWRzIGFkZCBhIG51bWJlciBvZiBieXRlcyB0byBlYWNoIHVwbG9hZGVkIGZpbGUsXG4gICAgICAvLyB0aGVyZWZvcmUgdGhlIGZvbGxvd2luZyBvcHRpb24gYWRkcyBhbiBvdmVyaGVhZCBmb3IgZWFjaCBmaWxlIHVzZWRcbiAgICAgIC8vIGluIHRoZSBsaW1pdE11bHRpRmlsZVVwbG9hZFNpemUgY29uZmlndXJhdGlvbjpcbiAgICAgIGxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZU92ZXJoZWFkOiA1MTIsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBpc3N1ZSBhbGwgZmlsZSB1cGxvYWQgcmVxdWVzdHNcbiAgICAgIC8vIGluIGEgc2VxdWVudGlhbCBvcmRlcjpcbiAgICAgIHNlcXVlbnRpYWxVcGxvYWRzOiBmYWxzZSxcbiAgICAgIC8vIFRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY29uY3VycmVudCB1cGxvYWRzLFxuICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6XG4gICAgICBsaW1pdENvbmN1cnJlbnRVcGxvYWRzOiB1bmRlZmluZWQsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBmb3JjZSBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICBmb3JjZUlmcmFtZVRyYW5zcG9ydDogZmFsc2UsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdGhlIGxvY2F0aW9uIG9mIGEgcmVkaXJlY3QgdXJsIG9uIHRoZVxuICAgICAgLy8gb3JpZ2luIHNlcnZlciwgZm9yIGNyb3NzLWRvbWFpbiBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICByZWRpcmVjdDogdW5kZWZpbmVkLFxuICAgICAgLy8gVGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgcmVkaXJlY3QgdXJsLCBzZW50IGFzIHBhcnQgb2YgdGhlIGZvcm1cbiAgICAgIC8vIGRhdGEgYW5kIHNldCB0byAncmVkaXJlY3QnIGlmIHRoaXMgb3B0aW9uIGlzIGVtcHR5OlxuICAgICAgcmVkaXJlY3RQYXJhbU5hbWU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0aGUgbG9jYXRpb24gb2YgYSBwb3N0TWVzc2FnZSB3aW5kb3csXG4gICAgICAvLyB0byBlbmFibGUgcG9zdE1lc3NhZ2UgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICBwb3N0TWVzc2FnZTogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgWEhSIGZpbGUgdXBsb2FkcyBhcmUgc2VudCBhcyBtdWx0aXBhcnQvZm9ybS1kYXRhLlxuICAgICAgLy8gVGhlIGlmcmFtZSB0cmFuc3BvcnQgaXMgYWx3YXlzIHVzaW5nIG11bHRpcGFydC9mb3JtLWRhdGEuXG4gICAgICAvLyBTZXQgdG8gZmFsc2UgdG8gZW5hYmxlIG5vbi1tdWx0aXBhcnQgWEhSIHVwbG9hZHM6XG4gICAgICBtdWx0aXBhcnQ6IHRydWUsXG4gICAgICAvLyBUbyB1cGxvYWQgbGFyZ2UgZmlsZXMgaW4gc21hbGxlciBjaHVua3MsIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvblxuICAgICAgLy8gdG8gYSBwcmVmZXJyZWQgbWF4aW11bSBjaHVuayBzaXplLiBJZiBzZXQgdG8gMCwgbnVsbCBvciB1bmRlZmluZWQsXG4gICAgICAvLyBvciB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1aXJlZCBCbG9iIEFQSSwgZmlsZXMgd2lsbFxuICAgICAgLy8gYmUgdXBsb2FkZWQgYXMgYSB3aG9sZS5cbiAgICAgIG1heENodW5rU2l6ZTogdW5kZWZpbmVkLFxuICAgICAgLy8gV2hlbiBhIG5vbi1tdWx0aXBhcnQgdXBsb2FkIG9yIGEgY2h1bmtlZCBtdWx0aXBhcnQgdXBsb2FkIGhhcyBiZWVuXG4gICAgICAvLyBhYm9ydGVkLCB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZXN1bWUgdGhlIHVwbG9hZCBieSBzZXR0aW5nXG4gICAgICAvLyBpdCB0byB0aGUgc2l6ZSBvZiB0aGUgYWxyZWFkeSB1cGxvYWRlZCBieXRlcy4gVGhpcyBvcHRpb24gaXMgbW9zdFxuICAgICAgLy8gdXNlZnVsIHdoZW4gbW9kaWZ5aW5nIHRoZSBvcHRpb25zIG9iamVjdCBpbnNpZGUgb2YgdGhlIFwiYWRkXCIgb3JcbiAgICAgIC8vIFwic2VuZFwiIGNhbGxiYWNrcywgYXMgdGhlIG9wdGlvbnMgYXJlIGNsb25lZCBmb3IgZWFjaCBmaWxlIHVwbG9hZC5cbiAgICAgIHVwbG9hZGVkQnl0ZXM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIGZpbGUgdXBsb2FkcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZVxuICAgICAgLy8gZ2xvYmFsIHByb2dyZXNzIGNhbGN1bGF0aW9uLiBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gZmFsc2UgdG9cbiAgICAgIC8vIHByZXZlbnQgcmVjYWxjdWxhdGluZyB0aGUgZ2xvYmFsIHByb2dyZXNzIGRhdGE6XG4gICAgICByZWNhbGN1bGF0ZVByb2dyZXNzOiB0cnVlLFxuICAgICAgLy8gSW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIGNhbGN1bGF0ZSBhbmQgdHJpZ2dlciBwcm9ncmVzcyBldmVudHM6XG4gICAgICBwcm9ncmVzc0ludGVydmFsOiAxMDAsXG4gICAgICAvLyBJbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgdG8gY2FsY3VsYXRlIHByb2dyZXNzIGJpdHJhdGU6XG4gICAgICBiaXRyYXRlSW50ZXJ2YWw6IDUwMCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIHVwbG9hZHMgYXJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSB3aGVuIGFkZGluZyBmaWxlczpcbiAgICAgIGF1dG9VcGxvYWQ6IHRydWUsXG4gICAgICAvLyBCeSBkZWZhdWx0LCBkdXBsaWNhdGUgZmlsZSBuYW1lcyBhcmUgZXhwZWN0ZWQgdG8gYmUgaGFuZGxlZCBvblxuICAgICAgLy8gdGhlIHNlcnZlci1zaWRlLiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSAoZS5nLiB3aGVuIHVwbG9hZGluZ1xuICAgICAgLy8gZmlsZXMgZGlyZWN0bHkgdG8gQW1hem9uIFMzKSwgdGhlIGZvbGxvd2luZyBvcHRpb24gY2FuIGJlIHNldCB0b1xuICAgICAgLy8gYW4gZW1wdHkgb2JqZWN0IG9yIGFuIG9iamVjdCBtYXBwaW5nIGV4aXN0aW5nIGZpbGVuYW1lcywgZS5nLjpcbiAgICAgIC8vIHsgXCJpbWFnZS5qcGdcIjogdHJ1ZSwgXCJpbWFnZSAoMSkuanBnXCI6IHRydWUgfVxuICAgICAgLy8gSWYgaXQgaXMgc2V0LCBhbGwgZmlsZXMgd2lsbCBiZSB1cGxvYWRlZCB3aXRoIHVuaXF1ZSBmaWxlbmFtZXMsXG4gICAgICAvLyBhZGRpbmcgaW5jcmVhc2luZyBudW1iZXIgc3VmZml4ZXMgaWYgbmVjZXNzYXJ5LCBlLmcuOlxuICAgICAgLy8gXCJpbWFnZSAoMikuanBnXCJcbiAgICAgIHVuaXF1ZUZpbGVuYW1lczogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBFcnJvciBhbmQgaW5mbyBtZXNzYWdlczpcbiAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgIHVwbG9hZGVkQnl0ZXM6ICdVcGxvYWRlZCBieXRlcyBleGNlZWQgZmlsZSBzaXplJ1xuICAgICAgfSxcblxuICAgICAgLy8gVHJhbnNsYXRpb24gZnVuY3Rpb24sIGdldHMgdGhlIG1lc3NhZ2Uga2V5IHRvIGJlIHRyYW5zbGF0ZWRcbiAgICAgIC8vIGFuZCBhbiBvYmplY3Qgd2l0aCBjb250ZXh0IHNwZWNpZmljIGRhdGEgYXMgYXJndW1lbnRzOlxuICAgICAgaTE4bjogZnVuY3Rpb24gKG1lc3NhZ2UsIGNvbnRleHQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VzW21lc3NhZ2VdIHx8IG1lc3NhZ2UudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAkLmVhY2goY29udGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgneycgKyBrZXkgKyAnfScsIHZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIEFkZGl0aW9uYWwgZm9ybSBkYXRhIHRvIGJlIHNlbnQgYWxvbmcgd2l0aCB0aGUgZmlsZSB1cGxvYWRzIGNhbiBiZSBzZXRcbiAgICAgIC8vIHVzaW5nIHRoaXMgb3B0aW9uLCB3aGljaCBhY2NlcHRzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBuYW1lIGFuZFxuICAgICAgLy8gdmFsdWUgcHJvcGVydGllcywgYSBmdW5jdGlvbiByZXR1cm5pbmcgc3VjaCBhbiBhcnJheSwgYSBGb3JtRGF0YVxuICAgICAgLy8gb2JqZWN0IChmb3IgWEhSIGZpbGUgdXBsb2FkcyksIG9yIGEgc2ltcGxlIG9iamVjdC5cbiAgICAgIC8vIFRoZSBmb3JtIG9mIHRoZSBmaXJzdCBmaWxlSW5wdXQgaXMgZ2l2ZW4gYXMgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbjpcbiAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoZm9ybSkge1xuICAgICAgICByZXR1cm4gZm9ybS5zZXJpYWxpemVBcnJheSgpO1xuICAgICAgfSxcblxuICAgICAgLy8gVGhlIGFkZCBjYWxsYmFjayBpcyBpbnZva2VkIGFzIHNvb24gYXMgZmlsZXMgYXJlIGFkZGVkIHRvIHRoZSBmaWxldXBsb2FkXG4gICAgICAvLyB3aWRnZXQgKHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgZHJhZyAmIGRyb3AsIHBhc3RlIG9yIGFkZCBBUEkgY2FsbCkuXG4gICAgICAvLyBJZiB0aGUgc2luZ2xlRmlsZVVwbG9hZHMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoaXMgY2FsbGJhY2sgd2lsbCBiZVxuICAgICAgLy8gY2FsbGVkIG9uY2UgZm9yIGVhY2ggZmlsZSBpbiB0aGUgc2VsZWN0aW9uIGZvciBYSFIgZmlsZSB1cGxvYWRzLCBlbHNlXG4gICAgICAvLyBvbmNlIGZvciBlYWNoIGZpbGUgc2VsZWN0aW9uLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSB1cGxvYWQgc3RhcnRzIHdoZW4gdGhlIHN1Ym1pdCBtZXRob2QgaXMgaW52b2tlZCBvbiB0aGUgZGF0YSBwYXJhbWV0ZXIuXG4gICAgICAvLyBUaGUgZGF0YSBvYmplY3QgY29udGFpbnMgYSBmaWxlcyBwcm9wZXJ0eSBob2xkaW5nIHRoZSBhZGRlZCBmaWxlc1xuICAgICAgLy8gYW5kIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgcGx1Z2luIG9wdGlvbnMgYXMgd2VsbCBhcyBkZWZpbmUgYWpheCBzZXR0aW5ncy5cbiAgICAgIC8vXG4gICAgICAvLyBMaXN0ZW5lcnMgZm9yIHRoaXMgY2FsbGJhY2sgY2FuIGFsc28gYmUgYm91bmQgdGhlIGZvbGxvd2luZyB3YXk6XG4gICAgICAvLyAub24oJ2ZpbGV1cGxvYWRhZGQnLCBmdW5jKTtcbiAgICAgIC8vXG4gICAgICAvLyBkYXRhLnN1Ym1pdCgpIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBhbmQgYWxsb3dzIHRvIGF0dGFjaCBhZGRpdGlvbmFsXG4gICAgICAvLyBoYW5kbGVycyB1c2luZyBqUXVlcnkncyBEZWZlcnJlZCBjYWxsYmFja3M6XG4gICAgICAvLyBkYXRhLnN1Ym1pdCgpLmRvbmUoZnVuYykuZmFpbChmdW5jKS5hbHdheXMoZnVuYyk7XG4gICAgICBhZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhLmF1dG9VcGxvYWQgfHxcbiAgICAgICAgICAoZGF0YS5hdXRvVXBsb2FkICE9PSBmYWxzZSAmJlxuICAgICAgICAgICAgJCh0aGlzKS5maWxldXBsb2FkKCdvcHRpb24nLCAnYXV0b1VwbG9hZCcpKVxuICAgICAgICApIHtcbiAgICAgICAgICBkYXRhLnByb2Nlc3MoKS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRhdGEuc3VibWl0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIE90aGVyIGNhbGxiYWNrczpcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdWJtaXQgZXZlbnQgb2YgZWFjaCBmaWxlIHVwbG9hZDpcbiAgICAgIC8vIHN1Ym1pdDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdWJtaXQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdGFydCBvZiBlYWNoIGZpbGUgdXBsb2FkIHJlcXVlc3Q6XG4gICAgICAvLyBzZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZHNlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgdXBsb2FkczpcbiAgICAgIC8vIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZG9uZScsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZmFpbGVkIChhYm9ydCBvciBlcnJvcikgdXBsb2FkczpcbiAgICAgIC8vIGZhaWw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZmFpbCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgY29tcGxldGVkIChzdWNjZXNzLCBhYm9ydCBvciBlcnJvcikgcmVxdWVzdHM6XG4gICAgICAvLyBhbHdheXM6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkYWx3YXlzJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgLy8gcHJvZ3Jlc3M6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcHJvZ3Jlc3MnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGdsb2JhbCB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgLy8gcHJvZ3Jlc3NhbGw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcHJvZ3Jlc3NhbGwnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZHMgc3RhcnQsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAvLyBzdGFydDogZnVuY3Rpb24gKGUpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdGFydCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgdXBsb2FkcyBzdG9wLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAvLyBzdG9wOiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZHN0b3AnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGNoYW5nZSBldmVudHMgb2YgdGhlIGZpbGVJbnB1dChzKTpcbiAgICAgIC8vIGNoYW5nZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaGFuZ2UnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHBhc3RlIGV2ZW50cyB0byB0aGUgcGFzdGVab25lKHMpOlxuICAgICAgLy8gcGFzdGU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcGFzdGUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGRyb3AgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcbiAgICAgIC8vIGRyb3A6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZHJvcCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZHJhZ292ZXIgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcbiAgICAgIC8vIGRyYWdvdmVyOiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZGRyYWdvdmVyJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGJlZm9yZSB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdCAoYmVmb3JlIGZvcm0gZGF0YSBpbml0aWFsaXphdGlvbik6XG4gICAgICAvLyBjaHVua2JlZm9yZXNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdDpcbiAgICAgIC8vIGNodW5rc2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua3NlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgY2h1bmsgdXBsb2FkczpcbiAgICAgIC8vIGNodW5rZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2RvbmUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIGNodW5rIHVwbG9hZHM6XG4gICAgICAvLyBjaHVua2ZhaWw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtmYWlsJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBjb21wbGV0ZWQgKHN1Y2Nlc3MsIGFib3J0IG9yIGVycm9yKSBjaHVuayB1cGxvYWQgcmVxdWVzdHM6XG4gICAgICAvLyBjaHVua2Fsd2F5czogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2Fsd2F5cycsIGZ1bmMpO1xuXG4gICAgICAvLyBUaGUgcGx1Z2luIG9wdGlvbnMgYXJlIHVzZWQgYXMgc2V0dGluZ3Mgb2JqZWN0IGZvciB0aGUgYWpheCBjYWxscy5cbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIGpRdWVyeSBhamF4IHNldHRpbmdzIHJlcXVpcmVkIGZvciB0aGUgZmlsZSB1cGxvYWRzOlxuICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgY29udGVudFR5cGU6IGZhbHNlLFxuICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgdGltZW91dDogMFxuICAgIH0sXG5cbiAgICAvLyBqUXVlcnkgdmVyc2lvbnMgYmVmb3JlIDEuOCByZXF1aXJlIHByb21pc2UucGlwZSBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzXG4gICAgLy8gdXNlZCwgYXMgcHJvbWlzZS50aGVuIGluIG9sZGVyIHZlcnNpb25zIGhhcyBhIGRpZmZlcmVudCBiZWhhdmlvciwgc2VlOlxuICAgIC8vIGh0dHBzOi8vYmxvZy5qcXVlcnkuY29tLzIwMTIvMDgvMDkvanF1ZXJ5LTEtOC1yZWxlYXNlZC9cbiAgICAvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTEwMTBcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvcHVsbC8zNDM1XG4gICAgX3Byb21pc2VQaXBlOiAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHBhcnRzID0gJC5mbi5qcXVlcnkuc3BsaXQoJy4nKTtcbiAgICAgIHJldHVybiBOdW1iZXIocGFydHNbMF0pID4gMSB8fCBOdW1iZXIocGFydHNbMV0pID4gNyA/ICd0aGVuJyA6ICdwaXBlJztcbiAgICB9KSgpLFxuXG4gICAgLy8gQSBsaXN0IG9mIG9wdGlvbnMgdGhhdCByZXF1aXJlIHJlaW5pdGlhbGl6aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQvb3JcbiAgICAvLyBzcGVjaWFsIGluaXRpYWxpemF0aW9uIGNvZGU6XG4gICAgX3NwZWNpYWxPcHRpb25zOiBbXG4gICAgICAnZmlsZUlucHV0JyxcbiAgICAgICdkcm9wWm9uZScsXG4gICAgICAncGFzdGVab25lJyxcbiAgICAgICdtdWx0aXBhcnQnLFxuICAgICAgJ2ZvcmNlSWZyYW1lVHJhbnNwb3J0J1xuICAgIF0sXG5cbiAgICBfYmxvYlNsaWNlOlxuICAgICAgJC5zdXBwb3J0LmJsb2JTbGljZSAmJlxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2xpY2UgPSB0aGlzLnNsaWNlIHx8IHRoaXMud2Via2l0U2xpY2UgfHwgdGhpcy5tb3pTbGljZTtcbiAgICAgICAgcmV0dXJuIHNsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9LFxuXG4gICAgX0JpdHJhdGVUaW1lcjogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy50aW1lc3RhbXAgPSBEYXRlLm5vdyA/IERhdGUubm93KCkgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIHRoaXMubG9hZGVkID0gMDtcbiAgICAgIHRoaXMuYml0cmF0ZSA9IDA7XG4gICAgICB0aGlzLmdldEJpdHJhdGUgPSBmdW5jdGlvbiAobm93LCBsb2FkZWQsIGludGVydmFsKSB7XG4gICAgICAgIHZhciB0aW1lRGlmZiA9IG5vdyAtIHRoaXMudGltZXN0YW1wO1xuICAgICAgICBpZiAoIXRoaXMuYml0cmF0ZSB8fCAhaW50ZXJ2YWwgfHwgdGltZURpZmYgPiBpbnRlcnZhbCkge1xuICAgICAgICAgIHRoaXMuYml0cmF0ZSA9IChsb2FkZWQgLSB0aGlzLmxvYWRlZCkgKiAoMTAwMCAvIHRpbWVEaWZmKSAqIDg7XG4gICAgICAgICAgdGhpcy5sb2FkZWQgPSBsb2FkZWQ7XG4gICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBub3c7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYml0cmF0ZTtcbiAgICAgIH07XG4gICAgfSxcblxuICAgIF9pc1hIUlVwbG9hZDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICFvcHRpb25zLmZvcmNlSWZyYW1lVHJhbnNwb3J0ICYmXG4gICAgICAgICgoIW9wdGlvbnMubXVsdGlwYXJ0ICYmICQuc3VwcG9ydC54aHJGaWxlVXBsb2FkKSB8fFxuICAgICAgICAgICQuc3VwcG9ydC54aHJGb3JtRGF0YUZpbGVVcGxvYWQpXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBfZ2V0Rm9ybURhdGE6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgZm9ybURhdGE7XG4gICAgICBpZiAoJC50eXBlKG9wdGlvbnMuZm9ybURhdGEpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhKG9wdGlvbnMuZm9ybSk7XG4gICAgICB9XG4gICAgICBpZiAoJC5pc0FycmF5KG9wdGlvbnMuZm9ybURhdGEpKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgaWYgKCQudHlwZShvcHRpb25zLmZvcm1EYXRhKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9ybURhdGEgPSBbXTtcbiAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIGZvcm1EYXRhLnB1c2goeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZm9ybURhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcblxuICAgIF9nZXRUb3RhbDogZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICB2YXIgdG90YWwgPSAwO1xuICAgICAgJC5lYWNoKGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgdG90YWwgKz0gZmlsZS5zaXplIHx8IDE7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9LFxuXG4gICAgX2luaXRQcm9ncmVzc09iamVjdDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgdmFyIHByb2dyZXNzID0ge1xuICAgICAgICBsb2FkZWQ6IDAsXG4gICAgICAgIHRvdGFsOiAwLFxuICAgICAgICBiaXRyYXRlOiAwXG4gICAgICB9O1xuICAgICAgaWYgKG9iai5fcHJvZ3Jlc3MpIHtcbiAgICAgICAgJC5leHRlbmQob2JqLl9wcm9ncmVzcywgcHJvZ3Jlc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqLl9wcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFJlc3BvbnNlT2JqZWN0OiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICB2YXIgcHJvcDtcbiAgICAgIGlmIChvYmouX3Jlc3BvbnNlKSB7XG4gICAgICAgIGZvciAocHJvcCBpbiBvYmouX3Jlc3BvbnNlKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmouX3Jlc3BvbnNlLCBwcm9wKSkge1xuICAgICAgICAgICAgZGVsZXRlIG9iai5fcmVzcG9uc2VbcHJvcF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmouX3Jlc3BvbnNlID0ge307XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9vblByb2dyZXNzOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKGUubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgICAgICAgbG9hZGVkO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YS5fdGltZSAmJlxuICAgICAgICAgIGRhdGEucHJvZ3Jlc3NJbnRlcnZhbCAmJlxuICAgICAgICAgIG5vdyAtIGRhdGEuX3RpbWUgPCBkYXRhLnByb2dyZXNzSW50ZXJ2YWwgJiZcbiAgICAgICAgICBlLmxvYWRlZCAhPT0gZS50b3RhbFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5fdGltZSA9IG5vdztcbiAgICAgICAgbG9hZGVkID1cbiAgICAgICAgICBNYXRoLmZsb29yKFxuICAgICAgICAgICAgKGUubG9hZGVkIC8gZS50b3RhbCkgKiAoZGF0YS5jaHVua1NpemUgfHwgZGF0YS5fcHJvZ3Jlc3MudG90YWwpXG4gICAgICAgICAgKSArIChkYXRhLnVwbG9hZGVkQnl0ZXMgfHwgMCk7XG4gICAgICAgIC8vIEFkZCB0aGUgZGlmZmVyZW5jZSBmcm9tIHRoZSBwcmV2aW91c2x5IGxvYWRlZCBzdGF0ZVxuICAgICAgICAvLyB0byB0aGUgZ2xvYmFsIGxvYWRlZCBjb3VudGVyOlxuICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gbG9hZGVkIC0gZGF0YS5fcHJvZ3Jlc3MubG9hZGVkO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcy5iaXRyYXRlID0gdGhpcy5fYml0cmF0ZVRpbWVyLmdldEJpdHJhdGUoXG4gICAgICAgICAgbm93LFxuICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCxcbiAgICAgICAgICBkYXRhLmJpdHJhdGVJbnRlcnZhbFxuICAgICAgICApO1xuICAgICAgICBkYXRhLl9wcm9ncmVzcy5sb2FkZWQgPSBkYXRhLmxvYWRlZCA9IGxvYWRlZDtcbiAgICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IGRhdGEuX2JpdHJhdGVUaW1lci5nZXRCaXRyYXRlKFxuICAgICAgICAgIG5vdyxcbiAgICAgICAgICBsb2FkZWQsXG4gICAgICAgICAgZGF0YS5iaXRyYXRlSW50ZXJ2YWxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVHJpZ2dlciBhIGN1c3RvbSBwcm9ncmVzcyBldmVudCB3aXRoIGEgdG90YWwgZGF0YSBwcm9wZXJ0eSBzZXRcbiAgICAgICAgLy8gdG8gdGhlIGZpbGUgc2l6ZShzKSBvZiB0aGUgY3VycmVudCB1cGxvYWQgYW5kIGEgbG9hZGVkIGRhdGFcbiAgICAgICAgLy8gcHJvcGVydHkgY2FsY3VsYXRlZCBhY2NvcmRpbmdseTpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAncHJvZ3Jlc3MnLFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICBkYXRhXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRyaWdnZXIgYSBnbG9iYWwgcHJvZ3Jlc3MgZXZlbnQgZm9yIGFsbCBjdXJyZW50IGZpbGUgdXBsb2FkcyxcbiAgICAgICAgLy8gaW5jbHVkaW5nIGFqYXggY2FsbHMgcXVldWVkIGZvciBzZXF1ZW50aWFsIGZpbGUgdXBsb2FkczpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAncHJvZ3Jlc3NhbGwnLFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzYWxsJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICB0aGlzLl9wcm9ncmVzc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHhociA9IG9wdGlvbnMueGhyID8gb3B0aW9ucy54aHIoKSA6ICQuYWpheFNldHRpbmdzLnhocigpO1xuICAgICAgLy8gQWNjZXNzIHRvIHRoZSBuYXRpdmUgWEhSIG9iamVjdCBpcyByZXF1aXJlZCB0byBhZGQgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAvLyBmb3IgdGhlIHVwbG9hZCBwcm9ncmVzcyBldmVudDpcbiAgICAgIGlmICh4aHIudXBsb2FkKSB7XG4gICAgICAgICQoeGhyLnVwbG9hZCkub24oJ3Byb2dyZXNzJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICB2YXIgb2UgPSBlLm9yaWdpbmFsRXZlbnQ7XG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcm9ncmVzcyBldmVudCBwcm9wZXJ0aWVzIGdldCBjb3BpZWQgb3ZlcjpcbiAgICAgICAgICBlLmxlbmd0aENvbXB1dGFibGUgPSBvZS5sZW5ndGhDb21wdXRhYmxlO1xuICAgICAgICAgIGUubG9hZGVkID0gb2UubG9hZGVkO1xuICAgICAgICAgIGUudG90YWwgPSBvZS50b3RhbDtcbiAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKGUsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0aW9ucy54aHIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHhocjtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2RlaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgeGhyID0gb3B0aW9ucy54aHIgPyBvcHRpb25zLnhocigpIDogJC5hamF4U2V0dGluZ3MueGhyKCk7XG4gICAgICBpZiAoeGhyLnVwbG9hZCkge1xuICAgICAgICAkKHhoci51cGxvYWQpLm9mZigncHJvZ3Jlc3MnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2lzSW5zdGFuY2VPZjogZnVuY3Rpb24gKHR5cGUsIG9iaikge1xuICAgICAgLy8gQ3Jvc3MtZnJhbWUgaW5zdGFuY2VvZiBjaGVja1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgdHlwZSArICddJztcbiAgICB9LFxuXG4gICAgX2dldFVuaXF1ZUZpbGVuYW1lOiBmdW5jdGlvbiAobmFtZSwgbWFwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgICBpZiAobWFwW25hbWVdKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKFxuICAgICAgICAgIC8oPzogXFwoKFtcXGRdKylcXCkpPyhcXC5bXi5dKyk/JC8sXG4gICAgICAgICAgZnVuY3Rpb24gKF8sIHAxLCBwMikge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gcDEgPyBOdW1iZXIocDEpICsgMSA6IDE7XG4gICAgICAgICAgICB2YXIgZXh0ID0gcDIgfHwgJyc7XG4gICAgICAgICAgICByZXR1cm4gJyAoJyArIGluZGV4ICsgJyknICsgZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFVuaXF1ZUZpbGVuYW1lKG5hbWUsIG1hcCk7XG4gICAgICB9XG4gICAgICBtYXBbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfSxcblxuICAgIF9pbml0WEhSRGF0YTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZm9ybURhdGEsXG4gICAgICAgIGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdLFxuICAgICAgICAvLyBJZ25vcmUgbm9uLW11bHRpcGFydCBzZXR0aW5nIGlmIG5vdCBzdXBwb3J0ZWQ6XG4gICAgICAgIG11bHRpcGFydCA9IG9wdGlvbnMubXVsdGlwYXJ0IHx8ICEkLnN1cHBvcnQueGhyRmlsZVVwbG9hZCxcbiAgICAgICAgcGFyYW1OYW1lID1cbiAgICAgICAgICAkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknXG4gICAgICAgICAgICA/IG9wdGlvbnMucGFyYW1OYW1lWzBdXG4gICAgICAgICAgICA6IG9wdGlvbnMucGFyYW1OYW1lO1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0gJC5leHRlbmQoe30sIG9wdGlvbnMuaGVhZGVycyk7XG4gICAgICBpZiAob3B0aW9ucy5jb250ZW50UmFuZ2UpIHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LVJhbmdlJ10gPSBvcHRpb25zLmNvbnRlbnRSYW5nZTtcbiAgICAgIH1cbiAgICAgIGlmICghbXVsdGlwYXJ0IHx8IG9wdGlvbnMuYmxvYiB8fCAhdGhpcy5faXNJbnN0YW5jZU9mKCdGaWxlJywgZmlsZSkpIHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPVxuICAgICAgICAgICdhdHRhY2htZW50OyBmaWxlbmFtZT1cIicgK1xuICAgICAgICAgIGVuY29kZVVSSShmaWxlLnVwbG9hZE5hbWUgfHwgZmlsZS5uYW1lKSArXG4gICAgICAgICAgJ1wiJztcbiAgICAgIH1cbiAgICAgIGlmICghbXVsdGlwYXJ0KSB7XG4gICAgICAgIG9wdGlvbnMuY29udGVudFR5cGUgPSBmaWxlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IG9wdGlvbnMuYmxvYiB8fCBmaWxlO1xuICAgICAgfSBlbHNlIGlmICgkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgLy8gd2luZG93LnBvc3RNZXNzYWdlIGRvZXMgbm90IGFsbG93IHNlbmRpbmcgRm9ybURhdGFcbiAgICAgICAgICAvLyBvYmplY3RzLCBzbyB3ZSBqdXN0IGFkZCB0aGUgRmlsZS9CbG9iIG9iamVjdHMgdG9cbiAgICAgICAgICAvLyB0aGUgZm9ybURhdGEgYXJyYXkgYW5kIGxldCB0aGUgcG9zdE1lc3NhZ2Ugd2luZG93XG4gICAgICAgICAgLy8gY3JlYXRlIHRoZSBGb3JtRGF0YSBvYmplY3Qgb3V0IG9mIHRoaXMgYXJyYXk6XG4gICAgICAgICAgZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5ibG9iKSB7XG4gICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogcGFyYW1OYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy5ibG9iXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOlxuICAgICAgICAgICAgICAgICAgKCQudHlwZShvcHRpb25zLnBhcmFtTmFtZSkgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbU5hbWVbaW5kZXhdKSB8fFxuICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWxlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGF0Ll9pc0luc3RhbmNlT2YoJ0Zvcm1EYXRhJywgb3B0aW9ucy5mb3JtRGF0YSkpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhID0gb3B0aW9ucy5mb3JtRGF0YTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgICQuZWFjaCh0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKSwgZnVuY3Rpb24gKGluZGV4LCBmaWVsZCkge1xuICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZmllbGQubmFtZSwgZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLmJsb2IpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICBvcHRpb25zLmJsb2IsXG4gICAgICAgICAgICAgIGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBjaGVjayBhbGxvd3MgdGhlIHRlc3RzIHRvIHJ1biB3aXRoXG4gICAgICAgICAgICAgIC8vIGR1bW15IG9iamVjdHM6XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGF0Ll9pc0luc3RhbmNlT2YoJ0ZpbGUnLCBmaWxlKSB8fFxuICAgICAgICAgICAgICAgIHRoYXQuX2lzSW5zdGFuY2VPZignQmxvYicsIGZpbGUpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudW5pcXVlRmlsZW5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHRoYXQuX2dldFVuaXF1ZUZpbGVuYW1lKFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51bmlxdWVGaWxlbmFtZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICgkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyYW1OYW1lW2luZGV4XSkgfHxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgICAgICAgIGZpbGVOYW1lXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IGZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgLy8gQmxvYiByZWZlcmVuY2UgaXMgbm90IG5lZWRlZCBhbnltb3JlLCBmcmVlIG1lbW9yeTpcbiAgICAgIG9wdGlvbnMuYmxvYiA9IG51bGw7XG4gICAgfSxcblxuICAgIF9pbml0SWZyYW1lU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGFyZ2V0SG9zdCA9ICQoJzxhPjwvYT4nKS5wcm9wKCdocmVmJywgb3B0aW9ucy51cmwpLnByb3AoJ2hvc3QnKTtcbiAgICAgIC8vIFNldHRpbmcgdGhlIGRhdGFUeXBlIHRvIGlmcmFtZSBlbmFibGVzIHRoZSBpZnJhbWUgdHJhbnNwb3J0OlxuICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdpZnJhbWUgJyArIChvcHRpb25zLmRhdGFUeXBlIHx8ICcnKTtcbiAgICAgIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IGFjY2VwdHMgYSBzZXJpYWxpemVkIGFycmF5IGFzIGZvcm0gZGF0YTpcbiAgICAgIG9wdGlvbnMuZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTtcbiAgICAgIC8vIEFkZCByZWRpcmVjdCB1cmwgdG8gZm9ybSBkYXRhIG9uIGNyb3NzLWRvbWFpbiB1cGxvYWRzOlxuICAgICAgaWYgKG9wdGlvbnMucmVkaXJlY3QgJiYgdGFyZ2V0SG9zdCAmJiB0YXJnZXRIb3N0ICE9PSBsb2NhdGlvbi5ob3N0KSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybURhdGEucHVzaCh7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5yZWRpcmVjdFBhcmFtTmFtZSB8fCAncmVkaXJlY3QnLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb25zLnJlZGlyZWN0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdERhdGFTZXR0aW5nczogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NodW5rZWRVcGxvYWQob3B0aW9ucywgdHJ1ZSkpIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdFhIUkRhdGEob3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2luaXRQcm9ncmVzc0xpc3RlbmVyKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyB0aGUgZGF0YVR5cGUgdG8gcG9zdG1lc3NhZ2UgZW5hYmxlcyB0aGVcbiAgICAgICAgICAvLyBwb3N0TWVzc2FnZSB0cmFuc3BvcnQ6XG4gICAgICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdwb3N0bWVzc2FnZSAnICsgKG9wdGlvbnMuZGF0YVR5cGUgfHwgJycpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pbml0SWZyYW1lU2V0dGluZ3Mob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRQYXJhbU5hbWU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCksXG4gICAgICAgIHBhcmFtTmFtZSA9IG9wdGlvbnMucGFyYW1OYW1lO1xuICAgICAgaWYgKCFwYXJhbU5hbWUpIHtcbiAgICAgICAgcGFyYW1OYW1lID0gW107XG4gICAgICAgIGZpbGVJbnB1dC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpLFxuICAgICAgICAgICAgbmFtZSA9IGlucHV0LnByb3AoJ25hbWUnKSB8fCAnZmlsZXNbXScsXG4gICAgICAgICAgICBpID0gKGlucHV0LnByb3AoJ2ZpbGVzJykgfHwgWzFdKS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGkpIHtcbiAgICAgICAgICAgIHBhcmFtTmFtZS5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcGFyYW1OYW1lLmxlbmd0aCkge1xuICAgICAgICAgIHBhcmFtTmFtZSA9IFtmaWxlSW5wdXQucHJvcCgnbmFtZScpIHx8ICdmaWxlc1tdJ107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoISQuaXNBcnJheShwYXJhbU5hbWUpKSB7XG4gICAgICAgIHBhcmFtTmFtZSA9IFtwYXJhbU5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmFtTmFtZTtcbiAgICB9LFxuXG4gICAgX2luaXRGb3JtU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAvLyBSZXRyaWV2ZSBtaXNzaW5nIG9wdGlvbnMgZnJvbSB0aGUgaW5wdXQgZmllbGQgYW5kIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBmb3JtLCBpZiBhdmFpbGFibGU6XG4gICAgICBpZiAoIW9wdGlvbnMuZm9ybSB8fCAhb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xuICAgICAgICBvcHRpb25zLmZvcm0gPSAkKG9wdGlvbnMuZmlsZUlucHV0LnByb3AoJ2Zvcm0nKSk7XG4gICAgICAgIC8vIElmIHRoZSBnaXZlbiBmaWxlIGlucHV0IGRvZXNuJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGZvcm0sXG4gICAgICAgIC8vIHVzZSB0aGUgZGVmYXVsdCB3aWRnZXQgZmlsZSBpbnB1dCdzIGZvcm06XG4gICAgICAgIGlmICghb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xuICAgICAgICAgIG9wdGlvbnMuZm9ybSA9ICQodGhpcy5vcHRpb25zLmZpbGVJbnB1dC5wcm9wKCdmb3JtJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvcHRpb25zLnBhcmFtTmFtZSA9IHRoaXMuX2dldFBhcmFtTmFtZShvcHRpb25zKTtcbiAgICAgIGlmICghb3B0aW9ucy51cmwpIHtcbiAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLmZvcm0ucHJvcCgnYWN0aW9uJykgfHwgbG9jYXRpb24uaHJlZjtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIG11c3QgYmUgXCJQT1NUXCIgb3IgXCJQVVRcIjpcbiAgICAgIG9wdGlvbnMudHlwZSA9IChcbiAgICAgICAgb3B0aW9ucy50eXBlIHx8XG4gICAgICAgICgkLnR5cGUob3B0aW9ucy5mb3JtLnByb3AoJ21ldGhvZCcpKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBvcHRpb25zLmZvcm0ucHJvcCgnbWV0aG9kJykpIHx8XG4gICAgICAgICcnXG4gICAgICApLnRvVXBwZXJDYXNlKCk7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BPU1QnICYmXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BVVCcgJiZcbiAgICAgICAgb3B0aW9ucy50eXBlICE9PSAnUEFUQ0gnXG4gICAgICApIHtcbiAgICAgICAgb3B0aW9ucy50eXBlID0gJ1BPU1QnO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybUFjY2VwdENoYXJzZXQgPSBvcHRpb25zLmZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2dldEFKQVhTZXR0aW5nczogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgZGF0YSk7XG4gICAgICB0aGlzLl9pbml0Rm9ybVNldHRpbmdzKG9wdGlvbnMpO1xuICAgICAgdGhpcy5faW5pdERhdGFTZXR0aW5ncyhvcHRpb25zKTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0sXG5cbiAgICAvLyBqUXVlcnkgMS42IGRvZXNuJ3QgcHJvdmlkZSAuc3RhdGUoKSxcbiAgICAvLyB3aGlsZSBqUXVlcnkgMS44KyByZW1vdmVkIC5pc1JlamVjdGVkKCkgYW5kIC5pc1Jlc29sdmVkKCk6XG4gICAgX2dldERlZmVycmVkU3RhdGU6IGZ1bmN0aW9uIChkZWZlcnJlZCkge1xuICAgICAgaWYgKGRlZmVycmVkLnN0YXRlKSB7XG4gICAgICAgIHJldHVybiBkZWZlcnJlZC5zdGF0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmVycmVkLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICByZXR1cm4gJ3Jlc29sdmVkJztcbiAgICAgIH1cbiAgICAgIGlmIChkZWZlcnJlZC5pc1JlamVjdGVkKCkpIHtcbiAgICAgICAgcmV0dXJuICdyZWplY3RlZCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ3BlbmRpbmcnO1xuICAgIH0sXG5cbiAgICAvLyBNYXBzIGpxWEhSIGNhbGxiYWNrcyB0byB0aGUgZXF1aXZhbGVudFxuICAgIC8vIG1ldGhvZHMgb2YgdGhlIGdpdmVuIFByb21pc2Ugb2JqZWN0OlxuICAgIF9lbmhhbmNlUHJvbWlzZTogZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgIHByb21pc2Uuc3VjY2VzcyA9IHByb21pc2UuZG9uZTtcbiAgICAgIHByb21pc2UuZXJyb3IgPSBwcm9taXNlLmZhaWw7XG4gICAgICBwcm9taXNlLmNvbXBsZXRlID0gcHJvbWlzZS5hbHdheXM7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9LFxuXG4gICAgLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIFByb21pc2Ugb2JqZWN0IGVuaGFuY2VkIHdpdGhcbiAgICAvLyB0aGUganFYSFIgbWV0aG9kcyBhYm9ydCwgc3VjY2VzcywgZXJyb3IgYW5kIGNvbXBsZXRlOlxuICAgIF9nZXRYSFJQcm9taXNlOiBmdW5jdGlvbiAocmVzb2x2ZU9yUmVqZWN0LCBjb250ZXh0LCBhcmdzKSB7XG4gICAgICB2YXIgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgdGhpcy5vcHRpb25zLmNvbnRleHQgfHwgcHJvbWlzZTtcbiAgICAgIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IHRydWUpIHtcbiAgICAgICAgZGZkLnJlc29sdmVXaXRoKGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfSBlbHNlIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGRmZC5yZWplY3RXaXRoKGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcHJvbWlzZS5hYm9ydCA9IGRmZC5wcm9taXNlO1xuICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VQcm9taXNlKHByb21pc2UpO1xuICAgIH0sXG5cbiAgICAvLyBBZGRzIGNvbnZlbmllbmNlIG1ldGhvZHMgdG8gdGhlIGRhdGEgY2FsbGJhY2sgYXJndW1lbnQ6XG4gICAgX2FkZENvbnZlbmllbmNlTWV0aG9kczogZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZ2V0UHJvbWlzZSA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlV2l0aCh0aGF0LCBhcmdzKS5wcm9taXNlKCk7XG4gICAgICAgIH07XG4gICAgICBkYXRhLnByb2Nlc3MgPSBmdW5jdGlvbiAocmVzb2x2ZUZ1bmMsIHJlamVjdEZ1bmMpIHtcbiAgICAgICAgaWYgKHJlc29sdmVGdW5jIHx8IHJlamVjdEZ1bmMpIHtcbiAgICAgICAgICBkYXRhLl9wcm9jZXNzUXVldWUgPSB0aGlzLl9wcm9jZXNzUXVldWUgPSAodGhpcy5fcHJvY2Vzc1F1ZXVlIHx8XG4gICAgICAgICAgICBnZXRQcm9taXNlKFt0aGlzXSkpXG4gICAgICAgICAgICBbdGhhdC5fcHJvbWlzZVBpcGVdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdFdpdGgodGhhdCwgW2RhdGFdKS5wcm9taXNlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGdldFByb21pc2UoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBbdGhhdC5fcHJvbWlzZVBpcGVdKHJlc29sdmVGdW5jLCByZWplY3RGdW5jKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1F1ZXVlIHx8IGdldFByb21pc2UoW3RoaXNdKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUoKSAhPT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgZGF0YS5qcVhIUiA9IHRoaXMuanFYSFIgPVxuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgICQuRXZlbnQoJ3N1Ym1pdCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICkgIT09IGZhbHNlICYmIHRoYXQuX29uU2VuZChlLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5qcVhIUiB8fCB0aGF0Ll9nZXRYSFJQcm9taXNlKCk7XG4gICAgICB9O1xuICAgICAgZGF0YS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuanFYSFIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5qcVhIUi5hYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXJyb3JUaHJvd24gPSAnYWJvcnQnO1xuICAgICAgICB0aGF0Ll90cmlnZ2VyKCdmYWlsJywgbnVsbCwgdGhpcyk7XG4gICAgICAgIHJldHVybiB0aGF0Ll9nZXRYSFJQcm9taXNlKGZhbHNlKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5qcVhIUikge1xuICAgICAgICAgIHJldHVybiB0aGF0Ll9nZXREZWZlcnJlZFN0YXRlKHRoaXMuanFYSFIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9wcm9jZXNzUXVldWUpIHtcbiAgICAgICAgICByZXR1cm4gdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZGF0YS5wcm9jZXNzaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICF0aGlzLmpxWEhSICYmXG4gICAgICAgICAgdGhpcy5fcHJvY2Vzc1F1ZXVlICYmXG4gICAgICAgICAgdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpID09PSAncGVuZGluZydcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgICB9O1xuICAgICAgZGF0YS5yZXNwb25zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlO1xuICAgICAgfTtcbiAgICB9LFxuXG4gICAgLy8gUGFyc2VzIHRoZSBSYW5nZSBoZWFkZXIgZnJvbSB0aGUgc2VydmVyIHJlc3BvbnNlXG4gICAgLy8gYW5kIHJldHVybnMgdGhlIHVwbG9hZGVkIGJ5dGVzOlxuICAgIF9nZXRVcGxvYWRlZEJ5dGVzOiBmdW5jdGlvbiAoanFYSFIpIHtcbiAgICAgIHZhciByYW5nZSA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCdSYW5nZScpLFxuICAgICAgICBwYXJ0cyA9IHJhbmdlICYmIHJhbmdlLnNwbGl0KCctJyksXG4gICAgICAgIHVwcGVyQnl0ZXNQb3MgPSBwYXJ0cyAmJiBwYXJ0cy5sZW5ndGggPiAxICYmIHBhcnNlSW50KHBhcnRzWzFdLCAxMCk7XG4gICAgICByZXR1cm4gdXBwZXJCeXRlc1BvcyAmJiB1cHBlckJ5dGVzUG9zICsgMTtcbiAgICB9LFxuXG4gICAgLy8gVXBsb2FkcyBhIGZpbGUgaW4gbXVsdGlwbGUsIHNlcXVlbnRpYWwgcmVxdWVzdHNcbiAgICAvLyBieSBzcGxpdHRpbmcgdGhlIGZpbGUgdXAgaW4gbXVsdGlwbGUgYmxvYiBjaHVua3MuXG4gICAgLy8gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSwgb25seSB0ZXN0cyBpZiB0aGUgZmlsZVxuICAgIC8vIHNob3VsZCBiZSB1cGxvYWRlZCBpbiBjaHVua3MsIGJ1dCBkb2VzIG5vdCBpbnZva2UgYW55XG4gICAgLy8gdXBsb2FkIHJlcXVlc3RzOlxuICAgIF9jaHVua2VkVXBsb2FkOiBmdW5jdGlvbiAob3B0aW9ucywgdGVzdE9ubHkpIHtcbiAgICAgIG9wdGlvbnMudXBsb2FkZWRCeXRlcyA9IG9wdGlvbnMudXBsb2FkZWRCeXRlcyB8fCAwO1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBmaWxlID0gb3B0aW9ucy5maWxlc1swXSxcbiAgICAgICAgZnMgPSBmaWxlLnNpemUsXG4gICAgICAgIHViID0gb3B0aW9ucy51cGxvYWRlZEJ5dGVzLFxuICAgICAgICBtY3MgPSBvcHRpb25zLm1heENodW5rU2l6ZSB8fCBmcyxcbiAgICAgICAgc2xpY2UgPSB0aGlzLl9ibG9iU2xpY2UsXG4gICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCksXG4gICAgICAgIGpxWEhSLFxuICAgICAgICB1cGxvYWQ7XG4gICAgICBpZiAoXG4gICAgICAgICEoXG4gICAgICAgICAgdGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucykgJiZcbiAgICAgICAgICBzbGljZSAmJlxuICAgICAgICAgICh1YiB8fCAoJC50eXBlKG1jcykgPT09ICdmdW5jdGlvbicgPyBtY3Mob3B0aW9ucykgOiBtY3MpIDwgZnMpXG4gICAgICAgICkgfHxcbiAgICAgICAgb3B0aW9ucy5kYXRhXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRlc3RPbmx5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHViID49IGZzKSB7XG4gICAgICAgIGZpbGUuZXJyb3IgPSBvcHRpb25zLmkxOG4oJ3VwbG9hZGVkQnl0ZXMnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFhIUlByb21pc2UoZmFsc2UsIG9wdGlvbnMuY29udGV4dCwgW1xuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICBmaWxlLmVycm9yXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgICAgLy8gVGhlIGNodW5rIHVwbG9hZCBtZXRob2Q6XG4gICAgICB1cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIENsb25lIHRoZSBvcHRpb25zIG9iamVjdCBmb3IgZWFjaCBjaHVuayB1cGxvYWQ6XG4gICAgICAgIHZhciBvID0gJC5leHRlbmQoe30sIG9wdGlvbnMpLFxuICAgICAgICAgIGN1cnJlbnRMb2FkZWQgPSBvLl9wcm9ncmVzcy5sb2FkZWQ7XG4gICAgICAgIG8uYmxvYiA9IHNsaWNlLmNhbGwoXG4gICAgICAgICAgZmlsZSxcbiAgICAgICAgICB1YixcbiAgICAgICAgICB1YiArICgkLnR5cGUobWNzKSA9PT0gJ2Z1bmN0aW9uJyA/IG1jcyhvKSA6IG1jcyksXG4gICAgICAgICAgZmlsZS50eXBlXG4gICAgICAgICk7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IGNodW5rIHNpemUsIGFzIHRoZSBibG9iIGl0c2VsZlxuICAgICAgICAvLyB3aWxsIGJlIGRlcmVmZXJlbmNlZCBhZnRlciBkYXRhIHByb2Nlc3Npbmc6XG4gICAgICAgIG8uY2h1bmtTaXplID0gby5ibG9iLnNpemU7XG4gICAgICAgIC8vIEV4cG9zZSB0aGUgY2h1bmsgYnl0ZXMgcG9zaXRpb24gcmFuZ2U6XG4gICAgICAgIG8uY29udGVudFJhbmdlID1cbiAgICAgICAgICAnYnl0ZXMgJyArIHViICsgJy0nICsgKHViICsgby5jaHVua1NpemUgLSAxKSArICcvJyArIGZzO1xuICAgICAgICAvLyBUcmlnZ2VyIGNodW5rYmVmb3Jlc2VuZCB0byBhbGxvdyBmb3JtIGRhdGEgdG8gYmUgdXBkYXRlZCBmb3IgdGhpcyBjaHVua1xuICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2JlZm9yZXNlbmQnLCBudWxsLCBvKTtcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgdXBsb2FkIGRhdGEgKHRoZSBibG9iIGFuZCBwb3RlbnRpYWwgZm9ybSBkYXRhKTpcbiAgICAgICAgdGhhdC5faW5pdFhIUkRhdGEobyk7XG4gICAgICAgIC8vIEFkZCBwcm9ncmVzcyBsaXN0ZW5lcnMgZm9yIHRoaXMgY2h1bmsgdXBsb2FkOlxuICAgICAgICB0aGF0Ll9pbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAganFYSFIgPSAoXG4gICAgICAgICAgKHRoYXQuX3RyaWdnZXIoJ2NodW5rc2VuZCcsIG51bGwsIG8pICE9PSBmYWxzZSAmJiAkLmFqYXgobykpIHx8XG4gICAgICAgICAgdGhhdC5fZ2V0WEhSUHJvbWlzZShmYWxzZSwgby5jb250ZXh0KVxuICAgICAgICApXG4gICAgICAgICAgLmRvbmUoZnVuY3Rpb24gKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICAgICAgICAgIHViID0gdGhhdC5fZ2V0VXBsb2FkZWRCeXRlcyhqcVhIUikgfHwgdWIgKyBvLmNodW5rU2l6ZTtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHByb2dyZXNzIGV2ZW50IGlmIG5vIGZpbmFsIHByb2dyZXNzIGV2ZW50XG4gICAgICAgICAgICAvLyB3aXRoIGxvYWRlZCBlcXVhbGluZyB0b3RhbCBoYXMgYmVlbiB0cmlnZ2VyZWRcbiAgICAgICAgICAgIC8vIGZvciB0aGlzIGNodW5rOlxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMb2FkZWQgKyBvLmNodW5rU2l6ZSAtIG8uX3Byb2dyZXNzLmxvYWRlZCkge1xuICAgICAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKFxuICAgICAgICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge1xuICAgICAgICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGxvYWRlZDogdWIgLSBvLnVwbG9hZGVkQnl0ZXMsXG4gICAgICAgICAgICAgICAgICB0b3RhbDogdWIgLSBvLnVwbG9hZGVkQnl0ZXNcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBvXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnVwbG9hZGVkQnl0ZXMgPSBvLnVwbG9hZGVkQnl0ZXMgPSB1YjtcbiAgICAgICAgICAgIG8ucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgby50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcbiAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rZG9uZScsIG51bGwsIG8pO1xuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmthbHdheXMnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIGlmICh1YiA8IGZzKSB7XG4gICAgICAgICAgICAgIC8vIEZpbGUgdXBsb2FkIG5vdCB5ZXQgY29tcGxldGUsXG4gICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgY2h1bms6XG4gICAgICAgICAgICAgIHVwbG9hZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGZkLnJlc29sdmVXaXRoKG8uY29udGV4dCwgW3Jlc3VsdCwgdGV4dFN0YXR1cywganFYSFJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5mYWlsKGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgIG8udGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7XG4gICAgICAgICAgICBvLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2ZhaWwnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rYWx3YXlzJywgbnVsbCwgbyk7XG4gICAgICAgICAgICBkZmQucmVqZWN0V2l0aChvLmNvbnRleHQsIFtqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd25dKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hbHdheXMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhhdC5fZGVpbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgIHByb21pc2UuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgfTtcbiAgICAgIHVwbG9hZCgpO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfSxcblxuICAgIF9iZWZvcmVTZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCkge1xuICAgICAgICAvLyB0aGUgc3RhcnQgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gdXBsb2FkIHN0YXJ0c1xuICAgICAgICAvLyBhbmQgbm8gb3RoZXIgdXBsb2FkcyBhcmUgY3VycmVudGx5IHJ1bm5pbmcsXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAgIHRoaXMuX3RyaWdnZXIoJ3N0YXJ0Jyk7XG4gICAgICAgIC8vIFNldCB0aW1lciBmb3IgZ2xvYmFsIGJpdHJhdGUgcHJvZ3Jlc3MgY2FsY3VsYXRpb246XG4gICAgICAgIHRoaXMuX2JpdHJhdGVUaW1lciA9IG5ldyB0aGlzLl9CaXRyYXRlVGltZXIoKTtcbiAgICAgICAgLy8gUmVzZXQgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCA9IHRoaXMuX3Byb2dyZXNzLnRvdGFsID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MuYml0cmF0ZSA9IDA7XG4gICAgICB9XG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRhaW5lciBvYmplY3RzIGZvciB0aGUgLnJlc3BvbnNlKCkgYW5kXG4gICAgICAvLyAucHJvZ3Jlc3MoKSBtZXRob2RzIG9uIHRoZSBkYXRhIG9iamVjdCBhcmUgYXZhaWxhYmxlXG4gICAgICAvLyBhbmQgcmVzZXQgdG8gdGhlaXIgaW5pdGlhbCBzdGF0ZTpcbiAgICAgIHRoaXMuX2luaXRSZXNwb25zZU9iamVjdChkYXRhKTtcbiAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdChkYXRhKTtcbiAgICAgIGRhdGEuX3Byb2dyZXNzLmxvYWRlZCA9IGRhdGEubG9hZGVkID0gZGF0YS51cGxvYWRlZEJ5dGVzIHx8IDA7XG4gICAgICBkYXRhLl9wcm9ncmVzcy50b3RhbCA9IGRhdGEudG90YWwgPSB0aGlzLl9nZXRUb3RhbChkYXRhLmZpbGVzKSB8fCAxO1xuICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IDA7XG4gICAgICB0aGlzLl9hY3RpdmUgKz0gMTtcbiAgICAgIC8vIEluaXRpYWxpemUgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gZGF0YS5sb2FkZWQ7XG4gICAgICB0aGlzLl9wcm9ncmVzcy50b3RhbCArPSBkYXRhLnRvdGFsO1xuICAgIH0sXG5cbiAgICBfb25Eb25lOiBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUiwgb3B0aW9ucykge1xuICAgICAgdmFyIHRvdGFsID0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWwsXG4gICAgICAgIHJlc3BvbnNlID0gb3B0aW9ucy5fcmVzcG9uc2U7XG4gICAgICBpZiAob3B0aW9ucy5fcHJvZ3Jlc3MubG9hZGVkIDwgdG90YWwpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgcHJvZ3Jlc3MgZXZlbnQgaWYgbm8gZmluYWwgcHJvZ3Jlc3MgZXZlbnRcbiAgICAgICAgLy8gd2l0aCBsb2FkZWQgZXF1YWxpbmcgdG90YWwgaGFzIGJlZW4gdHJpZ2dlcmVkOlxuICAgICAgICB0aGlzLl9vblByb2dyZXNzKFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge1xuICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGxvYWRlZDogdG90YWwsXG4gICAgICAgICAgICB0b3RhbDogdG90YWxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXNwb25zZS5yZXN1bHQgPSBvcHRpb25zLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgcmVzcG9uc2UuanFYSFIgPSBvcHRpb25zLmpxWEhSID0ganFYSFI7XG4gICAgICB0aGlzLl90cmlnZ2VyKCdkb25lJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vbkZhaWw6IGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24sIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZXNwb25zZSA9IG9wdGlvbnMuX3Jlc3BvbnNlO1xuICAgICAgaWYgKG9wdGlvbnMucmVjYWxjdWxhdGVQcm9ncmVzcykge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGZhaWxlZCAoZXJyb3Igb3IgYWJvcnQpIGZpbGUgdXBsb2FkIGZyb21cbiAgICAgICAgLy8gdGhlIGdsb2JhbCBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkIC09IG9wdGlvbnMuX3Byb2dyZXNzLmxvYWRlZDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudG90YWwgLT0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWw7XG4gICAgICB9XG4gICAgICByZXNwb25zZS5qcVhIUiA9IG9wdGlvbnMuanFYSFIgPSBqcVhIUjtcbiAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgcmVzcG9uc2UuZXJyb3JUaHJvd24gPSBvcHRpb25zLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICB0aGlzLl90cmlnZ2VyKCdmYWlsJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vbkFsd2F5czogZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvciwgb3B0aW9ucykge1xuICAgICAgLy8ganFYSFJvclJlc3VsdCwgdGV4dFN0YXR1cyBhbmQganFYSFJvckVycm9yIGFyZSBhZGRlZCB0byB0aGVcbiAgICAgIC8vIG9wdGlvbnMgb2JqZWN0IHZpYSBkb25lIGFuZCBmYWlsIGNhbGxiYWNrc1xuICAgICAgdGhpcy5fdHJpZ2dlcignYWx3YXlzJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vblNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICBpZiAoIWRhdGEuc3VibWl0KSB7XG4gICAgICAgIHRoaXMuX2FkZENvbnZlbmllbmNlTWV0aG9kcyhlLCBkYXRhKTtcbiAgICAgIH1cbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAganFYSFIsXG4gICAgICAgIGFib3J0ZWQsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIHBpcGUsXG4gICAgICAgIG9wdGlvbnMgPSB0aGF0Ll9nZXRBSkFYU2V0dGluZ3MoZGF0YSksXG4gICAgICAgIHNlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhhdC5fc2VuZGluZyArPSAxO1xuICAgICAgICAgIC8vIFNldCB0aW1lciBmb3IgYml0cmF0ZSBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgICBvcHRpb25zLl9iaXRyYXRlVGltZXIgPSBuZXcgdGhhdC5fQml0cmF0ZVRpbWVyKCk7XG4gICAgICAgICAganFYSFIgPVxuICAgICAgICAgICAganFYSFIgfHxcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgKChhYm9ydGVkIHx8XG4gICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgICAgICdzZW5kJyxcbiAgICAgICAgICAgICAgICAgICQuRXZlbnQoJ3NlbmQnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICAgICkgPT09IGZhbHNlKSAmJlxuICAgICAgICAgICAgICAgIHRoYXQuX2dldFhIUlByb21pc2UoZmFsc2UsIG9wdGlvbnMuY29udGV4dCwgYWJvcnRlZCkpIHx8XG4gICAgICAgICAgICAgIHRoYXQuX2NodW5rZWRVcGxvYWQob3B0aW9ucykgfHxcbiAgICAgICAgICAgICAgJC5hamF4KG9wdGlvbnMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25Eb25lKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZmFpbChmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25GYWlsKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5hbHdheXMoZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvcikge1xuICAgICAgICAgICAgICAgIHRoYXQuX2RlaW5pdFByb2dyZXNzTGlzdGVuZXIob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25BbHdheXMoXG4gICAgICAgICAgICAgICAgICBqcVhIUm9yUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgdGV4dFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIGpxWEhSb3JFcnJvcixcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoYXQuX3NlbmRpbmcgLT0gMTtcbiAgICAgICAgICAgICAgICB0aGF0Ll9hY3RpdmUgLT0gMTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgJiZcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyA+IHRoYXQuX3NlbmRpbmdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBuZXh0IHF1ZXVlZCB1cGxvYWQsXG4gICAgICAgICAgICAgICAgICAvLyB0aGF0IGhhcyBub3QgYmVlbiBhYm9ydGVkOlxuICAgICAgICAgICAgICAgICAgdmFyIG5leHRTbG90ID0gdGhhdC5fc2xvdHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0U2xvdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZShuZXh0U2xvdCkgPT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgIG5leHRTbG90LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXh0U2xvdCA9IHRoYXQuX3Nsb3RzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9hY3RpdmUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBzdG9wIGNhbGxiYWNrIGlzIHRyaWdnZXJlZCB3aGVuIGFsbCB1cGxvYWRzIGhhdmVcbiAgICAgICAgICAgICAgICAgIC8vIGJlZW4gY29tcGxldGVkLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdzdG9wJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4ganFYSFI7XG4gICAgICAgIH07XG4gICAgICB0aGlzLl9iZWZvcmVTZW5kKGUsIG9wdGlvbnMpO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm9wdGlvbnMuc2VxdWVudGlhbFVwbG9hZHMgfHxcbiAgICAgICAgKHRoaXMub3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzICYmXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPD0gdGhpcy5fc2VuZGluZylcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPiAxKSB7XG4gICAgICAgICAgc2xvdCA9ICQuRGVmZXJyZWQoKTtcbiAgICAgICAgICB0aGlzLl9zbG90cy5wdXNoKHNsb3QpO1xuICAgICAgICAgIHBpcGUgPSBzbG90W3RoYXQuX3Byb21pc2VQaXBlXShzZW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX3NlcXVlbmNlW3RoYXQuX3Byb21pc2VQaXBlXShzZW5kLCBzZW5kKTtcbiAgICAgICAgICBwaXBlID0gdGhpcy5fc2VxdWVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBwaXBlZCBQcm9taXNlIG9iamVjdCwgZW5oYW5jZWQgd2l0aCBhbiBhYm9ydCBtZXRob2QsXG4gICAgICAgIC8vIHdoaWNoIGlzIGRlbGVnYXRlZCB0byB0aGUganFYSFIgb2JqZWN0IG9mIHRoZSBjdXJyZW50IHVwbG9hZCxcbiAgICAgICAgLy8gYW5kIGpxWEhSIGNhbGxiYWNrcyBtYXBwZWQgdG8gdGhlIGVxdWl2YWxlbnQgUHJvbWlzZSBtZXRob2RzOlxuICAgICAgICBwaXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGFib3J0ZWQgPSBbdW5kZWZpbmVkLCAnYWJvcnQnLCAnYWJvcnQnXTtcbiAgICAgICAgICBpZiAoIWpxWEhSKSB7XG4gICAgICAgICAgICBpZiAoc2xvdCkge1xuICAgICAgICAgICAgICBzbG90LnJlamVjdFdpdGgob3B0aW9ucy5jb250ZXh0LCBhYm9ydGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5oYW5jZVByb21pc2UocGlwZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VuZCgpO1xuICAgIH0sXG5cbiAgICBfb25BZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCBkYXRhKSxcbiAgICAgICAgZmlsZXMgPSBkYXRhLmZpbGVzLFxuICAgICAgICBmaWxlc0xlbmd0aCA9IGZpbGVzLmxlbmd0aCxcbiAgICAgICAgbGltaXQgPSBvcHRpb25zLmxpbWl0TXVsdGlGaWxlVXBsb2FkcyxcbiAgICAgICAgbGltaXRTaXplID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemUsXG4gICAgICAgIG92ZXJoZWFkID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemVPdmVyaGVhZCxcbiAgICAgICAgYmF0Y2hTaXplID0gMCxcbiAgICAgICAgcGFyYW1OYW1lID0gdGhpcy5fZ2V0UGFyYW1OYW1lKG9wdGlvbnMpLFxuICAgICAgICBwYXJhbU5hbWVTZXQsXG4gICAgICAgIHBhcmFtTmFtZVNsaWNlLFxuICAgICAgICBmaWxlU2V0LFxuICAgICAgICBpLFxuICAgICAgICBqID0gMDtcbiAgICAgIGlmICghZmlsZXNMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGxpbWl0U2l6ZSAmJiBmaWxlc1swXS5zaXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGltaXRTaXplID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAhKG9wdGlvbnMuc2luZ2xlRmlsZVVwbG9hZHMgfHwgbGltaXQgfHwgbGltaXRTaXplKSB8fFxuICAgICAgICAhdGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucylcbiAgICAgICkge1xuICAgICAgICBmaWxlU2V0ID0gW2ZpbGVzXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW3BhcmFtTmFtZV07XG4gICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucy5zaW5nbGVGaWxlVXBsb2FkcyB8fCBsaW1pdFNpemUpICYmIGxpbWl0KSB7XG4gICAgICAgIGZpbGVTZXQgPSBbXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWxlc0xlbmd0aDsgaSArPSBsaW1pdCkge1xuICAgICAgICAgIGZpbGVTZXQucHVzaChmaWxlcy5zbGljZShpLCBpICsgbGltaXQpKTtcbiAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShpLCBpICsgbGltaXQpO1xuICAgICAgICAgIGlmICghcGFyYW1OYW1lU2xpY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyYW1OYW1lU2V0LnB1c2gocGFyYW1OYW1lU2xpY2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnNpbmdsZUZpbGVVcGxvYWRzICYmIGxpbWl0U2l6ZSkge1xuICAgICAgICBmaWxlU2V0ID0gW107XG4gICAgICAgIHBhcmFtTmFtZVNldCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7IGkgPSBpICsgMSkge1xuICAgICAgICAgIGJhdGNoU2l6ZSArPSBmaWxlc1tpXS5zaXplICsgb3ZlcmhlYWQ7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaSArIDEgPT09IGZpbGVzTGVuZ3RoIHx8XG4gICAgICAgICAgICBiYXRjaFNpemUgKyBmaWxlc1tpICsgMV0uc2l6ZSArIG92ZXJoZWFkID4gbGltaXRTaXplIHx8XG4gICAgICAgICAgICAobGltaXQgJiYgaSArIDEgLSBqID49IGxpbWl0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmlsZVNldC5wdXNoKGZpbGVzLnNsaWNlKGosIGkgKyAxKSk7XG4gICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShqLCBpICsgMSk7XG4gICAgICAgICAgICBpZiAoIXBhcmFtTmFtZVNsaWNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtTmFtZVNldC5wdXNoKHBhcmFtTmFtZVNsaWNlKTtcbiAgICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgICAgIGJhdGNoU2l6ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbU5hbWVTZXQgPSBwYXJhbU5hbWU7XG4gICAgICB9XG4gICAgICBkYXRhLm9yaWdpbmFsRmlsZXMgPSBmaWxlcztcbiAgICAgICQuZWFjaChmaWxlU2V0IHx8IGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIG5ld0RhdGEgPSAkLmV4dGVuZCh7fSwgZGF0YSk7XG4gICAgICAgIG5ld0RhdGEuZmlsZXMgPSBmaWxlU2V0ID8gZWxlbWVudCA6IFtlbGVtZW50XTtcbiAgICAgICAgbmV3RGF0YS5wYXJhbU5hbWUgPSBwYXJhbU5hbWVTZXRbaW5kZXhdO1xuICAgICAgICB0aGF0Ll9pbml0UmVzcG9uc2VPYmplY3QobmV3RGF0YSk7XG4gICAgICAgIHRoYXQuX2luaXRQcm9ncmVzc09iamVjdChuZXdEYXRhKTtcbiAgICAgICAgdGhhdC5fYWRkQ29udmVuaWVuY2VNZXRob2RzKGUsIG5ld0RhdGEpO1xuICAgICAgICByZXN1bHQgPSB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICdhZGQnLFxuICAgICAgICAgICQuRXZlbnQoJ2FkZCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgbmV3RGF0YVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBfcmVwbGFjZUZpbGVJbnB1dDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBpbnB1dCA9IGRhdGEuZmlsZUlucHV0LFxuICAgICAgICBpbnB1dENsb25lID0gaW5wdXQuY2xvbmUodHJ1ZSksXG4gICAgICAgIHJlc3RvcmVGb2N1cyA9IGlucHV0LmlzKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgLy8gQWRkIGEgcmVmZXJlbmNlIGZvciB0aGUgbmV3IGNsb25lZCBmaWxlIGlucHV0IHRvIHRoZSBkYXRhIGFyZ3VtZW50OlxuICAgICAgZGF0YS5maWxlSW5wdXRDbG9uZSA9IGlucHV0Q2xvbmU7XG4gICAgICAkKCc8Zm9ybT48L2Zvcm0+JykuYXBwZW5kKGlucHV0Q2xvbmUpWzBdLnJlc2V0KCk7XG4gICAgICAvLyBEZXRhY2hpbmcgYWxsb3dzIHRvIGluc2VydCB0aGUgZmlsZUlucHV0IG9uIGFub3RoZXIgZm9ybVxuICAgICAgLy8gd2l0aG91dCBsb3NpbmcgdGhlIGZpbGUgaW5wdXQgdmFsdWU6XG4gICAgICBpbnB1dC5hZnRlcihpbnB1dENsb25lKS5kZXRhY2goKTtcbiAgICAgIC8vIElmIHRoZSBmaWxlSW5wdXQgaGFkIGZvY3VzIGJlZm9yZSBpdCB3YXMgZGV0YWNoZWQsXG4gICAgICAvLyByZXN0b3JlIGZvY3VzIHRvIHRoZSBpbnB1dENsb25lLlxuICAgICAgaWYgKHJlc3RvcmVGb2N1cykge1xuICAgICAgICBpbnB1dENsb25lLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBtZW1vcnkgbGVha3Mgd2l0aCB0aGUgZGV0YWNoZWQgZmlsZSBpbnB1dDpcbiAgICAgICQuY2xlYW5EYXRhKGlucHV0Lm9mZigncmVtb3ZlJykpO1xuICAgICAgLy8gUmVwbGFjZSB0aGUgb3JpZ2luYWwgZmlsZSBpbnB1dCBlbGVtZW50IGluIHRoZSBmaWxlSW5wdXRcbiAgICAgIC8vIGVsZW1lbnRzIHNldCB3aXRoIHRoZSBjbG9uZSwgd2hpY2ggaGFzIGJlZW4gY29waWVkIGluY2x1ZGluZ1xuICAgICAgLy8gZXZlbnQgaGFuZGxlcnM6XG4gICAgICB0aGlzLm9wdGlvbnMuZmlsZUlucHV0ID0gdGhpcy5vcHRpb25zLmZpbGVJbnB1dC5tYXAoZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgIGlmIChlbCA9PT0gaW5wdXRbMF0pIHtcbiAgICAgICAgICByZXR1cm4gaW5wdXRDbG9uZVswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWw7XG4gICAgICB9KTtcbiAgICAgIC8vIElmIHRoZSB3aWRnZXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgb24gdGhlIGZpbGUgaW5wdXQgaXRzZWxmLFxuICAgICAgLy8gb3ZlcnJpZGUgdGhpcy5lbGVtZW50IHdpdGggdGhlIGZpbGUgaW5wdXQgY2xvbmU6XG4gICAgICBpZiAoaW5wdXRbMF0gPT09IHRoaXMuZWxlbWVudFswXSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBpbnB1dENsb25lO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaGFuZGxlRmlsZVRyZWVFbnRyeTogZnVuY3Rpb24gKGVudHJ5LCBwYXRoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgZW50cmllcyA9IFtdLFxuICAgICAgICBkaXJSZWFkZXIsXG4gICAgICAgIGVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgaWYgKGUgJiYgIWUuZW50cnkpIHtcbiAgICAgICAgICAgIGUuZW50cnkgPSBlbnRyeTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2luY2UgJC53aGVuIHJldHVybnMgaW1tZWRpYXRlbHkgaWYgb25lXG4gICAgICAgICAgLy8gRGVmZXJyZWQgaXMgcmVqZWN0ZWQsIHdlIHVzZSByZXNvbHZlIGluc3RlYWQuXG4gICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdmFsaWQgZmlsZXMgYW5kIGludmFsaWQgaXRlbXNcbiAgICAgICAgICAvLyB0byBiZSByZXR1cm5lZCB0b2dldGhlciBpbiBvbmUgc2V0OlxuICAgICAgICAgIGRmZC5yZXNvbHZlKFtlXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3NIYW5kbGVyID0gZnVuY3Rpb24gKGVudHJpZXMpIHtcbiAgICAgICAgICB0aGF0XG4gICAgICAgICAgICAuX2hhbmRsZUZpbGVUcmVlRW50cmllcyhlbnRyaWVzLCBwYXRoICsgZW50cnkubmFtZSArICcvJylcbiAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZhaWwoZXJyb3JIYW5kbGVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhZEVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGlyUmVhZGVyLnJlYWRFbnRyaWVzKGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3NIYW5kbGVyKGVudHJpZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW50cmllcyA9IGVudHJpZXMuY29uY2F0KHJlc3VsdHMpO1xuICAgICAgICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGVycm9ySGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHBhdGggPSBwYXRoIHx8ICcnO1xuICAgICAgaWYgKGVudHJ5LmlzRmlsZSkge1xuICAgICAgICBpZiAoZW50cnkuX2ZpbGUpIHtcbiAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBDaHJvbWUgYnVnICMxNDk3MzVcbiAgICAgICAgICBlbnRyeS5fZmlsZS5yZWxhdGl2ZVBhdGggPSBwYXRoO1xuICAgICAgICAgIGRmZC5yZXNvbHZlKGVudHJ5Ll9maWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnRyeS5maWxlKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnJlbGF0aXZlUGF0aCA9IHBhdGg7XG4gICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlKTtcbiAgICAgICAgICB9LCBlcnJvckhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgIGRpclJlYWRlciA9IGVudHJ5LmNyZWF0ZVJlYWRlcigpO1xuICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmV0dXJuIGFuIGVtcHR5IGxpc3QgZm9yIGZpbGUgc3lzdGVtIGl0ZW1zXG4gICAgICAgIC8vIG90aGVyIHRoYW4gZmlsZXMgb3IgZGlyZWN0b3JpZXM6XG4gICAgICAgIGRmZC5yZXNvbHZlKFtdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZmQucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfaGFuZGxlRmlsZVRyZWVFbnRyaWVzOiBmdW5jdGlvbiAoZW50cmllcywgcGF0aCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcmV0dXJuICQud2hlblxuICAgICAgICAuYXBwbHkoXG4gICAgICAgICAgJCxcbiAgICAgICAgICAkLm1hcChlbnRyaWVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGF0Ll9oYW5kbGVGaWxlVHJlZUVudHJ5KGVudHJ5LCBwYXRoKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIFt0aGlzLl9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2dldERyb3BwZWRGaWxlczogZnVuY3Rpb24gKGRhdGFUcmFuc2Zlcikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBkYXRhVHJhbnNmZXIgPSBkYXRhVHJhbnNmZXIgfHwge307XG4gICAgICB2YXIgaXRlbXMgPSBkYXRhVHJhbnNmZXIuaXRlbXM7XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW1zICYmXG4gICAgICAgIGl0ZW1zLmxlbmd0aCAmJlxuICAgICAgICAoaXRlbXNbMF0ud2Via2l0R2V0QXNFbnRyeSB8fCBpdGVtc1swXS5nZXRBc0VudHJ5KVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVGaWxlVHJlZUVudHJpZXMoXG4gICAgICAgICAgJC5tYXAoaXRlbXMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgICAgICBpZiAoaXRlbS53ZWJraXRHZXRBc0VudHJ5KSB7XG4gICAgICAgICAgICAgIGVudHJ5ID0gaXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIENocm9tZSBidWcgIzE0OTczNTpcbiAgICAgICAgICAgICAgICBlbnRyeS5fZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0QXNFbnRyeSgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoJC5tYWtlQXJyYXkoZGF0YVRyYW5zZmVyLmZpbGVzKSkucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfZ2V0U2luZ2xlRmlsZUlucHV0RmlsZXM6IGZ1bmN0aW9uIChmaWxlSW5wdXQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgZmlsZUlucHV0ID0gJChmaWxlSW5wdXQpO1xuICAgICAgdmFyIGVudHJpZXMgPSBmaWxlSW5wdXQucHJvcCgnZW50cmllcycpLFxuICAgICAgICBmaWxlcyxcbiAgICAgICAgdmFsdWU7XG4gICAgICBpZiAoZW50cmllcyAmJiBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRmlsZVRyZWVFbnRyaWVzKGVudHJpZXMpO1xuICAgICAgfVxuICAgICAgZmlsZXMgPSAkLm1ha2VBcnJheShmaWxlSW5wdXQucHJvcCgnZmlsZXMnKSk7XG4gICAgICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IGZpbGVJbnB1dC5wcm9wKCd2YWx1ZScpO1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKFtdKS5wcm9taXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIGZpbGVzIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBicm93c2VyIGRvZXMgbm90XG4gICAgICAgIC8vIHN1cHBvcnQgdGhlIEZpbGUgQVBJIGFuZCB3ZSBhZGQgYSBwc2V1ZG8gRmlsZSBvYmplY3Qgd2l0aFxuICAgICAgICAvLyB0aGUgaW5wdXQgdmFsdWUgYXMgbmFtZSB3aXRoIHBhdGggaW5mb3JtYXRpb24gcmVtb3ZlZDpcbiAgICAgICAgZmlsZXMgPSBbeyBuYW1lOiB2YWx1ZS5yZXBsYWNlKC9eLipcXFxcLywgJycpIH1dO1xuICAgICAgfSBlbHNlIGlmIChmaWxlc1swXS5uYW1lID09PSB1bmRlZmluZWQgJiYgZmlsZXNbMF0uZmlsZU5hbWUpIHtcbiAgICAgICAgLy8gRmlsZSBub3JtYWxpemF0aW9uIGZvciBTYWZhcmkgNCBhbmQgRmlyZWZveCAzOlxuICAgICAgICAkLmVhY2goZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgIGZpbGUubmFtZSA9IGZpbGUuZmlsZU5hbWU7XG4gICAgICAgICAgZmlsZS5zaXplID0gZmlsZS5maWxlU2l6ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoZmlsZXMpLnByb21pc2UoKTtcbiAgICB9LFxuXG4gICAgX2dldEZpbGVJbnB1dEZpbGVzOiBmdW5jdGlvbiAoZmlsZUlucHV0KSB7XG4gICAgICBpZiAoIShmaWxlSW5wdXQgaW5zdGFuY2VvZiAkKSB8fCBmaWxlSW5wdXQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcyhmaWxlSW5wdXQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICQud2hlblxuICAgICAgICAuYXBwbHkoJCwgJC5tYXAoZmlsZUlucHV0LCB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcykpXG4gICAgICAgIFt0aGlzLl9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX29uQ2hhbmdlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBkYXRhID0ge1xuICAgICAgICAgIGZpbGVJbnB1dDogJChlLnRhcmdldCksXG4gICAgICAgICAgZm9ybTogJChlLnRhcmdldC5mb3JtKVxuICAgICAgICB9O1xuICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICBpZiAodGhhdC5vcHRpb25zLnJlcGxhY2VGaWxlSW5wdXQpIHtcbiAgICAgICAgICB0aGF0Ll9yZXBsYWNlRmlsZUlucHV0KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICAgJ2NoYW5nZScsXG4gICAgICAgICAgICAkLkV2ZW50KCdjaGFuZ2UnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIHRoYXQuX29uQWRkKGUsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX29uUGFzdGU6IGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgaXRlbXMgPVxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudCAmJlxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhICYmXG4gICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuaXRlbXMsXG4gICAgICAgIGRhdGEgPSB7IGZpbGVzOiBbXSB9O1xuICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAkLmVhY2goaXRlbXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuICAgICAgICAgIHZhciBmaWxlID0gaXRlbS5nZXRBc0ZpbGUgJiYgaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZGF0YS5maWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICAgICAgJ3Bhc3RlJyxcbiAgICAgICAgICAgICQuRXZlbnQoJ3Bhc3RlJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICApICE9PSBmYWxzZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25Ecm9wOiBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5kYXRhVHJhbnNmZXIgPSBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXIsXG4gICAgICAgIGRhdGEgPSB7fTtcbiAgICAgIGlmIChkYXRhVHJhbnNmZXIgJiYgZGF0YVRyYW5zZmVyLmZpbGVzICYmIGRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGgpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9nZXREcm9wcGVkRmlsZXMoZGF0YVRyYW5zZmVyKS5hbHdheXMoZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoXG4gICAgICAgICAgICAgICdkcm9wJyxcbiAgICAgICAgICAgICAgJC5FdmVudCgnZHJvcCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGF0Ll9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25EcmFnT3ZlcjogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdvdmVyJyksXG5cbiAgICBfb25EcmFnRW50ZXI6IGdldERyYWdIYW5kbGVyKCdkcmFnZW50ZXInKSxcblxuICAgIF9vbkRyYWdMZWF2ZTogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdsZWF2ZScpLFxuXG4gICAgX2luaXRFdmVudEhhbmRsZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5faXNYSFJVcGxvYWQodGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLl9vbih0aGlzLm9wdGlvbnMuZHJvcFpvbmUsIHtcbiAgICAgICAgICBkcmFnb3ZlcjogdGhpcy5fb25EcmFnT3ZlcixcbiAgICAgICAgICBkcm9wOiB0aGlzLl9vbkRyb3AsXG4gICAgICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKSBvbiBkcmFnZW50ZXIgaXMgcmVxdWlyZWQgZm9yIElFMTArOlxuICAgICAgICAgIGRyYWdlbnRlcjogdGhpcy5fb25EcmFnRW50ZXIsXG4gICAgICAgICAgLy8gZHJhZ2xlYXZlIGlzIG5vdCByZXF1aXJlZCwgYnV0IGFkZGVkIGZvciBjb21wbGV0ZW5lc3M6XG4gICAgICAgICAgZHJhZ2xlYXZlOiB0aGlzLl9vbkRyYWdMZWF2ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLnBhc3RlWm9uZSwge1xuICAgICAgICAgIHBhc3RlOiB0aGlzLl9vblBhc3RlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCQuc3VwcG9ydC5maWxlSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLmZpbGVJbnB1dCwge1xuICAgICAgICAgIGNoYW5nZTogdGhpcy5fb25DaGFuZ2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9kZXN0cm95RXZlbnRIYW5kbGVyczogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5kcm9wWm9uZSwgJ2RyYWdlbnRlciBkcmFnbGVhdmUgZHJhZ292ZXIgZHJvcCcpO1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5wYXN0ZVpvbmUsICdwYXN0ZScpO1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5maWxlSW5wdXQsICdjaGFuZ2UnKTtcbiAgICB9LFxuXG4gICAgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3lFdmVudEhhbmRsZXJzKCk7XG4gICAgfSxcblxuICAgIF9zZXRPcHRpb246IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgcmVpbml0ID0gJC5pbkFycmF5KGtleSwgdGhpcy5fc3BlY2lhbE9wdGlvbnMpICE9PSAtMTtcbiAgICAgIGlmIChyZWluaXQpIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3N1cGVyKGtleSwgdmFsdWUpO1xuICAgICAgaWYgKHJlaW5pdCkge1xuICAgICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5faW5pdEV2ZW50SGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRTcGVjaWFsT3B0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBpZiAob3B0aW9ucy5maWxlSW5wdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRpb25zLmZpbGVJbnB1dCA9IHRoaXMuZWxlbWVudC5pcygnaW5wdXRbdHlwZT1cImZpbGVcIl0nKVxuICAgICAgICAgID8gdGhpcy5lbGVtZW50XG4gICAgICAgICAgOiB0aGlzLmVsZW1lbnQuZmluZCgnaW5wdXRbdHlwZT1cImZpbGVcIl0nKTtcbiAgICAgIH0gZWxzZSBpZiAoIShvcHRpb25zLmZpbGVJbnB1dCBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zLmRyb3Bab25lIGluc3RhbmNlb2YgJCkpIHtcbiAgICAgICAgb3B0aW9ucy5kcm9wWm9uZSA9ICQob3B0aW9ucy5kcm9wWm9uZSk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zLnBhc3RlWm9uZSBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMucGFzdGVab25lID0gJChvcHRpb25zLnBhc3RlWm9uZSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRSZWdFeHA6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnLycpLFxuICAgICAgICBtb2RpZmllcnMgPSBwYXJ0cy5wb3AoKTtcbiAgICAgIHBhcnRzLnNoaWZ0KCk7XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cChwYXJ0cy5qb2luKCcvJyksIG1vZGlmaWVycyk7XG4gICAgfSxcblxuICAgIF9pc1JlZ0V4cE9wdGlvbjogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGtleSAhPT0gJ3VybCcgJiZcbiAgICAgICAgJC50eXBlKHZhbHVlKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgL15cXC8uKlxcL1tpZ21dezAsM30kLy50ZXN0KHZhbHVlKVxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgX2luaXREYXRhQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBkYXRhID0gdGhpcy5lbGVtZW50LmRhdGEoKTtcbiAgICAgIC8vIEluaXRpYWxpemUgb3B0aW9ucyBzZXQgdmlhIEhUTUw1IGRhdGEtYXR0cmlidXRlczpcbiAgICAgICQuZWFjaCh0aGlzLmVsZW1lbnRbMF0uYXR0cmlidXRlcywgZnVuY3Rpb24gKGluZGV4LCBhdHRyKSB7XG4gICAgICAgIHZhciBrZXkgPSBhdHRyLm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgaWYgKC9eZGF0YS0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgaHlwaGVuLWF0ZWQga2V5IHRvIGNhbWVsQ2FzZTpcbiAgICAgICAgICBrZXkgPSBrZXkuc2xpY2UoNSkucmVwbGFjZSgvLVthLXpdL2csIGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHIuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgaWYgKHRoYXQuX2lzUmVnRXhwT3B0aW9uKGtleSwgdmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoYXQuX2dldFJlZ0V4cCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2NyZWF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5faW5pdERhdGFBdHRyaWJ1dGVzKCk7XG4gICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Nsb3RzID0gW107XG4gICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX2dldFhIUlByb21pc2UodHJ1ZSk7XG4gICAgICB0aGlzLl9zZW5kaW5nID0gdGhpcy5fYWN0aXZlID0gMDtcbiAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdCh0aGlzKTtcbiAgICAgIHRoaXMuX2luaXRFdmVudEhhbmRsZXJzKCk7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyB0byBxdWVyeVxuICAgIC8vIHRoZSBudW1iZXIgb2YgYWN0aXZlIHVwbG9hZHM6XG4gICAgYWN0aXZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH0sXG5cbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBleHBvc2VkIHRvIHRoZSB3aWRnZXQgQVBJIGFuZCBhbGxvd3MgdG8gcXVlcnlcbiAgICAvLyB0aGUgd2lkZ2V0IHVwbG9hZCBwcm9ncmVzcy5cbiAgICAvLyBJdCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGxvYWRlZCwgdG90YWwgYW5kIGJpdHJhdGUgcHJvcGVydGllc1xuICAgIC8vIGZvciB0aGUgcnVubmluZyB1cGxvYWRzOlxuICAgIHByb2dyZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyBhZGRpbmcgZmlsZXNcbiAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxuICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIHByb3BlcnR5IGFuZCBjYW4gY29udGFpbiBhZGRpdGlvbmFsIG9wdGlvbnM6XG4gICAgLy8gLmZpbGV1cGxvYWQoJ2FkZCcsIHtmaWxlczogZmlsZXNMaXN0fSk7XG4gICAgYWRkOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgaWYgKCFkYXRhIHx8IHRoaXMub3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5maWxlSW5wdXQgJiYgIWRhdGEuZmlsZXMpIHtcbiAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7XG4gICAgICAgICAgdGhhdC5fb25BZGQobnVsbCwgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5maWxlcyA9ICQubWFrZUFycmF5KGRhdGEuZmlsZXMpO1xuICAgICAgICB0aGlzLl9vbkFkZChudWxsLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIHNlbmRpbmcgZmlsZXNcbiAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxuICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIG9yIGZpbGVJbnB1dCBwcm9wZXJ0eSBhbmQgY2FuIGNvbnRhaW4gYWRkaXRpb25hbCBvcHRpb25zOlxuICAgIC8vIC5maWxldXBsb2FkKCdzZW5kJywge2ZpbGVzOiBmaWxlc0xpc3R9KTtcbiAgICAvLyBUaGUgbWV0aG9kIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBmb3IgdGhlIGZpbGUgdXBsb2FkIGNhbGwuXG4gICAgc2VuZDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhICYmICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKGRhdGEuZmlsZUlucHV0ICYmICFkYXRhLmZpbGVzKSB7XG4gICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCksXG4gICAgICAgICAgICBqcVhIUixcbiAgICAgICAgICAgIGFib3J0ZWQ7XG4gICAgICAgICAgcHJvbWlzZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGpxWEhSKSB7XG4gICAgICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGZkLnJlamVjdChudWxsLCAnYWJvcnQnLCAnYWJvcnQnKTtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICAgIGlmIChhYm9ydGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGRmZC5yZWplY3QoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgICAganFYSFIgPSB0aGF0Ll9vblNlbmQobnVsbCwgZGF0YSk7XG4gICAgICAgICAgICBqcVhIUi50aGVuKFxuICAgICAgICAgICAgICBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUikge1xuICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgZGZkLnJlamVjdChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmZpbGVzID0gJC5tYWtlQXJyYXkoZGF0YS5maWxlcyk7XG4gICAgICAgIGlmIChkYXRhLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9vblNlbmQobnVsbCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9nZXRYSFJQcm9taXNlKGZhbHNlLCBkYXRhICYmIGRhdGEuY29udGV4dCk7XG4gICAgfVxuICB9KTtcbn0pO1xuIiwiLypcbiAqIGpRdWVyeSBJZnJhbWUgVHJhbnNwb3J0IFBsdWdpblxuICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkXG4gKlxuICogQ29weXJpZ2h0IDIwMTEsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICovXG5cbi8qIGdsb2JhbCBkZWZpbmUsIHJlcXVpcmUgKi9cblxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBBTUQgbW9kdWxlOlxuICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFsczpcbiAgICBmYWN0b3J5KHdpbmRvdy5qUXVlcnkpO1xuICB9XG59KShmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gSGVscGVyIHZhcmlhYmxlIHRvIGNyZWF0ZSB1bmlxdWUgbmFtZXMgZm9yIHRoZSB0cmFuc3BvcnQgaWZyYW1lczpcbiAgdmFyIGNvdW50ZXIgPSAwLFxuICAgIGpzb25BUEkgPSAkLFxuICAgIGpzb25QYXJzZSA9ICdwYXJzZUpTT04nO1xuXG4gIGlmICgnSlNPTicgaW4gd2luZG93ICYmICdwYXJzZScgaW4gSlNPTikge1xuICAgIGpzb25BUEkgPSBKU09OO1xuICAgIGpzb25QYXJzZSA9ICdwYXJzZSc7XG4gIH1cblxuICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCBhY2NlcHRzIGZvdXIgYWRkaXRpb25hbCBvcHRpb25zOlxuICAvLyBvcHRpb25zLmZpbGVJbnB1dDogYSBqUXVlcnkgY29sbGVjdGlvbiBvZiBmaWxlIGlucHV0IGZpZWxkc1xuICAvLyBvcHRpb25zLnBhcmFtTmFtZTogdGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgZmlsZSBmb3JtIGRhdGEsXG4gIC8vICBvdmVycmlkZXMgdGhlIG5hbWUgcHJvcGVydHkgb2YgdGhlIGZpbGUgaW5wdXQgZmllbGQocyksXG4gIC8vICBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAgLy8gb3B0aW9ucy5mb3JtRGF0YTogYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIG5hbWUgYW5kIHZhbHVlIHByb3BlcnRpZXMsXG4gIC8vICBlcXVpdmFsZW50IHRvIHRoZSByZXR1cm4gZGF0YSBvZiAuc2VyaWFsaXplQXJyYXkoKSwgZS5nLjpcbiAgLy8gIFt7bmFtZTogJ2EnLCB2YWx1ZTogMX0sIHtuYW1lOiAnYicsIHZhbHVlOiAyfV1cbiAgLy8gb3B0aW9ucy5pbml0aWFsSWZyYW1lU3JjOiB0aGUgVVJMIG9mIHRoZSBpbml0aWFsIGlmcmFtZSBzcmMsXG4gIC8vICBieSBkZWZhdWx0IHNldCB0byBcImphdmFzY3JpcHQ6ZmFsc2U7XCJcbiAgJC5hamF4VHJhbnNwb3J0KCdpZnJhbWUnLCBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmFzeW5jKSB7XG4gICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGluaXRpYWwgaWZyYW1lIHNyY1xuICAgICAgLy8gcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2OlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNjcmlwdC11cmxcbiAgICAgIHZhciBpbml0aWFsSWZyYW1lU3JjID0gb3B0aW9ucy5pbml0aWFsSWZyYW1lU3JjIHx8ICdqYXZhc2NyaXB0OmZhbHNlOycsXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlmcmFtZSxcbiAgICAgICAgYWRkUGFyYW1DaGFyO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VuZDogZnVuY3Rpb24gKF8sIGNvbXBsZXRlQ2FsbGJhY2spIHtcbiAgICAgICAgICBmb3JtID0gJCgnPGZvcm0gc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9mb3JtPicpO1xuICAgICAgICAgIGZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnLCBvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KTtcbiAgICAgICAgICBhZGRQYXJhbUNoYXIgPSAvXFw/Ly50ZXN0KG9wdGlvbnMudXJsKSA/ICcmJyA6ICc/JztcbiAgICAgICAgICAvLyBYRG9tYWluUmVxdWVzdCBvbmx5IHN1cHBvcnRzIEdFVCBhbmQgUE9TVDpcbiAgICAgICAgICBpZiAob3B0aW9ucy50eXBlID09PSAnREVMRVRFJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPURFTEVURSc7XG4gICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09ICdQVVQnKSB7XG4gICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsICsgYWRkUGFyYW1DaGFyICsgJ19tZXRob2Q9UFVUJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ1BBVENIJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPVBBVENIJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSUUgdmVyc2lvbnMgYmVsb3cgSUU4IGNhbm5vdCBzZXQgdGhlIG5hbWUgcHJvcGVydHkgb2ZcbiAgICAgICAgICAvLyBlbGVtZW50cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBET00sXG4gICAgICAgICAgLy8gc28gd2Ugc2V0IHRoZSBuYW1lIGFsb25nIHdpdGggdGhlIGlmcmFtZSBIVE1MIG1hcmt1cDpcbiAgICAgICAgICBjb3VudGVyICs9IDE7XG4gICAgICAgICAgaWZyYW1lID0gJChcbiAgICAgICAgICAgICc8aWZyYW1lIHNyYz1cIicgK1xuICAgICAgICAgICAgICBpbml0aWFsSWZyYW1lU3JjICtcbiAgICAgICAgICAgICAgJ1wiIG5hbWU9XCJpZnJhbWUtdHJhbnNwb3J0LScgK1xuICAgICAgICAgICAgICBjb3VudGVyICtcbiAgICAgICAgICAgICAgJ1wiPjwvaWZyYW1lPidcbiAgICAgICAgICApLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGZpbGVJbnB1dENsb25lcyxcbiAgICAgICAgICAgICAgcGFyYW1OYW1lcyA9ICQuaXNBcnJheShvcHRpb25zLnBhcmFtTmFtZSlcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMucGFyYW1OYW1lXG4gICAgICAgICAgICAgICAgOiBbb3B0aW9ucy5wYXJhbU5hbWVdO1xuICAgICAgICAgICAgaWZyYW1lLm9mZignbG9hZCcpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgcmVzcG9uc2U7XG4gICAgICAgICAgICAgIC8vIFdyYXAgaW4gYSB0cnkvY2F0Y2ggYmxvY2sgdG8gY2F0Y2ggZXhjZXB0aW9ucyB0aHJvd25cbiAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gYWNjZXNzIGNyb3NzLWRvbWFpbiBpZnJhbWUgY29udGVudHM6XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBpZnJhbWUuY29udGVudHMoKTtcbiAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lIGFuZCBGaXJlZm94IGRvIG5vdCB0aHJvdyBhblxuICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgaWZyYW1lLmNvbnRlbnRzKCkgb25cbiAgICAgICAgICAgICAgICAvLyBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNvIHdlIHVuaWZ5IHRoZSByZXNwb25zZTpcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmxlbmd0aCB8fCAhcmVzcG9uc2VbMF0uZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gVGhlIGNvbXBsZXRlIGNhbGxiYWNrIHJldHVybnMgdGhlXG4gICAgICAgICAgICAgIC8vIGlmcmFtZSBjb250ZW50IGRvY3VtZW50IGFzIHJlc3BvbnNlIG9iamVjdDpcbiAgICAgICAgICAgICAgY29tcGxldGVDYWxsYmFjaygyMDAsICdzdWNjZXNzJywgeyBpZnJhbWU6IHJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAvLyBGaXggZm9yIElFIGVuZGxlc3MgcHJvZ3Jlc3MgYmFyIGFjdGl2aXR5IGJ1Z1xuICAgICAgICAgICAgICAvLyAoaGFwcGVucyBvbiBmb3JtIHN1Ym1pdHMgdG8gaWZyYW1lIHRhcmdldHMpOlxuICAgICAgICAgICAgICAkKCc8aWZyYW1lIHNyYz1cIicgKyBpbml0aWFsSWZyYW1lU3JjICsgJ1wiPjwvaWZyYW1lPicpLmFwcGVuZFRvKFxuICAgICAgICAgICAgICAgIGZvcm1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92aW5nIHRoZSBmb3JtIGluIGEgc2V0VGltZW91dCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYWxsb3dzIENocm9tZSdzIGRldmVsb3BlciB0b29scyB0byBkaXNwbGF5XG4gICAgICAgICAgICAgICAgLy8gdGhlIHJlc3BvbnNlIHJlc3VsdFxuICAgICAgICAgICAgICAgIGZvcm0ucmVtb3ZlKCk7XG4gICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JtXG4gICAgICAgICAgICAgIC5wcm9wKCd0YXJnZXQnLCBpZnJhbWUucHJvcCgnbmFtZScpKVxuICAgICAgICAgICAgICAucHJvcCgnYWN0aW9uJywgb3B0aW9ucy51cmwpXG4gICAgICAgICAgICAgIC5wcm9wKCdtZXRob2QnLCBvcHRpb25zLnR5cGUpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybURhdGEpIHtcbiAgICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChpbmRleCwgZmllbGQpIHtcbiAgICAgICAgICAgICAgICAkKCc8aW5wdXQgdHlwZT1cImhpZGRlblwiLz4nKVxuICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBmaWVsZC5uYW1lKVxuICAgICAgICAgICAgICAgICAgLnZhbChmaWVsZC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhmb3JtKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ICYmXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPT09ICdQT1NUJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpbGVJbnB1dENsb25lcyA9IG9wdGlvbnMuZmlsZUlucHV0LmNsb25lKCk7XG4gICAgICAgICAgICAgIC8vIEluc2VydCBhIGNsb25lIGZvciBlYWNoIGZpbGUgaW5wdXQgZmllbGQ6XG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0LmFmdGVyKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWxlSW5wdXRDbG9uZXNbaW5kZXhdO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICQodGhpcykucHJvcCgnbmFtZScsIHBhcmFtTmFtZXNbaW5kZXhdIHx8IG9wdGlvbnMucGFyYW1OYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBBcHBlbmRpbmcgdGhlIGZpbGUgaW5wdXQgZmllbGRzIHRvIHRoZSBoaWRkZW4gZm9ybVxuICAgICAgICAgICAgICAvLyByZW1vdmVzIHRoZW0gZnJvbSB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbjpcbiAgICAgICAgICAgICAgZm9ybVxuICAgICAgICAgICAgICAgIC5hcHBlbmQob3B0aW9ucy5maWxlSW5wdXQpXG4gICAgICAgICAgICAgICAgLnByb3AoJ2VuY3R5cGUnLCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpXG4gICAgICAgICAgICAgICAgLy8gZW5jdHlwZSBtdXN0IGJlIHNldCBhcyBlbmNvZGluZyBmb3IgSUU6XG4gICAgICAgICAgICAgICAgLnByb3AoJ2VuY29kaW5nJywgJ211bHRpcGFydC9mb3JtLWRhdGEnKTtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBIVE1MNSBmb3JtIGF0dHJpYnV0ZSBmcm9tIHRoZSBpbnB1dChzKTpcbiAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQucmVtb3ZlQXR0cignZm9ybScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAvLyBTdWJtaXR0aW5nIHRoZSBmb3JtIGluIGEgc2V0VGltZW91dCBjYWxsIGZpeGVzIGFuIGlzc3VlIHdpdGhcbiAgICAgICAgICAgICAgLy8gU2FmYXJpIDEzIG5vdCB0cmlnZ2VyaW5nIHRoZSBpZnJhbWUgbG9hZCBldmVudCBhZnRlciByZXNldHRpbmdcbiAgICAgICAgICAgICAgLy8gdGhlIGxvYWQgZXZlbnQgaGFuZGxlciwgc2VlIGFsc286XG4gICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9pc3N1ZXMvMzYzM1xuICAgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpO1xuICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIGZpbGUgaW5wdXQgZmllbGRzIGF0IHRoZWlyIG9yaWdpbmFsIGxvY2F0aW9uXG4gICAgICAgICAgICAgIC8vIGJ5IHJlcGxhY2luZyB0aGUgY2xvbmVzIHdpdGggdGhlIG9yaWdpbmFsczpcbiAgICAgICAgICAgICAgaWYgKGZpbGVJbnB1dENsb25lcyAmJiBmaWxlSW5wdXRDbG9uZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGlucHV0KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY2xvbmUgPSAkKGZpbGVJbnB1dENsb25lc1tpbmRleF0pO1xuICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgbmFtZSBhbmQgZm9ybSBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgICAgJChpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBjbG9uZS5wcm9wKCduYW1lJykpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdmb3JtJywgY2xvbmUuYXR0cignZm9ybScpKTtcbiAgICAgICAgICAgICAgICAgIGNsb25lLnJlcGxhY2VXaXRoKGlucHV0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoaWZyYW1lKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoaWZyYW1lKSB7XG4gICAgICAgICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGlmcmFtZSBzcmMgYWJvcnRzIHRoZSByZXF1ZXN0XG4gICAgICAgICAgICAvLyBhbmQgcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2LlxuICAgICAgICAgICAgaWZyYW1lLm9mZignbG9hZCcpLnByb3AoJ3NyYycsIGluaXRpYWxJZnJhbWVTcmMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgZm9ybS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCByZXR1cm5zIHRoZSBpZnJhbWUgY29udGVudCBkb2N1bWVudCBhcyByZXNwb25zZS5cbiAgLy8gVGhlIGZvbGxvd2luZyBhZGRzIGNvbnZlcnRlcnMgZnJvbSBpZnJhbWUgdG8gdGV4dCwganNvbiwgaHRtbCwgeG1sXG4gIC8vIGFuZCBzY3JpcHQuXG4gIC8vIFBsZWFzZSBub3RlIHRoYXQgdGhlIENvbnRlbnQtVHlwZSBmb3IgSlNPTiByZXNwb25zZXMgaGFzIHRvIGJlIHRleHQvcGxhaW5cbiAgLy8gb3IgdGV4dC9odG1sLCBpZiB0aGUgYnJvd3NlciBkb2Vzbid0IGluY2x1ZGUgYXBwbGljYXRpb24vanNvbiBpbiB0aGVcbiAgLy8gQWNjZXB0IGhlYWRlciwgZWxzZSBJRSB3aWxsIHNob3cgYSBkb3dubG9hZCBkaWFsb2cuXG4gIC8vIFRoZSBDb250ZW50LVR5cGUgZm9yIFhNTCByZXNwb25zZXMgb24gdGhlIG90aGVyIGhhbmQgaGFzIHRvIGJlIGFsd2F5c1xuICAvLyBhcHBsaWNhdGlvbi94bWwgb3IgdGV4dC94bWwsIHNvIElFIHByb3Blcmx5IHBhcnNlcyB0aGUgWE1MIHJlc3BvbnNlLlxuICAvLyBTZWUgYWxzb1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvd2lraS9TZXR1cCNjb250ZW50LXR5cGUtbmVnb3RpYXRpb25cbiAgJC5hamF4U2V0dXAoe1xuICAgIGNvbnZlcnRlcnM6IHtcbiAgICAgICdpZnJhbWUgdGV4dCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSBqc29uJzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmIGpzb25BUElbanNvblBhcnNlXSgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgaHRtbCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS5odG1sKCk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSB4bWwnOiBmdW5jdGlvbiAoaWZyYW1lKSB7XG4gICAgICAgIHZhciB4bWxEb2MgPSBpZnJhbWUgJiYgaWZyYW1lWzBdO1xuICAgICAgICByZXR1cm4geG1sRG9jICYmICQuaXNYTUxEb2MoeG1sRG9jKVxuICAgICAgICAgID8geG1sRG9jXG4gICAgICAgICAgOiAkLnBhcnNlWE1MKFxuICAgICAgICAgICAgICAoeG1sRG9jLlhNTERvY3VtZW50ICYmIHhtbERvYy5YTUxEb2N1bWVudC54bWwpIHx8XG4gICAgICAgICAgICAgICAgJCh4bWxEb2MuYm9keSkuaHRtbCgpXG4gICAgICAgICAgICApO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgc2NyaXB0JzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmICQuZ2xvYmFsRXZhbCgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59KTtcbiIsImZ1bmN0aW9uIHJhbmRvbVVVSUQoKSB7XHJcbiAgICBpZiAodHlwZW9mIGNyeXB0byA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGNyeXB0by5yYW5kb21VVUlEID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChbMWU3XSArIC0xZTMgKyAtNGUzICsgLThlMyArIC0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBjID0+XHJcbiAgICAgICAgKGMgXiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSAmIDE1ID4+IGMgLyA0KS50b1N0cmluZygxNilcclxuICAgICk7XHJcbn1cclxuIiwidmFyIGluaXRpYWxpemVkO1xyXG52YXIgbWVkaWFBcHA7XHJcblxyXG52YXIgYnVzID0gbmV3IFZ1ZSgpO1xyXG5cclxuZnVuY3Rpb24gaW5pdGlhbGl6ZU1lZGlhQXBwbGljYXRpb24oZGlzcGxheU1lZGlhQXBwbGljYXRpb24sIG1lZGlhQXBwbGljYXRpb25VcmwsIHBhdGhCYXNlKSB7XHJcblxyXG4gICAgaWYgKGluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIW1lZGlhQXBwbGljYXRpb25VcmwpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdtZWRpYUFwcGxpY2F0aW9uVXJsIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB1cmw6IG1lZGlhQXBwbGljYXRpb25VcmwsXHJcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoY29udGVudCkge1xyXG4gICAgICAgICAgICAkKCcudGEtY29udGVudCcpLmFwcGVuZChjb250ZW50KTtcclxuXHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoJ21lZGlhYXBwbGljYXRpb246cmVhZHknKTtcclxuXHJcbiAgICAgICAgICAgIHZhciByb290ID0ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJCgnI3QtbWVkaWFMaWJyYXJ5JykudGV4dCgpLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogJycsXHJcbiAgICAgICAgICAgICAgICBmb2xkZXI6ICcnLFxyXG4gICAgICAgICAgICAgICAgaXNEaXJlY3Rvcnk6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG1lZGlhQXBwID0gbmV3IFZ1ZSh7XHJcbiAgICAgICAgICAgICAgICBlbDogJyNtZWRpYUFwcCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGb2xkZXI6IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhSXRlbXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTWVkaWFzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyYWdEcm9wVGh1bWJuYWlsOiBuZXcgSW1hZ2UoKSxcclxuICAgICAgICAgICAgICAgICAgICBzbWFsbFRodW1iczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZ3JpZFZpZXc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmlsdGVyOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBzb3J0Qnk6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvcnRBc2M6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNJblBhZ2U6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kcmFnRHJvcFRodW1ibmFpbC5zcmMgPSAocGF0aEJhc2UgfHwgJycpICsgJy9PcmNoYXJkQ29yZS5NZWRpYS9JbWFnZXMvZHJhZy10aHVtYm5haWwucG5nJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignZm9sZGVyU2VsZWN0ZWQnLCBmdW5jdGlvbiAoZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRGb2xkZXIgPSBmb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2ZvbGRlckRlbGV0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0Um9vdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdmb2xkZXJBZGRlZCcsIGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEZvbGRlciA9IGZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVyLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignbWVkaWFMaXN0TW92ZWQnLCBmdW5jdGlvbiAoZXJyb3JJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZEZvbGRlcihzZWxmLnNlbGVjdGVkRm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ySW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcnMucHVzaChlcnJvckluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhUmVuYW1lZCcsIGZ1bmN0aW9uIChuZXdOYW1lLCBuZXdQYXRoLCBvbGRQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYSA9IHNlbGYubWVkaWFJdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm1lZGlhUGF0aCA9PT0gb2xkUGF0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlbMF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYS5tZWRpYVBhdGggPSBuZXdQYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYS5uYW1lID0gbmV3TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignY3JlYXRlRm9sZGVyUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlRm9sZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2RlbGV0ZUZvbGRlclJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0ZUZvbGRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBjb21tb24gaGFuZGxlcnMgZm9yIGFjdGlvbnMgaW4gYm90aCBncmlkIGFuZCB0YWJsZSB2aWV3LlxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ3NvcnRDaGFuZ2VSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZVNvcnQobmV3U29ydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhVG9nZ2xlUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ3JlbmFtZU1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVuYW1lTWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdkZWxldGVNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0ZU1lZGlhSXRlbShtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhRHJhZ1N0YXJ0UmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlRHJhZ1N0YXJ0KG1lZGlhLCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZXIgZm9yIHBhZ2VyIGV2ZW50c1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ3BhZ2VyRXZlbnQnLCBmdW5jdGlvbiAoaXRlbXNJblBhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pdGVtc0luUGFnZSA9IGl0ZW1zSW5QYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhQXBwbGljYXRpb25QcmVmcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRGb2xkZXIgPSByb290O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRQcmVmcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhQXBwbGljYXRpb25QcmVmcycpKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzSG9tZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZvbGRlciA9PSByb290O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRGb2xkZXIgPSB0aGlzLnNlbGVjdGVkRm9sZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50Rm9sZGVyICYmIHBhcmVudEZvbGRlci5wYXRoICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnVuc2hpZnQocGFyZW50Rm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IHBhcmVudEZvbGRlci5wYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByb290OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRNZWRpYUl0ZW1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IHNlbGYubWVkaWFJdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlbGYubWVkaWFGaWx0ZXIudG9Mb3dlckNhc2UoKSkgPiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzZWxmLnNvcnRCeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2l6ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5zaXplIC0gYi5zaXplIDogYi5zaXplIC0gYS5zaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWltZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5taW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLm1pbWUudG9Mb3dlckNhc2UoKSkgOiBiLm1pbWUudG9Mb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKGEubWltZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xhc3RNb2RpZnknOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ydEFzYyA/IGEubGFzdE1vZGlmeSAtIGIubGFzdE1vZGlmeSA6IGIubGFzdE1vZGlmeSAtIGEubGFzdE1vZGlmeTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5uYW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLm5hbWUudG9Mb3dlckNhc2UoKSkgOiBiLm5hbWUudG9Mb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKGEubmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ291bnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubWVkaWFJdGVtcy5sZW5ndGggLSB0aGlzLmZpbHRlcmVkTWVkaWFJdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0aHVtYlNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc21hbGxUaHVtYnMgPyAxMDAgOiAyNDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJlZnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsVGh1bWJzOiB0aGlzLnNtYWxsVGh1bWJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRm9sZGVyOiB0aGlzLnNlbGVjdGVkRm9sZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRWaWV3OiB0aGlzLmdyaWRWaWV3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYWxsVGh1bWJzID0gbmV3UHJlZnMuc21hbGxUaHVtYnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbmV3UHJlZnMuc2VsZWN0ZWRGb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRWaWV3ID0gbmV3UHJlZnMuZ3JpZFZpZXc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgd2F0Y2g6IHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJlZnM6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbWVkaWFBcHBsaWNhdGlvblByZWZzJywgSlNPTi5zdHJpbmdpZnkobmV3UHJlZnMpKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRm9sZGVyOiBmdW5jdGlvbiAobmV3Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFGaWx0ZXIgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5ld0ZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkRm9sZGVyKG5ld0ZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmcy5yb290Rm9sZGVyLnRvZ2dsZSgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRVcmw6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmxWYWx1ZSA9ICQoJyN1cGxvYWRGaWxlcycpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybFZhbHVlICsgKHVybFZhbHVlLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyBcInBhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5zZWxlY3RlZEZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdFJvb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IHRoaXMucm9vdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRGb2xkZXI6IGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVVybCA9ICQoJyNnZXRNZWRpYUl0ZW1zVXJsJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbWVkaWFVcmwgKyAobWVkaWFVcmwuaW5kZXhPZignPycpID09IC0xID8gJz8nIDogJyYnKSArIFwicGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChmb2xkZXIucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3J0QnkgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvcnRBc2MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgbG9hZGluZyBmb2xkZXI6JyArIGZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdFJvb3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnB1c2godGhpcy5maWx0ZXJlZE1lZGlhSXRlbXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB1blNlbGVjdEFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBpbnZlcnRTZWxlY3Rpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpbHRlcmVkTWVkaWFJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zW2ldKSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaCh0aGlzLmZpbHRlcmVkTWVkaWFJdGVtc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IHRlbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKG1lZGlhKSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnNwbGljZSh0aGlzLnNlbGVjdGVkTWVkaWFzLmluZGV4T2YobWVkaWEpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMucHVzaChtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTWVkaWFTZWxlY3RlZDogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlbGVjdGVkTWVkaWFzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudXJsLnRvTG93ZXJDYXNlKCkgPT09IG1lZGlhLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZGVyID0gdGhpcy5zZWxlY3RlZEZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcm9vdCBmb2xkZXIgY2FuJ3QgYmUgZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZGVyID09IHRoaXMucm9vdC5tb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtRGlhbG9nKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiQoXCIjZGVsZXRlRm9sZGVyXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI2RlbGV0ZUZvbGRlclVybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChmb2xkZXIucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnZGVsZXRlRm9sZGVyJywgZm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRm9sZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjY3JlYXRlRm9sZGVyTW9kYWwnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NyZWF0ZUZvbGRlck1vZGFsIC5tb2RhbC1ib2R5IGlucHV0JykudmFsKCcnKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuYW1lTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjcmVuYW1lTWVkaWFNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjb2xkLWl0ZW0tbmFtZScpLnZhbChtZWRpYS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWwgLm1vZGFsLWJvZHkgaW5wdXQnKS52YWwobWVkaWEubmFtZSkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVNZWRpYSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlTWVkaWFMaXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYUxpc3QgPSB0aGlzLnNlbGVjdGVkTWVkaWFzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVkaWFMaXN0Lmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybURpYWxvZyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4kKFwiI2RlbGV0ZU1lZGlhXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdGhzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKG1lZGlhTGlzdFtpXS5tZWRpYVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjZGVsZXRlTWVkaWFMaXN0VXJsJykudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHBhdGhzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuc2VsZWN0ZWRNZWRpYXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc2VsZi5tZWRpYUl0ZW1zICYmIHNlbGYubWVkaWFJdGVtcy5pbmRleE9mKHNlbGYuc2VsZWN0ZWRNZWRpYXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhRGVsZXRlZCcsIHNlbGYuc2VsZWN0ZWRNZWRpYXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlTWVkaWFJdGVtOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1EaWFsb2coe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uJChcIiNkZWxldGVNZWRpYVwiKS5kYXRhKCksIGNhbGxiYWNrOiBmdW5jdGlvbiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNkZWxldGVNZWRpYVVybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChtZWRpYS5tZWRpYVBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBzZWxmLm1lZGlhSXRlbXMgJiYgc2VsZi5tZWRpYUl0ZW1zLmluZGV4T2YobWVkaWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEZWxldGVkJywgbWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3NlbGYuc2VsZWN0ZWRNZWRpYSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZURyYWdTdGFydDogZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IHBhcnQgb2YgbW92ZSBtZWRpYSB0byBmb2xkZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIGZvbGRlciBjb21wb25lbnQgb24gZHJvcCBldmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFOYW1lcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhTmFtZXMucHVzaChpdGVtLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIGNhc2UgdGhlIHVzZXIgZHJhZ3MgYW4gdW5zZWxlY3RlZCBpdGVtLCB3ZSBzZWxlY3QgaXQgZmlyc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKG1lZGlhKSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFOYW1lcy5wdXNoKG1lZGlhLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcy5wdXNoKG1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgnbWVkaWFOYW1lcycsIEpTT04uc3RyaW5naWZ5KG1lZGlhTmFtZXMpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgnc291cmNlRm9sZGVyJywgdGhpcy5zZWxlY3RlZEZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKHRoaXMuZHJhZ0Ryb3BUaHVtYm5haWwsIDEwLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAnbW92ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVTY3JvbGxXaGlsZURyYWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmNsaWVudFkgPCAxNTApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAtMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jbGllbnRZID4gd2luZG93LmlubmVySGVpZ2h0IC0gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsQnkoMCwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VTb3J0OiBmdW5jdGlvbiAobmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3J0QnkgPT0gbmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0QXNjID0gIXRoaXMuc29ydEFzYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydEFzYyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRCeSA9IG5ld1NvcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI2NyZWF0ZS1mb2xkZXItbmFtZScpLmtleXByZXNzKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gZS53aGljaDtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gMTMpIHsgIC8vIHRoZSBlbnRlciBrZXkgY29kZVxyXG4gICAgICAgICAgICAgICAgICAgICQoJyNtb2RhbEZvb3Rlck9rJykuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI21vZGFsRm9vdGVyT2snKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSAkKCcjY3JlYXRlLWZvbGRlci1uYW1lJykudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNjcmVhdGVGb2xkZXJVcmwnKS52YWwoKSArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQobWVkaWFBcHAuc2VsZWN0ZWRGb2xkZXIucGF0aCkgKyBcIiZuYW1lPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ2FkZEZvbGRlcicsIG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gYm9vdHN0cmFwLk1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoJCgnI2NyZWF0ZUZvbGRlck1vZGFsJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gSlNPTi5wYXJzZShlcnJvci5yZXNwb25zZVRleHQpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+PC9kaXY+JykudGV4dChlcnJvck1lc3NhZ2UpLmFwcGVuZFRvKCQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWxGb290ZXJPaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3TmFtZSA9ICQoJyNuZXctaXRlbS1uYW1lJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2xkTmFtZSA9ICQoJyNvbGQtaXRlbS1uYW1lJykudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5ld05hbWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRGb2xkZXIgPSBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlci5wYXRoICsgXCIvXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvbGRlciA9PT0gXCIvXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9sZGVyID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3UGF0aCA9IGN1cnJlbnRGb2xkZXIgKyBuZXdOYW1lO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9sZFBhdGggPSBjdXJyZW50Rm9sZGVyICsgb2xkTmFtZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobmV3UGF0aC50b0xvd2VyQ2FzZSgpID09PSBvbGRQYXRoLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjcmVuYW1lTWVkaWFNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjcmVuYW1lTWVkaWFVcmwnKS52YWwoKSArIFwiP29sZFBhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob2xkUGF0aCkgKyBcIiZuZXdQYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG5ld1BhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjcmVuYW1lTWVkaWFNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhUmVuYW1lZCcsIG5ld05hbWUsIG5ld1BhdGgsIG9sZFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gSlNPTi5wYXJzZShlcnJvci5yZXNwb25zZVRleHQpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+PC9kaXY+JykudGV4dChlcnJvck1lc3NhZ2UpLmFwcGVuZFRvKCQoJyNyZW5hbWVNZWRpYU1vZGFsLWVycm9ycycpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGlzcGxheU1lZGlhQXBwbGljYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZWRpYUFwcCcpLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCdtZWRpYUFwcDpyZWFkeScpO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbiIsIiQoZG9jdW1lbnQpLm9uKCdtZWRpYUFwcDpyZWFkeScsIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBjaHVua2VkRmlsZVVwbG9hZElkID0gcmFuZG9tVVVJRCgpO1xyXG5cclxuICAgICQoJyNmaWxldXBsb2FkJylcclxuICAgICAgICAuZmlsZXVwbG9hZCh7XHJcbiAgICAgICAgICAgIGRyb3Bab25lOiAkKCcjbWVkaWFBcHAnKSxcclxuICAgICAgICAgICAgbGltaXRDb25jdXJyZW50VXBsb2FkczogMjAsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgIHVybDogJCgnI3VwbG9hZEZpbGVzJykudmFsKCksXHJcbiAgICAgICAgICAgIG1heENodW5rU2l6ZTogTnVtYmVyKCQoJyNtYXhVcGxvYWRDaHVua1NpemUnKS52YWwoKSB8fCAwKSxcclxuICAgICAgICAgICAgZm9ybURhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhbnRpRm9yZ2VyeVRva2VuID0gJChcImlucHV0W25hbWU9X19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW5dXCIpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAncGF0aCcsIHZhbHVlOiBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlci5wYXRoIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nLCB2YWx1ZTogYW50aUZvcmdlcnlUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ19fY2h1bmtlZEZpbGVVcGxvYWRJZCcsIHZhbHVlOiBjaHVua2VkRmlsZVVwbG9hZElkIH0sXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAkLmVhY2goZGF0YS5yZXN1bHQuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUFwcC5tZWRpYUl0ZW1zLnB1c2goZmlsZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgKGUsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgbGV0IGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdO1xyXG4gICAgICAgICAgICAvLyBIZXJlIHdlIHJlcGxhY2UgdGhlIGJsb2Igd2l0aCBhIEZpbGUgb2JqZWN0IHRvIGVuc3VyZSB0aGUgZmlsZSBuYW1lIGFuZCBvdGhlcnMgYXJlIHByZXNlcnZlZCBmb3IgdGhlIGJhY2tlbmQuXHJcbiAgICAgICAgICAgIG9wdGlvbnMuYmxvYiA9IG5ldyBGaWxlKFxyXG4gICAgICAgICAgICAgICAgW29wdGlvbnMuYmxvYl0sXHJcbiAgICAgICAgICAgICAgICBmaWxlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxufSk7XHJcblxyXG5cclxuJChkb2N1bWVudCkuYmluZCgnZHJhZ292ZXInLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgdmFyIGR0ID0gZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcclxuICAgIGlmIChkdC50eXBlcyAmJiAoZHQudHlwZXMuaW5kZXhPZiA/IGR0LnR5cGVzLmluZGV4T2YoJ0ZpbGVzJykgIT0gLTEgOiBkdC50eXBlcy5jb250YWlucygnRmlsZXMnKSkpIHtcclxuICAgICAgICB2YXIgZHJvcFpvbmUgPSAkKCcjY3VzdG9tZHJvcHpvbmUnKSxcclxuICAgICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5kcm9wWm9uZVRpbWVvdXQ7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRyb3Bab25lLmFkZENsYXNzKCdpbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaG92ZXJlZERyb3Bab25lID0gJChlLnRhcmdldCkuY2xvc2VzdChkcm9wWm9uZSk7XHJcbiAgICAgICAgd2luZG93LmRyb3Bab25lVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB3aW5kb3cuZHJvcFpvbmVUaW1lb3V0ID0gbnVsbDtcclxuICAgICAgICAgICAgZHJvcFpvbmUucmVtb3ZlQ2xhc3MoJ2luJyk7XHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDxmb2xkZXI+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdmb2xkZXInLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxsaSA6Y2xhc3M9XCJ7c2VsZWN0ZWQ6IGlzU2VsZWN0ZWR9XCIgXHJcbiAgICAgICAgICAgICAgICB2LW9uOmRyYWdsZWF2ZS5wcmV2ZW50ID0gXCJoYW5kbGVEcmFnTGVhdmUoJGV2ZW50KTtcIiBcclxuICAgICAgICAgICAgICAgIHYtb246ZHJhZ292ZXIucHJldmVudC5zdG9wPVwiaGFuZGxlRHJhZ092ZXIoJGV2ZW50KTtcIiBcclxuICAgICAgICAgICAgICAgIHYtb246ZHJvcC5wcmV2ZW50LnN0b3AgPSBcIm1vdmVNZWRpYVRvRm9sZGVyKG1vZGVsLCAkZXZlbnQpXCIgPlxyXG4gICAgICAgICAgICA8ZGl2IDpjbGFzcz1cIntmb2xkZXJob3ZlcmVkOiBpc0hvdmVyZWQgLCB0cmVlcm9vdDogbGV2ZWwgPT0gMX1cIiA+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgOnN0eWxlPVwieyBwYWRkaW5nJHtkb2N1bWVudC5kaXIgPT0gXCJsdHJcIiA/IFwiTGVmdFwiIDogXCJSaWdodFwifTpwYWRkaW5nICsgJ3B4JyB9XCIgdi1vbjpjbGljaz1cInNlbGVjdFwiICBkcmFnZ2FibGU9XCJmYWxzZVwiIGNsYXNzPVwiZm9sZGVyLW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiB2LW9uOmNsaWNrLnN0b3A9XCJ0b2dnbGVcIiBjbGFzcz1cImV4cGFuZFwiIDpjbGFzcz1cIntvcGVuZWQ6IG9wZW4sIGNsb3NlZDogIW9wZW4sIGVtcHR5OiBlbXB0eX1cIj48aSB2LWlmPVwib3BlblwiIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi0ke2RvY3VtZW50LmRpciA9PSBcImx0clwiID8gXCJyaWdodFwiIDogXCJsZWZ0XCJ9XCI+PC9pPjwvc3Bhbj4gXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb2xkZXItbmFtZSBtcy0yXCI+e3ttb2RlbC5uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGZvbGRlci1hY3Rpb25zXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdi1jbG9hayBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLXNtXCIgdi1vbjpjbGljaz1cImNyZWF0ZUZvbGRlclwiIHYtaWY9XCJpc1NlbGVjdGVkIHx8IGlzUm9vdFwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtcGx1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB2LWNsb2FrIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tc21cIiB2LW9uOmNsaWNrPVwiZGVsZXRlRm9sZGVyXCIgdi1pZj1cImlzU2VsZWN0ZWQgJiYgIWlzUm9vdFwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG9sIHYtc2hvdz1cIm9wZW5cIj5cclxuICAgICAgICAgICAgICAgIDxmb2xkZXIgdi1mb3I9XCJmb2xkZXIgaW4gY2hpbGRyZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwiZm9sZGVyLnBhdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6bW9kZWw9XCJmb2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6c2VsZWN0ZWQtaW4tbWVkaWEtYXBwPVwic2VsZWN0ZWRJbk1lZGlhQXBwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCI+XHJcbiAgICAgICAgICAgICAgICA8L2ZvbGRlcj5cclxuICAgICAgICAgICAgPC9vbD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIG1vZGVsOiBPYmplY3QsXHJcbiAgICAgICAgc2VsZWN0ZWRJbk1lZGlhQXBwOiBPYmplY3QsXHJcbiAgICAgICAgbGV2ZWw6IE51bWJlclxyXG4gICAgfSxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvcGVuOiBmYWxzZSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IG51bGwsIC8vIG5vdCBpbml0aWFsaXplZCBzdGF0ZSAoZm9yIGxhenktbG9hZGluZylcclxuICAgICAgICAgICAgcGFyZW50OiBudWxsLFxyXG4gICAgICAgICAgICBpc0hvdmVyZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBwYWRkaW5nOiAwXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgZW1wdHk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmNoaWxkcmVuIHx8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc1NlbGVjdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZEluTWVkaWFBcHAubmFtZSA9PSB0aGlzLm1vZGVsLm5hbWUpICYmICh0aGlzLnNlbGVjdGVkSW5NZWRpYUFwcC5wYXRoID09IHRoaXMubW9kZWwucGF0aCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc1Jvb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwucGF0aCA9PT0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoKHRoaXMuaXNSb290ID09IGZhbHNlKSAmJiAodGhpcy5pc0FuY2VzdG9yT2ZTZWxlY3RlZEZvbGRlcigpKSl7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBhZGRpbmcgPSB0aGlzLmxldmVsIDwgMyA/ICAxNiA6IDE2ICsgKHRoaXMubGV2ZWwgKiA4KTtcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGJ1cy4kb24oJ2RlbGV0ZUZvbGRlcicsIGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHNlbGYuY2hpbGRyZW4gJiYgc2VsZi5jaGlsZHJlbi5pbmRleE9mKGZvbGRlcilcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdmb2xkZXJEZWxldGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYnVzLiRvbignYWRkRm9sZGVyJywgZnVuY3Rpb24gKHRhcmdldCwgZm9sZGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLm1vZGVsID09IHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hpbGRyZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoaWxkcmVuLnB1c2goZm9sZGVyKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBmb2xkZXIucGFyZW50ID0gc2VsZi5tb2RlbDtcclxuICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnZm9sZGVyQWRkZWQnLCBmb2xkZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGlzQW5jZXN0b3JPZlNlbGVjdGVkRm9sZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyO1xyXG4gICAgICAgICAgICB3aGlsZSAocGFyZW50Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Rm9sZGVyLnBhdGggPT0gdGhpcy5tb2RlbC5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IHBhcmVudEZvbGRlci5wYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRvZ2dsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuICYmICF0aGlzLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdmb2xkZXJTZWxlY3RlZCcsIHRoaXMubW9kZWwpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRDaGlsZHJlbigpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY3JlYXRlRm9sZGVyOiBmdW5jdGlvbiAoKSB7ICAgICAgICAgICBcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdjcmVhdGVGb2xkZXJSZXF1ZXN0ZWQnKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZUZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ2RlbGV0ZUZvbGRlclJlcXVlc3RlZCcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbG9hZENoaWxkcmVuOiBmdW5jdGlvbiAoKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgaWYgKHRoaXMub3BlbiA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjZ2V0Rm9sZGVyc1VybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChzZWxmLm1vZGVsLnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbiA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGMucGFyZW50ID0gc2VsZi5tb2RlbDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW10cHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaGFuZGxlRHJhZ092ZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIb3ZlcmVkID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhbmRsZURyYWdMZWF2ZTogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hvdmVyZWQgPSBmYWxzZTsgICAgICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1vdmVNZWRpYVRvRm9sZGVyOiBmdW5jdGlvbiAoZm9sZGVyLCBlKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIHNlbGYuaXNIb3ZlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB2YXIgbWVkaWFOYW1lcyA9IEpTT04ucGFyc2UoZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgnbWVkaWFOYW1lcycpKTsgXHJcblxyXG4gICAgICAgICAgICBpZiAobWVkaWFOYW1lcy5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBzb3VyY2VGb2xkZXIgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCdzb3VyY2VGb2xkZXInKTtcclxuICAgICAgICAgICAgdmFyIHRhcmdldEZvbGRlciA9IGZvbGRlci5wYXRoO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZUZvbGRlciA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHNvdXJjZUZvbGRlciA9ICdyb290JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhcmdldEZvbGRlciA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldEZvbGRlciA9ICdyb290JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZUZvbGRlciA9PT0gdGFyZ2V0Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgkKCcjc2FtZUZvbGRlck1lc3NhZ2UnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbmZpcm1EaWFsb2coey4uLiQoXCIjbW92ZU1lZGlhXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI21vdmVNZWRpYUxpc3RVcmwnKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhTmFtZXM6IG1lZGlhTmFtZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGb2xkZXI6IHNvdXJjZUZvbGRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEZvbGRlcjogdGFyZ2V0Rm9sZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFMaXN0TW92ZWQnKTsgLy8gTWVkaWFBcHAgd2lsbCBsaXN0ZW4gdG8gdGhpcywgYW5kIHRoZW4gaXQgd2lsbCByZWxvYWQgcGFnZSBzbyB0aGUgbW92ZWQgbWVkaWFzIHdvbid0IGJlIHRoZXJlIGFueW1vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYUxpc3RNb3ZlZCcsIGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyA8bWVkaWEtaXRlbXMtZ3JpZD4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ21lZGlhLWl0ZW1zLWdyaWQnLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxvbCBjbGFzcz1cInJvdyBtZWRpYS1pdGVtcy1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgdi1mb3I9XCJtZWRpYSBpbiBmaWx0ZXJlZE1lZGlhSXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XCJtZWRpYS5uYW1lXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZWRpYS1pdGVtIG1lZGlhLWNvbnRhaW5lci1tYWluLWxpc3QtaXRlbSBjYXJkIHAtMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiB0aHVtYlNpemUgKyAyICsgJ3B4J31cIlxyXG4gICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIntzZWxlY3RlZDogaXNNZWRpYVNlbGVjdGVkKG1lZGlhKX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEobWVkaWEpXCJcclxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCIgdi1vbjpkcmFnc3RhcnQ9XCJkcmFnU3RhcnQobWVkaWEsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWItY29udGFpbmVyXCIgOnN0eWxlPVwie2hlaWdodDogdGh1bWJTaXplICsncHgnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHYtaWY9XCJtZWRpYS5taW1lLnN0YXJ0c1dpdGgoJ2ltYWdlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzcmM9XCJidWlsZE1lZGlhVXJsKG1lZGlhLnVybCwgdGh1bWJTaXplKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzdHlsZT1cInttYXhIZWlnaHQ6IHRodW1iU2l6ZSArJ3B4JywgbWF4V2lkdGg6IHRodW1iU2l6ZSArJ3B4J31cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSB2LWVsc2UgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLWZpbGUgZGlzcGxheS0xXCIgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4taXRlbS10aXRsZSBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtZW5kIGlubGluZS1tZWRpYS1idXR0b24gZWRpdC1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJyZW5hbWVNZWRpYShtZWRpYSlcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLWVkaXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiBkZWxldGUtYnV0dG9uXCIgdi1vbjpjbGljay5zdG9wPVwiZGVsZXRlTWVkaWEobWVkaWEpXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10cmFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPVwibWVkaWEudXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiB2aWV3LWJ1dHRvblwiXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1kb3dubG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVkaWEtZmlsZW5hbWUgY2FyZC10ZXh0IHNtYWxsXCIgOnRpdGxlPVwibWVkaWEubmFtZVwiPnt7IG1lZGlhLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L29sPlxyXG4gICAgICAgIGAsXHJcbiAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgVDoge31cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBmaWx0ZXJlZE1lZGlhSXRlbXM6IEFycmF5LFxyXG4gICAgICAgIHNlbGVjdGVkTWVkaWFzOiBBcnJheSxcclxuICAgICAgICB0aHVtYlNpemU6IE51bWJlclxyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gcmV0cmlldmluZyBsb2NhbGl6ZWQgc3RyaW5ncyBmcm9tIHZpZXdcclxuICAgICAgICBzZWxmLlQuZWRpdEJ1dHRvbiA9ICQoJyN0LWVkaXQtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmRlbGV0ZUJ1dHRvbiA9ICQoJyN0LWRlbGV0ZS1idXR0b24nKS52YWwoKTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgaXNNZWRpYVNlbGVjdGVkOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuc2VsZWN0ZWRNZWRpYXMuc29tZShmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC51cmwudG9Mb3dlckNhc2UoKSA9PT0gbWVkaWEudXJsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYnVpbGRNZWRpYVVybDogZnVuY3Rpb24gKHVybCwgdGh1bWJTaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1cmwgKyAodXJsLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyAnd2lkdGg9JyArIHRodW1iU2l6ZSArICcmaGVpZ2h0PScgKyB0aHVtYlNpemU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYVRvZ2dsZVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbmFtZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW5hbWVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdkZWxldGVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRyYWdTdGFydDogZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEcmFnU3RhcnRSZXF1ZXN0ZWQnLCBtZWRpYSwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gPG1lZGlhLWl0ZW1zLXRhYmxlPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgnbWVkaWEtaXRlbXMtdGFibGUnLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIG1lZGlhLWl0ZW1zLXRhYmxlIG0tMFwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJ0aHVtYm5haWwtY29sdW1uXCI+e3sgVC5pbWFnZUhlYWRlciB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgdi1vbjpjbGljaz1cImNoYW5nZVNvcnQoJ25hbWUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIHt7IFQubmFtZUhlYWRlciB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJuYW1lXCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIHYtb246Y2xpY2s9XCJjaGFuZ2VTb3J0KCdsYXN0TW9kaWZ5JylcIj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAge3sgVC5sYXN0TW9kaWZ5SGVhZGVyIH19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJsYXN0TW9kaWZ5XCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj4gXHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD4gXHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgdi1vbjpjbGljaz1cImNoYW5nZVNvcnQoJ3NpemUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbmFsLWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgVC5zaXplSGVhZGVyIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8c29ydC1pbmRpY2F0b3IgY29sbmFtZT1cInNpemVcIiA6c2VsZWN0ZWRjb2xuYW1lPVwic29ydEJ5XCIgOmFzYz1cInNvcnRBc2NcIj48L3NvcnQtaW5kaWNhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiB2LW9uOmNsaWNrPVwiY2hhbmdlU29ydCgnbWltZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9uYWwtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFQudHlwZUhlYWRlciB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJtaW1lXCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIHYtZm9yPVwibWVkaWEgaW4gZmlsdGVyZWRNZWRpYUl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lZGlhLWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIntzZWxlY3RlZDogaXNNZWRpYVNlbGVjdGVkKG1lZGlhKX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEobWVkaWEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCIgdi1vbjpkcmFnc3RhcnQ9XCJkcmFnU3RhcnQobWVkaWEsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCJtZWRpYS5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGh1bWJuYWlsLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWctd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHYtaWY9XCJtZWRpYS5taW1lLnN0YXJ0c1dpdGgoJ2ltYWdlJylcIiBkcmFnZ2FibGU9XCJmYWxzZVwiIDpzcmM9XCJidWlsZE1lZGlhVXJsKG1lZGlhLnVybCwgdGh1bWJTaXplKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIHYtZWxzZSBjbGFzcz1cImZhLXNvbGlkIGZhLWZpbGUgZmEtbGdcIiA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLW5hbWUtY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJlYWstd29yZFwiPiB7eyBtZWRpYS5uYW1lIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIG1lLTEgZWRpdC1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJyZW5hbWVNZWRpYShtZWRpYSlcIj4ge3sgVC5lZGl0QnV0dG9uIH19IDwvYSA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIGRlbGV0ZS1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJkZWxldGVNZWRpYShtZWRpYSlcIj4ge3sgVC5kZWxldGVCdXR0b24gfX0gPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgOmhyZWY9XCJtZWRpYS51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc20gdmlldy1idXR0b25cIj4ge3sgVC52aWV3QnV0dG9uIH19IDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNvbFwiPiB7eyBwcmludERhdGVUaW1lKG1lZGlhLmxhc3RNb2RpZnkpIH19IDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb2wgb3B0aW9uYWwtY29sXCI+IHt7IGlzTmFOKG1lZGlhLnNpemUpPyAwIDogTWF0aC5yb3VuZChtZWRpYS5zaXplIC8gMTAyNCkgfX0gS0I8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29sIG9wdGlvbmFsLWNvbFwiPnt7IG1lZGlhLm1pbWUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgYCxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBUOiB7fVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHNvcnRCeTogU3RyaW5nLFxyXG4gICAgICAgIHNvcnRBc2M6IEJvb2xlYW4sXHJcbiAgICAgICAgZmlsdGVyZWRNZWRpYUl0ZW1zOiBBcnJheSxcclxuICAgICAgICBzZWxlY3RlZE1lZGlhczogQXJyYXksXHJcbiAgICAgICAgdGh1bWJTaXplOiBOdW1iZXJcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYuVC5pbWFnZUhlYWRlciA9ICQoJyN0LWltYWdlLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5uYW1lSGVhZGVyID0gJCgnI3QtbmFtZS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQubGFzdE1vZGlmeUhlYWRlciA9ICQoJyN0LWxhc3RNb2RpZnktaGVhZGVyJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnNpemVIZWFkZXIgPSAkKCcjdC1zaXplLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC50eXBlSGVhZGVyID0gJCgnI3QtdHlwZS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZWRpdEJ1dHRvbiA9ICQoJyN0LWVkaXQtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmRlbGV0ZUJ1dHRvbiA9ICQoJyN0LWRlbGV0ZS1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQudmlld0J1dHRvbiA9ICQoJyN0LXZpZXctYnV0dG9uJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGlzTWVkaWFTZWxlY3RlZDogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlbGVjdGVkTWVkaWFzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudXJsLnRvTG93ZXJDYXNlKCkgPT09IG1lZGlhLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJ1aWxkTWVkaWFVcmw6IGZ1bmN0aW9uICh1cmwsIHRodW1iU2l6ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgKHVybC5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgJ3dpZHRoPScgKyB0aHVtYlNpemUgKyAnJmhlaWdodD0nICsgdGh1bWJTaXplO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2hhbmdlU29ydDogZnVuY3Rpb24gKG5ld1NvcnQpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdzb3J0Q2hhbmdlUmVxdWVzdGVkJywgbmV3U29ydCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYVRvZ2dsZVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbmFtZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW5hbWVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTsgICAgICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdkZWxldGVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRyYWdTdGFydDogZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEcmFnU3RhcnRSZXF1ZXN0ZWQnLCBtZWRpYSwgZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwcmludERhdGVUaW1lOiBmdW5jdGlvbiAoZGF0ZW1pbGxpcyl7XHJcbiAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoZGF0ZW1pbGxpcyk7XHJcbiAgICAgICAgICAgIHJldHVybiBkLnRvTG9jYWxlU3RyaW5nKCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gVGhpcyBjb21wb25lbnQgcmVjZWl2ZXMgYSBsaXN0IG9mIGFsbCB0aGUgaXRlbXMsIHVucGFnZWQuXHJcbi8vIEFzIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlciwgaXQgcmFpc2VzIGV2ZW50cyB3aXRoIHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBwYWdlLlxyXG4vLyBJdCdzIHRoZSBwYXJlbnQncyByZXNwb25zaWJpbGl0eSB0byBsaXN0ZW4gZm9yIHRoZXNlIGV2ZW50cyBhbmQgZGlzcGxheSB0aGUgcmVjZWl2ZWQgaXRlbXNcclxuLy8gPHBhZ2VyPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgncGFnZXInLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdj5cclxuICAgICAgICA8bmF2IGlkPVwibWVkaWEtcGFnZXJcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgYXJpYS1sYWJlbD1cIlBhZ2luYXRpb24gTmF2aWdhdGlvblwiIHJvbGU9XCJuYXZpZ2F0aW9uXCIgOmRhdGEtY29tcHV0ZWQtdHJpZ2dlcj1cIml0ZW1zSW5DdXJyZW50UGFnZS5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBwYWdpbmF0aW9uLXNtIG0tMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1lZGlhLWZpcnN0LWJ1dHRvblwiIDpjbGFzcz1cIntkaXNhYmxlZCA6ICFjYW5Eb0ZpcnN0fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb0ZpcnN0ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cImdvRmlyc3RcIj57eyBULnBhZ2VyRmlyc3RCdXR0b24gfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgOmNsYXNzPVwie2Rpc2FibGVkIDogIWNhbkRvUHJldn1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgOnRhYmluZGV4PVwiY2FuRG9QcmV2ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cInByZXZpb3VzXCI+e3sgVC5wYWdlclByZXZpb3VzQnV0dG9uIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSB2LWlmPVwibGluayAhPT0gLTFcIiBjbGFzcz1cInBhZ2UtaXRlbSBwYWdlLW51bWJlclwiICA6Y2xhc3M9XCJ7YWN0aXZlIDogY3VycmVudCA9PSBsaW5rIC0gMX1cIiB2LWZvcj1cImxpbmsgaW4gcGFnZUxpbmtzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIHYtb246Y2xpY2s9XCJnb1RvKGxpbmsgLSAxKVwiIDphcmlhLWxhYmVsPVwiJ0dvdG8gUGFnZScgKyBsaW5rXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGlua319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJjdXJyZW50ID09IGxpbmsgLTFcIiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPihjdXJyZW50KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgOmNsYXNzPVwie2Rpc2FibGVkIDogIWNhbkRvTmV4dH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgOnRhYmluZGV4PVwiY2FuRG9OZXh0ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cIm5leHRcIj57eyBULnBhZ2VyTmV4dEJ1dHRvbiB9fTwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbWVkaWEtbGFzdC1idXR0b25cIiA6Y2xhc3M9XCJ7ZGlzYWJsZWQgOiAhY2FuRG9MYXN0fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb0xhc3QgPyAwIDogLTFcIiB2LW9uOmNsaWNrPVwiZ29MYXN0XCI+e3sgVC5wYWdlckxhc3RCdXR0b24gfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1zLTQgcGFnZS1zaXplLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlLWxpbmsgZGlzYWJsZWQgdGV4dC1tdXRlZCBwYWdlLXNpemUtbGFiZWxcIj57eyBULnBhZ2VyUGFnZVNpemVMYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cInBhZ2VTaXplU2VsZWN0XCIgY2xhc3M9XCJwYWdlLWxpbmtcIiB2LW1vZGVsPVwicGFnZVNpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1mb3I9XCJvcHRpb24gaW4gcGFnZVNpemVPcHRpb25zXCIgdi1iaW5kOnZhbHVlPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb259fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L25hdj5cclxuICAgICAgICA8bmF2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBwYWdpbmF0aW9uLXNtIG0tMCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbXMtNCBwYWdlLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGluayBkaXNhYmxlZCB0ZXh0LW11dGVkIFwiPnt7IFQucGFnZXJQYWdlTGFiZWwgfX0ge3tjdXJyZW50ICsgMX19L3t7dG90YWxQYWdlc319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSBtcy00IHRvdGFsLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGluayBkaXNhYmxlZCB0ZXh0LW11dGVkIFwiPiB7eyBULnBhZ2VyVG90YWxMYWJlbCB9fSB7e3RvdGFsfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbmF2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHNvdXJjZUl0ZW1zOiBBcnJheVxyXG4gICAgfSxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwYWdlU2l6ZTogMTAsXHJcbiAgICAgICAgICAgIHBhZ2VTaXplT3B0aW9uczogWzEwLCAzMCwgNTAsIDEwMF0sXHJcbiAgICAgICAgICAgIGN1cnJlbnQ6IDAsXHJcbiAgICAgICAgICAgIFQ6IHt9XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAvLyByZXRyaWV2aW5nIGxvY2FsaXplZCBzdHJpbmdzIGZyb20gdmlld1xyXG4gICAgICAgIHNlbGYuVC5wYWdlckZpcnN0QnV0dG9uID0gJCgnI3QtcGFnZXItZmlyc3QtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyUHJldmlvdXNCdXR0b24gPSAkKCcjdC1wYWdlci1wcmV2aW91cy1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJOZXh0QnV0dG9uID0gJCgnI3QtcGFnZXItbmV4dC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJMYXN0QnV0dG9uID0gJCgnI3QtcGFnZXItbGFzdC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJQYWdlU2l6ZUxhYmVsID0gJCgnI3QtcGFnZXItcGFnZS1zaXplLWxhYmVsJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyUGFnZUxhYmVsID0gJCgnI3QtcGFnZXItcGFnZS1sYWJlbCcpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlclRvdGFsTGFiZWwgPSAkKCcjdC1wYWdlci10b3RhbC1sYWJlbCcpLnZhbCgpOyAgICAgICAgXHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5jdXJyZW50ICsgMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHByZXZpb3VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHRoaXMuY3VycmVudCAtIDE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnb0ZpcnN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnb0xhc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy50b3RhbFBhZ2VzIC0gMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdvVG86IGZ1bmN0aW9uICh0YXJnZXRQYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHRhcmdldFBhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgdG90YWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlSXRlbXMgPyB0aGlzLnNvdXJjZUl0ZW1zLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b3RhbFBhZ2VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBwYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYWdlcyA+IDAgPyBwYWdlcyA6IDE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc0xhc3RQYWdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQgKyAxID49IHRoaXMudG90YWxQYWdlcztcclxuICAgICAgICB9LFxyXG4gICAgICAgIGlzRmlyc3RQYWdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQgPT09IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb05leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzTGFzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb1ByZXY6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzRmlyc3RQYWdlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuRG9GaXJzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNGaXJzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb0xhc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzTGFzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyB0aGlzIGNvbXB1dGVkIGlzIG9ubHkgdG8gaGF2ZSBhIGNlbnRyYWwgcGxhY2Ugd2hlcmUgd2UgZGV0ZWN0IGNoYW5nZXMgYW5kIGxldmVyYWdlIFZ1ZSBKUyByZWFjdGl2aXR5IHRvIHJhaXNlIG91ciBldmVudC5cclxuICAgICAgICAvLyBUaGF0IGV2ZW50IHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgcGFyZW50IG1lZGlhIGFwcCB0byBkaXNwbGF5IHRoZSBpdGVtcyBpbiB0aGUgcGFnZS5cclxuICAgICAgICAvLyB0aGlzIGxvZ2ljIHdpbGwgbm90IHJ1biBpZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkgaXMgbm90IHVzZWQgaW4gdGhlIHRlbXBsYXRlLiBXZSB1c2UgYSBkdW1teSBcImRhdGEtY29tcHV0ZWQtdHJpZ2dlclwiIGF0dHJpYnV0ZSBmb3IgdGhhdC5cclxuICAgICAgICBpdGVtc0luQ3VycmVudFBhZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5wYWdlU2l6ZSAqIHRoaXMuY3VycmVudDtcclxuICAgICAgICAgICAgdmFyIGVuZCA9IHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuc291cmNlSXRlbXMuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgncGFnZXJFdmVudCcsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYWdlTGlua3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBsaW5rcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgbGlua3MucHVzaCh0aGlzLmN1cnJlbnQgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFkZCAyIGl0ZW1zIGJlZm9yZSBjdXJyZW50XHJcbiAgICAgICAgICAgIHZhciBiZWZvcmVDdXJyZW50ID0gdGhpcy5jdXJyZW50ID4gMCA/IHRoaXMuY3VycmVudCA6IC0xO1xyXG4gICAgICAgICAgICBsaW5rcy51bnNoaWZ0KGJlZm9yZUN1cnJlbnQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGJlZm9yZUJlZm9yZUN1cnJlbnQgPSB0aGlzLmN1cnJlbnQgPiAxID8gdGhpcy5jdXJyZW50IC0gMSA6IC0xO1xyXG4gICAgICAgICAgICBsaW5rcy51bnNoaWZ0KGJlZm9yZUJlZm9yZUN1cnJlbnQpO1xyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIEFkZCAyIGl0ZW1zIGFmdGVyIGN1cnJlbnRcclxuICAgICAgICAgICAgdmFyIGFmdGVyQ3VycmVudCA9IHRoaXMudG90YWxQYWdlcyAtIHRoaXMuY3VycmVudCA+IDEgPyB0aGlzLmN1cnJlbnQgKyAyIDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnB1c2goYWZ0ZXJDdXJyZW50KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhZnRlckFmdGVyQ3VycmVudCA9IHRoaXMudG90YWxQYWdlcyAtIHRoaXMuY3VycmVudCA+IDIgPyB0aGlzLmN1cnJlbnQgKyAzIDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnB1c2goYWZ0ZXJBZnRlckN1cnJlbnQpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGxpbmtzO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXRjaDoge1xyXG4gICAgICAgIHNvdXJjZUl0ZW1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IDA7IC8vIHJlc2V0dGluZyBjdXJyZW50IHBhZ2UgYWZ0ZXIgcmVjZWl2aW5nIGEgbmV3IGxpc3Qgb2YgdW5wYWdlZCBpdGVtc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFnZVNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyA8c29ydC1pbmRpY2F0b3I+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdzb3J0SW5kaWNhdG9yJywge1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IHYtc2hvdz1cImlzQWN0aXZlXCIgY2xhc3M9XCJzb3J0LWluZGljYXRvclwiPlxyXG4gICAgICAgICAgICA8c3BhbiB2LXNob3c9XCJhc2NcIj48aSBjbGFzcz1cInNtYWxsIGZhIGZhLWNoZXZyb24tdXBcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiB2LXNob3c9XCIhYXNjXCI+PGkgY2xhc3M9XCJzbWFsbCBmYSBmYS1jaGV2cm9uLWRvd25cIj48L2k+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIGNvbG5hbWU6IFN0cmluZyxcclxuICAgICAgICBzZWxlY3RlZGNvbG5hbWU6IFN0cmluZyxcclxuICAgICAgICBhc2M6IEJvb2xlYW5cclxuICAgIH0sXHJcbiAgICBjb21wdXRlZDoge1xyXG4gICAgICAgIGlzQWN0aXZlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbG5hbWUudG9Mb3dlckNhc2UoKSA9PSB0aGlzLnNlbGVjdGVkY29sbmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDx1cGxvYWQ+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCd1cGxvYWQnLCB7XHJcbiAgICB0ZW1wbGF0ZTogJ1xcXHJcbiAgICAgICAgPGRpdiA6Y2xhc3M9XCJ7IFxcJ3VwbG9hZC13YXJuaW5nXFwnIDogbW9kZWwuZXJyb3JNZXNzYWdlIH1cIiBjbGFzcz1cInVwbG9hZCBtLTIgcC0yIHB0LTBcIj4gXFxcclxuICAgICAgICAgICAgPHNwYW4gdi1pZj1cIm1vZGVsLmVycm9yTWVzc2FnZVwiIHYtb246Y2xpY2s9XCJkaXNtaXNzV2FybmluZygpXCIgY2xhc3M9XCJjbG9zZS13YXJuaW5nXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gPC9zcGFuPlxcXHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLW5hbWVcIiA6dGl0bGU9XCJtb2RlbC5lcnJvck1lc3NhZ2VcIj57eyBtb2RlbC5uYW1lIH19PC9wPiBcXFxyXG4gICAgICAgICAgICA8ZGl2PiBcXFxyXG4gICAgICAgICAgICAgICA8c3BhbiB2LXNob3c9XCIhbW9kZWwuZXJyb3JNZXNzYWdlXCIgOnN0eWxlPVwieyB3aWR0aDogbW9kZWwucGVyY2VudGFnZSArIFxcJyVcXCd9XCIgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIj4gPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwibW9kZWwuZXJyb3JNZXNzYWdlXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgOnRpdGxlPVwibW9kZWwuZXJyb3JNZXNzYWdlXCI+IEVycm9yOiB7eyBtb2RlbC5lcnJvck1lc3NhZ2UgfX0gPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAnLFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBtb2RlbDogT2JqZWN0LFxyXG4gICAgICAgIHVwbG9hZElucHV0SWQ6IFN0cmluZ1xyXG4gICAgfSxcclxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHVwbG9hZElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VsZi51cGxvYWRJbnB1dElkID8/ICdmaWxldXBsb2FkJyk7XHJcbiAgICAgICAgJCh1cGxvYWRJbnB1dCkuYmluZCgnZmlsZXVwbG9hZHByb2dyZXNzJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsZXNbMF0ubmFtZSAhPT0gc2VsZi5tb2RlbC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICAgICAgc2VsZi5tb2RlbC5wZXJjZW50YWdlID0gcGFyc2VJbnQoZGF0YS5sb2FkZWQgLyBkYXRhLnRvdGFsICogMTAwLCAxMCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQodXBsb2FkSW5wdXQpLmJpbmQoJ2ZpbGV1cGxvYWRkb25lJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsZXNbMF0ubmFtZSAhPT0gc2VsZi5tb2RlbC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRhdGEucmVzdWx0LmZpbGVzWzBdLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZUZhaWx1cmUoZGF0YS5maWxlc1swXS5uYW1lLCBkYXRhLnJlc3VsdC5maWxlc1swXS5lcnJvcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7ICBcclxuICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgncmVtb3ZhbFJlcXVlc3QnLCBzZWxmLm1vZGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKHVwbG9hZElucHV0KS5iaW5kKCdmaWxldXBsb2FkZmFpbCcsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGVzWzBdLm5hbWUgIT09IHNlbGYubW9kZWwubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlbGYuaGFuZGxlRmFpbHVyZShkYXRhLmZpbGVzWzBdLm5hbWUsICQoJyN0LWVycm9yJykudmFsKCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBoYW5kbGVGYWlsdXJlOiBmdW5jdGlvbiAoZmlsZU5hbWUsIG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgaWYgKGZpbGVOYW1lICE9PSB0aGlzLm1vZGVsLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmVycm9yTWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnRXJyb3JPblVwbG9hZCcsIHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGlzbWlzc1dhcm5pbmc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW1vdmFsUmVxdWVzdCcsIHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDx1cGxvYWQtbGlzdD4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ3VwbG9hZExpc3QnLCB7XHJcbiAgICB0ZW1wbGF0ZTogJ1xcXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1saXN0XCIgdi1zaG93PVwiZmlsZXMubGVuZ3RoID4gMFwiPiBcXFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCIgQGNsaWNrPVwiZXhwYW5kZWQgPSAhZXhwYW5kZWRcIj4gXFxcclxuICAgICAgICAgICAgICAgIDxzcGFuPiB7eyBULnVwbG9hZHMgfX0gPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gdi1zaG93PVwicGVuZGluZ0NvdW50XCI+IChQZW5kaW5nOiB7eyBwZW5kaW5nQ291bnQgfX0pIDwvc3Bhbj4gXFxcclxuICAgICAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cImVycm9yQ291bnRcIiA6Y2xhc3M9XCJ7IFxcJ3RleHQtZGFuZ2VyXFwnIDogZXJyb3JDb3VudCB9XCI+ICgge3sgVC5lcnJvcnMgfX06IHt7IGVycm9yQ291bnQgfX0gLyA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdi1vbjpjbGljay5zdG9wPVwiY2xlYXJFcnJvcnNcIiA+IHt7IFQuY2xlYXJFcnJvcnMgfX0gPC9hPik8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvZ2dsZS1idXR0b25cIj4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtc2hvdz1cImV4cGFuZGVkXCI+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi1kb3duXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1zaG93PVwiIWV4cGFuZGVkXCI+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi11cFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiIHYtc2hvdz1cImV4cGFuZGVkXCI+IFxcXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcFwiPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDx1cGxvYWQgOnVwbG9hZC1pbnB1dC1pZD1cInVwbG9hZElucHV0SWRcIiB2LWZvcj1cImYgaW4gZmlsZXNcIiA6a2V5PVwiZi5uYW1lXCIgIDptb2RlbD1cImZcIj48L3VwbG9hZD4gXFxcclxuICAgICAgICAgICAgICAgIDwvZGl2ID4gXFxcclxuICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgJyxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmaWxlczogW10sXHJcbiAgICAgICAgICAgIFQ6IHt9LFxyXG4gICAgICAgICAgICBleHBhbmRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHBlbmRpbmdDb3VudDogMCxcclxuICAgICAgICAgICAgZXJyb3JDb3VudDogMFxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHVwbG9hZElucHV0SWQ6IFN0cmluZ1xyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gcmV0cmlldmluZyBsb2NhbGl6ZWQgc3RyaW5ncyBmcm9tIHZpZXdcclxuICAgICAgICBzZWxmLlQudXBsb2FkcyA9ICQoJyN0LXVwbG9hZHMnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZXJyb3JzID0gJCgnI3QtZXJyb3JzJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmNsZWFyRXJyb3JzID0gJCgnI3QtY2xlYXItZXJyb3JzJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICBmaWxlQ291bnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciB1cGxvYWRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGYudXBsb2FkSW5wdXRJZCA/PyAnZmlsZXVwbG9hZCcpO1xyXG4gICAgICAgICQodXBsb2FkSW5wdXQpLmJpbmQoJ2ZpbGV1cGxvYWRhZGQnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoIWRhdGEuZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkYXRhLmZpbGVzLmZvckVhY2goZnVuY3Rpb24gKG5ld0ZpbGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhbHJlYWR5SW5MaXN0ID0gc2VsZi5maWxlcy5zb21lKGZ1bmN0aW9uIChmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYubmFtZSA9PSBuZXdGaWxlLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlJbkxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVzLnB1c2goeyBuYW1lOiBuZXdGaWxlLm5hbWUsIHBlcmNlbnRhZ2U6IDAsIGVycm9yTWVzc2FnZTogJycgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0EgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgaXMgYWxyZWFkeSBvbiB0aGUgcXVldWU6JyArIG5ld0ZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBidXMuJG9uKCdyZW1vdmFsUmVxdWVzdCcsIGZ1bmN0aW9uIChmaWxlVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIHNlbGYuZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5uYW1lID09IGZpbGVVcGxvYWQubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBidXMuJG9uKCdFcnJvck9uVXBsb2FkJywgZnVuY3Rpb24gKGZpbGVVcGxvYWQpIHtcclxuICAgICAgICAgICAgc2VsZi51cGRhdGVDb3VudCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICB1cGRhdGVDb3VudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yQ291bnQgPSB0aGlzLmZpbGVzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZXJyb3JNZXNzYWdlICE9ICcnO1xyXG4gICAgICAgICAgICB9KS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0NvdW50ID0gdGhpcy5maWxlcy5sZW5ndGggLSB0aGlzLmVycm9yQ291bnQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXJFcnJvcnM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlcyA9IHRoaXMuZmlsZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5lcnJvck1lc3NhZ2UgPT0gJyc7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXRjaDoge1xyXG4gICAgICAgIGZpbGVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ291bnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCJmdW5jdGlvbiBpbml0aWFsaXplQXR0YWNoZWRNZWRpYUZpZWxkKGVsLCBpZE9mVXBsb2FkQnV0dG9uLCB1cGxvYWRBY3Rpb24sIG1lZGlhSXRlbVVybCwgYWxsb3dNdWx0aXBsZSwgYWxsb3dNZWRpYVRleHQsIGFsbG93QW5jaG9ycywgdGVtcFVwbG9hZEZvbGRlciwgbWF4VXBsb2FkQ2h1bmtTaXplKSB7XHJcblxyXG4gICAgdmFyIHRhcmdldCA9ICQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJChlbCkuZGF0YSgnZm9yJykpKTtcclxuICAgIHZhciBpbml0aWFsUGF0aHMgPSB0YXJnZXQuZGF0YShcImluaXRcIik7XHJcblxyXG4gICAgdmFyIG1lZGlhRmllbGRFZGl0b3IgPSAkKGVsKTtcclxuICAgIHZhciBpZHByZWZpeCA9IG1lZGlhRmllbGRFZGl0b3IuYXR0cihcImlkXCIpO1xyXG4gICAgdmFyIG1lZGlhRmllbGRBcHA7XHJcblxyXG4gICAgbWVkaWFGaWVsZEFwcHMucHVzaChtZWRpYUZpZWxkQXBwID0gbmV3IFZ1ZSh7XHJcbiAgICAgICAgZWw6IG1lZGlhRmllbGRFZGl0b3IuZ2V0KDApLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgbWVkaWFJdGVtczogW10sXHJcbiAgICAgICAgICAgIHNlbGVjdGVkTWVkaWE6IG51bGwsXHJcbiAgICAgICAgICAgIHNtYWxsVGh1bWJzOiBmYWxzZSxcclxuICAgICAgICAgICAgaWRQcmVmaXg6IGlkcHJlZml4LFxyXG4gICAgICAgICAgICBpbml0aWFsaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGFsbG93TWVkaWFUZXh0OiBhbGxvd01lZGlhVGV4dCxcclxuICAgICAgICAgICAgYmFja3VwTWVkaWFUZXh0OiAnJyxcclxuICAgICAgICAgICAgYWxsb3dBbmNob3JzOiBhbGxvd0FuY2hvcnMsXHJcbiAgICAgICAgICAgIGJhY2t1cEFuY2hvcjogbnVsbCxcclxuICAgICAgICAgICAgbWVkaWFUZXh0bW9kYWw6IG51bGwsXHJcbiAgICAgICAgICAgIGFuY2hvcmluZ01vZGFsOiBudWxsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFByZWZzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVkaWFGaWVsZFByZWZzJykpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICAgICAgcGF0aHM6IHtcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVBhdGhzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShpbml0aWFsUGF0aHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5tZWRpYVBhdGggPT09ICdub3QtZm91bmQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFQYXRocy5wdXNoKHsgcGF0aDogeC5tZWRpYVBhdGgsIGlzUmVtb3ZlZDogeC5pc1JlbW92ZWQsIGlzTmV3OiB4LmlzTmV3LCBtZWRpYVRleHQ6IHgubWVkaWFUZXh0LCBhbmNob3I6IHguYW5jaG9yLCBhdHRhY2hlZEZpbGVOYW1lOiB4LmF0dGFjaGVkRmlsZU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG1lZGlhUGF0aHMpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFQYXRocyA9IHZhbHVlcyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2lnbmFsID0gJC5EZWZlcnJlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhUGF0aHMuZm9yRWFjaChmdW5jdGlvbiAoeCwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHsgbmFtZTogJyAnICsgeC5wYXRoLCBtaW1lOiAnJywgbWVkaWFQYXRoOiAnJywgYW5jaG9yOiB4LmFuY2hvciwgYXR0YWNoZWRGaWxlTmFtZTogeC5hdHRhY2hlZEZpbGVOYW1lIH0pOyAvLyBkb24ndCByZW1vdmUgdGhlIHNwYWNlLiBTb21ldGhpbmcgZGlmZmVyZW50IGlzIG5lZWRlZCBvciBpdCB3b250IHJlYWN0IHdoZW4gdGhlIHJlYWwgbmFtZSBhcnJpdmVzLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gJC53aGVuKHNpZ25hbCkuZG9uZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbWVkaWFJdGVtVXJsICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh4LnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52dWVrZXkgPSBkYXRhLm5hbWUgKyBpLnRvU3RyaW5nKCk7IC8vIEJlY2F1c2UgYSB1bmlxdWUga2V5IGlzIHJlcXVpcmVkIGJ5IFZ1ZSBvbiB2LWZvciBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZWRpYVRleHQgPSB4Lm1lZGlhVGV4dDsgLy8gVGhpcyB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZnJvbSB0aGUgYWpheCBjYWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmFuY2hvciA9IHguYW5jaG9yOyAvLyBUaGlzIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBhamF4IGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYXR0YWNoZWRGaWxlTmFtZSA9IHguYXR0YWNoZWRGaWxlTmFtZTsvLyBUaGlzIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBhamF4IGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnNwbGljZShpLCAxLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gKytsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lZGlhSXRlbXMucHVzaCh4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGksIDEsIHsgbmFtZTogeC5wYXRoLCBtaW1lOiAnJywgbWVkaWFQYXRoOiAnbm90LWZvdW5kJywgbWVkaWFUZXh0OiAnJywgYW5jaG9yOiB7IHg6IDAuNSwgeTogMC41IH0sIGF0dGFjaGVkRmlsZU5hbWU6IHguYXR0YWNoZWRGaWxlTmFtZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gKytsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lZGlhSXRlbXMucHVzaCh4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbC5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZpbGVTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLnNlbGVjdGVkTWVkaWEuc2l6ZSAvIDEwMjQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5BZGRNZWRpYTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vblJlbW92ZWRNZWRpYUl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWVkaWFJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tZWRpYUl0ZW1zW2ldLmlzUmVtb3ZlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub25SZW1vdmVkTWVkaWFJdGVtcy5wdXNoKHRoaXMubWVkaWFJdGVtc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBub25SZW1vdmVkTWVkaWFJdGVtcy5sZW5ndGggPT09IDAgfHwgbm9uUmVtb3ZlZE1lZGlhSXRlbXMubGVuZ3RoID4gMCAmJiBhbGxvd011bHRpcGxlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aHVtYlNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNtYWxsVGh1bWJzID8gMTIwIDogMjQwO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjdXJyZW50UHJlZnM6IHtcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsVGh1bWJzOiB0aGlzLnNtYWxsVGh1bWJzXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYWxsVGh1bWJzID0gbmV3UHJlZnMuc21hbGxUaHVtYnM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5wYXRocyA9IGluaXRpYWxQYXRocztcclxuXHJcbiAgICAgICAgICAgIHNlbGYuJG9uKCdzZWxlY3RBbmREZWxldGVNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RBbmREZWxldGVNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ3NlbGVjdE1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdE1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSAnIycgKyBpZE9mVXBsb2FkQnV0dG9uO1xyXG4gICAgICAgICAgICB2YXIgZWRpdG9ySWQgPSBtZWRpYUZpZWxkRWRpdG9yLmF0dHIoJ2lkJyk7XHJcbiAgICAgICAgICAgIHZhciBjaHVua2VkRmlsZVVwbG9hZElkID0gcmFuZG9tVVVJRCgpO1xyXG5cclxuICAgICAgICAgICAgJChzZWxlY3RvcilcclxuICAgICAgICAgICAgICAgIC5maWxldXBsb2FkKHtcclxuICAgICAgICAgICAgICAgICAgICBsaW1pdENvbmN1cnJlbnRVcGxvYWRzOiAyMCxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wWm9uZTogJCgnIycgKyBlZGl0b3JJZCksXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IHVwbG9hZEFjdGlvbixcclxuICAgICAgICAgICAgICAgICAgICBtYXhDaHVua1NpemU6IG1heFVwbG9hZENodW5rU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGRhdGEuZmlsZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZmlsZXNbaV0udXBsb2FkTmFtZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRVbmlxdWVJZCgpICsgZGF0YS5maWxlc1tpXS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5maWxlc1tpXS5hdHRhY2hlZEZpbGVOYW1lID0gZGF0YS5maWxlc1tpXS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3VibWl0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW50aUZvcmdlcnlUb2tlbiA9ICQoXCJpbnB1dFtuYW1lPV9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuXVwiKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdwYXRoJywgdmFsdWU6IHRlbXBVcGxvYWRGb2xkZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJywgdmFsdWU6IGFudGlGb3JnZXJ5VG9rZW4gfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ19fY2h1bmtlZEZpbGVVcGxvYWRJZCcsIHZhbHVlOiBjaHVua2VkRmlsZVVwbG9hZElkIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBkb25lOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3TWVkaWFJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3Jtc2cgPSBcIlwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucmVzdWx0LmZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5yZXN1bHQuZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJlc3VsdC5maWxlc1tpXS5pc05ldyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiBlcnJvciBpcyBkZWZpbmVkIHByb2JhYmx5IHRoZSBmaWxlIHR5cGUgaXMgbm90IGFsbG93ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHQuZmlsZXNbaV0uZXJyb3IgPT09IHVuZGVmaW5lZCB8fCBkYXRhLnJlc3VsdC5maWxlc1tpXS5lcnJvciA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJlc3VsdC5maWxlc1tpXS5hdHRhY2hlZEZpbGVOYW1lID0gZGF0YS5maWxlc1tpXS5hdHRhY2hlZEZpbGVOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdNZWRpYUl0ZW1zLnB1c2goZGF0YS5yZXN1bHQuZmlsZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ybXNnICs9IGRhdGEucmVzdWx0LmZpbGVzW2ldLmVycm9yICsgXCJcXG5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ybXNnICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChlcnJvcm1zZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobmV3TWVkaWFJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdNZWRpYUl0ZW1zLmxlbmd0aCA+IDEgJiYgYWxsb3dNdWx0aXBsZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQoJyNvbmx5T25lSXRlbU1lc3NhZ2UnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMucHVzaChuZXdNZWRpYUl0ZW1zWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zID0gbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLmNvbmNhdChuZXdNZWRpYUl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3Igb24gdXBsb2FkLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhqcVhIUik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRleHRTdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvclRocm93bik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5vbignZmlsZXVwbG9hZGNodW5rYmVmb3Jlc2VuZCcsIChlLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEhlcmUgd2UgcmVwbGFjZSB0aGUgYmxvYiB3aXRoIGEgRmlsZSBvYmplY3QgdG8gZW5zdXJlIHRoZSBmaWxlIG5hbWUgYW5kIG90aGVycyBhcmUgcHJlc2VydmVkIGZvciB0aGUgYmFja2VuZC5cclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmJsb2IgPSBuZXcgRmlsZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnMuYmxvYl0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBmaWxlLmxhc3RNb2RpZmllZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgc2VsZWN0TWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhID0gbWVkaWE7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdldFVuaXF1ZUlkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlbW92ZVNlbGVjdGVkOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZW1vdmVkID0ge307XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5tZWRpYUl0ZW1zICYmIHRoaXMubWVkaWFJdGVtcy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRNZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRoaXMubWVkaWFJdGVtc1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQuaXNSZW1vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzLm1lZGlhSXRlbXMuc3BsaWNlKFtpbmRleF0sIDEsIHJlbW92ZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVtb3ZlIGJ1dHRvbiBjYW4gYWxzbyByZW1vdmUgYSB1bmlxdWUgbWVkaWEgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1lZGlhSXRlbXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgPSB0aGlzLm1lZGlhSXRlbXNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkLmlzUmVtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcy5tZWRpYUl0ZW1zLnNwbGljZSgwLCAxLCByZW1vdmVkKTsgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLnNwbGljZSgwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBudWxsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaG93TWVkaWFUZXh0TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwodGhpcy4kcmVmcy5tZWRpYVRleHRNb2RhbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwTWVkaWFUZXh0ID0gdGhpcy5zZWxlY3RlZE1lZGlhLm1lZGlhVGV4dDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuY2VsTWVkaWFUZXh0TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEubWVkaWFUZXh0ID0gdGhpcy5iYWNrdXBNZWRpYVRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dBbmNob3JNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcmluZ01vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbCh0aGlzLiRyZWZzLmFuY2hvcmluZ01vZGFsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgLy8gQ2F1c2UgYSByZWZyZXNoIHRvIHJlY2FsYyBoZWlnaHRzLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLngsXHJcbiAgICAgICAgICAgICAgICAgICAgeTogdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci55XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2t1cEFuY2hvciA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3I7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbmNlbEFuY2hvcmluZ01vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHRoaXMuYmFja3VwQW5jaG9yO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZXNldEFuY2hvcjogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0geyB4OiAwLjUsIHk6IDAuNSB9O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbkFuY2hvckRyb3A6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogZXZlbnQub2Zmc2V0WCAvIGltYWdlLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50Lm9mZnNldFkgLyBpbWFnZS5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYW5jaG9yTGVmdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UgJiYgdGhpcy4kcmVmcy5tb2RhbEJvZHkgJiYgdGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBpbWFnZSBpcyBzaHJ1bmsgY29tcGFyZSBhZ2FpbnN0IHRoZSBtb2RhbCBib2R5LlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAodGhpcy4kcmVmcy5tb2RhbEJvZHkuY2xpZW50V2lkdGggLSB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudFdpZHRoKSAvIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gKHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueCAqIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50V2lkdGgpICsgb2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IDE3KSB7IC8vIEFkanVzdCBzbyB0aGUgdGFyZ2V0IGRvZXNuJ3Qgc2hvdyBvdXRzaWRlIGltYWdlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IDE3O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gLSA4OyAvLyBBZGp1c3QgdG8gaGl0IHRoZSBtb3VzZSBwb2ludGVyLlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhbmNob3JUb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmFuY2hvckltYWdlICYmIHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueSAqIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IDE1KSB7IC8vIEFkanVzdG1lbnQgc28gdGhlIHRhcmdldCBkb2Vzbid0IHNob3cgb3V0c2lkZSBpbWFnZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAxNTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgNTsgLy8gQWRqdXN0IHRvIGhpdCB0aGUgbW91c2UgcG9pbnRlci5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0QW5jaG9yOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHg6IGV2ZW50Lm9mZnNldFggLyBpbWFnZS5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICB5OiBldmVudC5vZmZzZXRZIC8gaW1hZ2UuY2xpZW50SGVpZ2h0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFkZE1lZGlhRmlsZXM6IGZ1bmN0aW9uIChmaWxlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKChmaWxlcy5sZW5ndGggPiAxKSAmJiAoYWxsb3dNdWx0aXBsZSA9PT0gZmFsc2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJCgnI29ubHlPbmVJdGVtTWVzc2FnZScpLnZhbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMucHVzaChmaWxlc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcyA9IG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5jb25jYXQoZmlsZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZWxlY3RBbmREZWxldGVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWEgPSBtZWRpYTtcclxuICAgICAgICAgICAgICAgIC8vIHNldFRpbWVvdXQgYmVjYXVzZSBzb21ldGltZXMgXHJcbiAgICAgICAgICAgICAgICAvLyByZW1vdmVTZWxlY3RlZCB3YXMgY2FsbGVkIGV2ZW4gYmVmb3JlIHRoZSBtZWRpYSB3YXMgc2V0LlxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVTZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2F0Y2g6IHtcclxuICAgICAgICAgICAgbWVkaWFJdGVtczoge1xyXG4gICAgICAgICAgICAgICAgZGVlcDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGhhbmRsZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBwcmV2aWV3IHJlbmRlcmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAkKGRvY3VtZW50KS50cmlnZ2VyKCdjb250ZW50cHJldmlldzpyZW5kZXInKTsgfSwgMTAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY3VycmVudFByZWZzOiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnLCBKU09OLnN0cmluZ2lmeShuZXdQcmVmcykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSkpO1xyXG59XHJcbiIsImZ1bmN0aW9uIGluaXRpYWxpemVNZWRpYUZpZWxkKGVsLCBtb2RhbEJvZHlFbGVtZW50LCBtZWRpYUl0ZW1VcmwsIGFsbG93TXVsdGlwbGUsIGFsbG93TWVkaWFUZXh0LCBhbGxvd0FuY2hvcnMpIHtcclxuICAgIC8vQmFnUGFydCBjcmVhdGUgYSBzY3JpcHQgc2VjdGlvbiB3aXRob3V0IG90aGVyIERPTSBlbGVtZW50c1xyXG4gICAgaWYoZWwgPT09IG51bGwpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgXHJcbiAgICB2YXIgdGFyZ2V0ID0gJChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgkKGVsKS5kYXRhKCdmb3InKSkpO1xyXG4gICAgdmFyIGluaXRpYWxQYXRocyA9IHRhcmdldC5kYXRhKFwiaW5pdFwiKTtcclxuXHJcbiAgICB2YXIgbWVkaWFGaWVsZEVkaXRvciA9ICQoZWwpO1xyXG4gICAgdmFyIGlkcHJlZml4ID0gbWVkaWFGaWVsZEVkaXRvci5hdHRyKFwiaWRcIik7XHJcbiAgICB2YXIgbWVkaWFGaWVsZEFwcDtcclxuXHJcbiAgICAvL3doZW4gaGlkZSBtb2RhbCBkZXRhY2ggbWVkaWEgYXBwIHRvIGF2b2lkIGlzc3VlIG9uIEJhZ1BhcnRcclxuICAgIG1vZGFsQm9keUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaGlkZGVuLmJzLm1vZGFsJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgJChcIiNtZWRpYUFwcFwiKS5hcHBlbmRUbygnYm9keScpO1xyXG4gICAgICAgICQoXCIjbWVkaWFBcHBcIikuaGlkZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbWVkaWFGaWVsZEFwcHMucHVzaChtZWRpYUZpZWxkQXBwID0gbmV3IFZ1ZSh7XHJcbiAgICAgICAgZWw6IG1lZGlhRmllbGRFZGl0b3IuZ2V0KDApLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgbWVkaWFJdGVtczogW10sXHJcbiAgICAgICAgICAgIHNlbGVjdGVkTWVkaWE6IG51bGwsXHJcbiAgICAgICAgICAgIHNtYWxsVGh1bWJzOiBmYWxzZSxcclxuICAgICAgICAgICAgaWRQcmVmaXg6IGlkcHJlZml4LFxyXG4gICAgICAgICAgICBpbml0aWFsaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGFsbG93TWVkaWFUZXh0OiBhbGxvd01lZGlhVGV4dCxcclxuICAgICAgICAgICAgYmFja3VwTWVkaWFUZXh0OiAnJyxcclxuICAgICAgICAgICAgYWxsb3dBbmNob3JzOiBhbGxvd0FuY2hvcnMsXHJcbiAgICAgICAgICAgIGJhY2t1cEFuY2hvcjogbnVsbCxcclxuICAgICAgICAgICAgbWVkaWFUZXh0TW9kYWw6IG51bGwsXHJcbiAgICAgICAgICAgIGFuY2hvcmluZ01vZGFsOiBudWxsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFByZWZzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVkaWFGaWVsZFByZWZzJykpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICAgICAgcGF0aHM6IHtcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVBhdGhzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShpbml0aWFsUGF0aHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5tZWRpYVBhdGggPT09ICdub3QtZm91bmQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFQYXRocy5wdXNoKHsgcGF0aDogeC5tZWRpYVBhdGgsIG1lZGlhVGV4dDogeC5tZWRpYVRleHQsIGFuY2hvcjogeC5hbmNob3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG1lZGlhUGF0aHMpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFQYXRocyA9IHZhbHVlcyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2lnbmFsID0gJC5EZWZlcnJlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhUGF0aHMuZm9yRWFjaChmdW5jdGlvbiAoeCwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHsgbmFtZTogJyAnICsgeC5wYXRoLCBtaW1lOiAnJywgbWVkaWFQYXRoOiAnJyB9KTsgLy8gZG9uJ3QgcmVtb3ZlIHRoZSBzcGFjZS4gU29tZXRoaW5nIGRpZmZlcmVudCBpcyBuZWVkZWQgb3IgaXQgd29udCByZWFjdCB3aGVuIHRoZSByZWFsIG5hbWUgYXJyaXZlcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9ICQud2hlbihzaWduYWwpLmRvbmUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IG1lZGlhSXRlbVVybCArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoeC5wYXRoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEudnVla2V5ID0gZGF0YS5uYW1lICsgaS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lZGlhVGV4dCA9IHgubWVkaWFUZXh0OyAvLyBUaGlzIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBhamF4IGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYW5jaG9yID0geC5hbmNob3I7IC8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGksIDEsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnNwbGljZShpLCAxLCB7IG5hbWU6IHgucGF0aCwgbWltZTogJycsIG1lZGlhUGF0aDogJ25vdC1mb3VuZCcsIG1lZGlhVGV4dDogJycsIGFuY2hvcjogeyB4OiAwLCB5OiAwIH0gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09ICsrbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnB1c2goeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBzaWduYWwucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmaWxlU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodGhpcy5zZWxlY3RlZE1lZGlhLnNpemUgLyAxMDI0KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuQWRkTWVkaWE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lZGlhSXRlbXMubGVuZ3RoID09PSAwIHx8IHRoaXMubWVkaWFJdGVtcy5sZW5ndGggPiAwICYmIGFsbG93TXVsdGlwbGU7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRodW1iU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc21hbGxUaHVtYnMgPyAxMjAgOiAyNDA7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGN1cnJlbnRQcmVmczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxUaHVtYnM6IHRoaXMuc21hbGxUaHVtYnNcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc21hbGxUaHVtYnMgPSBuZXdQcmVmcy5zbWFsbFRodW1icztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnBhdGhzID0gaW5pdGlhbFBhdGhzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ3NlbGVjdEFuZERlbGV0ZU1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdEFuZERlbGV0ZU1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignc2VsZWN0TWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0TWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuJG9uKCdmaWxlc1VwbG9hZGVkJywgZnVuY3Rpb24gKGZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmFkZE1lZGlhRmlsZXMoZmlsZXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgc2VsZWN0TWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhID0gbWVkaWE7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jYW5BZGRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjbWVkaWFBcHBcIikuYXBwZW5kVG8oJChtb2RhbEJvZHlFbGVtZW50KS5maW5kKCcubW9kYWwtYm9keScpKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiI21lZGlhQXBwXCIpLnNob3coKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbChtb2RhbEJvZHlFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBtb2RhbC5zaG93KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICQobW9kYWxCb2R5RWxlbWVudCkuZmluZCgnLm1lZGlhRmllbGRTZWxlY3RCdXR0b24nKS5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRNZWRpYUZpbGVzKG1lZGlhQXBwLnNlbGVjdGVkTWVkaWFzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdGhlIGluY2x1ZGVkIG1lZGlhcyB0byBiZSBzdGlsbCBzZWxlY3RlZCB0aGUgbmV4dCB0aW1lIHdlIG9wZW4gdGhlIG1vZGFsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUFwcC5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd01lZGlhVGV4dE1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUZXh0TW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKHRoaXMuJHJlZnMubWVkaWFUZXh0TW9kYWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbC5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2t1cE1lZGlhVGV4dCA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5tZWRpYVRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbmNlbE1lZGlhVGV4dE1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUZXh0TW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLm1lZGlhVGV4dCA9IHRoaXMuYmFja3VwTWVkaWFUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaG93QW5jaG9yTW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwodGhpcy4kcmVmcy5hbmNob3JpbmdNb2RhbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcmluZ01vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgIC8vIENhdXNlIGEgcmVmcmVzaCB0byByZWNhbGMgaGVpZ2h0cy5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHg6IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueCxcclxuICAgICAgICAgICAgICAgICAgeTogdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci55XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2t1cEFuY2hvciA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3I7XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNhbmNlbEFuY2hvcmluZ01vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHRoaXMuYmFja3VwQW5jaG9yO1xyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXNldEFuY2hvcjogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0geyB4OiAwLjUsIHk6IDAuNSB9O1xyXG4gICAgICAgICAgICB9LCAgXHJcbiAgICAgICAgICAgIG9uQW5jaG9yRHJvcDogZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgeDogZXZlbnQub2Zmc2V0WCAvIGltYWdlLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgeTogZXZlbnQub2Zmc2V0WSAvIGltYWdlLmNsaWVudEhlaWdodFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhbmNob3JMZWZ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5hbmNob3JJbWFnZSAmJiB0aGlzLiRyZWZzLm1vZGFsQm9keSAmJiB0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGltYWdlIGlzIHNocnVuayBjb21wYXJlIGFnYWluc3QgdGhlIG1vZGFsIGJvZHkuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9ICh0aGlzLiRyZWZzLm1vZGFsQm9keS5jbGllbnRXaWR0aCAtIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAodGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci54ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRXaWR0aCkgKyBvZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFuY2hvckljb24gPSBNYXRoLnJvdW5kKHRoaXMuJHJlZnMubW9kYWxCb2R5LnF1ZXJ5U2VsZWN0b3IoJy5pY29uLW1lZGlhLWFuY2hvcicpLmNsaWVudFdpZHRoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihOdW1iZXIuaXNJbnRlZ2VyKGFuY2hvckljb24pKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiAtIGFuY2hvckljb24vMjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgICAgICAgICAgICBcclxuICAgICAgICAgICAgYW5jaG9yVG9wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5hbmNob3JJbWFnZSAmJiB0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnkgKiB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRBbmNob3I6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogZXZlbnQub2Zmc2V0WCAvIGltYWdlLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50Lm9mZnNldFkgLyBpbWFnZS5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgICAgICAgICBcclxuICAgICAgICAgICAgYWRkTWVkaWFGaWxlczogZnVuY3Rpb24gKGZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZpbGVzLmxlbmd0aCA+IDEpICYmIChhbGxvd011bHRpcGxlID09PSBmYWxzZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydCgkKCcjb25seU9uZUl0ZW1NZXNzYWdlJykudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5wdXNoKGZpbGVzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zID0gbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLmNvbmNhdChmaWxlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlbW92ZVNlbGVjdGVkOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLm1lZGlhSXRlbXMgJiYgdGhpcy5tZWRpYUl0ZW1zLmluZGV4T2YodGhpcy5zZWxlY3RlZE1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVtb3ZlIGJ1dHRvbiBjYW4gYWxzbyByZW1vdmUgYSB1bmlxdWUgbWVkaWEgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1lZGlhSXRlbXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhID0gbnVsbDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2VsZWN0QW5kRGVsZXRlTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZE1lZGlhID0gbWVkaWE7XHJcbiAgICAgICAgICAgICAgICAvLyBzZXRUaW1lb3V0IGJlY2F1c2Ugc29tZXRpbWVzIHJlbW92ZVNlbGVjdGVkIHdhcyBjYWxsZWQgZXZlbiBiZWZvcmUgdGhlIG1lZGlhIHdhcyBzZXQuXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZVNlbGVjdGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB3YXRjaDoge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiB7XHJcbiAgICAgICAgICAgICAgICBkZWVwOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaGFuZGxlciAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBwcmV2aWV3IHJlbmRlcmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAkKGRvY3VtZW50KS50cmlnZ2VyKCdjb250ZW50cHJldmlldzpyZW5kZXInKTsgfSwgMTAwKTsgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGN1cnJlbnRQcmVmczogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbWVkaWFGaWVsZFByZWZzJywgSlNPTi5zdHJpbmdpZnkobmV3UHJlZnMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pKTtcclxufVxyXG4iLCIvLyBkaWZmZXJlbnQgbWVkaWEgZmllbGQgZWRpdG9ycyB3aWxsIGFkZCB0aGVtc2VsdmVzIHRvIHRoaXMgYXJyYXlcclxudmFyIG1lZGlhRmllbGRBcHBzID0gW107XHJcbiIsIi8vIDxtZWRpYS1maWVsZC10aHVtYnMtY29udGFpbmVyPiBjb21wb25lbnQgXHJcbi8vIGRpZmZlcmVudCBtZWRpYSBmaWVsZCBlZGl0b3JzIHNoYXJlIHRoaXMgY29tcG9uZW50IHRvIHByZXNlbnQgdGhlIHRodW1icy5cclxuVnVlLmNvbXBvbmVudCgnbWVkaWFGaWVsZFRodW1ic0NvbnRhaW5lcicsIHtcclxuICAgIHRlbXBsYXRlOiAnXFxcclxuICAgICAgIDxkaXYgOmlkPVwiaWRQcmVmaXggKyBcXCdfbWVkaWFDb250YWluZXJNYWluXFwnXCIgdi1jbG9haz5cXFxyXG4gICAgICAgICA8ZGl2IHYtaWY9XCJtZWRpYUl0ZW1zLmxlbmd0aCA8IDFcIiBjbGFzcz1cImNhcmQgdGV4dC1jZW50ZXJcIj5cXFxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz0gXCJjYXJkLWJvZHlcIiA+XFxcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGludFwiPnt7VC5ub0ltYWdlc319PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICA8ZHJhZ2dhYmxlIDpsaXN0PVwibWVkaWFJdGVtc1wiIHRhZz1cIm9sXCIgY2xhc3M9XCJyb3cgbWVkaWEtaXRlbXMtZ3JpZFwiID5cXFxyXG4gICAgICAgICAgICA8bGkgdi1mb3I9XCJtZWRpYSBpbiBtZWRpYUl0ZW1zXCJcXFxyXG4gICAgICAgICAgICAgICAgOmtleT1cIm1lZGlhLnZ1ZWtleVwiIFxcXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lZGlhLWNvbnRhaW5lci1tYWluLWxpc3QtaXRlbSBjYXJkIHAtMFwiXFxcclxuICAgICAgICAgICAgICAgIDpzdHlsZT1cInt3aWR0aDogdGh1bWJTaXplICsgMiArIFxcJ3B4XFwnfVwiXFxcclxuICAgICAgICAgICAgICAgIDpjbGFzcz1cIntzZWxlY3RlZDogc2VsZWN0ZWRNZWRpYSA9PSBtZWRpYX1cIlxcXHJcbiAgICAgICAgICAgICAgICB2LW9uOmNsaWNrPVwic2VsZWN0TWVkaWEobWVkaWEpXCIgdi1pZj1cIiFtZWRpYS5pc1JlbW92ZWRcIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cIm1lZGlhLm1lZGlhUGF0aCE9PSBcXCdub3QtZm91bmRcXCdcIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWItY29udGFpbmVyXCIgOnN0eWxlPVwie2hlaWdodDogdGh1bWJTaXplICsgXFwncHhcXCd9XCIgPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHYtaWY9XCJtZWRpYS5taW1lLnN0YXJ0c1dpdGgoXFwnaW1hZ2VcXCcpXCIgXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzcmM9XCJidWlsZE1lZGlhVXJsKG1lZGlhLnVybCwgdGh1bWJTaXplKVwiIFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzdHlsZT1cInttYXhIZWlnaHQ6IHRodW1iU2l6ZSArIFxcJ3B4XFwnICwgbWF4V2lkdGg6IHRodW1iU2l6ZSArIFxcJ3B4XFwnfVwiLz5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgdi1lbHNlIGNsYXNzPVwiZmEtcmVndWxhciBmYS1maWxlIGRpc3BsYXktMVwiIDpkYXRhLW1pbWU9XCJtZWRpYS5taW1lXCI+PC9pPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLWNvbnRhaW5lci1tYWluLWl0ZW0tdGl0bGUgY2FyZC1ib2R5XCI+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiBkZWxldGUtYnV0dG9uXCJcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrLnN0b3A9XCJzZWxlY3RBbmREZWxldGVNZWRpYShtZWRpYSlcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRyYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPVwibWVkaWEudXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiB2aWV3LWJ1dHRvblwiXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1kb3dubG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZWRpYS1maWxlbmFtZSBjYXJkLXRleHQgc21hbGxcIiA6dGl0bGU9XCJtZWRpYS5tZWRpYVBhdGhcIj57eyBtZWRpYS5pc05ldyA/IG1lZGlhLm5hbWUuc3Vic3RyKDM2KSA6IG1lZGlhLm5hbWUgfX08L3NwYW4+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZWxzZT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWItY29udGFpbmVyIGZsZXgtY29sdW1uXCIgOnN0eWxlPVwie2hlaWdodDogdGh1bWJTaXplICsgXFwncHhcXCd9XCI+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtYmFuIHRleHQtZGFuZ2VyIGQtYmxvY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgc21hbGwgZC1ibG9ja1wiPnt7IFQubWVkaWFOb3RGb3VuZCB9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlciBzbWFsbCBkLWJsb2NrIHRleHQtY2VudGVyXCI+e3sgVC5kaXNjYXJkV2FybmluZyB9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4taXRlbS10aXRsZSBjYXJkLWJvZHlcIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtZW5kIGlubGluZS1tZWRpYS1idXR0b24gZGVsZXRlLWJ1dHRvblwiXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrLnN0b3A9XCJzZWxlY3RBbmREZWxldGVNZWRpYShtZWRpYSlcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRyYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZWRpYS1maWxlbmFtZSBjYXJkLXRleHQgc21hbGwgdGV4dC1kYW5nZXJcIiA6dGl0bGU9XCJtZWRpYS5uYW1lXCI+e3sgbWVkaWEubmFtZSB9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgPC9saT5cXFxyXG4gICAgICAgICA8L2RyYWdnYWJsZT5cXFxyXG4gICAgICAgPC9kaXY+XFxcclxuICAgICcsXHJcbiAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgVDoge31cclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgbWVkaWFJdGVtczogQXJyYXksXHJcbiAgICAgICAgc2VsZWN0ZWRNZWRpYTogT2JqZWN0LFxyXG4gICAgICAgIHRodW1iU2l6ZTogTnVtYmVyLFxyXG4gICAgICAgIGlkUHJlZml4OiBTdHJpbmdcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgLy8gcmV0cmlldmluZyBsb2NhbGl6ZWQgc3RyaW5ncyBmcm9tIHZpZXdcclxuICAgICAgICBzZWxmLlQubWVkaWFOb3RGb3VuZCA9ICQoJyN0LW1lZGlhLW5vdC1mb3VuZCcpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5kaXNjYXJkV2FybmluZyA9ICQoJyN0LWRpc2NhcmQtd2FybmluZycpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5ub0ltYWdlcyA9ICQoJyN0LW5vLWltYWdlcycpLnZhbCgpO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBzZWxlY3RBbmREZWxldGVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHBhcmVudC4kZW1pdCgnc2VsZWN0QW5kRGVsZXRlTWVkaWFSZXF1ZXN0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3RNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHBhcmVudC4kZW1pdCgnc2VsZWN0TWVkaWFSZXF1ZXN0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBidWlsZE1lZGlhVXJsOiBmdW5jdGlvbiAodXJsLCB0aHVtYlNpemUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVybCArICh1cmwuaW5kZXhPZignPycpID09IC0xID8gJz8nIDogJyYnKSArICd3aWR0aD0nICsgdGh1bWJTaXplICsgJyZoZWlnaHQ9JyArIHRodW1iU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iXX0= diff --git a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js index 1d911339353..9471f17ec10 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js @@ -1 +1 @@ -function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function ownKeys(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function _objectSpread(e){for(var t=1;t').prop("disabled")),e.support.xhrFileUpload=!(!window.ProgressEvent||!window.FileReader),e.support.xhrFormDataFileUpload=!!window.FormData,e.support.blobSlice=window.Blob&&(Blob.prototype.slice||Blob.prototype.webkitSlice||Blob.prototype.mozSlice),e.widget("blueimp.fileupload",{options:{dropZone:e(document),pasteZone:void 0,fileInput:void 0,replaceFileInput:!0,paramName:void 0,singleFileUploads:!0,limitMultiFileUploads:void 0,limitMultiFileUploadSize:void 0,limitMultiFileUploadSizeOverhead:512,sequentialUploads:!1,limitConcurrentUploads:void 0,forceIframeTransport:!1,redirect:void 0,redirectParamName:void 0,postMessage:void 0,multipart:!0,maxChunkSize:void 0,uploadedBytes:void 0,recalculateProgress:!0,progressInterval:100,bitrateInterval:500,autoUpload:!0,uniqueFilenames:void 0,messages:{uploadedBytes:"Uploaded bytes exceed file size"},i18n:function(t,i){return t=this.messages[t]||t.toString(),i&&e.each(i,(function(e,i){t=t.replace("{"+e+"}",i)})),t},formData:function(e){return e.serializeArray()},add:function(t,i){if(t.isDefaultPrevented())return!1;(i.autoUpload||!1!==i.autoUpload&&e(this).fileupload("option","autoUpload"))&&i.process().done((function(){i.submit()}))},processData:!1,contentType:!1,cache:!1,timeout:0},_promisePipe:(i=e.fn.jquery.split("."),Number(i[0])>1||Number(i[1])>7?"then":"pipe"),_specialOptions:["fileInput","dropZone","pasteZone","multipart","forceIframeTransport"],_blobSlice:e.support.blobSlice&&function(){return(this.slice||this.webkitSlice||this.mozSlice).apply(this,arguments)},_BitrateTimer:function(){this.timestamp=Date.now?Date.now():(new Date).getTime(),this.loaded=0,this.bitrate=0,this.getBitrate=function(e,t,i){var n=e-this.timestamp;return(!this.bitrate||!i||n>i)&&(this.bitrate=(t-this.loaded)*(1e3/n)*8,this.loaded=t,this.timestamp=e),this.bitrate}},_isXHRUpload:function(t){return!t.forceIframeTransport&&(!t.multipart&&e.support.xhrFileUpload||e.support.xhrFormDataFileUpload)},_getFormData:function(t){var i;return"function"===e.type(t.formData)?t.formData(t.form):e.isArray(t.formData)?t.formData:"object"===e.type(t.formData)?(i=[],e.each(t.formData,(function(e,t){i.push({name:e,value:t})})),i):[]},_getTotal:function(t){var i=0;return e.each(t,(function(e,t){i+=t.size||1})),i},_initProgressObject:function(t){var i={loaded:0,total:0,bitrate:0};t._progress?e.extend(t._progress,i):t._progress=i},_initResponseObject:function(e){var t;if(e._response)for(t in e._response)Object.prototype.hasOwnProperty.call(e._response,t)&&delete e._response[t];else e._response={}},_onProgress:function(t,i){if(t.lengthComputable){var n,a=Date.now?Date.now():(new Date).getTime();if(i._time&&i.progressInterval&&a-i._time").prop("href",t.url).prop("host");t.dataType="iframe "+(t.dataType||""),t.formData=this._getFormData(t),t.redirect&&i&&i!==location.host&&t.formData.push({name:t.redirectParamName||"redirect",value:t.redirect})},_initDataSettings:function(e){this._isXHRUpload(e)?(this._chunkedUpload(e,!0)||(e.data||this._initXHRData(e),this._initProgressListener(e)),e.postMessage&&(e.dataType="postmessage "+(e.dataType||""))):this._initIframeSettings(e)},_getParamName:function(t){var i=e(t.fileInput),n=t.paramName;return n?e.isArray(n)||(n=[n]):(n=[],i.each((function(){for(var t=e(this),i=t.prop("name")||"files[]",a=(t.prop("files")||[1]).length;a;)n.push(i),a-=1})),n.length||(n=[i.prop("name")||"files[]"])),n},_initFormSettings:function(t){t.form&&t.form.length||(t.form=e(t.fileInput.prop("form")),t.form.length||(t.form=e(this.options.fileInput.prop("form")))),t.paramName=this._getParamName(t),t.url||(t.url=t.form.prop("action")||location.href),t.type=(t.type||"string"===e.type(t.form.prop("method"))&&t.form.prop("method")||"").toUpperCase(),"POST"!==t.type&&"PUT"!==t.type&&"PATCH"!==t.type&&(t.type="POST"),t.formAcceptCharset||(t.formAcceptCharset=t.form.attr("accept-charset"))},_getAJAXSettings:function(t){var i=e.extend({},this.options,t);return this._initFormSettings(i),this._initDataSettings(i),i},_getDeferredState:function(e){return e.state?e.state():e.isResolved()?"resolved":e.isRejected()?"rejected":"pending"},_enhancePromise:function(e){return e.success=e.done,e.error=e.fail,e.complete=e.always,e},_getXHRPromise:function(t,i,n){var a=e.Deferred(),r=a.promise();return i=i||this.options.context||r,!0===t?a.resolveWith(i,n):!1===t&&a.rejectWith(i,n),r.abort=a.promise,this._enhancePromise(r)},_addConvenienceMethods:function(t,i){var n=this,a=function(t){return e.Deferred().resolveWith(n,t).promise()};i.process=function(t,r){return(t||r)&&(i._processQueue=this._processQueue=(this._processQueue||a([this]))[n._promisePipe]((function(){return i.errorThrown?e.Deferred().rejectWith(n,[i]).promise():a(arguments)}))[n._promisePipe](t,r)),this._processQueue||a([this])},i.submit=function(){return"pending"!==this.state()&&(i.jqXHR=this.jqXHR=!1!==n._trigger("submit",e.Event("submit",{delegatedEvent:t}),this)&&n._onSend(t,this)),this.jqXHR||n._getXHRPromise()},i.abort=function(){return this.jqXHR?this.jqXHR.abort():(this.errorThrown="abort",n._trigger("fail",null,this),n._getXHRPromise(!1))},i.state=function(){return this.jqXHR?n._getDeferredState(this.jqXHR):this._processQueue?n._getDeferredState(this._processQueue):void 0},i.processing=function(){return!this.jqXHR&&this._processQueue&&"pending"===n._getDeferredState(this._processQueue)},i.progress=function(){return this._progress},i.response=function(){return this._response}},_getUploadedBytes:function(e){var t=e.getResponseHeader("Range"),i=t&&t.split("-"),n=i&&i.length>1&&parseInt(i[1],10);return n&&n+1},_chunkedUpload:function(t,i){t.uploadedBytes=t.uploadedBytes||0;var n,a,r=this,o=t.files[0],s=o.size,l=t.uploadedBytes,d=t.maxChunkSize||s,c=this._blobSlice,u=e.Deferred(),p=u.promise();return!(!(this._isXHRUpload(t)&&c&&(l||("function"===e.type(d)?d(t):d)=s?(o.error=t.i18n("uploadedBytes"),this._getXHRPromise(!1,t.context,[null,"error",o.error])):(a=function(){var i=e.extend({},t),p=i._progress.loaded;i.blob=c.call(o,l,l+("function"===e.type(d)?d(i):d),o.type),i.chunkSize=i.blob.size,i.contentRange="bytes "+l+"-"+(l+i.chunkSize-1)+"/"+s,r._trigger("chunkbeforesend",null,i),r._initXHRData(i),r._initProgressListener(i),n=(!1!==r._trigger("chunksend",null,i)&&e.ajax(i)||r._getXHRPromise(!1,i.context)).done((function(n,o,d){l=r._getUploadedBytes(d)||l+i.chunkSize,p+i.chunkSize-i._progress.loaded&&r._onProgress(e.Event("progress",{lengthComputable:!0,loaded:l-i.uploadedBytes,total:l-i.uploadedBytes}),i),t.uploadedBytes=i.uploadedBytes=l,i.result=n,i.textStatus=o,i.jqXHR=d,r._trigger("chunkdone",null,i),r._trigger("chunkalways",null,i),ls._sending)for(var n=s._slots.shift();n;){if("pending"===s._getDeferredState(n)){n.resolve();break}n=s._slots.shift()}0===s._active&&s._trigger("stop")}))};return this._beforeSend(t,l),this.options.sequentialUploads||this.options.limitConcurrentUploads&&this.options.limitConcurrentUploads<=this._sending?(this.options.limitConcurrentUploads>1?(r=e.Deferred(),this._slots.push(r),o=r[s._promisePipe](d)):(this._sequence=this._sequence[s._promisePipe](d,d),o=this._sequence),o.abort=function(){return a=[void 0,"abort","abort"],n?n.abort():(r&&r.rejectWith(l.context,a),d())},this._enhancePromise(o)):d()},_onAdd:function(t,i){var n,a,r,o,s=this,l=!0,d=e.extend({},this.options,i),c=i.files,u=c.length,p=d.limitMultiFileUploads,m=d.limitMultiFileUploadSize,f=d.limitMultiFileUploadSizeOverhead,h=0,g=this._getParamName(d),v=0;if(!u)return!1;if(m&&void 0===c[0].size&&(m=void 0),(d.singleFileUploads||p||m)&&this._isXHRUpload(d))if(d.singleFileUploads||m||!p)if(!d.singleFileUploads&&m)for(r=[],n=[],o=0;om||p&&o+1-v>=p)&&(r.push(c.slice(v,o+1)),(a=g.slice(v,o+1)).length||(a=g),n.push(a),v=o+1,h=0);else n=g;else for(r=[],n=[],o=0;o").append(n)[0].reset(),i.after(n).detach(),a&&n.trigger("focus"),e.cleanData(i.off("remove")),this.options.fileInput=this.options.fileInput.map((function(e,t){return t===i[0]?n[0]:t})),i[0]===this.element[0]&&(this.element=n)},_handleFileTreeEntry:function(t,i){var n,a=this,r=e.Deferred(),o=[],s=function(e){e&&!e.entry&&(e.entry=t),r.resolve([e])};return i=i||"",t.isFile?t._file?(t._file.relativePath=i,r.resolve(t._file)):t.file((function(e){e.relativePath=i,r.resolve(e)}),s):t.isDirectory?(n=t.createReader(),function e(){n.readEntries((function(n){n.length?(o=o.concat(n),e()):function(e){a._handleFileTreeEntries(e,i+t.name+"/").done((function(e){r.resolve(e)})).fail(s)}(o)}),s)}()):r.resolve([]),r.promise()},_handleFileTreeEntries:function(t,i){var n=this;return e.when.apply(e,e.map(t,(function(e){return n._handleFileTreeEntry(e,i)})))[this._promisePipe]((function(){return Array.prototype.concat.apply([],arguments)}))},_getDroppedFiles:function(t){var i=(t=t||{}).items;return i&&i.length&&(i[0].webkitGetAsEntry||i[0].getAsEntry)?this._handleFileTreeEntries(e.map(i,(function(e){var t;return e.webkitGetAsEntry?((t=e.webkitGetAsEntry())&&(t._file=e.getAsFile()),t):e.getAsEntry()}))):e.Deferred().resolve(e.makeArray(t.files)).promise()},_getSingleFileInputFiles:function(t){var i,n,a=(t=e(t)).prop("entries");if(a&&a.length)return this._handleFileTreeEntries(a);if((i=e.makeArray(t.prop("files"))).length)void 0===i[0].name&&i[0].fileName&&e.each(i,(function(e,t){t.name=t.fileName,t.size=t.fileSize}));else{if(!(n=t.prop("value")))return e.Deferred().resolve([]).promise();i=[{name:n.replace(/^.*\\/,"")}]}return e.Deferred().resolve(i).promise()},_getFileInputFiles:function(t){return t instanceof e&&1!==t.length?e.when.apply(e,e.map(t,this._getSingleFileInputFiles))[this._promisePipe]((function(){return Array.prototype.concat.apply([],arguments)})):this._getSingleFileInputFiles(t)},_onChange:function(t){var i=this,n={fileInput:e(t.target),form:e(t.target.form)};this._getFileInputFiles(n.fileInput).always((function(a){n.files=a,i.options.replaceFileInput&&i._replaceFileInput(n),!1!==i._trigger("change",e.Event("change",{delegatedEvent:t}),n)&&i._onAdd(t,n)}))},_onPaste:function(t){var i=t.originalEvent&&t.originalEvent.clipboardData&&t.originalEvent.clipboardData.items,n={files:[]};i&&i.length&&(e.each(i,(function(e,t){var i=t.getAsFile&&t.getAsFile();i&&n.files.push(i)})),!1!==this._trigger("paste",e.Event("paste",{delegatedEvent:t}),n)&&this._onAdd(t,n))},_onDrop:function(t){t.dataTransfer=t.originalEvent&&t.originalEvent.dataTransfer;var i=this,n=t.dataTransfer,a={};n&&n.files&&n.files.length&&(t.preventDefault(),this._getDroppedFiles(n).always((function(n){a.files=n,!1!==i._trigger("drop",e.Event("drop",{delegatedEvent:t}),a)&&i._onAdd(t,a)})))},_onDragOver:t("dragover"),_onDragEnter:t("dragenter"),_onDragLeave:t("dragleave"),_initEventHandlers:function(){this._isXHRUpload(this.options)&&(this._on(this.options.dropZone,{dragover:this._onDragOver,drop:this._onDrop,dragenter:this._onDragEnter,dragleave:this._onDragLeave}),this._on(this.options.pasteZone,{paste:this._onPaste})),e.support.fileInput&&this._on(this.options.fileInput,{change:this._onChange})},_destroyEventHandlers:function(){this._off(this.options.dropZone,"dragenter dragleave dragover drop"),this._off(this.options.pasteZone,"paste"),this._off(this.options.fileInput,"change")},_destroy:function(){this._destroyEventHandlers()},_setOption:function(t,i){var n=-1!==e.inArray(t,this._specialOptions);n&&this._destroyEventHandlers(),this._super(t,i),n&&(this._initSpecialOptions(),this._initEventHandlers())},_initSpecialOptions:function(){var t=this.options;void 0===t.fileInput?t.fileInput=this.element.is('input[type="file"]')?this.element:this.element.find('input[type="file"]'):t.fileInput instanceof e||(t.fileInput=e(t.fileInput)),t.dropZone instanceof e||(t.dropZone=e(t.dropZone)),t.pasteZone instanceof e||(t.pasteZone=e(t.pasteZone))},_getRegExp:function(e){var t=e.split("/"),i=t.pop();return t.shift(),new RegExp(t.join("/"),i)},_isRegExpOption:function(t,i){return"url"!==t&&"string"===e.type(i)&&/^\/.*\/[igm]{0,3}$/.test(i)},_initDataAttributes:function(){var t=this,i=this.options,n=this.element.data();e.each(this.element[0].attributes,(function(e,a){var r,o=a.name.toLowerCase();/^data-/.test(o)&&(o=o.slice(5).replace(/-[a-z]/g,(function(e){return e.charAt(1).toUpperCase()})),r=n[o],t._isRegExpOption(o,r)&&(r=t._getRegExp(r)),i[o]=r)}))},_create:function(){this._initDataAttributes(),this._initSpecialOptions(),this._slots=[],this._sequence=this._getXHRPromise(!0),this._sending=this._active=0,this._initProgressObject(this),this._initEventHandlers()},active:function(){return this._active},progress:function(){return this._progress},add:function(t){var i=this;t&&!this.options.disabled&&(t.fileInput&&!t.files?this._getFileInputFiles(t.fileInput).always((function(e){t.files=e,i._onAdd(null,t)})):(t.files=e.makeArray(t.files),this._onAdd(null,t)))},send:function(t){if(t&&!this.options.disabled){if(t.fileInput&&!t.files){var i,n,a=this,r=e.Deferred(),o=r.promise();return o.abort=function(){return n=!0,i?i.abort():(r.reject(null,"abort","abort"),o)},this._getFileInputFiles(t.fileInput).always((function(e){n||(e.length?(t.files=e,(i=a._onSend(null,t)).then((function(e,t,i){r.resolve(e,t,i)}),(function(e,t,i){r.reject(e,t,i)}))):r.reject())})),this._enhancePromise(o)}if(t.files=e.makeArray(t.files),t.files.length)return this._onSend(null,t)}return this._getXHRPromise(!1,t&&t.context)}})})),function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"===("undefined"==typeof exports?"undefined":_typeof(exports))?e(require("jquery")):e(window.jQuery)}((function(e){"use strict";var t=0,i=e,n="parseJSON";"JSON"in window&&"parse"in JSON&&(i=JSON,n="parse"),e.ajaxTransport("iframe",(function(i){if(i.async){var n,a,r,o=i.initialIframeSrc||"javascript:false;";return{send:function(s,l){(n=e('
')).attr("accept-charset",i.formAcceptCharset),r=/\?/.test(i.url)?"&":"?","DELETE"===i.type?(i.url=i.url+r+"_method=DELETE",i.type="POST"):"PUT"===i.type?(i.url=i.url+r+"_method=PUT",i.type="POST"):"PATCH"===i.type&&(i.url=i.url+r+"_method=PATCH",i.type="POST"),a=e('').on("load",(function(){var t,r=e.isArray(i.paramName)?i.paramName:[i.paramName];a.off("load").on("load",(function(){var t;try{if(!(t=a.contents()).length||!t[0].firstChild)throw new Error}catch(e){t=void 0}l(200,"success",{iframe:t}),e('').appendTo(n),window.setTimeout((function(){n.remove()}),0)})),n.prop("target",a.prop("name")).prop("action",i.url).prop("method",i.type),i.formData&&e.each(i.formData,(function(t,i){e('').prop("name",i.name).val(i.value).appendTo(n)})),i.fileInput&&i.fileInput.length&&"POST"===i.type&&(t=i.fileInput.clone(),i.fileInput.after((function(e){return t[e]})),i.paramName&&i.fileInput.each((function(t){e(this).prop("name",r[t]||i.paramName)})),n.append(i.fileInput).prop("enctype","multipart/form-data").prop("encoding","multipart/form-data"),i.fileInput.removeAttr("form")),window.setTimeout((function(){n.submit(),t&&t.length&&i.fileInput.each((function(i,n){var a=e(t[i]);e(n).prop("name",a.prop("name")).attr("form",a.attr("form")),a.replaceWith(n)}))}),0)})),n.append(a).appendTo(document.body)},abort:function(){a&&a.off("load").prop("src",o),n&&n.remove()}}}})),e.ajaxSetup({converters:{"iframe text":function(t){return t&&e(t[0].body).text()},"iframe json":function(t){return t&&i[n](e(t[0].body).text())},"iframe html":function(t){return t&&e(t[0].body).html()},"iframe xml":function(t){var i=t&&t[0];return i&&e.isXMLDoc(i)?i:e.parseXML(i.XMLDocument&&i.XMLDocument.xml||e(i.body).html())},"iframe script":function(t){return t&&e.globalEval(e(t[0].body).text())}}})}));var bus=new Vue;function initializeMediaApplication(e,t,i){initialized||(initialized=!0,t||console.error("mediaApplicationUrl variable is not defined"),$.ajax({url:t,method:"GET",success:function(t){$(".ta-content").append(t),$(document).trigger("mediaapplication:ready");var n={name:$("#t-mediaLibrary").text(),path:"",folder:"",isDirectory:!0};mediaApp=new Vue({el:"#mediaApp",data:{selectedFolder:{},mediaItems:[],selectedMedias:[],errors:[],dragDropThumbnail:new Image,smallThumbs:!1,gridView:!1,mediaFilter:"",sortBy:"",sortAsc:!0,itemsInPage:[]},created:function(){var e=this;e.dragDropThumbnail.src=(i||"")+"/OrchardCore.Media/Images/drag-thumbnail.png",bus.$on("folderSelected",(function(t){e.selectedFolder=t})),bus.$on("folderDeleted",(function(){e.selectRoot()})),bus.$on("folderAdded",(function(t){e.selectedFolder=t,t.selected=!0})),bus.$on("mediaListMoved",(function(t){e.loadFolder(e.selectedFolder),t&&e.errors.push(t)})),bus.$on("mediaRenamed",(function(t,i,n){var a=e.mediaItems.filter((function(e){return e.mediaPath===n}))[0];a.mediaPath=i,a.name=t})),bus.$on("createFolderRequested",(function(t){e.createFolder()})),bus.$on("deleteFolderRequested",(function(t){e.deleteFolder()})),bus.$on("sortChangeRequested",(function(t){e.changeSort(t)})),bus.$on("mediaToggleRequested",(function(t){e.toggleSelectionOfMedia(t)})),bus.$on("renameMediaRequested",(function(t){e.renameMedia(t)})),bus.$on("deleteMediaRequested",(function(t){e.deleteMediaItem(t)})),bus.$on("mediaDragStartRequested",(function(t,i){e.handleDragStart(t,i)})),bus.$on("pagerEvent",(function(t){e.itemsInPage=t,e.selectedMedias=[]})),localStorage.getItem("mediaApplicationPrefs")?e.currentPrefs=JSON.parse(localStorage.getItem("mediaApplicationPrefs")):e.selectedFolder=n},computed:{isHome:function(){return this.selectedFolder==n},parents:function(){var e=[];for(parentFolder=this.selectedFolder;parentFolder&&""!=parentFolder.path;)e.unshift(parentFolder),parentFolder=parentFolder.parent;return e},root:function(){return n},filteredMediaItems:function(){var e=this;e.selectedMedias=[];var t=e.mediaItems.filter((function(t){return t.name.toLowerCase().indexOf(e.mediaFilter.toLowerCase())>-1}));switch(e.sortBy){case"size":t.sort((function(t,i){return e.sortAsc?t.size-i.size:i.size-t.size}));break;case"mime":t.sort((function(t,i){return e.sortAsc?t.mime.toLowerCase().localeCompare(i.mime.toLowerCase()):i.mime.toLowerCase().localeCompare(t.mime.toLowerCase())}));break;case"lastModify":t.sort((function(t,i){return e.sortAsc?t.lastModify-i.lastModify:i.lastModify-t.lastModify}));break;default:t.sort((function(t,i){return e.sortAsc?t.name.toLowerCase().localeCompare(i.name.toLowerCase()):i.name.toLowerCase().localeCompare(t.name.toLowerCase())}))}return t},hiddenCount:function(){return this.mediaItems.length-this.filteredMediaItems.length},thumbSize:function(){return this.smallThumbs?100:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs,selectedFolder:this.selectedFolder,gridView:this.gridView}},set:function(e){e&&(this.smallThumbs=e.smallThumbs,this.selectedFolder=e.selectedFolder,this.gridView=e.gridView)}}},watch:{currentPrefs:function(e){localStorage.setItem("mediaApplicationPrefs",JSON.stringify(e))},selectedFolder:function(e){this.mediaFilter="",this.selectedFolder=e,this.loadFolder(e)}},mounted:function(){this.$refs.rootFolder.toggle()},methods:{uploadUrl:function(){if(!this.selectedFolder)return null;var e=$("#uploadFiles").val();return e+(-1==e.indexOf("?")?"?":"&")+"path="+encodeURIComponent(this.selectedFolder.path)},selectRoot:function(){this.selectedFolder=this.root},loadFolder:function(e){this.errors=[],this.selectedMedias=[];var t=this,i=$("#getMediaItemsUrl").val();console.log(e.path),$.ajax({url:i+(-1==i.indexOf("?")?"?":"&")+"path="+encodeURIComponent(e.path),method:"GET",success:function(e){e.forEach((function(e){e.open=!1})),t.mediaItems=e,t.selectedMedias=[],t.sortBy="",t.sortAsc=!0},error:function(i){console.log("error loading folder:"+e.path),t.selectRoot()}})},selectAll:function(){this.selectedMedias=[];for(var e=0;e-1&&(t.mediaItems.splice(n,1),bus.$emit("mediaDeleted",t.selectedMedias[i]))}t.selectedMedias=[]},error:function(e){console.error(e.responseText)}})}}}))},deleteMediaItem:function(e){var t=this;e&&confirmDialog(_objectSpread(_objectSpread({},$("#deleteMedia").data()),{},{callback:function(i){i&&$.ajax({url:$("#deleteMediaUrl").val()+"?path="+encodeURIComponent(e.mediaPath),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(i){var n=t.mediaItems&&t.mediaItems.indexOf(e);n>-1&&(t.mediaItems.splice(n,1),bus.$emit("mediaDeleted",e))},error:function(e){console.error(e.responseText)}})}}))},handleDragStart:function(e,t){var i=[];this.selectedMedias.forEach((function(e){i.push(e.name)})),0==this.isMediaSelected(e)&&(i.push(e.name),this.selectedMedias.push(e)),t.dataTransfer.setData("mediaNames",JSON.stringify(i)),t.dataTransfer.setData("sourceFolder",this.selectedFolder.path),t.dataTransfer.setDragImage(this.dragDropThumbnail,10,10),t.dataTransfer.effectAllowed="move"},handleScrollWhileDrag:function(e){e.clientY<150&&window.scrollBy(0,-10),e.clientY>window.innerHeight-100&&window.scrollBy(0,10)},changeSort:function(e){this.sortBy==e?this.sortAsc=!this.sortAsc:(this.sortAsc=!0,this.sortBy=e)}}}),$("#create-folder-name").keypress((function(e){if(13==e.which)return $("#modalFooterOk").click(),!1})),$("#modalFooterOk").on("click",(function(e){var t=$("#create-folder-name").val();""!==t&&$.ajax({url:$("#createFolderUrl").val()+"?path="+encodeURIComponent(mediaApp.selectedFolder.path)+"&name="+encodeURIComponent(t),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(e){bus.$emit("addFolder",mediaApp.selectedFolder,e),bootstrap.Modal.getOrCreateInstance($("#createFolderModal")).hide()},error:function(e){$("#createFolderModal-errors").empty();var t=JSON.parse(e.responseText).value;$('').text(t).appendTo($("#createFolderModal-errors"))}})})),$("#renameMediaModalFooterOk").on("click",(function(e){var t=$("#new-item-name").val(),i=$("#old-item-name").val();if(""!==t){var n=mediaApp.selectedFolder.path+"/";"/"===n&&(n="");var a=n+t,r=n+i;if(a.toLowerCase()!==r.toLowerCase())$.ajax({url:$("#renameMediaUrl").val()+"?oldPath="+encodeURIComponent(r)+"&newPath="+encodeURIComponent(a),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(e){bootstrap.Modal.getOrCreateInstance($("#renameMediaModal")).hide(),bus.$emit("mediaRenamed",t,a,r)},error:function(e){$("#renameMediaModal-errors").empty();var t=JSON.parse(e.responseText).value;$('').text(t).appendTo($("#renameMediaModal-errors"))}});else bootstrap.Modal.getOrCreateInstance($("#renameMediaModal")).hide()}})),e&&(document.getElementById("mediaApp").style.display=""),$(document).trigger("mediaApp:ready")},error:function(e){console.error(e.responseText)}}))}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function ownKeys(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function _objectSpread(e){for(var t=1;t0&&a},thumbSize:function(){return this.smallThumbs?120:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs}},set:function(e){e&&(this.smallThumbs=e.smallThumbs)}}},mounted:function(){var e=this;e.paths=c,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)}));var n="#"+t,r=u.attr("id"),o=crypto.randomUUID();$(n).fileupload({limitConcurrentUploads:20,dropZone:$("#"+r),dataType:"json",url:i,maxChunkSize:l,add:function(t,i){var n,a=i.files.length;for(n=0;n0)for(var r=0;r1&&!1===a?(alert($("#onlyOneItemMessage").val()),d.mediaItems.push(i[0]),d.initialized=!0):(d.mediaItems=d.mediaItems.concat(i),d.initialized=!0)):alert(n)},error:function(e,t,i){console.log("Error on upload."),console.log(e),console.log(t),console.log(i)}}).on("fileuploadchunkbeforesend",(function(e,t){var i=t.files[0];t.blob=new File([t.blob],i.name,{type:i.type,lastModified:i.lastModified})}))},methods:{selectMedia:function(e){this.selectedMedia=e},getUniqueId:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))},removeSelected:function(e){if(this.selectedMedia){var t=this.mediaItems&&this.mediaItems.indexOf(this.selectedMedia);t>-1&&(this.mediaItems[t].isRemoved=!0,this.mediaItems.splice(t,1))}else 1===this.mediaItems.length&&(this.mediaItems[t].isRemoved=!0,this.mediaItems.splice(0,1));this.selectedMedia=null},showMediaTextModal:function(e){this.mediaTextModal=new bootstrap.Modal(this.$refs.mediaTextModal),this.mediaTextModal.show(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){this.mediaTextModal.hide(),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){this.anchoringModal=new bootstrap.Modal(this.$refs.anchoringModal),this.anchoringModal.show(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){this.anchoringModal.hide(),this.selectedMedia.anchor=this.backupAnchor},resetAnchor:function(e){this.selectedMedia.anchor={x:.5,y:.5}},onAnchorDrop:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},anchorLeft:function(){if(this.$refs.anchorImage&&this.$refs.modalBody&&this.selectedMedia){var e=(this.$refs.modalBody.clientWidth-this.$refs.anchorImage.clientWidth)/2,t=this.selectedMedia.anchor.x*this.$refs.anchorImage.clientWidth+e;return t<17?t=17:t-=8,t+"px"}return"0"},anchorTop:function(){if(this.$refs.anchorImage&&this.selectedMedia){var e=this.selectedMedia.anchor.y*this.$refs.anchorImage.clientHeight;return e<15?e=15:e+=5,e+"px"}return"0"},setAnchor:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},addMediaFiles:function(e){e.length>1&&!1===a?(alert($("#onlyOneItemMessage").val()),d.mediaItems.push(e[0]),d.initialized=!0):(d.mediaItems=d.mediaItems.concat(e),d.initialized=!0)},selectAndDeleteMedia:function(e){var t=this;t.selectedMedia=e,setTimeout((function(){t.removeSelected()}),100)}},watch:{mediaItems:{deep:!0,handler:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},currentPrefs:function(e){localStorage.setItem("mediaFieldPrefs",JSON.stringify(e))}}}))}function initializeMediaField(e,t,i,n,a,r){if(null!==e){var o,s=$(document.getElementById($(e).data("for"))).data("init"),l=$(e),d=l.attr("id");t.addEventListener("hidden.bs.modal",(function(e){$("#mediaApp").appendTo("body"),$("#mediaApp").hide()})),mediaFieldApps.push(o=new Vue({el:l.get(0),data:{mediaItems:[],selectedMedia:null,smallThumbs:!1,idPrefix:d,initialized:!1,allowMediaText:a,backupMediaText:"",allowAnchors:r,backupAnchor:null,mediaTextModal:null,anchoringModal:null},created:function(){this.currentPrefs=JSON.parse(localStorage.getItem("mediaFieldPrefs"))},computed:{paths:{get:function(){var e=[];return this.initialized?(this.mediaItems.forEach((function(t){"not-found"!==t.mediaPath&&e.push({path:t.mediaPath,mediaText:t.mediaText,anchor:t.anchor})})),JSON.stringify(e)):JSON.stringify(s)},set:function(e){var t=this,n=e||[],a=$.Deferred(),r=[],o=0;n.forEach((function(e,n){r.push({name:" "+e.path,mime:"",mediaPath:""}),promise=$.when(a).done((function(){$.ajax({url:i+"?path="+encodeURIComponent(e.path),method:"GET",success:function(i){i.vuekey=i.name+n.toString(),i.mediaText=e.mediaText,i.anchor=e.anchor,r.splice(n,1,i),r.length===++o&&(r.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)},error:function(i){console.log(i),r.splice(n,1,{name:e.path,mime:"",mediaPath:"not-found",mediaText:"",anchor:{x:0,y:0}}),r.length===++o&&(r.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)}})}))})),a.resolve()}},fileSize:function(){return Math.round(this.selectedMedia.size/1024)},canAddMedia:function(){return 0===this.mediaItems.length||this.mediaItems.length>0&&n},thumbSize:function(){return this.smallThumbs?120:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs}},set:function(e){e&&(this.smallThumbs=e.smallThumbs)}}},mounted:function(){var e=this;e.paths=s,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)})),e.$on("filesUploaded",(function(t){e.addMediaFiles(t)}))},methods:{selectMedia:function(e){this.selectedMedia=e},showModal:function(e){var i=this;if(i.canAddMedia){$("#mediaApp").appendTo($(t).find(".modal-body")),$("#mediaApp").show();var n=new bootstrap.Modal(t);n.show(),$(t).find(".mediaFieldSelectButton").off("click").on("click",(function(e){return i.addMediaFiles(mediaApp.selectedMedias),mediaApp.selectedMedias=[],n.hide(),!0}))}},showMediaTextModal:function(e){this.mediaTextModal=new bootstrap.Modal(this.$refs.mediaTextModal),this.mediaTextModal.show(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){this.mediaTextModal.hide(),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){this.anchoringModal=new bootstrap.Modal(this.$refs.anchoringModal),this.anchoringModal.show(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){this.anchoringModal.hide(),this.selectedMedia.anchor=this.backupAnchor},resetAnchor:function(e){this.selectedMedia.anchor={x:.5,y:.5}},onAnchorDrop:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},anchorLeft:function(){if(this.$refs.anchorImage&&this.$refs.modalBody&&this.selectedMedia){var e=(this.$refs.modalBody.clientWidth-this.$refs.anchorImage.clientWidth)/2,t=this.selectedMedia.anchor.x*this.$refs.anchorImage.clientWidth+e,i=Math.round(this.$refs.modalBody.querySelector(".icon-media-anchor").clientWidth);return Number.isInteger(i)&&(t-=i/2),t+"px"}return"0"},anchorTop:function(){return this.$refs.anchorImage&&this.selectedMedia?this.selectedMedia.anchor.y*this.$refs.anchorImage.clientHeight+"px":"0"},setAnchor:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},addMediaFiles:function(e){e.length>1&&!1===n?(alert($("#onlyOneItemMessage").val()),o.mediaItems.push(e[0]),o.initialized=!0):(o.mediaItems=o.mediaItems.concat(e),o.initialized=!0)},removeSelected:function(e){if(this.selectedMedia){var t=this.mediaItems&&this.mediaItems.indexOf(this.selectedMedia);t>-1&&this.mediaItems.splice(t,1)}else 1===this.mediaItems.length&&this.mediaItems.splice(0,1);this.selectedMedia=null},selectAndDeleteMedia:function(e){var t=this;t.selectedMedia=e,setTimeout((function(){t.removeSelected()}),100)}},watch:{mediaItems:{deep:!0,handler:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},currentPrefs:function(e){localStorage.setItem("mediaFieldPrefs",JSON.stringify(e))}}}))}}$(document).on("mediaApp:ready",(function(){var e=crypto.randomUUID();$("#fileupload").fileupload({dropZone:$("#mediaApp"),limitConcurrentUploads:20,dataType:"json",url:$("#uploadFiles").val(),maxChunkSize:Number($("#maxUploadChunkSize").val()||0),formData:function(){var t=$("input[name=__RequestVerificationToken]").val();return[{name:"path",value:mediaApp.selectedFolder.path},{name:"__RequestVerificationToken",value:t},{name:"__chunkedFileUploadId",value:e}]},done:function(e,t){$.each(t.result.files,(function(e,t){t.error||mediaApp.mediaItems.push(t)}))}}).on("fileuploadchunkbeforesend",(function(e,t){var i=t.files[0];t.blob=new File([t.blob],i.name,{type:i.type,lastModified:i.lastModified})}))})),$(document).bind("dragover",(function(e){var t=e.originalEvent.dataTransfer;if(t.types&&(t.types.indexOf?-1!=t.types.indexOf("Files"):t.types.contains("Files"))){var i=$("#customdropzone"),n=window.dropZoneTimeout;n?clearTimeout(n):i.addClass("in");$(e.target).closest(i);window.dropZoneTimeout=setTimeout((function(){window.dropZoneTimeout=null,i.removeClass("in")}),100)}})),Vue.component("folder",{template:'\n
  • \n \n
      \n \n \n
    \n
  • \n '),props:{model:Object,selectedInMediaApp:Object,level:Number},data:function(){return{open:!1,children:null,parent:null,isHovered:!1,padding:0}},computed:{empty:function(){return!this.children||0==this.children.length},isSelected:function(){return this.selectedInMediaApp.name==this.model.name&&this.selectedInMediaApp.path==this.model.path},isRoot:function(){return""===this.model.path}},mounted:function(){0==this.isRoot&&this.isAncestorOfSelectedFolder()&&this.toggle(),this.padding=this.level<3?16:16+8*this.level},created:function(){var e=this;bus.$on("deleteFolder",(function(t){if(e.children){var i=e.children&&e.children.indexOf(t);i>-1&&(e.children.splice(i,1),bus.$emit("folderDeleted"))}})),bus.$on("addFolder",(function(t,i){e.model==t&&(null!==e.children&&e.children.push(i),i.parent=e.model,bus.$emit("folderAdded",i))}))},methods:{isAncestorOfSelectedFolder:function(){for(parentFolder=mediaApp.selectedFolder;parentFolder;){if(parentFolder.path==this.model.path)return!0;parentFolder=parentFolder.parent}return!1},toggle:function(){this.open=!this.open,this.open&&!this.children&&this.loadChildren()},select:function(){bus.$emit("folderSelected",this.model),this.loadChildren()},createFolder:function(){bus.$emit("createFolderRequested")},deleteFolder:function(){bus.$emit("deleteFolderRequested")},loadChildren:function(){var e=this;0==this.open&&(this.open=!0),$.ajax({url:$("#getFoldersUrl").val()+"?path="+encodeURIComponent(e.model.path),method:"GET",success:function(t){e.children=t,e.children.forEach((function(t){t.parent=e.model}))},error:function(e){emtpy=!1,console.error(e.responseText)}})},handleDragOver:function(e){this.isHovered=!0},handleDragLeave:function(e){this.isHovered=!1},moveMediaToFolder:function(e,t){this.isHovered=!1;var i=JSON.parse(t.dataTransfer.getData("mediaNames"));if(!(i.length<1)){var n=t.dataTransfer.getData("sourceFolder"),a=e.path;""===n&&(n="root"),""===a&&(a="root"),n!==a?confirmDialog(_objectSpread(_objectSpread({},$("#moveMedia").data()),{},{callback:function(e){e&&$.ajax({url:$("#moveMediaListUrl").val(),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val(),mediaNames:i,sourceFolder:n,targetFolder:a},success:function(){bus.$emit("mediaListMoved")},error:function(e){console.error(e.responseText),bus.$emit("mediaListMoved",e.responseText)}})}})):alert($("#sameFolderMessage").val())}}}}),Vue.component("media-items-grid",{template:'\n
      \n
    1. \n
      \n \n \n
      \n
      \n \n \n \n {{ media.name }}\n
      \n
    2. \n
    \n ',data:function(){return{T:{}}},props:{filteredMediaItems:Array,selectedMedias:Array,thumbSize:Number},created:function(){this.T.editButton=$("#t-edit-button").val(),this.T.deleteButton=$("#t-delete-button").val()},methods:{isMediaSelected:function(e){return this.selectedMedias.some((function(t,i,n){return t.url.toLowerCase()===e.url.toLowerCase()}))},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},toggleSelectionOfMedia:function(e){bus.$emit("mediaToggleRequested",e)},renameMedia:function(e){bus.$emit("renameMediaRequested",e)},deleteMedia:function(e){bus.$emit("deleteMediaRequested",e)},dragStart:function(e,t){bus.$emit("mediaDragStartRequested",e,t)}}}),Vue.component("media-items-table",{template:'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{ T.imageHeader }}\n {{ T.nameHeader }}\n \n \n {{ T.lastModifyHeader }} \n \n \n \n {{ T.sizeHeader }}\n \n \n \n \n {{ T.typeHeader }}\n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    {{ printDateTime(media.lastModify) }}
    \n
    \n
    {{ isNaN(media.size)? 0 : Math.round(media.size / 1024) }} KB
    \n
    \n
    {{ media.mime }}
    \n
    \n ',data:function(){return{T:{}}},props:{sortBy:String,sortAsc:Boolean,filteredMediaItems:Array,selectedMedias:Array,thumbSize:Number},created:function(){var e=this;e.T.imageHeader=$("#t-image-header").val(),e.T.nameHeader=$("#t-name-header").val(),e.T.lastModifyHeader=$("#t-lastModify-header").val(),e.T.sizeHeader=$("#t-size-header").val(),e.T.typeHeader=$("#t-type-header").val(),e.T.editButton=$("#t-edit-button").val(),e.T.deleteButton=$("#t-delete-button").val(),e.T.viewButton=$("#t-view-button").val()},methods:{isMediaSelected:function(e){return this.selectedMedias.some((function(t,i,n){return t.url.toLowerCase()===e.url.toLowerCase()}))},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},changeSort:function(e){bus.$emit("sortChangeRequested",e)},toggleSelectionOfMedia:function(e){bus.$emit("mediaToggleRequested",e)},renameMedia:function(e){bus.$emit("renameMediaRequested",e)},deleteMedia:function(e){bus.$emit("deleteMediaRequested",e)},dragStart:function(e,t){bus.$emit("mediaDragStartRequested",e,t)},printDateTime:function(e){return new Date(e).toLocaleString()}}}),Vue.component("pager",{template:'\n
    \n \n \n
    \n ',props:{sourceItems:Array},data:function(){return{pageSize:10,pageSizeOptions:[10,30,50,100],current:0,T:{}}},created:function(){var e=this;e.T.pagerFirstButton=$("#t-pager-first-button").val(),e.T.pagerPreviousButton=$("#t-pager-previous-button").val(),e.T.pagerNextButton=$("#t-pager-next-button").val(),e.T.pagerLastButton=$("#t-pager-last-button").val(),e.T.pagerPageSizeLabel=$("#t-pager-page-size-label").val(),e.T.pagerPageLabel=$("#t-pager-page-label").val(),e.T.pagerTotalLabel=$("#t-pager-total-label").val()},methods:{next:function(){this.current=this.current+1},previous:function(){this.current=this.current-1},goFirst:function(){this.current=0},goLast:function(){this.current=this.totalPages-1},goTo:function(e){this.current=e}},computed:{total:function(){return this.sourceItems?this.sourceItems.length:0},totalPages:function(){var e=Math.ceil(this.total/this.pageSize);return e>0?e:1},isLastPage:function(){return this.current+1>=this.totalPages},isFirstPage:function(){return 0===this.current},canDoNext:function(){return!this.isLastPage},canDoPrev:function(){return!this.isFirstPage},canDoFirst:function(){return!this.isFirstPage},canDoLast:function(){return!this.isLastPage},itemsInCurrentPage:function(){var e=this.pageSize*this.current,t=e+this.pageSize,i=this.sourceItems.slice(e,t);return bus.$emit("pagerEvent",i),i},pageLinks:function(){var e=[];e.push(this.current+1);var t=this.current>0?this.current:-1;e.unshift(t);var i=this.current>1?this.current-1:-1;e.unshift(i);var n=this.totalPages-this.current>1?this.current+2:-1;e.push(n);var a=this.totalPages-this.current>2?this.current+3:-1;return e.push(a),e}},watch:{sourceItems:function(){this.current=0},pageSize:function(){this.current=0}}}),Vue.component("sortIndicator",{template:'\n
    \n \n \n
    \n ',props:{colname:String,selectedcolname:String,asc:Boolean},computed:{isActive:function(){return this.colname.toLowerCase()==this.selectedcolname.toLowerCase()}}}),Vue.component("upload",{template:'

    {{ model.name }}

    Error: {{ model.errorMessage }}
    ',props:{model:Object,uploadInputId:String},mounted:function(){var e,t=this,i=document.getElementById(null!==(e=t.uploadInputId)&&void 0!==e?e:"fileupload");$(i).bind("fileuploadprogress",(function(e,i){i.files[0].name===t.model.name&&(t.model.percentage=parseInt(i.loaded/i.total*100,10))})),$(i).bind("fileuploaddone",(function(e,i){i.files[0].name===t.model.name&&(i.result.files[0].error?t.handleFailure(i.files[0].name,i.result.files[0].error):bus.$emit("removalRequest",t.model))})),$(i).bind("fileuploadfail",(function(e,i){i.files[0].name===t.model.name&&t.handleFailure(i.files[0].name,$("#t-error").val())}))},methods:{handleFailure:function(e,t){e===this.model.name&&(this.model.errorMessage=t,bus.$emit("ErrorOnUpload",this.model))},dismissWarning:function(){bus.$emit("removalRequest",this.model)}}}),Vue.component("uploadList",{template:'
    {{ T.uploads }} (Pending: {{ pendingCount }}) ( {{ T.errors }}: {{ errorCount }} / {{ T.clearErrors }} )
    ',data:function(){return{files:[],T:{},expanded:!1,pendingCount:0,errorCount:0}},props:{uploadInputId:String},created:function(){var e=this;e.T.uploads=$("#t-uploads").val(),e.T.errors=$("#t-errors").val(),e.T.clearErrors=$("#t-clear-errors").val()},computed:{fileCount:function(){return this.files.length}},mounted:function(){var e,t=this,i=document.getElementById(null!==(e=t.uploadInputId)&&void 0!==e?e:"fileupload");$(i).bind("fileuploadadd",(function(e,i){i.files&&i.files.forEach((function(e){t.files.some((function(t){return t.name==e.name}))?console.error("A file with the same name is already on the queue:"+e.name):t.files.push({name:e.name,percentage:0,errorMessage:""})}))})),bus.$on("removalRequest",(function(e){t.files.forEach((function(t,i,n){t.name==e.name&&n.splice(i,1)}))})),bus.$on("ErrorOnUpload",(function(e){t.updateCount()}))},methods:{updateCount:function(){this.errorCount=this.files.filter((function(e){return""!=e.errorMessage})).length,this.pendingCount=this.files.length-this.errorCount,this.files.length<1&&(this.expanded=!1)},clearErrors:function(){this.files=this.files.filter((function(e){return""==e.errorMessage}))}},watch:{files:function(){this.updateCount()}}});var mediaFieldApps=[];Vue.component("mediaFieldThumbsContainer",{template:'
    {{T.noImages}}
  • {{ media.isNew ? media.name.substr(36) : media.name }}
    {{ T.mediaNotFound }} {{ T.discardWarning }}
    {{ media.name }}
  • ',data:function(){return{T:{}}},props:{mediaItems:Array,selectedMedia:Object,thumbSize:Number,idPrefix:String},created:function(){var e=this;e.T.mediaNotFound=$("#t-media-not-found").val(),e.T.discardWarning=$("#t-discard-warning").val(),e.T.noImages=$("#t-no-images").val()},methods:{selectAndDeleteMedia:function(e){this.$parent.$emit("selectAndDeleteMediaRequested",e)},selectMedia:function(e){this.$parent.$emit("selectMediaRequested",e)},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t}}}); +function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function randomUUID(){return"object"===("undefined"==typeof crypto?"undefined":_typeof(crypto))&&"function"==typeof crypto.randomUUID?crypto.randomUUID():([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(function(e){return(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)}))}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function ownKeys(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function _objectSpread(e){for(var t=1;t').prop("disabled")),e.support.xhrFileUpload=!(!window.ProgressEvent||!window.FileReader),e.support.xhrFormDataFileUpload=!!window.FormData,e.support.blobSlice=window.Blob&&(Blob.prototype.slice||Blob.prototype.webkitSlice||Blob.prototype.mozSlice),e.widget("blueimp.fileupload",{options:{dropZone:e(document),pasteZone:void 0,fileInput:void 0,replaceFileInput:!0,paramName:void 0,singleFileUploads:!0,limitMultiFileUploads:void 0,limitMultiFileUploadSize:void 0,limitMultiFileUploadSizeOverhead:512,sequentialUploads:!1,limitConcurrentUploads:void 0,forceIframeTransport:!1,redirect:void 0,redirectParamName:void 0,postMessage:void 0,multipart:!0,maxChunkSize:void 0,uploadedBytes:void 0,recalculateProgress:!0,progressInterval:100,bitrateInterval:500,autoUpload:!0,uniqueFilenames:void 0,messages:{uploadedBytes:"Uploaded bytes exceed file size"},i18n:function(t,i){return t=this.messages[t]||t.toString(),i&&e.each(i,(function(e,i){t=t.replace("{"+e+"}",i)})),t},formData:function(e){return e.serializeArray()},add:function(t,i){if(t.isDefaultPrevented())return!1;(i.autoUpload||!1!==i.autoUpload&&e(this).fileupload("option","autoUpload"))&&i.process().done((function(){i.submit()}))},processData:!1,contentType:!1,cache:!1,timeout:0},_promisePipe:(i=e.fn.jquery.split("."),Number(i[0])>1||Number(i[1])>7?"then":"pipe"),_specialOptions:["fileInput","dropZone","pasteZone","multipart","forceIframeTransport"],_blobSlice:e.support.blobSlice&&function(){return(this.slice||this.webkitSlice||this.mozSlice).apply(this,arguments)},_BitrateTimer:function(){this.timestamp=Date.now?Date.now():(new Date).getTime(),this.loaded=0,this.bitrate=0,this.getBitrate=function(e,t,i){var n=e-this.timestamp;return(!this.bitrate||!i||n>i)&&(this.bitrate=(t-this.loaded)*(1e3/n)*8,this.loaded=t,this.timestamp=e),this.bitrate}},_isXHRUpload:function(t){return!t.forceIframeTransport&&(!t.multipart&&e.support.xhrFileUpload||e.support.xhrFormDataFileUpload)},_getFormData:function(t){var i;return"function"===e.type(t.formData)?t.formData(t.form):e.isArray(t.formData)?t.formData:"object"===e.type(t.formData)?(i=[],e.each(t.formData,(function(e,t){i.push({name:e,value:t})})),i):[]},_getTotal:function(t){var i=0;return e.each(t,(function(e,t){i+=t.size||1})),i},_initProgressObject:function(t){var i={loaded:0,total:0,bitrate:0};t._progress?e.extend(t._progress,i):t._progress=i},_initResponseObject:function(e){var t;if(e._response)for(t in e._response)Object.prototype.hasOwnProperty.call(e._response,t)&&delete e._response[t];else e._response={}},_onProgress:function(t,i){if(t.lengthComputable){var n,a=Date.now?Date.now():(new Date).getTime();if(i._time&&i.progressInterval&&a-i._time").prop("href",t.url).prop("host");t.dataType="iframe "+(t.dataType||""),t.formData=this._getFormData(t),t.redirect&&i&&i!==location.host&&t.formData.push({name:t.redirectParamName||"redirect",value:t.redirect})},_initDataSettings:function(e){this._isXHRUpload(e)?(this._chunkedUpload(e,!0)||(e.data||this._initXHRData(e),this._initProgressListener(e)),e.postMessage&&(e.dataType="postmessage "+(e.dataType||""))):this._initIframeSettings(e)},_getParamName:function(t){var i=e(t.fileInput),n=t.paramName;return n?e.isArray(n)||(n=[n]):(n=[],i.each((function(){for(var t=e(this),i=t.prop("name")||"files[]",a=(t.prop("files")||[1]).length;a;)n.push(i),a-=1})),n.length||(n=[i.prop("name")||"files[]"])),n},_initFormSettings:function(t){t.form&&t.form.length||(t.form=e(t.fileInput.prop("form")),t.form.length||(t.form=e(this.options.fileInput.prop("form")))),t.paramName=this._getParamName(t),t.url||(t.url=t.form.prop("action")||location.href),t.type=(t.type||"string"===e.type(t.form.prop("method"))&&t.form.prop("method")||"").toUpperCase(),"POST"!==t.type&&"PUT"!==t.type&&"PATCH"!==t.type&&(t.type="POST"),t.formAcceptCharset||(t.formAcceptCharset=t.form.attr("accept-charset"))},_getAJAXSettings:function(t){var i=e.extend({},this.options,t);return this._initFormSettings(i),this._initDataSettings(i),i},_getDeferredState:function(e){return e.state?e.state():e.isResolved()?"resolved":e.isRejected()?"rejected":"pending"},_enhancePromise:function(e){return e.success=e.done,e.error=e.fail,e.complete=e.always,e},_getXHRPromise:function(t,i,n){var a=e.Deferred(),r=a.promise();return i=i||this.options.context||r,!0===t?a.resolveWith(i,n):!1===t&&a.rejectWith(i,n),r.abort=a.promise,this._enhancePromise(r)},_addConvenienceMethods:function(t,i){var n=this,a=function(t){return e.Deferred().resolveWith(n,t).promise()};i.process=function(t,r){return(t||r)&&(i._processQueue=this._processQueue=(this._processQueue||a([this]))[n._promisePipe]((function(){return i.errorThrown?e.Deferred().rejectWith(n,[i]).promise():a(arguments)}))[n._promisePipe](t,r)),this._processQueue||a([this])},i.submit=function(){return"pending"!==this.state()&&(i.jqXHR=this.jqXHR=!1!==n._trigger("submit",e.Event("submit",{delegatedEvent:t}),this)&&n._onSend(t,this)),this.jqXHR||n._getXHRPromise()},i.abort=function(){return this.jqXHR?this.jqXHR.abort():(this.errorThrown="abort",n._trigger("fail",null,this),n._getXHRPromise(!1))},i.state=function(){return this.jqXHR?n._getDeferredState(this.jqXHR):this._processQueue?n._getDeferredState(this._processQueue):void 0},i.processing=function(){return!this.jqXHR&&this._processQueue&&"pending"===n._getDeferredState(this._processQueue)},i.progress=function(){return this._progress},i.response=function(){return this._response}},_getUploadedBytes:function(e){var t=e.getResponseHeader("Range"),i=t&&t.split("-"),n=i&&i.length>1&&parseInt(i[1],10);return n&&n+1},_chunkedUpload:function(t,i){t.uploadedBytes=t.uploadedBytes||0;var n,a,r=this,o=t.files[0],s=o.size,l=t.uploadedBytes,d=t.maxChunkSize||s,c=this._blobSlice,u=e.Deferred(),p=u.promise();return!(!(this._isXHRUpload(t)&&c&&(l||("function"===e.type(d)?d(t):d)=s?(o.error=t.i18n("uploadedBytes"),this._getXHRPromise(!1,t.context,[null,"error",o.error])):(a=function(){var i=e.extend({},t),p=i._progress.loaded;i.blob=c.call(o,l,l+("function"===e.type(d)?d(i):d),o.type),i.chunkSize=i.blob.size,i.contentRange="bytes "+l+"-"+(l+i.chunkSize-1)+"/"+s,r._trigger("chunkbeforesend",null,i),r._initXHRData(i),r._initProgressListener(i),n=(!1!==r._trigger("chunksend",null,i)&&e.ajax(i)||r._getXHRPromise(!1,i.context)).done((function(n,o,d){l=r._getUploadedBytes(d)||l+i.chunkSize,p+i.chunkSize-i._progress.loaded&&r._onProgress(e.Event("progress",{lengthComputable:!0,loaded:l-i.uploadedBytes,total:l-i.uploadedBytes}),i),t.uploadedBytes=i.uploadedBytes=l,i.result=n,i.textStatus=o,i.jqXHR=d,r._trigger("chunkdone",null,i),r._trigger("chunkalways",null,i),ls._sending)for(var n=s._slots.shift();n;){if("pending"===s._getDeferredState(n)){n.resolve();break}n=s._slots.shift()}0===s._active&&s._trigger("stop")}))};return this._beforeSend(t,l),this.options.sequentialUploads||this.options.limitConcurrentUploads&&this.options.limitConcurrentUploads<=this._sending?(this.options.limitConcurrentUploads>1?(r=e.Deferred(),this._slots.push(r),o=r[s._promisePipe](d)):(this._sequence=this._sequence[s._promisePipe](d,d),o=this._sequence),o.abort=function(){return a=[void 0,"abort","abort"],n?n.abort():(r&&r.rejectWith(l.context,a),d())},this._enhancePromise(o)):d()},_onAdd:function(t,i){var n,a,r,o,s=this,l=!0,d=e.extend({},this.options,i),c=i.files,u=c.length,p=d.limitMultiFileUploads,m=d.limitMultiFileUploadSize,f=d.limitMultiFileUploadSizeOverhead,h=0,g=this._getParamName(d),v=0;if(!u)return!1;if(m&&void 0===c[0].size&&(m=void 0),(d.singleFileUploads||p||m)&&this._isXHRUpload(d))if(d.singleFileUploads||m||!p)if(!d.singleFileUploads&&m)for(r=[],n=[],o=0;om||p&&o+1-v>=p)&&(r.push(c.slice(v,o+1)),(a=g.slice(v,o+1)).length||(a=g),n.push(a),v=o+1,h=0);else n=g;else for(r=[],n=[],o=0;o").append(n)[0].reset(),i.after(n).detach(),a&&n.trigger("focus"),e.cleanData(i.off("remove")),this.options.fileInput=this.options.fileInput.map((function(e,t){return t===i[0]?n[0]:t})),i[0]===this.element[0]&&(this.element=n)},_handleFileTreeEntry:function(t,i){var n,a=this,r=e.Deferred(),o=[],s=function(e){e&&!e.entry&&(e.entry=t),r.resolve([e])};return i=i||"",t.isFile?t._file?(t._file.relativePath=i,r.resolve(t._file)):t.file((function(e){e.relativePath=i,r.resolve(e)}),s):t.isDirectory?(n=t.createReader(),function e(){n.readEntries((function(n){n.length?(o=o.concat(n),e()):function(e){a._handleFileTreeEntries(e,i+t.name+"/").done((function(e){r.resolve(e)})).fail(s)}(o)}),s)}()):r.resolve([]),r.promise()},_handleFileTreeEntries:function(t,i){var n=this;return e.when.apply(e,e.map(t,(function(e){return n._handleFileTreeEntry(e,i)})))[this._promisePipe]((function(){return Array.prototype.concat.apply([],arguments)}))},_getDroppedFiles:function(t){var i=(t=t||{}).items;return i&&i.length&&(i[0].webkitGetAsEntry||i[0].getAsEntry)?this._handleFileTreeEntries(e.map(i,(function(e){var t;return e.webkitGetAsEntry?((t=e.webkitGetAsEntry())&&(t._file=e.getAsFile()),t):e.getAsEntry()}))):e.Deferred().resolve(e.makeArray(t.files)).promise()},_getSingleFileInputFiles:function(t){var i,n,a=(t=e(t)).prop("entries");if(a&&a.length)return this._handleFileTreeEntries(a);if((i=e.makeArray(t.prop("files"))).length)void 0===i[0].name&&i[0].fileName&&e.each(i,(function(e,t){t.name=t.fileName,t.size=t.fileSize}));else{if(!(n=t.prop("value")))return e.Deferred().resolve([]).promise();i=[{name:n.replace(/^.*\\/,"")}]}return e.Deferred().resolve(i).promise()},_getFileInputFiles:function(t){return t instanceof e&&1!==t.length?e.when.apply(e,e.map(t,this._getSingleFileInputFiles))[this._promisePipe]((function(){return Array.prototype.concat.apply([],arguments)})):this._getSingleFileInputFiles(t)},_onChange:function(t){var i=this,n={fileInput:e(t.target),form:e(t.target.form)};this._getFileInputFiles(n.fileInput).always((function(a){n.files=a,i.options.replaceFileInput&&i._replaceFileInput(n),!1!==i._trigger("change",e.Event("change",{delegatedEvent:t}),n)&&i._onAdd(t,n)}))},_onPaste:function(t){var i=t.originalEvent&&t.originalEvent.clipboardData&&t.originalEvent.clipboardData.items,n={files:[]};i&&i.length&&(e.each(i,(function(e,t){var i=t.getAsFile&&t.getAsFile();i&&n.files.push(i)})),!1!==this._trigger("paste",e.Event("paste",{delegatedEvent:t}),n)&&this._onAdd(t,n))},_onDrop:function(t){t.dataTransfer=t.originalEvent&&t.originalEvent.dataTransfer;var i=this,n=t.dataTransfer,a={};n&&n.files&&n.files.length&&(t.preventDefault(),this._getDroppedFiles(n).always((function(n){a.files=n,!1!==i._trigger("drop",e.Event("drop",{delegatedEvent:t}),a)&&i._onAdd(t,a)})))},_onDragOver:t("dragover"),_onDragEnter:t("dragenter"),_onDragLeave:t("dragleave"),_initEventHandlers:function(){this._isXHRUpload(this.options)&&(this._on(this.options.dropZone,{dragover:this._onDragOver,drop:this._onDrop,dragenter:this._onDragEnter,dragleave:this._onDragLeave}),this._on(this.options.pasteZone,{paste:this._onPaste})),e.support.fileInput&&this._on(this.options.fileInput,{change:this._onChange})},_destroyEventHandlers:function(){this._off(this.options.dropZone,"dragenter dragleave dragover drop"),this._off(this.options.pasteZone,"paste"),this._off(this.options.fileInput,"change")},_destroy:function(){this._destroyEventHandlers()},_setOption:function(t,i){var n=-1!==e.inArray(t,this._specialOptions);n&&this._destroyEventHandlers(),this._super(t,i),n&&(this._initSpecialOptions(),this._initEventHandlers())},_initSpecialOptions:function(){var t=this.options;void 0===t.fileInput?t.fileInput=this.element.is('input[type="file"]')?this.element:this.element.find('input[type="file"]'):t.fileInput instanceof e||(t.fileInput=e(t.fileInput)),t.dropZone instanceof e||(t.dropZone=e(t.dropZone)),t.pasteZone instanceof e||(t.pasteZone=e(t.pasteZone))},_getRegExp:function(e){var t=e.split("/"),i=t.pop();return t.shift(),new RegExp(t.join("/"),i)},_isRegExpOption:function(t,i){return"url"!==t&&"string"===e.type(i)&&/^\/.*\/[igm]{0,3}$/.test(i)},_initDataAttributes:function(){var t=this,i=this.options,n=this.element.data();e.each(this.element[0].attributes,(function(e,a){var r,o=a.name.toLowerCase();/^data-/.test(o)&&(o=o.slice(5).replace(/-[a-z]/g,(function(e){return e.charAt(1).toUpperCase()})),r=n[o],t._isRegExpOption(o,r)&&(r=t._getRegExp(r)),i[o]=r)}))},_create:function(){this._initDataAttributes(),this._initSpecialOptions(),this._slots=[],this._sequence=this._getXHRPromise(!0),this._sending=this._active=0,this._initProgressObject(this),this._initEventHandlers()},active:function(){return this._active},progress:function(){return this._progress},add:function(t){var i=this;t&&!this.options.disabled&&(t.fileInput&&!t.files?this._getFileInputFiles(t.fileInput).always((function(e){t.files=e,i._onAdd(null,t)})):(t.files=e.makeArray(t.files),this._onAdd(null,t)))},send:function(t){if(t&&!this.options.disabled){if(t.fileInput&&!t.files){var i,n,a=this,r=e.Deferred(),o=r.promise();return o.abort=function(){return n=!0,i?i.abort():(r.reject(null,"abort","abort"),o)},this._getFileInputFiles(t.fileInput).always((function(e){n||(e.length?(t.files=e,(i=a._onSend(null,t)).then((function(e,t,i){r.resolve(e,t,i)}),(function(e,t,i){r.reject(e,t,i)}))):r.reject())})),this._enhancePromise(o)}if(t.files=e.makeArray(t.files),t.files.length)return this._onSend(null,t)}return this._getXHRPromise(!1,t&&t.context)}})})),function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"===("undefined"==typeof exports?"undefined":_typeof(exports))?e(require("jquery")):e(window.jQuery)}((function(e){"use strict";var t=0,i=e,n="parseJSON";"JSON"in window&&"parse"in JSON&&(i=JSON,n="parse"),e.ajaxTransport("iframe",(function(i){if(i.async){var n,a,r,o=i.initialIframeSrc||"javascript:false;";return{send:function(s,l){(n=e('
    ')).attr("accept-charset",i.formAcceptCharset),r=/\?/.test(i.url)?"&":"?","DELETE"===i.type?(i.url=i.url+r+"_method=DELETE",i.type="POST"):"PUT"===i.type?(i.url=i.url+r+"_method=PUT",i.type="POST"):"PATCH"===i.type&&(i.url=i.url+r+"_method=PATCH",i.type="POST"),a=e('').on("load",(function(){var t,r=e.isArray(i.paramName)?i.paramName:[i.paramName];a.off("load").on("load",(function(){var t;try{if(!(t=a.contents()).length||!t[0].firstChild)throw new Error}catch(e){t=void 0}l(200,"success",{iframe:t}),e('').appendTo(n),window.setTimeout((function(){n.remove()}),0)})),n.prop("target",a.prop("name")).prop("action",i.url).prop("method",i.type),i.formData&&e.each(i.formData,(function(t,i){e('').prop("name",i.name).val(i.value).appendTo(n)})),i.fileInput&&i.fileInput.length&&"POST"===i.type&&(t=i.fileInput.clone(),i.fileInput.after((function(e){return t[e]})),i.paramName&&i.fileInput.each((function(t){e(this).prop("name",r[t]||i.paramName)})),n.append(i.fileInput).prop("enctype","multipart/form-data").prop("encoding","multipart/form-data"),i.fileInput.removeAttr("form")),window.setTimeout((function(){n.submit(),t&&t.length&&i.fileInput.each((function(i,n){var a=e(t[i]);e(n).prop("name",a.prop("name")).attr("form",a.attr("form")),a.replaceWith(n)}))}),0)})),n.append(a).appendTo(document.body)},abort:function(){a&&a.off("load").prop("src",o),n&&n.remove()}}}})),e.ajaxSetup({converters:{"iframe text":function(t){return t&&e(t[0].body).text()},"iframe json":function(t){return t&&i[n](e(t[0].body).text())},"iframe html":function(t){return t&&e(t[0].body).html()},"iframe xml":function(t){var i=t&&t[0];return i&&e.isXMLDoc(i)?i:e.parseXML(i.XMLDocument&&i.XMLDocument.xml||e(i.body).html())},"iframe script":function(t){return t&&e.globalEval(e(t[0].body).text())}}})}));var bus=new Vue;function initializeMediaApplication(e,t,i){initialized||(initialized=!0,t||console.error("mediaApplicationUrl variable is not defined"),$.ajax({url:t,method:"GET",success:function(t){$(".ta-content").append(t),$(document).trigger("mediaapplication:ready");var n={name:$("#t-mediaLibrary").text(),path:"",folder:"",isDirectory:!0};mediaApp=new Vue({el:"#mediaApp",data:{selectedFolder:{},mediaItems:[],selectedMedias:[],errors:[],dragDropThumbnail:new Image,smallThumbs:!1,gridView:!1,mediaFilter:"",sortBy:"",sortAsc:!0,itemsInPage:[]},created:function(){var e=this;e.dragDropThumbnail.src=(i||"")+"/OrchardCore.Media/Images/drag-thumbnail.png",bus.$on("folderSelected",(function(t){e.selectedFolder=t})),bus.$on("folderDeleted",(function(){e.selectRoot()})),bus.$on("folderAdded",(function(t){e.selectedFolder=t,t.selected=!0})),bus.$on("mediaListMoved",(function(t){e.loadFolder(e.selectedFolder),t&&e.errors.push(t)})),bus.$on("mediaRenamed",(function(t,i,n){var a=e.mediaItems.filter((function(e){return e.mediaPath===n}))[0];a.mediaPath=i,a.name=t})),bus.$on("createFolderRequested",(function(t){e.createFolder()})),bus.$on("deleteFolderRequested",(function(t){e.deleteFolder()})),bus.$on("sortChangeRequested",(function(t){e.changeSort(t)})),bus.$on("mediaToggleRequested",(function(t){e.toggleSelectionOfMedia(t)})),bus.$on("renameMediaRequested",(function(t){e.renameMedia(t)})),bus.$on("deleteMediaRequested",(function(t){e.deleteMediaItem(t)})),bus.$on("mediaDragStartRequested",(function(t,i){e.handleDragStart(t,i)})),bus.$on("pagerEvent",(function(t){e.itemsInPage=t,e.selectedMedias=[]})),localStorage.getItem("mediaApplicationPrefs")?e.currentPrefs=JSON.parse(localStorage.getItem("mediaApplicationPrefs")):e.selectedFolder=n},computed:{isHome:function(){return this.selectedFolder==n},parents:function(){var e=[];for(parentFolder=this.selectedFolder;parentFolder&&""!=parentFolder.path;)e.unshift(parentFolder),parentFolder=parentFolder.parent;return e},root:function(){return n},filteredMediaItems:function(){var e=this;e.selectedMedias=[];var t=e.mediaItems.filter((function(t){return t.name.toLowerCase().indexOf(e.mediaFilter.toLowerCase())>-1}));switch(e.sortBy){case"size":t.sort((function(t,i){return e.sortAsc?t.size-i.size:i.size-t.size}));break;case"mime":t.sort((function(t,i){return e.sortAsc?t.mime.toLowerCase().localeCompare(i.mime.toLowerCase()):i.mime.toLowerCase().localeCompare(t.mime.toLowerCase())}));break;case"lastModify":t.sort((function(t,i){return e.sortAsc?t.lastModify-i.lastModify:i.lastModify-t.lastModify}));break;default:t.sort((function(t,i){return e.sortAsc?t.name.toLowerCase().localeCompare(i.name.toLowerCase()):i.name.toLowerCase().localeCompare(t.name.toLowerCase())}))}return t},hiddenCount:function(){return this.mediaItems.length-this.filteredMediaItems.length},thumbSize:function(){return this.smallThumbs?100:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs,selectedFolder:this.selectedFolder,gridView:this.gridView}},set:function(e){e&&(this.smallThumbs=e.smallThumbs,this.selectedFolder=e.selectedFolder,this.gridView=e.gridView)}}},watch:{currentPrefs:function(e){localStorage.setItem("mediaApplicationPrefs",JSON.stringify(e))},selectedFolder:function(e){this.mediaFilter="",this.selectedFolder=e,this.loadFolder(e)}},mounted:function(){this.$refs.rootFolder.toggle()},methods:{uploadUrl:function(){if(!this.selectedFolder)return null;var e=$("#uploadFiles").val();return e+(-1==e.indexOf("?")?"?":"&")+"path="+encodeURIComponent(this.selectedFolder.path)},selectRoot:function(){this.selectedFolder=this.root},loadFolder:function(e){this.errors=[],this.selectedMedias=[];var t=this,i=$("#getMediaItemsUrl").val();console.log(e.path),$.ajax({url:i+(-1==i.indexOf("?")?"?":"&")+"path="+encodeURIComponent(e.path),method:"GET",success:function(e){e.forEach((function(e){e.open=!1})),t.mediaItems=e,t.selectedMedias=[],t.sortBy="",t.sortAsc=!0},error:function(i){console.log("error loading folder:"+e.path),t.selectRoot()}})},selectAll:function(){this.selectedMedias=[];for(var e=0;e-1&&(t.mediaItems.splice(n,1),bus.$emit("mediaDeleted",t.selectedMedias[i]))}t.selectedMedias=[]},error:function(e){console.error(e.responseText)}})}}}))},deleteMediaItem:function(e){var t=this;e&&confirmDialog(_objectSpread(_objectSpread({},$("#deleteMedia").data()),{},{callback:function(i){i&&$.ajax({url:$("#deleteMediaUrl").val()+"?path="+encodeURIComponent(e.mediaPath),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(i){var n=t.mediaItems&&t.mediaItems.indexOf(e);n>-1&&(t.mediaItems.splice(n,1),bus.$emit("mediaDeleted",e))},error:function(e){console.error(e.responseText)}})}}))},handleDragStart:function(e,t){var i=[];this.selectedMedias.forEach((function(e){i.push(e.name)})),0==this.isMediaSelected(e)&&(i.push(e.name),this.selectedMedias.push(e)),t.dataTransfer.setData("mediaNames",JSON.stringify(i)),t.dataTransfer.setData("sourceFolder",this.selectedFolder.path),t.dataTransfer.setDragImage(this.dragDropThumbnail,10,10),t.dataTransfer.effectAllowed="move"},handleScrollWhileDrag:function(e){e.clientY<150&&window.scrollBy(0,-10),e.clientY>window.innerHeight-100&&window.scrollBy(0,10)},changeSort:function(e){this.sortBy==e?this.sortAsc=!this.sortAsc:(this.sortAsc=!0,this.sortBy=e)}}}),$("#create-folder-name").keypress((function(e){if(13==e.which)return $("#modalFooterOk").click(),!1})),$("#modalFooterOk").on("click",(function(e){var t=$("#create-folder-name").val();""!==t&&$.ajax({url:$("#createFolderUrl").val()+"?path="+encodeURIComponent(mediaApp.selectedFolder.path)+"&name="+encodeURIComponent(t),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(e){bus.$emit("addFolder",mediaApp.selectedFolder,e),bootstrap.Modal.getOrCreateInstance($("#createFolderModal")).hide()},error:function(e){$("#createFolderModal-errors").empty();var t=JSON.parse(e.responseText).value;$('').text(t).appendTo($("#createFolderModal-errors"))}})})),$("#renameMediaModalFooterOk").on("click",(function(e){var t=$("#new-item-name").val(),i=$("#old-item-name").val();if(""!==t){var n=mediaApp.selectedFolder.path+"/";"/"===n&&(n="");var a=n+t,r=n+i;if(a.toLowerCase()!==r.toLowerCase())$.ajax({url:$("#renameMediaUrl").val()+"?oldPath="+encodeURIComponent(r)+"&newPath="+encodeURIComponent(a),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(e){bootstrap.Modal.getOrCreateInstance($("#renameMediaModal")).hide(),bus.$emit("mediaRenamed",t,a,r)},error:function(e){$("#renameMediaModal-errors").empty();var t=JSON.parse(e.responseText).value;$('').text(t).appendTo($("#renameMediaModal-errors"))}});else bootstrap.Modal.getOrCreateInstance($("#renameMediaModal")).hide()}})),e&&(document.getElementById("mediaApp").style.display=""),$(document).trigger("mediaApp:ready")},error:function(e){console.error(e.responseText)}}))}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function ownKeys(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function _objectSpread(e){for(var t=1;t0&&a},thumbSize:function(){return this.smallThumbs?120:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs}},set:function(e){e&&(this.smallThumbs=e.smallThumbs)}}},mounted:function(){var e=this;e.paths=c,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)}));var n="#"+t,r=u.attr("id"),o=randomUUID();$(n).fileupload({limitConcurrentUploads:20,dropZone:$("#"+r),dataType:"json",url:i,maxChunkSize:l,add:function(t,i){var n,a=i.files.length;for(n=0;n0)for(var r=0;r1&&!1===a?(alert($("#onlyOneItemMessage").val()),d.mediaItems.push(i[0]),d.initialized=!0):(d.mediaItems=d.mediaItems.concat(i),d.initialized=!0)):alert(n)},error:function(e,t,i){console.log("Error on upload."),console.log(e),console.log(t),console.log(i)}}).on("fileuploadchunkbeforesend",(function(e,t){var i=t.files[0];t.blob=new File([t.blob],i.name,{type:i.type,lastModified:i.lastModified})}))},methods:{selectMedia:function(e){this.selectedMedia=e},getUniqueId:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))},removeSelected:function(e){if(this.selectedMedia){var t=this.mediaItems&&this.mediaItems.indexOf(this.selectedMedia);t>-1&&(this.mediaItems[t].isRemoved=!0,this.mediaItems.splice(t,1))}else 1===this.mediaItems.length&&(this.mediaItems[t].isRemoved=!0,this.mediaItems.splice(0,1));this.selectedMedia=null},showMediaTextModal:function(e){this.mediaTextModal=new bootstrap.Modal(this.$refs.mediaTextModal),this.mediaTextModal.show(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){this.mediaTextModal.hide(),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){this.anchoringModal=new bootstrap.Modal(this.$refs.anchoringModal),this.anchoringModal.show(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){this.anchoringModal.hide(),this.selectedMedia.anchor=this.backupAnchor},resetAnchor:function(e){this.selectedMedia.anchor={x:.5,y:.5}},onAnchorDrop:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},anchorLeft:function(){if(this.$refs.anchorImage&&this.$refs.modalBody&&this.selectedMedia){var e=(this.$refs.modalBody.clientWidth-this.$refs.anchorImage.clientWidth)/2,t=this.selectedMedia.anchor.x*this.$refs.anchorImage.clientWidth+e;return t<17?t=17:t-=8,t+"px"}return"0"},anchorTop:function(){if(this.$refs.anchorImage&&this.selectedMedia){var e=this.selectedMedia.anchor.y*this.$refs.anchorImage.clientHeight;return e<15?e=15:e+=5,e+"px"}return"0"},setAnchor:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},addMediaFiles:function(e){e.length>1&&!1===a?(alert($("#onlyOneItemMessage").val()),d.mediaItems.push(e[0]),d.initialized=!0):(d.mediaItems=d.mediaItems.concat(e),d.initialized=!0)},selectAndDeleteMedia:function(e){var t=this;t.selectedMedia=e,setTimeout((function(){t.removeSelected()}),100)}},watch:{mediaItems:{deep:!0,handler:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},currentPrefs:function(e){localStorage.setItem("mediaFieldPrefs",JSON.stringify(e))}}}))}function initializeMediaField(e,t,i,n,a,r){if(null!==e){var o,s=$(document.getElementById($(e).data("for"))).data("init"),l=$(e),d=l.attr("id");t.addEventListener("hidden.bs.modal",(function(e){$("#mediaApp").appendTo("body"),$("#mediaApp").hide()})),mediaFieldApps.push(o=new Vue({el:l.get(0),data:{mediaItems:[],selectedMedia:null,smallThumbs:!1,idPrefix:d,initialized:!1,allowMediaText:a,backupMediaText:"",allowAnchors:r,backupAnchor:null,mediaTextModal:null,anchoringModal:null},created:function(){this.currentPrefs=JSON.parse(localStorage.getItem("mediaFieldPrefs"))},computed:{paths:{get:function(){var e=[];return this.initialized?(this.mediaItems.forEach((function(t){"not-found"!==t.mediaPath&&e.push({path:t.mediaPath,mediaText:t.mediaText,anchor:t.anchor})})),JSON.stringify(e)):JSON.stringify(s)},set:function(e){var t=this,n=e||[],a=$.Deferred(),r=[],o=0;n.forEach((function(e,n){r.push({name:" "+e.path,mime:"",mediaPath:""}),promise=$.when(a).done((function(){$.ajax({url:i+"?path="+encodeURIComponent(e.path),method:"GET",success:function(i){i.vuekey=i.name+n.toString(),i.mediaText=e.mediaText,i.anchor=e.anchor,r.splice(n,1,i),r.length===++o&&(r.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)},error:function(i){console.log(i),r.splice(n,1,{name:e.path,mime:"",mediaPath:"not-found",mediaText:"",anchor:{x:0,y:0}}),r.length===++o&&(r.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)}})}))})),a.resolve()}},fileSize:function(){return Math.round(this.selectedMedia.size/1024)},canAddMedia:function(){return 0===this.mediaItems.length||this.mediaItems.length>0&&n},thumbSize:function(){return this.smallThumbs?120:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs}},set:function(e){e&&(this.smallThumbs=e.smallThumbs)}}},mounted:function(){var e=this;e.paths=s,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)})),e.$on("filesUploaded",(function(t){e.addMediaFiles(t)}))},methods:{selectMedia:function(e){this.selectedMedia=e},showModal:function(e){var i=this;if(i.canAddMedia){$("#mediaApp").appendTo($(t).find(".modal-body")),$("#mediaApp").show();var n=new bootstrap.Modal(t);n.show(),$(t).find(".mediaFieldSelectButton").off("click").on("click",(function(e){return i.addMediaFiles(mediaApp.selectedMedias),mediaApp.selectedMedias=[],n.hide(),!0}))}},showMediaTextModal:function(e){this.mediaTextModal=new bootstrap.Modal(this.$refs.mediaTextModal),this.mediaTextModal.show(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){this.mediaTextModal.hide(),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){this.anchoringModal=new bootstrap.Modal(this.$refs.anchoringModal),this.anchoringModal.show(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){this.anchoringModal.hide(),this.selectedMedia.anchor=this.backupAnchor},resetAnchor:function(e){this.selectedMedia.anchor={x:.5,y:.5}},onAnchorDrop:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},anchorLeft:function(){if(this.$refs.anchorImage&&this.$refs.modalBody&&this.selectedMedia){var e=(this.$refs.modalBody.clientWidth-this.$refs.anchorImage.clientWidth)/2,t=this.selectedMedia.anchor.x*this.$refs.anchorImage.clientWidth+e,i=Math.round(this.$refs.modalBody.querySelector(".icon-media-anchor").clientWidth);return Number.isInteger(i)&&(t-=i/2),t+"px"}return"0"},anchorTop:function(){return this.$refs.anchorImage&&this.selectedMedia?this.selectedMedia.anchor.y*this.$refs.anchorImage.clientHeight+"px":"0"},setAnchor:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},addMediaFiles:function(e){e.length>1&&!1===n?(alert($("#onlyOneItemMessage").val()),o.mediaItems.push(e[0]),o.initialized=!0):(o.mediaItems=o.mediaItems.concat(e),o.initialized=!0)},removeSelected:function(e){if(this.selectedMedia){var t=this.mediaItems&&this.mediaItems.indexOf(this.selectedMedia);t>-1&&this.mediaItems.splice(t,1)}else 1===this.mediaItems.length&&this.mediaItems.splice(0,1);this.selectedMedia=null},selectAndDeleteMedia:function(e){var t=this;t.selectedMedia=e,setTimeout((function(){t.removeSelected()}),100)}},watch:{mediaItems:{deep:!0,handler:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},currentPrefs:function(e){localStorage.setItem("mediaFieldPrefs",JSON.stringify(e))}}}))}}$(document).on("mediaApp:ready",(function(){var e=randomUUID();$("#fileupload").fileupload({dropZone:$("#mediaApp"),limitConcurrentUploads:20,dataType:"json",url:$("#uploadFiles").val(),maxChunkSize:Number($("#maxUploadChunkSize").val()||0),formData:function(){var t=$("input[name=__RequestVerificationToken]").val();return[{name:"path",value:mediaApp.selectedFolder.path},{name:"__RequestVerificationToken",value:t},{name:"__chunkedFileUploadId",value:e}]},done:function(e,t){$.each(t.result.files,(function(e,t){t.error||mediaApp.mediaItems.push(t)}))}}).on("fileuploadchunkbeforesend",(function(e,t){var i=t.files[0];t.blob=new File([t.blob],i.name,{type:i.type,lastModified:i.lastModified})}))})),$(document).bind("dragover",(function(e){var t=e.originalEvent.dataTransfer;if(t.types&&(t.types.indexOf?-1!=t.types.indexOf("Files"):t.types.contains("Files"))){var i=$("#customdropzone"),n=window.dropZoneTimeout;n?clearTimeout(n):i.addClass("in");$(e.target).closest(i);window.dropZoneTimeout=setTimeout((function(){window.dropZoneTimeout=null,i.removeClass("in")}),100)}})),Vue.component("folder",{template:'\n
  • \n \n
      \n \n \n
    \n
  • \n '),props:{model:Object,selectedInMediaApp:Object,level:Number},data:function(){return{open:!1,children:null,parent:null,isHovered:!1,padding:0}},computed:{empty:function(){return!this.children||0==this.children.length},isSelected:function(){return this.selectedInMediaApp.name==this.model.name&&this.selectedInMediaApp.path==this.model.path},isRoot:function(){return""===this.model.path}},mounted:function(){0==this.isRoot&&this.isAncestorOfSelectedFolder()&&this.toggle(),this.padding=this.level<3?16:16+8*this.level},created:function(){var e=this;bus.$on("deleteFolder",(function(t){if(e.children){var i=e.children&&e.children.indexOf(t);i>-1&&(e.children.splice(i,1),bus.$emit("folderDeleted"))}})),bus.$on("addFolder",(function(t,i){e.model==t&&(null!==e.children&&e.children.push(i),i.parent=e.model,bus.$emit("folderAdded",i))}))},methods:{isAncestorOfSelectedFolder:function(){for(parentFolder=mediaApp.selectedFolder;parentFolder;){if(parentFolder.path==this.model.path)return!0;parentFolder=parentFolder.parent}return!1},toggle:function(){this.open=!this.open,this.open&&!this.children&&this.loadChildren()},select:function(){bus.$emit("folderSelected",this.model),this.loadChildren()},createFolder:function(){bus.$emit("createFolderRequested")},deleteFolder:function(){bus.$emit("deleteFolderRequested")},loadChildren:function(){var e=this;0==this.open&&(this.open=!0),$.ajax({url:$("#getFoldersUrl").val()+"?path="+encodeURIComponent(e.model.path),method:"GET",success:function(t){e.children=t,e.children.forEach((function(t){t.parent=e.model}))},error:function(e){emtpy=!1,console.error(e.responseText)}})},handleDragOver:function(e){this.isHovered=!0},handleDragLeave:function(e){this.isHovered=!1},moveMediaToFolder:function(e,t){this.isHovered=!1;var i=JSON.parse(t.dataTransfer.getData("mediaNames"));if(!(i.length<1)){var n=t.dataTransfer.getData("sourceFolder"),a=e.path;""===n&&(n="root"),""===a&&(a="root"),n!==a?confirmDialog(_objectSpread(_objectSpread({},$("#moveMedia").data()),{},{callback:function(e){e&&$.ajax({url:$("#moveMediaListUrl").val(),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val(),mediaNames:i,sourceFolder:n,targetFolder:a},success:function(){bus.$emit("mediaListMoved")},error:function(e){console.error(e.responseText),bus.$emit("mediaListMoved",e.responseText)}})}})):alert($("#sameFolderMessage").val())}}}}),Vue.component("media-items-grid",{template:'\n
      \n
    1. \n
      \n \n \n
      \n
      \n \n \n \n {{ media.name }}\n
      \n
    2. \n
    \n ',data:function(){return{T:{}}},props:{filteredMediaItems:Array,selectedMedias:Array,thumbSize:Number},created:function(){this.T.editButton=$("#t-edit-button").val(),this.T.deleteButton=$("#t-delete-button").val()},methods:{isMediaSelected:function(e){return this.selectedMedias.some((function(t,i,n){return t.url.toLowerCase()===e.url.toLowerCase()}))},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},toggleSelectionOfMedia:function(e){bus.$emit("mediaToggleRequested",e)},renameMedia:function(e){bus.$emit("renameMediaRequested",e)},deleteMedia:function(e){bus.$emit("deleteMediaRequested",e)},dragStart:function(e,t){bus.$emit("mediaDragStartRequested",e,t)}}}),Vue.component("media-items-table",{template:'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{ T.imageHeader }}\n {{ T.nameHeader }}\n \n \n {{ T.lastModifyHeader }} \n \n \n \n {{ T.sizeHeader }}\n \n \n \n \n {{ T.typeHeader }}\n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    {{ printDateTime(media.lastModify) }}
    \n
    \n
    {{ isNaN(media.size)? 0 : Math.round(media.size / 1024) }} KB
    \n
    \n
    {{ media.mime }}
    \n
    \n ',data:function(){return{T:{}}},props:{sortBy:String,sortAsc:Boolean,filteredMediaItems:Array,selectedMedias:Array,thumbSize:Number},created:function(){var e=this;e.T.imageHeader=$("#t-image-header").val(),e.T.nameHeader=$("#t-name-header").val(),e.T.lastModifyHeader=$("#t-lastModify-header").val(),e.T.sizeHeader=$("#t-size-header").val(),e.T.typeHeader=$("#t-type-header").val(),e.T.editButton=$("#t-edit-button").val(),e.T.deleteButton=$("#t-delete-button").val(),e.T.viewButton=$("#t-view-button").val()},methods:{isMediaSelected:function(e){return this.selectedMedias.some((function(t,i,n){return t.url.toLowerCase()===e.url.toLowerCase()}))},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},changeSort:function(e){bus.$emit("sortChangeRequested",e)},toggleSelectionOfMedia:function(e){bus.$emit("mediaToggleRequested",e)},renameMedia:function(e){bus.$emit("renameMediaRequested",e)},deleteMedia:function(e){bus.$emit("deleteMediaRequested",e)},dragStart:function(e,t){bus.$emit("mediaDragStartRequested",e,t)},printDateTime:function(e){return new Date(e).toLocaleString()}}}),Vue.component("pager",{template:'\n
    \n \n \n
    \n ',props:{sourceItems:Array},data:function(){return{pageSize:10,pageSizeOptions:[10,30,50,100],current:0,T:{}}},created:function(){var e=this;e.T.pagerFirstButton=$("#t-pager-first-button").val(),e.T.pagerPreviousButton=$("#t-pager-previous-button").val(),e.T.pagerNextButton=$("#t-pager-next-button").val(),e.T.pagerLastButton=$("#t-pager-last-button").val(),e.T.pagerPageSizeLabel=$("#t-pager-page-size-label").val(),e.T.pagerPageLabel=$("#t-pager-page-label").val(),e.T.pagerTotalLabel=$("#t-pager-total-label").val()},methods:{next:function(){this.current=this.current+1},previous:function(){this.current=this.current-1},goFirst:function(){this.current=0},goLast:function(){this.current=this.totalPages-1},goTo:function(e){this.current=e}},computed:{total:function(){return this.sourceItems?this.sourceItems.length:0},totalPages:function(){var e=Math.ceil(this.total/this.pageSize);return e>0?e:1},isLastPage:function(){return this.current+1>=this.totalPages},isFirstPage:function(){return 0===this.current},canDoNext:function(){return!this.isLastPage},canDoPrev:function(){return!this.isFirstPage},canDoFirst:function(){return!this.isFirstPage},canDoLast:function(){return!this.isLastPage},itemsInCurrentPage:function(){var e=this.pageSize*this.current,t=e+this.pageSize,i=this.sourceItems.slice(e,t);return bus.$emit("pagerEvent",i),i},pageLinks:function(){var e=[];e.push(this.current+1);var t=this.current>0?this.current:-1;e.unshift(t);var i=this.current>1?this.current-1:-1;e.unshift(i);var n=this.totalPages-this.current>1?this.current+2:-1;e.push(n);var a=this.totalPages-this.current>2?this.current+3:-1;return e.push(a),e}},watch:{sourceItems:function(){this.current=0},pageSize:function(){this.current=0}}}),Vue.component("sortIndicator",{template:'\n
    \n \n \n
    \n ',props:{colname:String,selectedcolname:String,asc:Boolean},computed:{isActive:function(){return this.colname.toLowerCase()==this.selectedcolname.toLowerCase()}}}),Vue.component("upload",{template:'

    {{ model.name }}

    Error: {{ model.errorMessage }}
    ',props:{model:Object,uploadInputId:String},mounted:function(){var e,t=this,i=document.getElementById(null!==(e=t.uploadInputId)&&void 0!==e?e:"fileupload");$(i).bind("fileuploadprogress",(function(e,i){i.files[0].name===t.model.name&&(t.model.percentage=parseInt(i.loaded/i.total*100,10))})),$(i).bind("fileuploaddone",(function(e,i){i.files[0].name===t.model.name&&(i.result.files[0].error?t.handleFailure(i.files[0].name,i.result.files[0].error):bus.$emit("removalRequest",t.model))})),$(i).bind("fileuploadfail",(function(e,i){i.files[0].name===t.model.name&&t.handleFailure(i.files[0].name,$("#t-error").val())}))},methods:{handleFailure:function(e,t){e===this.model.name&&(this.model.errorMessage=t,bus.$emit("ErrorOnUpload",this.model))},dismissWarning:function(){bus.$emit("removalRequest",this.model)}}}),Vue.component("uploadList",{template:'
    {{ T.uploads }} (Pending: {{ pendingCount }}) ( {{ T.errors }}: {{ errorCount }} / {{ T.clearErrors }} )
    ',data:function(){return{files:[],T:{},expanded:!1,pendingCount:0,errorCount:0}},props:{uploadInputId:String},created:function(){var e=this;e.T.uploads=$("#t-uploads").val(),e.T.errors=$("#t-errors").val(),e.T.clearErrors=$("#t-clear-errors").val()},computed:{fileCount:function(){return this.files.length}},mounted:function(){var e,t=this,i=document.getElementById(null!==(e=t.uploadInputId)&&void 0!==e?e:"fileupload");$(i).bind("fileuploadadd",(function(e,i){i.files&&i.files.forEach((function(e){t.files.some((function(t){return t.name==e.name}))?console.error("A file with the same name is already on the queue:"+e.name):t.files.push({name:e.name,percentage:0,errorMessage:""})}))})),bus.$on("removalRequest",(function(e){t.files.forEach((function(t,i,n){t.name==e.name&&n.splice(i,1)}))})),bus.$on("ErrorOnUpload",(function(e){t.updateCount()}))},methods:{updateCount:function(){this.errorCount=this.files.filter((function(e){return""!=e.errorMessage})).length,this.pendingCount=this.files.length-this.errorCount,this.files.length<1&&(this.expanded=!1)},clearErrors:function(){this.files=this.files.filter((function(e){return""==e.errorMessage}))}},watch:{files:function(){this.updateCount()}}});var mediaFieldApps=[];Vue.component("mediaFieldThumbsContainer",{template:'
    {{T.noImages}}
  • {{ media.isNew ? media.name.substr(36) : media.name }}
    {{ T.mediaNotFound }} {{ T.discardWarning }}
    {{ media.name }}
  • ',data:function(){return{T:{}}},props:{mediaItems:Array,selectedMedia:Object,thumbSize:Number,idPrefix:String},created:function(){var e=this;e.T.mediaNotFound=$("#t-media-not-found").val(),e.T.discardWarning=$("#t-discard-warning").val(),e.T.noImages=$("#t-no-images").val()},methods:{selectAndDeleteMedia:function(e){this.$parent.$emit("selectAndDeleteMediaRequested",e)},selectMedia:function(e){this.$parent.$emit("selectMediaRequested",e)},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t}}});